diff --git a/FastBleLib/build/intermediates/incremental/debug/packageDebugResources/compile-file-map.properties b/FastBleLib/build/intermediates/incremental/debug/packageDebugResources/compile-file-map.properties
index 38c4cd6..31b5784 100644
--- a/FastBleLib/build/intermediates/incremental/debug/packageDebugResources/compile-file-map.properties
+++ b/FastBleLib/build/intermediates/incremental/debug/packageDebugResources/compile-file-map.properties
@@ -1 +1 @@
-#Fri Aug 07 11:10:38 CST 2026
+#Tue Sep 08 18:11:01 CST 2026
diff --git a/app/build.gradle b/app/build.gradle
index 3ca1ec3..338729a 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -28,9 +28,9 @@ android {
applicationId "com.abbidot.tracker"
minSdkVersion 24
targetSdkVersion 35
- versionCode 2500
-// versionName "2.5.0"
- versionName "2.5.0-Beta5"
+ versionCode 2501
+ versionName "2.5.1"
+// versionName "2.5.1-Beta1"
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
diff --git a/app/src/main/assets/privacy_it.html b/app/src/main/assets/privacy_it.html
new file mode 100644
index 0000000..1663ed4
--- /dev/null
+++ b/app/src/main/assets/privacy_it.html
@@ -0,0 +1,71 @@
+
+
+
+
Presso ABBI PET INC rispettiamo la tua privacy e ci impegniamo a proteggerla. La presente Informativa sulla privacy descrive come raccogliamo, utilizziamo, tuteliamo e manteniamo riservate le tue informazioni quando utilizzi la nostra applicazione mobile («App»).
+
+
1. Informazioni che raccogliamo
+
+- Informazioni personali: Quando crei un account, potremmo raccogliere informazioni personali quali il tuo nome, l'indirizzo e-mail e il numero di telefono.
+- Informazioni sull'animale: Raccogliamo informazioni sui tuoi animali, tra cui nome, età, razza e peso, al fine di fornire servizi personalizzati.
+- Dati di utilizzo: Raccogliamo informazioni sulle modalità di interazione con la nostra App, come le funzionalità che utilizzi e il tempo trascorso sull'App.
+- Informazioni sul dispositivo: Potremmo raccogliere informazioni sul dispositivo che utilizzi per accedere all'App, inclusi il tipo di dispositivo, il sistema operativo e gli identificatori univoci del dispositivo.
+- Dati di localizzazione: Previo tuo consenso, potremmo raccogliere ed elaborare informazioni sulla posizione del tuo dispositivo e del tuo animale al fine di fornire servizi basati sulla localizzazione.
+
+
+
+
2. Come utilizziamo le tue informazioni
+
+- Per fornire e migliorare i nostri servizi: Utilizziamo le tue informazioni per gestire e migliorare l'App e i nostri servizi.
+- Per comunicare con te: Potremmo utilizzare le tue informazioni per inviarti aggiornamenti, newsletter, materiale di marketing e altre informazioni che potrebbero interessarti.
+- Per personalizzare la tua esperienza: Utilizziamo le tue informazioni per adattare i contenuti e i servizi che offriamo al fine di rispondere al meglio alle tue esigenze e preferenze.
+- Per garantire sicurezza e conformità: Utilizziamo le tue informazioni per garantire la sicurezza della nostra App e la conformità alle leggi e ai regolamenti applicabili.
+
+
+
+
3. Riservatezza e sicurezza dei dati
+
+- Crittografia dei dati: Utilizziamo protocolli di crittografia conformi agli standard del settore per proteggere le tue informazioni personali durante la trasmissione e l'archiviazione.
+- Controlli di accesso: L'accesso alle tue informazioni personali è limitato esclusivamente al personale autorizzato e implementiamo severi controlli di accesso per impedire accessi non autorizzati.
+- Minimizzazione dei dati: Raccogliamo e conserviamo solo la quantità minima di informazioni personali necessaria per fornire i nostri servizi.
+- Audit regolari: Eseguiamo regolarmente audit e valutazioni di sicurezza per assicurarci che le nostre misure di protezione dei dati siano aggiornate ed efficaci.
+
+
4. Condivisione delle tue informazioni
+
+- Fornitori di servizi: Potremmo condividere le tue informazioni con fornitori di servizi terzi che svolgono servizi per nostro conto, quali hosting, analisi dei dati e assistenza ai clienti. Tali fornitori di servizi sono contrattualmente obbligati a mantenere le tue informazioni riservate e sicure.
+- Requisiti legali: Potremmo divulgare le tue informazioni qualora la legge lo richieda o in risposta a una richiesta legale.
+- Cessioni aziendali: In caso di fusione, acquisizione o vendita di tutte o di parte delle nostre attività, le tue informazioni potrebbero essere trasferite al nuovo proprietario, subordinatamente ai medesimi impegni in materia di protezione dei dati.
+
+
+
5. Le tue scelte
+
+- Informazioni sull'account: Puoi aggiornare o eliminare le informazioni del tuo account tramite le impostazioni dell'App.
+- Comunicazioni di marketing: Puoi disiscriverti dalle comunicazioni di marketing seguendo le istruzioni di disiscrizione indicate nelle comunicazioni stesse o contattandoci direttamente.
+- Dati di localizzazione: Puoi disattivare i servizi di localizzazione tramite le impostazioni del tuo dispositivo, ma ciò potrebbe pregiudicare alcune funzionalità dell'App.
+
+
+
+
6. Sicurezza
+
+
Adottiamo misure ragionevoli per proteggere le tue informazioni da accessi, utilizzi o divulgazioni non autorizzati. Tuttavia, nessun metodo di trasmissione su Internet o di archiviazione elettronica è sicuro al 100%.
+
+
7. Privacy dei minori
+
+
La nostra App non è destinata all'uso da parte di minori di età inferiore a 13 anni e non raccogliamo consapevolmente informazioni personali da minori di età inferiore a 13 anni. Qualora venissimo a conoscenza di aver raccolto informazioni personali da un minore di età inferiore a 13 anni, adotteremo le misure necessarie per eliminare tali informazioni.
+
+
8. Modifiche alla presente Informativa sulla privacy
+
+
Potremmo aggiornare di tanto in tanto la presente Informativa sulla privacy. Ti informeremo di eventuali modifiche pubblicando la nuova Informativa sulla privacy all'interno dell'App. Ti consigliamo di consultare periodicamente la presente Informativa per verificare eventuali modifiche.
+
+
9. Contattaci
+
Per qualsiasi domanda relativa alla presente Informativa sulla privacy, ti preghiamo di contattarci all'indirizzo:
+
ABBI PET INC
+
10700 Richmond Ave Suite 143
+
Houston, TX 77042
+
E-mail: support@abbidot.com
+
+
+
+
+
+
+
diff --git a/app/src/main/assets/subscription_terms_conditions_it.html b/app/src/main/assets/subscription_terms_conditions_it.html
new file mode 100644
index 0000000..a307360
--- /dev/null
+++ b/app/src/main/assets/subscription_terms_conditions_it.html
@@ -0,0 +1,54 @@
+
+
+
+
+
Termini e condizioni di abbonamento al tracker ABBIDOT
+
+
1. Piani di abbonamento
+
ABBIDOT offre tre piani di abbonamento:
+
+- Piano di 3 mesi
+- Piano di 1 anno
+- Piano di 2 anni
+
+
Tutti gli abbonamenti si rinnovano automaticamente alla fine di ogni ciclo di fatturazione, salvo annullamento da parte dell'utente.
+
Gli utenti possono annullare il proprio abbonamento in qualsiasi momento. Dopo l'annullamento, l'abbonamento rimarrà attivo fino alla fine del periodo di fatturazione corrente e non verranno applicati ulteriori addebiti.
+
Il dispositivo continuerà a funzionare normalmente durante il periodo di abbonamento attivo.
+
+
2. Politica di rimborso
+
2.1 Rimborso automatico (entro 48 ore)
+
Tutti gli acquisti di abbonamenti hanno diritto a un rimborso automatico completo entro 48 ore dal pagamento. I rimborsi verranno elaborati automaticamente, senza revisione manuale.
+
+
2.2 Periodo standard di rimborso (30 giorni)
+
Trascorse le iniziali 48 ore, gli utenti possono richiedere un rimborso entro 30 giorni dall'acquisto.
+
+- Tutti i piani di abbonamento (3 mesi, 1 anno, 2 anni) sono idonei
+- Le richieste di rimborso sono soggette a revisione e approvazione
+- I rimborsi possono essere parzialmente adeguati in base all'utilizzo e al consumo dei servizi
+
+
+
2.3 Nessun rimborso dopo 30 giorni
+
Gli abbonamenti con più di 30 giorni non sono rimborsabili.
+
+
3. Annullamento dell'abbonamento
+
Gli utenti possono annullare il proprio abbonamento in qualsiasi momento.
+
+- L'annullamento interrompe le fatturazioni future
+- L'abbonamento corrente rimane attivo fino alla fine del periodo di fatturazione
+- Non viene emesso alcun rimborso parziale dopo l'annullamento, salvo entro il periodo di rimborso
+
+
+
4. Aggiornamenti della politica
+
ABBIDOT si riserva il diritto di aggiornare o modificare i presenti Termini e condizioni in qualsiasi momento. Gli utenti verranno informati in caso di modifiche significative.
+
Abbonandoti ai servizi ABBIDOT, accetti i presenti termini.
+
+
5. Assistenza ai clienti
+
Qualora incontrassi difficoltà, ti preghiamo di contattarci all'indirizzo:
+
subscription@abbidot.com
+
Il nostro team di assistenza ti aiuterà al più presto possibile.
+
+
+
+
+
+
diff --git a/app/src/main/assets/terms_it.html b/app/src/main/assets/terms_it.html
new file mode 100644
index 0000000..a8e32fe
--- /dev/null
+++ b/app/src/main/assets/terms_it.html
@@ -0,0 +1,76 @@
+
+
+
+
+
1. Accettazione dei termini
+
+
Scaricando, installando e utilizzando l'applicazione mobile ABBIDOT («App»), accetti di essere vincolato ai presenti Termini e condizioni («Termini»). Se non accetti i presenti Termini, non utilizzare l'App.
+
+
+
+
2. Utilizzo dell'App
+
+- Idoneità: Per utilizzare l'App devi avere almeno 13 anni. Utilizzando l'App, dichiari e garantisci di soddisfare tale requisito di idoneità.
+- Licenza: ABBI PET INC ti concede una licenza limitata, non esclusiva, non trasferibile e revocabile per utilizzare l'App esclusivamente per scopi personali e non commerciali.
+- Restrizioni: Accetti di non:
+
+
+- Modificare, sottoporre a reverse engineering, decompilare o disassemblare l'App.
+- Utilizzare l'App per scopi illeciti o in qualsiasi modo che possa danneggiare ABBI PET INC o i suoi utenti.
+- Accedere all'App o utilizzarla per realizzare un servizio o un prodotto concorrente.
+
+
+
+
+
3. Account e sicurezza
+
+- Creazione dell'account: Per utilizzare determinate funzionalità dell'App potrebbe essere necessario creare un account. Accetti di fornire informazioni accurate e complete durante il processo di registrazione.
+- Sicurezza dell'account: Sei responsabile della riservatezza delle credenziali del tuo account e di tutte le attività svolte tramite il tuo account. Accetti di segnalare immediatamente ad ABBI PET INC qualsiasi utilizzo non autorizzato del tuo account.
+
+
4. Privacy
+
+
L'utilizzo dell'App è inoltre disciplinato dalla nostra Informativa sulla privacy, che è incorporata per riferimento nei presenti Termini. Ti invitiamo a consultare la nostra Informativa sulla privacy per conoscere le nostre pratiche in materia di trattamento delle tue informazioni.
+
+
5. Contenuti dell'utente
+
+- Proprietà: Conservi la proprietà di tutti i contenuti che invii o pubblichi tramite l'App («Contenuti dell'utente»). Inviando i Contenuti dell'utente, concedi ad ABBI PET INC una licenza mondiale, non esclusiva e gratuita per utilizzare, riprodurre, distribuire e visualizzare i tuoi Contenuti dell'utente in connessione con l'App.
+- Responsabilità: Sei l'unico responsabile dei tuoi Contenuti dell'utente. Accetti di non pubblicare contenuti illeciti, dannosi o che violino i diritti di terzi.
+
+
+
6. Proprietà intellettuale
+
+
Tutti i contenuti, le funzionalità e le caratteristiche dell'App, inclusi ma non limitati a testi, grafica, loghi e software, sono di proprietà esclusiva di ABBI PET INC o dei suoi licenzianti e sono protetti dalle normative in materia di diritto d'autore, marchi e altri diritti di proprietà intellettuale.
+
+
7. Risoluzione
+
+
ABBI PET INC può interrompere o sospendere il tuo accesso all'App in qualsiasi momento, senza preavviso e senza alcuna responsabilità, per qualsiasi motivo, incluso il caso di violazione dei presenti Termini. In caso di risoluzione, il tuo diritto di utilizzare l'App cesserà immediatamente.
+
+
8. Esclusioni di responsabilità e limitazione della responsabilità
+
+- Esclusioni di responsabilità: L'App è fornita «così come è» e «come disponibile», senza garanzie di alcun tipo, esplicite o implicite. ABBI PET INC non garantisce che l'App sia priva di interruzioni o di errori.
+- Limitazione della responsabilità: Nella misura massima consentita dalla legge, ABBI PET INC non sarà responsabile per eventuali danni indiretti, incidentali, speciali o consequenziali derivanti da o in connessione con l'utilizzo dell'App.
+
+
+
9. Legge applicabile
+
I presenti Termini saranno disciplinati e interpretati in conformità alle leggi dello Stato del Texas, senza tener conto dei principi in materia di conflitti di leggi.
+
+
10. Modifiche ai Termini
+
ABBI PET INC si riserva il diritto di modificare i presenti Termini in qualsiasi momento. Ti informeremo di eventuali modifiche pubblicando i nuovi Termini all'interno dell'App. Il continuo utilizzo dell'App dopo l'entrata in vigore delle modifiche costituisce accettazione dei nuovi Termini.
+
+
11. Riservatezza dei dati
+
Ci impegniamo a garantire la riservatezza dei tuoi dati. A tal fine adottiamo le seguenti misure di protezione dei dati:
+
+- Accordi di riservatezza: Tutti i dipendenti e i fornitori di servizi terzi che hanno accesso ai tuoi dati sono tenuti a firmare accordi di riservatezza.
+- Anonimizzazione dei dati: Ove possibile, anonimizziamo i tuoi dati per proteggere la tua privacy.
+- Politica di conservazione dei dati: Conserviamo i tuoi dati solo per il tempo strettamente necessario alle finalità descritte nella nostra Informativa sulla privacy, dopodiché vengono eliminati in modo sicuro o anonimizzati.
+
+
+
12. Contattaci
+
Per qualsiasi domanda relativa ai presenti Termini, ti preghiamo di contattarci all'indirizzo:
+
ABBI PET INC
+
10700 Richmond Ave Suite 143
+
Houston, TX 77042
+
E-mail: support@abbidot.com
+
+
+
diff --git a/app/src/main/java/com/abbidot/tracker/base/BaseDialog.kt b/app/src/main/java/com/abbidot/tracker/base/BaseDialog.kt
index 8526aa7..ad725d7 100644
--- a/app/src/main/java/com/abbidot/tracker/base/BaseDialog.kt
+++ b/app/src/main/java/com/abbidot/tracker/base/BaseDialog.kt
@@ -5,11 +5,9 @@ import android.os.Bundle
import android.view.LayoutInflater
import android.view.View
import android.view.View.OnClickListener
-import android.view.WindowManager
import androidx.annotation.StyleRes
import androidx.appcompat.app.AppCompatDialog
import androidx.viewbinding.ViewBinding
-import com.abbidot.baselibrary.util.AppUtils
import com.abbidot.tracker.R
import com.qmuiteam.qmui.alpha.QMUIAlphaButton
import com.qmuiteam.qmui.alpha.QMUIAlphaImageButton
@@ -18,7 +16,6 @@ import com.qmuiteam.qmui.alpha.QMUIAlphaImageButton
/**
*Created by .yzq on 2022/1/11/011.-
* @link
- * @dialogHeightDp 默认高度350dp
* @description:BaseDialog
*/
abstract class BaseDialog
@@ -44,15 +41,14 @@ abstract class BaseDialog
//设置Dialog动画
window!!.setWindowAnimations(mAnimationResId)
//设置弹窗的高度
- val layoutParams: WindowManager.LayoutParams = window!!.attributes
- if (mDialogHeightDp == 0) {
- //采用自适应高度
- layoutParams.height = WindowManager.LayoutParams.WRAP_CONTENT
- } else {
- layoutParams.height = AppUtils.dpToPx(mDialogHeightDp)
- }
-// layoutParams.width = WindowManager.LayoutParams.WRAP_CONTENT
- window!!.attributes = layoutParams
+// val layoutParams: WindowManager.LayoutParams = window!!.attributes
+// if (mDialogHeightDp == 0) {
+// //采用自适应高度
+// layoutParams.height = WindowManager.LayoutParams.WRAP_CONTENT
+// } else {
+// layoutParams.height = AppUtils.dpToPx(mDialogHeightDp)
+// }
+// window!!.attributes = layoutParams
initView()
}
diff --git a/app/src/main/java/com/abbidot/tracker/bean/CreditCardBean.kt b/app/src/main/java/com/abbidot/tracker/bean/CreditCardBean.kt
index db57a06..d9c8333 100644
--- a/app/src/main/java/com/abbidot/tracker/bean/CreditCardBean.kt
+++ b/app/src/main/java/com/abbidot/tracker/bean/CreditCardBean.kt
@@ -1,11 +1,6 @@
package com.abbidot.tracker.bean
import android.os.Parcelable
-import androidx.room.ColumnInfo
-import androidx.room.Entity
-import androidx.room.Ignore
-import androidx.room.PrimaryKey
-import com.abbidot.tracker.database.MyDatabase
import kotlinx.parcelize.Parcelize
/**
@@ -14,20 +9,20 @@ import kotlinx.parcelize.Parcelize
* @description:保存用户输入信用卡
*/
@Parcelize
-@Entity(tableName = MyDatabase.CREDIT_CARD_TABLE)
+//@Entity(tableName = MyDatabase.CREDIT_CARD_TABLE)
data class CreditCardBean(
- @PrimaryKey @ColumnInfo var cardNumber: String,
- @ColumnInfo var firstName: String,
- @ColumnInfo var lastName: String,
- @ColumnInfo var cardName: String,
- @ColumnInfo var expirationDate: String,
- @ColumnInfo var cvv: String,//信用卡验证值(Card Verification Value)
- @ColumnInfo var countryCode: String,
- @ColumnInfo var isPrimary: Boolean,
- @Ignore var checked: Boolean = false,
- @Ignore var expMonth: Int,
- @Ignore var expYear: Int,
- @Ignore var lastFourNumber: String,
+ var cardNumber: String,
+ var firstName: String,
+ var lastName: String,
+ var cardName: String,
+ var expirationDate: String,
+ var cvv: String,//信用卡验证值(Card Verification Value)
+ var countryCode: String,
+ var isPrimary: Boolean,
+ var checked: Boolean = false,
+ var expMonth: Int,
+ var expYear: Int,
+ var lastFourNumber: String,
) : Parcelable {
constructor() : this("", "", "", "", "", "", "USA", false, false, 0, 0, "")
}
diff --git a/app/src/main/java/com/abbidot/tracker/bean/DeviceBean.kt b/app/src/main/java/com/abbidot/tracker/bean/DeviceBean.kt
index 7855437..d356864 100644
--- a/app/src/main/java/com/abbidot/tracker/bean/DeviceBean.kt
+++ b/app/src/main/java/com/abbidot/tracker/bean/DeviceBean.kt
@@ -1,13 +1,9 @@
package com.abbidot.tracker.bean
import android.os.Parcelable
-import androidx.room.ColumnInfo
-import androidx.room.Entity
-import androidx.room.Ignore
import com.abbidot.baselibrary.constant.ConState
import com.abbidot.baselibrary.constant.DeviceType
import com.abbidot.tracker.base.BaseDiffBean
-import com.abbidot.tracker.database.MyDatabase
import kotlinx.parcelize.Parcelize
/**
@@ -16,26 +12,26 @@ import kotlinx.parcelize.Parcelize
* @description:连接保存的设备表
*/
// 定义表名称,SQLite 中的表名称不区分大小写,2个主键
-@Entity(tableName = MyDatabase.DEVICE_TABLE, primaryKeys = ["deviceOutId", "deviceId"])
+//@Entity(tableName = MyDatabase.DEVICE_TABLE, primaryKeys = ["deviceOutId", "deviceId"])
@Parcelize
data class DeviceBean(//@PrimaryKey(autoGenerate = true) var id: Long,//autoGenerate = true 自动增长分配ID
- @ColumnInfo @DeviceType var type: Int,//设备类型
- @ColumnInfo var deviceName: String,
- @ColumnInfo var deviceOutId: String,
- @ColumnInfo var deviceId: String,
- @ColumnInfo var shared: Int, //0=没有分享,1=是授权分享的
- @ColumnInfo var batteryCapacity: Int,
- @ColumnInfo var ledSwitch: Int,
- @ColumnInfo @ConState var conState: Int,//连接状态
- @ColumnInfo var macId: String,
- @ColumnInfo var deviceInfoId: String,
- @ColumnInfo var surplusDays: Int,
- @ColumnInfo var gnssSignal: Int,
- @ColumnInfo var lteSignal: Int,
- @ColumnInfo var turnOff: Int,
- @ColumnInfo var lightMode: Int,
- @Ignore var deviceType: Int,
- @Ignore var pet: PetBean?
+ var type: Int,//设备类型
+ var deviceName: String,
+ var deviceOutId: String,
+ var deviceId: String,
+ var shared: Int, //0=没有分享,1=是授权分享的
+ var batteryCapacity: Int,
+ var ledSwitch: Int,
+ var conState: Int,//连接状态
+ var macId: String,
+ var deviceInfoId: String,
+ var surplusDays: Int,
+ var gnssSignal: Int,
+ var lteSignal: Int,
+ var turnOff: Int,
+ var lightMode: Int,
+ var deviceType: Int,
+ var pet: PetBean?
) : BaseDiffBean(), Parcelable {
// 如果某个实体中有您不想保留的字段,则可以使用 @Ignore 为这些字段添加注释
diff --git a/app/src/main/java/com/abbidot/tracker/bean/OrderBean.kt b/app/src/main/java/com/abbidot/tracker/bean/OrderBean.kt
index 71d1718..5f10432 100644
--- a/app/src/main/java/com/abbidot/tracker/bean/OrderBean.kt
+++ b/app/src/main/java/com/abbidot/tracker/bean/OrderBean.kt
@@ -8,5 +8,5 @@ package com.abbidot.tracker.bean
*/
data class OrderBean(
var orderId: String, var orderNo: String, var availableOrder: Int,//判断套餐是否可用或过期,1是可用 0不可用
- var isCanRefund: Int
+ var isCanRefund: Int, var isNeedCancel: Int//是否需要取消订阅 0:不存在 1存在
)
\ No newline at end of file
diff --git a/app/src/main/java/com/abbidot/tracker/database/MyDatabase.kt b/app/src/main/java/com/abbidot/tracker/database/MyDatabase.kt
index 5f9d853..18f23d1 100644
--- a/app/src/main/java/com/abbidot/tracker/database/MyDatabase.kt
+++ b/app/src/main/java/com/abbidot/tracker/database/MyDatabase.kt
@@ -1,13 +1,8 @@
package com.abbidot.tracker.database
-import androidx.room.Database
import androidx.room.Room
import androidx.room.RoomDatabase
import com.abbidot.tracker.MyApplication
-import com.abbidot.tracker.bean.CreditCardBean
-import com.abbidot.tracker.bean.DeviceBean
-import com.abbidot.tracker.database.dao.CreditCardDao
-import com.abbidot.tracker.database.dao.DeviceDao
/**
*Created by .yzq on 2021/11/6/006.
@@ -15,15 +10,14 @@ import com.abbidot.tracker.database.dao.DeviceDao
* @description:RoomDatabase实例
*/
//exportSchema = false,防止改数据库内容版本自动增加
-@Database(
- entities = [DeviceBean::class, CreditCardBean::class],
- version = 5,
-// autoMigrations = [AutoMigration(from = 1, to = 2)],
- exportSchema = false,
-)
+//@Database(
+// entities = [DeviceBean::class, CreditCardBean::class],
+// version = 5,
+//// autoMigrations = [AutoMigration(from = 1, to = 2)],
+// exportSchema = false,
+//)
abstract class MyDatabase : RoomDatabase() {
- abstract fun deviceDao(): DeviceDao
- abstract fun creditCardDao(): CreditCardDao
+// abstract fun creditCardDao(): CreditCardDao
companion object {
@@ -47,14 +41,9 @@ abstract class MyDatabase : RoomDatabase() {
//表名
const val CREDIT_CARD_TABLE = "creditCard"
- const val DEVICE_TABLE = "device"
- fun deviceDao(): DeviceDao {
- return db.deviceDao()
- }
-
- fun creditCardDao(): CreditCardDao {
- return db.creditCardDao()
- }
+// fun creditCardDao(): CreditCardDao {
+// return db.creditCardDao()
+// }
}
}
\ No newline at end of file
diff --git a/app/src/main/java/com/abbidot/tracker/database/dao/CreditCardDao.kt b/app/src/main/java/com/abbidot/tracker/database/dao/CreditCardDao.kt
index 03131aa..6108345 100644
--- a/app/src/main/java/com/abbidot/tracker/database/dao/CreditCardDao.kt
+++ b/app/src/main/java/com/abbidot/tracker/database/dao/CreditCardDao.kt
@@ -1,6 +1,5 @@
package com.abbidot.tracker.database.dao
-import androidx.room.Dao
import com.abbidot.tracker.bean.CreditCardBean
/**
@@ -8,5 +7,5 @@ import com.abbidot.tracker.bean.CreditCardBean
* @link
* @description:
*/
-@Dao
+//@Dao
interface CreditCardDao : BaseDao
\ No newline at end of file
diff --git a/app/src/main/java/com/abbidot/tracker/database/dao/DeviceDao.kt b/app/src/main/java/com/abbidot/tracker/database/dao/DeviceDao.kt
index 3088025..9a1fd7d 100644
--- a/app/src/main/java/com/abbidot/tracker/database/dao/DeviceDao.kt
+++ b/app/src/main/java/com/abbidot/tracker/database/dao/DeviceDao.kt
@@ -1,18 +1,15 @@
package com.abbidot.tracker.database.dao
-import androidx.room.Dao
-import androidx.room.Query
import com.abbidot.tracker.bean.DeviceBean
-import com.abbidot.tracker.database.MyDatabase
/**
*Created by .yzq on 2021/11/8/008.
* @link
* @description:DeviceBean表的dao
*/
-@Dao
+//@Dao
interface DeviceDao : BaseDao {
- @Query("SELECT * FROM ${MyDatabase.DEVICE_TABLE} WHERE macId LIKE :mac LIMIT 1")
- fun findByMac(mac: String): DeviceBean?
+// @Query("SELECT * FROM ${MyDatabase.DEVICE_TABLE} WHERE macId LIKE :mac LIMIT 1")
+// fun findByMac(mac: String): DeviceBean?
}
\ No newline at end of file
diff --git a/app/src/main/java/com/abbidot/tracker/deprecated/ui/activity/profile/recharge/PaymentMethodPayPalActivity.kt b/app/src/main/java/com/abbidot/tracker/deprecated/ui/activity/profile/recharge/PaymentMethodPayPalActivity.kt
index 631fbd6..8619079 100644
--- a/app/src/main/java/com/abbidot/tracker/deprecated/ui/activity/profile/recharge/PaymentMethodPayPalActivity.kt
+++ b/app/src/main/java/com/abbidot/tracker/deprecated/ui/activity/profile/recharge/PaymentMethodPayPalActivity.kt
@@ -21,7 +21,6 @@ import com.abbidot.tracker.bean.SetMealBean
import com.abbidot.tracker.constant.ConstantInt
import com.abbidot.tracker.constant.ConstantString
import com.abbidot.tracker.constant.GetResultCallback
-import com.abbidot.tracker.database.MyDatabase
import com.abbidot.tracker.databinding.ActivitySelectPaymentMethodBinding
import com.abbidot.tracker.deprecated.adapter.SelectPaymentMethodAdapter
import com.abbidot.tracker.deprecated.ui.activity.vm.BraintreePalViewModel
@@ -99,8 +98,8 @@ class PaymentMethodPayPalActivity :
withContext(Dispatchers.IO) {
ViewUtil.instance.addMenuBean(paymentMethodList, "", "", R.drawable.ico_lay_paypal)
- val list = MyDatabase.creditCardDao().findAll(MyDatabase.CREDIT_CARD_TABLE)
- list?.forEach {
+ val list = mutableListOf()
+ list.forEach {
val imageId = Util.getCreditCardType(it.cardNumber)
ViewUtil.instance.addMenuBean(
paymentMethodList, it.cardNumber, it.expirationDate, imageId
@@ -115,7 +114,7 @@ class PaymentMethodPayPalActivity :
)
}
- mSelectPaymentMethodAdapter = SelectPaymentMethodAdapter(mContext!!, paymentMethodList)
+ mSelectPaymentMethodAdapter = SelectPaymentMethodAdapter(mContext, paymentMethodList)
mSelectPaymentMethodAdapter.setOnItemClickListener(object :
BaseRecyclerAdapter.OnItemClickListener {
override fun onItemClick(itemView: View?, pos: Int) {
@@ -123,7 +122,7 @@ class PaymentMethodPayPalActivity :
}
})
ViewUtil.instance.setRecyclerViewVerticalLinearLayout(
- mContext!!,
+ mContext,
mViewBinding.paymentMethodRecyclerView,
mSelectPaymentMethodAdapter,
bottom = 40
diff --git a/app/src/main/java/com/abbidot/tracker/deprecated/ui/activity/profile/recharge/PaymentMethodStripeActivity.kt b/app/src/main/java/com/abbidot/tracker/deprecated/ui/activity/profile/recharge/PaymentMethodStripeActivity.kt
index 11effbb..8d36d91 100644
--- a/app/src/main/java/com/abbidot/tracker/deprecated/ui/activity/profile/recharge/PaymentMethodStripeActivity.kt
+++ b/app/src/main/java/com/abbidot/tracker/deprecated/ui/activity/profile/recharge/PaymentMethodStripeActivity.kt
@@ -21,7 +21,6 @@ import com.abbidot.tracker.bean.RechargeDeviceBean
import com.abbidot.tracker.constant.ConstantInt
import com.abbidot.tracker.constant.ConstantString
import com.abbidot.tracker.constant.GetResultCallback
-import com.abbidot.tracker.database.MyDatabase
import com.abbidot.tracker.databinding.ActivitySelectPaymentMethodBinding
import com.abbidot.tracker.deprecated.adapter.SelectPaymentMethodAdapter
import com.abbidot.tracker.deprecated.ui.activity.vm.BraintreePalViewModel
@@ -113,8 +112,8 @@ class PaymentMethodStripeActivity :
withContext(Dispatchers.IO) {
// ViewUtil.instance.addMenuBean(paymentMethodList, "", "", R.drawable.ico_lay_paypal)
- val list = MyDatabase.creditCardDao().findAll(MyDatabase.CREDIT_CARD_TABLE)
- list?.forEach {
+ val list = mutableListOf()
+ list.forEach {
val imageId = Util.getCreditCardType(it.cardNumber)
ViewUtil.instance.addMenuBean(
paymentMethodList, it.cardNumber, it.expirationDate, imageId
diff --git a/app/src/main/java/com/abbidot/tracker/deprecated/ui/activity/vm/BraintreePalViewModel.kt b/app/src/main/java/com/abbidot/tracker/deprecated/ui/activity/vm/BraintreePalViewModel.kt
index 693259e..7d15efb 100644
--- a/app/src/main/java/com/abbidot/tracker/deprecated/ui/activity/vm/BraintreePalViewModel.kt
+++ b/app/src/main/java/com/abbidot/tracker/deprecated/ui/activity/vm/BraintreePalViewModel.kt
@@ -11,7 +11,6 @@ import com.abbidot.baselibrary.util.MMKVUtil
import com.abbidot.tracker.R
import com.abbidot.tracker.base.BaseActivity
import com.abbidot.tracker.bean.*
-import com.abbidot.tracker.database.MyDatabase
import com.abbidot.tracker.diff.PaymentMethodDiffCallBack
import com.abbidot.tracker.retrofit2.NetworkApi
import com.abbidot.tracker.util.Util
@@ -59,9 +58,11 @@ class BraintreePalViewModel : ViewModel() {
/**
* 显示添加的信用卡
*/
- fun addCreditCard(activity: BaseActivity<*>,
- card: CreditCardBean,
- adapter: BaseRecyclerAdapter) {
+ fun addCreditCard(
+ activity: BaseActivity<*>,
+ card: CreditCardBean,
+ adapter: BaseRecyclerAdapter
+ ) {
val oldList = adapter.getData()
val newList = mutableListOf()
newList.addAll(oldList)
@@ -76,12 +77,14 @@ class BraintreePalViewModel : ViewModel() {
}
}
if (!isSame) {
- newList.removeLast()
+// newList.removeLast()
val imageId = Util.getCreditCardType(card.cardNumber)
ViewUtil.instance.addMenuBean(newList, card.cardNumber, card.expirationDate, imageId)
- ViewUtil.instance.addMenuBean(newList,
- activity.getString(R.string.txt_pay_order_add_card), "",
- R.drawable.ico_lay_newcard)
+ ViewUtil.instance.addMenuBean(
+ newList,
+ activity.getString(R.string.txt_pay_order_add_card), "",
+ R.drawable.ico_lay_newcard
+ )
}
viewModelScope.launch {
@@ -116,11 +119,13 @@ class BraintreePalViewModel : ViewModel() {
/**
*@param orderStatus:0待支付 1是支付成功 2是取消支付/失败
*/
- fun updateOrderStatus(activity: BaseActivity<*>,
- orderId: String,
- orderStatus: Int,//0待支付 1是支付成功 2是取消支付/失败
- deviceId: String,
- mealDays: Int) {
+ fun updateOrderStatus(
+ activity: BaseActivity<*>,
+ orderId: String,
+ orderStatus: Int,//0待支付 1是支付成功 2是取消支付/失败
+ deviceId: String,
+ mealDays: Int
+ ) {
activity.showLoading(true)
viewModelScope.launch {
val result = NetworkApi.updateOrderStatus(orderId, orderStatus, deviceId, mealDays)
@@ -131,12 +136,14 @@ class BraintreePalViewModel : ViewModel() {
/**
* 信用卡发起支付
*/
- fun cardPayment(activity: BaseActivity<*>,
- mealName: String,
- mealDays: Int,
- totalCost: String,
- paymentMethodNonce: String,
- deviceId: String) {
+ fun cardPayment(
+ activity: BaseActivity<*>,
+ mealName: String,
+ mealDays: Int,
+ totalCost: String,
+ paymentMethodNonce: String,
+ deviceId: String
+ ) {
activity.showLoading(true)
viewModelScope.launch {
val result =
@@ -148,19 +155,23 @@ class BraintreePalViewModel : ViewModel() {
/**
* 信用卡订阅支付
*/
- private fun cardSubscription(activity: BaseActivity<*>,
- userId: String,
- paymentMethodNonce: String,
- firstName: String,
- lastName: String,
- username: String,
- deviceId: String,
- setMealBean: SetMealBean) {
+ private fun cardSubscription(
+ activity: BaseActivity<*>,
+ userId: String,
+ paymentMethodNonce: String,
+ firstName: String,
+ lastName: String,
+ username: String,
+ deviceId: String,
+ setMealBean: SetMealBean
+ ) {
activity.showLoading(true)
viewModelScope.launch {
val result =
- NetworkApi.cardSubscription(userId, paymentMethodNonce, firstName, lastName,
- username, deviceId, setMealBean)
+ NetworkApi.cardSubscription(
+ userId, paymentMethodNonce, firstName, lastName,
+ username, deviceId, setMealBean
+ )
mCardPaymentResultLiveData.value = result
}
}
@@ -169,11 +180,13 @@ class BraintreePalViewModel : ViewModel() {
/**
* 开始调起payPal支付
*/
- fun launchPayPal(activity: BaseActivity<*>,
- braintreeClient: BraintreeClient?,
- payPalClient: PayPalClient?,
- setMealBean: SetMealBean?,
- orderNo: String) {
+ fun launchPayPal(
+ activity: BaseActivity<*>,
+ braintreeClient: BraintreeClient?,
+ payPalClient: PayPalClient?,
+ setMealBean: SetMealBean?,
+ orderNo: String
+ ) {
activity.showLoading(true)
viewModelScope.launch(Dispatchers.IO) {
braintreeClient?.getConfiguration { _, _ ->
@@ -196,11 +209,13 @@ class BraintreePalViewModel : ViewModel() {
/**
* 开始调起信用卡支付,自动订阅
*/
- fun launchCardPay(activity: BaseActivity<*>,
- cardClient: CardClient?,
- card: Card,
- setMealBean: SetMealBean?,
- deviceId: String) {
+ fun launchCardPay(
+ activity: BaseActivity<*>,
+ cardClient: CardClient?,
+ card: Card,
+ setMealBean: SetMealBean?,
+ deviceId: String
+ ) {
if (null == setMealBean) return
activity.apply {
@@ -218,20 +233,18 @@ class BraintreePalViewModel : ViewModel() {
// activity.showLoading(true)
// cardPayment(activity, setMealBean.mealPackage, setMealBean.days,
// setMealBean.cost.toString(), nonce, deviceId)
- var list: List?
- withContext(Dispatchers.IO) {
- list = MyDatabase.creditCardDao().findAll(MyDatabase.CREDIT_CARD_TABLE)
- }
- if (null != list) {
- val userId = MMKVUtil.getString(MMKVKey.UserId)
- val userName = MMKVUtil.getString(MMKVKey.UserName)
- for (creditCard in list!!) {
- if (card.number == creditCard.cardNumber) {
- //信用卡订阅支付
- cardSubscription(activity, userId, nonce, creditCard.firstName,
- creditCard.lastName, userName, deviceId, setMealBean)
- break
- }
+ var list = mutableListOf()
+
+ val userId = MMKVUtil.getString(MMKVKey.UserId)
+ val userName = MMKVUtil.getString(MMKVKey.UserName)
+ for (creditCard in list!!) {
+ if (card.number == creditCard.cardNumber) {
+ //信用卡订阅支付
+ cardSubscription(
+ activity, userId, nonce, creditCard.firstName,
+ creditCard.lastName, userName, deviceId, setMealBean
+ )
+ break
}
}
}
diff --git a/app/src/main/java/com/abbidot/tracker/deprecated/ui/activity/vm/StripePalViewModel.kt b/app/src/main/java/com/abbidot/tracker/deprecated/ui/activity/vm/StripePalViewModel.kt
index 1c71db4..b0a81e3 100644
--- a/app/src/main/java/com/abbidot/tracker/deprecated/ui/activity/vm/StripePalViewModel.kt
+++ b/app/src/main/java/com/abbidot/tracker/deprecated/ui/activity/vm/StripePalViewModel.kt
@@ -8,11 +8,11 @@ import com.abbidot.baselibrary.constant.MMKVKey
import com.abbidot.baselibrary.util.LogUtil
import com.abbidot.baselibrary.util.MMKVUtil
import com.abbidot.tracker.base.BaseActivity
+import com.abbidot.tracker.bean.CreditCardBean
import com.abbidot.tracker.bean.LKSimSetMealBean
import com.abbidot.tracker.bean.MenuTxtBean
import com.abbidot.tracker.bean.RechargeDeviceBean
import com.abbidot.tracker.bean.StripeSubscriptionPriceBean
-import com.abbidot.tracker.database.MyDatabase
import com.abbidot.tracker.retrofit2.NetworkApi
import com.stripe.android.PaymentConfiguration
import com.stripe.android.model.CardParams
@@ -60,24 +60,22 @@ class StripePalViewModel : ViewModel() {
fun startCheckout(activity: BaseActivity<*>, card: MenuTxtBean) {
activity.showLoading(true)
viewModelScope.launch(Dispatchers.IO) {
- val list = MyDatabase.creditCardDao().findAll(MyDatabase.CREDIT_CARD_TABLE)
- if (null != list) {
- for (it in list) {
- if (card.menuName == it.cardNumber) {
- val dates = it.expirationDate.split("/")
- val name = "${it.lastName} ${it.firstName}"
- val params = PaymentMethodCreateParams.createCard(
- CardParams(
- it.cardNumber, dates[0].toInt(), dates[1].toInt(), it.cvv, name
- )
+ val list = mutableListOf()
+ for (it in list) {
+ if (card.menuName == it.cardNumber) {
+ val dates = it.expirationDate.split("/")
+ val name = "${it.lastName} ${it.firstName}"
+ val params = PaymentMethodCreateParams.createCard(
+ CardParams(
+ it.cardNumber, dates[0].toInt(), dates[1].toInt(), it.cvv, name
)
- val confirmParams =
- ConfirmPaymentIntentParams.createWithPaymentMethodCreateParams(
- params, mPaymentIntentClientSecret
- )
- mPaymentLauncher.confirm(confirmParams)
- break
- }
+ )
+ val confirmParams =
+ ConfirmPaymentIntentParams.createWithPaymentMethodCreateParams(
+ params, mPaymentIntentClientSecret
+ )
+ mPaymentLauncher.confirm(confirmParams)
+ break
}
}
}
diff --git a/app/src/main/java/com/abbidot/tracker/dialog/MyAlertDialog.kt b/app/src/main/java/com/abbidot/tracker/dialog/MyAlertDialog.kt
index 6fee08a..288cb1f 100644
--- a/app/src/main/java/com/abbidot/tracker/dialog/MyAlertDialog.kt
+++ b/app/src/main/java/com/abbidot/tracker/dialog/MyAlertDialog.kt
@@ -7,6 +7,7 @@ import androidx.annotation.StyleRes
import com.abbidot.tracker.R
import com.abbidot.tracker.base.BaseDialog
import com.abbidot.tracker.databinding.DialogMyLayoutBinding
+import com.abbidot.tracker.util.ViewUtil
import com.abbidot.tracker.widget.TypefaceRoundButton
import com.abbidot.tracker.widget.TypefaceTextView
@@ -14,11 +15,12 @@ import com.abbidot.tracker.widget.TypefaceTextView
*Created by .yzq on 2021/12/24/024.
* @link
* @description: 自定义对话框,背景阴影
+ * @dialogHeightDp 默认高度240dp
*/
class MyAlertDialog(
context: Context, @StyleRes themeResId: Int = R.style.my_Dialog_style
) : BaseDialog(
- DialogMyLayoutBinding::inflate, context, dialogHeightDp = 260, themeResId = themeResId
+ DialogMyLayoutBinding::inflate, context, themeResId = themeResId
) {
private lateinit var mTitleTextView: TypefaceTextView
@@ -55,6 +57,8 @@ class MyAlertDialog(
if (!TextUtils.isEmpty(title)) {
mTitleTextView.visibility = View.VISIBLE
mTitleTextView.text = title
+ val typeface = ViewUtil.instance.setTypeface(context, ViewUtil.FONT_COMMON_NAME)
+ mContentTextView.setTypeface(typeface)
}
}
diff --git a/app/src/main/java/com/abbidot/tracker/retrofit2/INetworkService.kt b/app/src/main/java/com/abbidot/tracker/retrofit2/INetworkService.kt
index 6344c44..4c0e153 100644
--- a/app/src/main/java/com/abbidot/tracker/retrofit2/INetworkService.kt
+++ b/app/src/main/java/com/abbidot/tracker/retrofit2/INetworkService.kt
@@ -263,6 +263,23 @@ interface INetworkService {
@Field("userId") userId: String, @Field("measurementUnitType") measurementUnit: Int
): BaseResponse
+
+ /**
+ * 获取用户订单中是否存在开启自动续订状态
+ */
+ @GET("user/getOrderAutoRenewalStatus")
+ suspend fun getOrderAutoRenewalStatus(@Query("userId") userId: String): BaseResponse
+
+ /**
+ * 移除用户支付信息
+ * paymentMethodType=1为信用卡 2为PayPal
+ */
+ @FormUrlEncoded
+ @POST("user/removePaymentMethodID")
+ suspend fun removePaymentMethodID(
+ @Field("userId") userId: String, @Field("paymentMethodType") paymentMethodType: Int
+ ): BaseResponse
+
/**
* 获取蓝牙设备Mac
*/
diff --git a/app/src/main/java/com/abbidot/tracker/retrofit2/NetworkApi.kt b/app/src/main/java/com/abbidot/tracker/retrofit2/NetworkApi.kt
index e846356..e98473f 100644
--- a/app/src/main/java/com/abbidot/tracker/retrofit2/NetworkApi.kt
+++ b/app/src/main/java/com/abbidot/tracker/retrofit2/NetworkApi.kt
@@ -109,6 +109,21 @@ object NetworkApi : BaseNetworkApi(INetworkService.BASE_URL) {
service.updateMeasureUnit(userId, measurementUnit)
}
+ /**
+ *获取用户订单中是否存在开启自动续订状态
+ */
+ suspend fun getOrderAutoRenewalStatus(userId: String) = getResult {
+ service.getOrderAutoRenewalStatus(userId)
+ }
+
+ /**
+ *移除用户支付信息
+ * paymentMethodType=1为信用卡 2为PayPal
+ */
+ suspend fun removePaymentMethodID(userId: String, paymentMethodType: Int) = getResult {
+ service.removePaymentMethodID(userId, paymentMethodType)
+ }
+
/**
* 图片上传
*/
@@ -1321,8 +1336,13 @@ object NetworkApi : BaseNetworkApi(INetworkService.BASE_URL) {
/**
* 手机号验证码验证
*/
- suspend fun validatePhoneCode(phone: String, code: String, type: Int,openidIdentifier: String) = getResult {
- service.validatePhoneCode(phone, code, type,openidIdentifier)
+ suspend fun validatePhoneCode(
+ phone: String,
+ code: String,
+ type: Int,
+ openidIdentifier: String
+ ) = getResult {
+ service.validatePhoneCode(phone, code, type, openidIdentifier)
}
/**
diff --git a/app/src/main/java/com/abbidot/tracker/ui/activity/HomeV2Activity.kt b/app/src/main/java/com/abbidot/tracker/ui/activity/HomeV2Activity.kt
index 8798b8f..a275cbe 100644
--- a/app/src/main/java/com/abbidot/tracker/ui/activity/HomeV2Activity.kt
+++ b/app/src/main/java/com/abbidot/tracker/ui/activity/HomeV2Activity.kt
@@ -37,7 +37,6 @@ import com.abbidot.tracker.bean.ReceiveDeviceData
import com.abbidot.tracker.constant.ConstantInt
import com.abbidot.tracker.constant.ConstantString
import com.abbidot.tracker.constant.GetResultCallback
-import com.abbidot.tracker.database.MyDatabase
import com.abbidot.tracker.databinding.ActivityHomeV2Binding
import com.abbidot.tracker.dialog.CommonDialog1
import com.abbidot.tracker.dialog.CommonListDialog
@@ -540,23 +539,6 @@ class HomeV2Activity : BaseActivity(ActivityHomeV2Binding
* 显示被删除邀请的弹窗
*/
private fun showDeleteInviteDialog(deleteArray: MutableList) {
- lifecycleScope.launch(Dispatchers.IO) {
- val myDeviceDb = MyDatabase.deviceDao().findAll(MyDatabase.DEVICE_TABLE)
- myDeviceDb?.apply {
- for (deviceDb in myDeviceDb) {
- for (item in deleteArray) {
- if (deviceDb.deviceId == item.deviceId) {
- MyDatabase.deviceDao().delete(deviceDb)
- LogUtil.e("删除了邀请的设备")
- }
- }
- }
- }
- val newDeviceDb = MyDatabase.deviceDao().findAll(MyDatabase.DEVICE_TABLE)
- newDeviceDb?.apply {
- LogUtil.e("删去了邀请,还剩${newDeviceDb.size}下个设备")
- }
- }
CommonDialog1(
mContext,
getString(R.string.txt_setting_notification),
diff --git a/app/src/main/java/com/abbidot/tracker/ui/activity/device/DeleteTracker1Activity.kt b/app/src/main/java/com/abbidot/tracker/ui/activity/device/DeleteTracker1Activity.kt
index 79abf6a..3a365b3 100644
--- a/app/src/main/java/com/abbidot/tracker/ui/activity/device/DeleteTracker1Activity.kt
+++ b/app/src/main/java/com/abbidot/tracker/ui/activity/device/DeleteTracker1Activity.kt
@@ -74,12 +74,6 @@ class DeleteTracker1Activity :
)
}
}
- //删除设备成功后,把本地数据库中的设备也删除
- MyDatabase.deviceDao().deleteByParams(
- ConstantString.DeviceId,
- device.deviceId,
- MyDatabase.DEVICE_TABLE
- )
runOnUiThread {
showDeleteDialog()
}
diff --git a/app/src/main/java/com/abbidot/tracker/ui/activity/device/DeleteTracker2Activity.kt b/app/src/main/java/com/abbidot/tracker/ui/activity/device/DeleteTracker2Activity.kt
index 56d50aa..67b6a8d 100644
--- a/app/src/main/java/com/abbidot/tracker/ui/activity/device/DeleteTracker2Activity.kt
+++ b/app/src/main/java/com/abbidot/tracker/ui/activity/device/DeleteTracker2Activity.kt
@@ -20,7 +20,6 @@ import com.abbidot.tracker.bean.ReceiveDeviceData
import com.abbidot.tracker.constant.ConstantInt
import com.abbidot.tracker.constant.ConstantString
import com.abbidot.tracker.constant.GetResultCallback
-import com.abbidot.tracker.database.MyDatabase
import com.abbidot.tracker.databinding.ActivityDeleteTracker2Binding
import com.abbidot.tracker.dialog.CommonDialog1
import com.abbidot.tracker.util.Util
@@ -162,12 +161,6 @@ class DeleteTracker2Activity :
withContext(Dispatchers.IO) {
mDeviceBean?.let { device ->
SRBleUtil.instance.disconnectToMac(device.macId)
- //删除设备成功后,把本地数据库中的设备也删除
- MyDatabase.deviceDao().deleteByParams(
- ConstantString.DeviceId,
- device.deviceId,
- MyDatabase.DEVICE_TABLE
- )
runOnUiThread {
showDeleteDialog()
}
diff --git a/app/src/main/java/com/abbidot/tracker/ui/activity/device/MyTrackerV2Activity.kt b/app/src/main/java/com/abbidot/tracker/ui/activity/device/MyTrackerV2Activity.kt
index e7b8ea4..a938341 100644
--- a/app/src/main/java/com/abbidot/tracker/ui/activity/device/MyTrackerV2Activity.kt
+++ b/app/src/main/java/com/abbidot/tracker/ui/activity/device/MyTrackerV2Activity.kt
@@ -166,14 +166,8 @@ class MyTrackerV2Activity :
//保存本地数据库
if (!TextUtils.isEmpty(device.deviceOutId) && null != device.pet) {
bindDeviceNumber++
-// MyDatabase.deviceDao().insert(device)
} else if (!TextUtils.isEmpty(device.deviceOutId) && null == device.pet) {
//删除本地没绑定的设备
- MyDatabase.deviceDao().deleteByParams(
- ConstantString.DeviceId,
- device.deviceId,
- MyDatabase.DEVICE_TABLE
- )
}
}
if (bindDeviceNumber == 1) isOnlyBindOneDevice = true
@@ -269,15 +263,6 @@ class MyTrackerV2Activity :
dealRequestResult(it, object : GetResultCallback {
override fun onResult(any: Any) {
lifecycleScope.launch {
- withContext(Dispatchers.IO) {
- val device = mMyTrackerAdapter.getData()[mCurrentBeanOption]
- //解绑成功后,把本地数据库中的设备也删除
- MyDatabase.deviceDao().deleteByParams(
- ConstantString.DeviceId,
- device.deviceId,
- MyDatabase.DEVICE_TABLE
- )
- }
mUnAssignDeviceList.clear()
mUnAssignPetList.clear()
XEventBus.post(EventName.RefreshPet)
diff --git a/app/src/main/java/com/abbidot/tracker/ui/activity/subscribe/AddCreditCardPaymentActivity.kt b/app/src/main/java/com/abbidot/tracker/ui/activity/subscribe/AddCreditCardPaymentActivity.kt
index 5bfea8e..b835949 100644
--- a/app/src/main/java/com/abbidot/tracker/ui/activity/subscribe/AddCreditCardPaymentActivity.kt
+++ b/app/src/main/java/com/abbidot/tracker/ui/activity/subscribe/AddCreditCardPaymentActivity.kt
@@ -21,7 +21,6 @@ import com.abbidot.tracker.bean.CreditCardBean
import com.abbidot.tracker.constant.ConstantInt
import com.abbidot.tracker.constant.ConstantString
import com.abbidot.tracker.constant.GetResultCallback
-import com.abbidot.tracker.database.MyDatabase
import com.abbidot.tracker.databinding.ActivityAddCreditCardPaymentBinding
import com.abbidot.tracker.util.ThirdPartyUtil
import com.abbidot.tracker.util.Util
@@ -211,143 +210,7 @@ class AddCreditCardPaymentActivity :
}
}
- private fun confirmSaveCard() {
- val cardNumber =
- mViewBinding.ilAddCardNumber.etInputView2Content.text.toString().replace(" ", "")
- val cardName = mViewBinding.ilAddCardNameOnCard.etInputView2Content.text.toString()
- val creditCardValidity = mViewBinding.etAddCardMmDdContent.text.toString()
- val cvv = mViewBinding.etAddCardCvcContent.text.toString()
- if (TextUtils.isEmpty(cardNumber) || TextUtils.isEmpty(cardName) || TextUtils.isEmpty(
- creditCardValidity
- ) || TextUtils.isEmpty(cvv)
- ) {
- showToast(R.string.txt_not_null)
- return
- }
-
- if (!creditCardValidity.contains("/")) {
- showToast(R.string.txt_card_validity_format)
- return
- } else {
- val dates = creditCardValidity.split("/")
- try {
- if (dates[0].toInt() > 12) {
- showToast(R.string.txt_card_validity_format)
- return
- }
- } catch (e: Exception) {
- showToast(R.string.txt_card_validity_format)
- return
- }
- }
- if (Util.getCreditCardType(cardNumber) == 0 || cardNumber.length < 9) {
- showToast(R.string.txt_card_number_format)
- return
- }
-
- lifecycleScope.launch(Dispatchers.IO) {
- val list = MyDatabase.creditCardDao().findAll(MyDatabase.CREDIT_CARD_TABLE)
- var existCard: CreditCardBean? = null
- list?.apply {
- if (isNotEmpty()) {
- for (c in list) {
- if (!isEdit && c.cardNumber == cardNumber) {
- existCard = c
- break
- } else if (isEdit && null != mOldCard && c.cardNumber == mOldCard!!.cardNumber) {
- existCard = c
- break
- }
- }
- }
- }
- if (isEdit) {
- existCard?.let {
- it.cardName = cardName
- it.cardNumber = cardNumber
- it.expirationDate = creditCardValidity
- it.cvv = cvv
- it.isPrimary = mViewBinding.cbAddCardSetPrimarySwitch.isChecked
- if (null != mOldCard && mOldCard!!.cardNumber != cardNumber) {
- MyDatabase.creditCardDao().delete(mOldCard!!)
- }
- saveCard(list)
- }
- } else {
- if (null != existCard) {
- launch(Dispatchers.Main) {
- ViewUtil.instance.showDialog(
- mContext,
- R.string.txt_credit_card_exists,
- object : BaseDialog.OnDialogOkListener {
- override fun onOkClick(dialog: BaseDialog<*>) {
- dialog.dismiss()
- lifecycleScope.launch(Dispatchers.IO) {
- saveCard(list)
- }
- }
- },
- okTextResId = R.string.start_txt_yes,
- cancelTextResId = R.string.txt_no
- )
- }
- } else saveCard(list)
- }
- }
- }
-
- /**
- * 保存信用卡
- */
- private fun saveCard(list: List?) {
- mViewBinding.apply {
- val cardNumber = ilAddCardNumber.etInputView2Content.text.toString().replace(" ", "")
- val cardName = ilAddCardNameOnCard.etInputView2Content.text.toString()
- val creditCardValidity = etAddCardMmDdContent.text.toString()
- val cvv = etAddCardCvcContent.text.toString()
- if (cbAddCardSetPrimarySwitch.isChecked) {
- mCreditCard?.isPrimary = true
- list?.apply {
- if (isNotEmpty()) {
- for (c in list) {
- if (c.isPrimary) {
- c.isPrimary = false
- MyDatabase.creditCardDao().update(c)
- }
- }
- }
- }
- }
-
- mCreditCard?.let {
- if (isEdit) {
- list?.apply {
- if (isNotEmpty()) {
- for (c in list) {
- //因卡号唯一,编辑卡号删除存在的信用卡
- if (c.cardNumber == it.cardNumber) {
- MyDatabase.creditCardDao().delete(c)
- }
- }
- }
- }
- }
- it.cardNumber = cardNumber
- it.cardName = cardName
- it.expirationDate = creditCardValidity
- it.cvv = cvv
-// MyDatabase.creditCardDao().insert(it)
- }
-
- runOnUiThread {
-// val intent = Intent()
-// intent.putExtra(ConstantString.Card, mCreditCard)
- setResult(ResultCode.ResultCode_1, null)
- showToast(R.string.txt_save_successful, isFinish = true)
- }
- }
- }
private fun confirmSaveCardV2() {
mViewBinding.apply {
@@ -416,12 +279,10 @@ class AddCreditCardPaymentActivity :
}
})
} else {
-// MyDatabase.creditCardDao().deleteAll(MyDatabase.CREDIT_CARD_TABLE)
it.cardNumber = cardNumber
it.cardName = cardName
it.expirationDate = creditCardValidity
it.cvv = cvv
-// MyDatabase.creditCardDao().insert(it)
runOnUiThread {
val intent = Intent()
intent.putExtra(ConstantString.Card, it)
@@ -440,7 +301,7 @@ class AddCreditCardPaymentActivity :
override fun onOkClick(dialog: BaseDialog<*>) {
lifecycleScope.launch(Dispatchers.IO) {
mCreditCard?.apply {
- MyDatabase.creditCardDao().delete(this)
+// MyDatabase.creditCardDao().delete(this)
}
}
dialog.dismiss()
diff --git a/app/src/main/java/com/abbidot/tracker/ui/activity/subscribe/PaymentMethodActivity.kt b/app/src/main/java/com/abbidot/tracker/ui/activity/subscribe/PaymentMethodActivity.kt
index d9b0a40..703c4f9 100644
--- a/app/src/main/java/com/abbidot/tracker/ui/activity/subscribe/PaymentMethodActivity.kt
+++ b/app/src/main/java/com/abbidot/tracker/ui/activity/subscribe/PaymentMethodActivity.kt
@@ -1,13 +1,16 @@
package com.abbidot.tracker.ui.activity.subscribe
+import android.view.Gravity
import androidx.activity.viewModels
import androidx.fragment.app.Fragment
import androidx.viewpager2.widget.ViewPager2
import com.abbidot.baselibrary.constant.EventName
import com.abbidot.baselibrary.eventbus.XEventBus
+import com.abbidot.baselibrary.util.AppUtils
import com.abbidot.tracker.R
import com.abbidot.tracker.adapter.ViewPagerAdapter
import com.abbidot.tracker.base.BaseActivity
+import com.abbidot.tracker.base.BaseDialog
import com.abbidot.tracker.bean.PaymentIDBean
import com.abbidot.tracker.bean.SubscriptionsOrderBean
import com.abbidot.tracker.constant.ConstantInt
@@ -37,6 +40,9 @@ class PaymentMethodActivity :
//支付id
var mPaymentIDBean: PaymentIDBean? = null
+ //删除支付方式id
+ private var mRemovePaymentMethodType = 0
+
override fun getTopBar() = mViewBinding.ilPaymentMethodTopBar.titleTopBar
override fun initData() {
@@ -90,18 +96,86 @@ class PaymentMethodActivity :
finish()
}
- mSubscriptionPayViewModel.mPaymentMethodIDLiveData.observe(this) {
- dealRequestResult(it, object : GetResultCallback {
- override fun onResult(any: Any) {
- it.getOrNull()?.let { p ->
- mPaymentIDBean = p
- (mPayFragments[0] as CreditCardPaymentFragment).getCardData(p.stripeMethodInfo)
- if (mPayFragments.size > 1) {
- (mPayFragments[1] as PaypalPaymentFragment).showPaypalInfo()
+ mSubscriptionPayViewModel.apply {
+ mPaymentMethodIDLiveData.observe(this@PaymentMethodActivity) {
+ dealRequestResult(it, object : GetResultCallback {
+ override fun onResult(any: Any) {
+ it.getOrNull()?.let { p ->
+ mPaymentIDBean = p
+ (mPayFragments[0] as CreditCardPaymentFragment).getCardData(p.stripeMethodInfo)
+ if (mPayFragments.size > 1) {
+ (mPayFragments[1] as PaypalPaymentFragment).showPaypalInfo()
+ }
}
}
- }
- })
+ })
+ }
+
+ mOrderAutoRenewalStatusLiveData.observe(this@PaymentMethodActivity) {
+ dealRequestResult(it, object : GetResultCallback {
+ override fun onResult(any: Any) {
+ it.getOrNull()?.let { d ->
+ showRemoveDialog(d.isNeedCancel)
+ }
+ }
+ })
+ }
+
+ mRemovePaymentMethodLiveData.observe(this@PaymentMethodActivity) {
+ dealRequestResult(it, object : GetResultCallback {
+ override fun onResult(any: Any) {
+ showToast(R.string.txt_delete_succe, gravity = Gravity.CENTER)
+ getUserPaymentMethodID()
+ }
+ })
+ }
+ }
+ }
+
+ /**
+ * 删除支付方式
+ * @param paymentMethodType 支付方式类型 1为信用卡 2为PayPal
+ */
+ fun removePaymentMethodID(paymentMethodType: Int) {
+ mRemovePaymentMethodType = paymentMethodType
+ mSubscriptionPayViewModel.getOrderAutoRenewalStatus()
+ }
+
+ /**
+ * 显示删除支付方式弹窗
+ * @param haveAutoRenewal 是否有自动续费 1为有 0为无
+ */
+ private fun showRemoveDialog(haveAutoRenewal: Int) {
+ if (haveAutoRenewal == ConstantInt.Type1) {
+ ViewUtil.instance.showDialog(
+ this@PaymentMethodActivity,
+ R.string.txt_remove_pay_method_tips2,
+ object : BaseDialog.OnDialogOkListener {
+ override fun onOkClick(dialog: BaseDialog<*>) {
+ dialog.dismiss()
+ mSubscriptionPayViewModel.removePaymentMethodID(
+ mRemovePaymentMethodType
+ )
+ }
+ },
+ getString(R.string.txt_auto_renewal_on),
+ R.string.txt_turn_off_remove, R.string.txt_cancel
+ )
+ } else {
+ ViewUtil.instance.showDialog(
+ this@PaymentMethodActivity,
+ R.string.txt_remove_pay_method_tips1,
+ object : BaseDialog.OnDialogOkListener {
+ override fun onOkClick(dialog: BaseDialog<*>) {
+ dialog.dismiss()
+ mSubscriptionPayViewModel.removePaymentMethodID(
+ mRemovePaymentMethodType
+ )
+ }
+ },
+ getString(R.string.txt_remove_pay_method) + if (AppUtils.isChina()) "?" else "?",
+ R.string.txt_remove, R.string.txt_cancel
+ )
}
}
}
\ No newline at end of file
diff --git a/app/src/main/java/com/abbidot/tracker/ui/fragment/subscribe/CreditCardPaymentFragment.kt b/app/src/main/java/com/abbidot/tracker/ui/fragment/subscribe/CreditCardPaymentFragment.kt
index 85ce9d6..e52b47b 100644
--- a/app/src/main/java/com/abbidot/tracker/ui/fragment/subscribe/CreditCardPaymentFragment.kt
+++ b/app/src/main/java/com/abbidot/tracker/ui/fragment/subscribe/CreditCardPaymentFragment.kt
@@ -14,6 +14,7 @@ import com.abbidot.tracker.R
import com.abbidot.tracker.adapter.CreditCardAdapter
import com.abbidot.tracker.base.BaseFragment
import com.abbidot.tracker.bean.CreditCardBean
+import com.abbidot.tracker.constant.ConstantInt
import com.abbidot.tracker.constant.ConstantString
import com.abbidot.tracker.constant.GetResultCallback
import com.abbidot.tracker.databinding.FragmentCreditCardPaymentBinding
@@ -85,7 +86,11 @@ class CreditCardPaymentFragment : BaseFragment
)
ilCreditCardPaymentNoData.btnSureSubscribePlan1Continue.visibility = View.GONE
- setOnClickListenerViews(btnCreditCardPaymentAdd, btnMakePaymentCreditCard)
+ setOnClickListenerViews(
+ btnCreditCardPaymentAdd,
+ btnMakePaymentCreditCard,
+ btnCreditCardPaymentRemove
+ )
}
// getCardData()
}
@@ -126,9 +131,11 @@ class CreditCardPaymentFragment : BaseFragment
btnCreditCardPaymentAdd.visibility = View.INVISIBLE
//卡管理 不需要点击效果
if (null == getHostActivity(PaymentMethodActivity::class.java)?.mOrderBean) {
+ btnCreditCardPaymentRemove.visibility = View.VISIBLE
btnMakePaymentCreditCard.visibility = View.GONE
} else {
stripeMethodInfo.checked = true
+ btnCreditCardPaymentRemove.visibility = View.GONE
btnMakePaymentCreditCard.visibility = View.VISIBLE
}
}
@@ -207,6 +214,7 @@ class CreditCardPaymentFragment : BaseFragment
}
//卡管理 不需要点击效果
if (null == getHostActivity(PaymentMethodActivity::class.java)?.mOrderBean) {
+ mViewBinding.btnCreditCardPaymentRemove.visibility = View.VISIBLE
mViewBinding.btnMakePaymentCreditCard.visibility = View.GONE
} else {
var haveCheck = false
@@ -219,6 +227,7 @@ class CreditCardPaymentFragment : BaseFragment
if (!haveCheck) {
list[0].checked = true
}
+ mViewBinding.btnCreditCardPaymentRemove.visibility = View.GONE
mViewBinding.btnMakePaymentCreditCard.visibility = View.VISIBLE
}
mViewBinding.apply {
@@ -327,6 +336,9 @@ class CreditCardPaymentFragment : BaseFragment
}
override fun onClick(v: View?) {
+ if (isLimitClick())
+ return
+
mViewBinding.apply {
when (v!!) {
btnCreditCardPaymentAdd -> {
@@ -334,6 +346,10 @@ class CreditCardPaymentFragment : BaseFragment
launchActivity(mActivity!!, mActivityResultLauncher, intent)
}
+ btnCreditCardPaymentRemove -> getHostActivity(PaymentMethodActivity::class.java)?.removePaymentMethodID(
+ ConstantInt.Type1
+ )
+
btnMakePaymentCreditCard -> startCreditCardPayment()
}
}
diff --git a/app/src/main/java/com/abbidot/tracker/ui/fragment/subscribe/PaypalPaymentFragment.kt b/app/src/main/java/com/abbidot/tracker/ui/fragment/subscribe/PaypalPaymentFragment.kt
index a976f59..7e7640b 100644
--- a/app/src/main/java/com/abbidot/tracker/ui/fragment/subscribe/PaypalPaymentFragment.kt
+++ b/app/src/main/java/com/abbidot/tracker/ui/fragment/subscribe/PaypalPaymentFragment.kt
@@ -7,6 +7,7 @@ import android.view.View
import androidx.fragment.app.viewModels
import com.abbidot.tracker.R
import com.abbidot.tracker.base.BaseFragment
+import com.abbidot.tracker.constant.ConstantInt
import com.abbidot.tracker.constant.ConstantString
import com.abbidot.tracker.constant.GetResultCallback
import com.abbidot.tracker.databinding.FragmentPaypalPaymentBinding
@@ -33,7 +34,7 @@ class PaypalPaymentFragment :
override fun initData() {
mViewBinding.apply {
root.setBackgroundResource(R.color.transparent)
- setOnClickListenerViews(btnSureRedirectPaypal)
+ setOnClickListenerViews(btnSureRedirectPaypal, btnPaypalPaymentRemove)
ilPaypalPaymentNoData.btnSureSubscribePlan1Continue.visibility = View.GONE
getHostActivity(PaymentMethodActivity::class.java)?.let {
@@ -65,6 +66,7 @@ class PaypalPaymentFragment :
View.GONE
else
View.VISIBLE
+ btnPaypalPaymentRemove.visibility = tvPaypalPaymentEmail.visibility
ilPaypalPaymentNoData.root.visibility =
if (null == it.mOrderBean && TextUtils.isEmpty(pId.paypalMethodInfo.email)) {
@@ -105,12 +107,19 @@ class PaypalPaymentFragment :
}
override fun onClick(v: View?) {
+ if (isLimitClick())
+ return
+
mViewBinding.apply {
when (v!!) {
btnSureRedirectPaypal -> getHostActivity(PaymentMethodActivity::class.java)?.mOrderBean?.let {
showNoCancelableLoading(true)
mSubscriptionPayViewModel.createPaypalOrder(it)
}
+
+ btnPaypalPaymentRemove -> getHostActivity(PaymentMethodActivity::class.java)?.removePaymentMethodID(
+ ConstantInt.Type2
+ )
}
}
}
diff --git a/app/src/main/java/com/abbidot/tracker/util/Util.kt b/app/src/main/java/com/abbidot/tracker/util/Util.kt
index 1182be6..23b24df 100644
--- a/app/src/main/java/com/abbidot/tracker/util/Util.kt
+++ b/app/src/main/java/com/abbidot/tracker/util/Util.kt
@@ -621,10 +621,6 @@ class Util {
//保存最后一次登录的邮箱
MMKVUtil.putString(MMKVKey.Email, email)
MMKVUtil.putString(MMKVKey.Phone, phone)
- withContext(Dispatchers.IO) {
- MyDatabase.deviceDao().deleteAll(MyDatabase.DEVICE_TABLE)
- MyDatabase.creditCardDao().deleteAll(MyDatabase.CREDIT_CARD_TABLE)
- }
activity.startActivityFinish(Intent(activity, SayHelloActivity::class.java))
}
}
diff --git a/app/src/main/java/com/abbidot/tracker/util/ViewUtil.kt b/app/src/main/java/com/abbidot/tracker/util/ViewUtil.kt
index 9d5fb83..6907d9f 100644
--- a/app/src/main/java/com/abbidot/tracker/util/ViewUtil.kt
+++ b/app/src/main/java/com/abbidot/tracker/util/ViewUtil.kt
@@ -988,7 +988,7 @@ class ViewUtil private constructor() {
* 适配不同语言跳转h5
*/
fun goHtmlAssetContent(activity: Activity, title: String, fileKey: String) {
- val url="file:///android_asset/$fileKey"
+ val url = "file:///android_asset/$fileKey"
LogUtil.e(url)
WebViewActivity.startWebViewActivity(activity, title, url)
}
diff --git a/app/src/main/java/com/abbidot/tracker/vm/ConnectionDeviceViewModel.kt b/app/src/main/java/com/abbidot/tracker/vm/ConnectionDeviceViewModel.kt
index fcc8dad..7a1626f 100644
--- a/app/src/main/java/com/abbidot/tracker/vm/ConnectionDeviceViewModel.kt
+++ b/app/src/main/java/com/abbidot/tracker/vm/ConnectionDeviceViewModel.kt
@@ -1,6 +1,5 @@
package com.abbidot.tracker.vm
-import android.content.Context
import android.os.CountDownTimer
import android.text.TextUtils
import androidx.lifecycle.ViewModel
@@ -11,14 +10,11 @@ import com.abbidot.baselibrary.eventbus.XEventBus
import com.abbidot.baselibrary.util.LogUtil
import com.abbidot.tracker.R
import com.abbidot.tracker.base.BaseActivity
-import com.abbidot.tracker.bean.DeviceBean
-import com.abbidot.tracker.database.MyDatabase
import com.abbidot.tracker.util.Util
import com.abbidot.tracker.util.bluetooth.SRBleUtil
import com.clj.fastble.BleManager
import com.clj.fastble.callback.BleScanCallback
import com.clj.fastble.data.BleDevice
-import com.clj.fastble.data.BleScanState
import com.clj.fastble.scan.BleScanRuleConfig
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.delay
@@ -33,88 +29,6 @@ class ConnectionDeviceViewModel : ViewModel() {
private var mCountDownTimer: CountDownTimer? = null
- fun autoConnectBleDevice(context: Context) {
- //判断蓝牙是否打开
- if (!SRBleUtil.instance.isBleEnable(context)) {
- LogUtil.e("automaticConnection,蓝牙没打开")
- return
- }
- if (BleManager.getInstance().scanSate == BleScanState.STATE_SCANNING) {
- LogUtil.e("automaticConnection,已经在扫描蓝牙,开始扫描失败")
- return
- }
- viewModelScope.launch(Dispatchers.IO) {
- val localDevices = MyDatabase.deviceDao()
- .findAll(MyDatabase.DEVICE_TABLE) as MutableList
- LogUtil.e("查找本地ble设备有${localDevices.size}个")
- if (localDevices.size == 0) {
- return@launch
- }
- val scanTrackBle = mutableListOf()
- val scanRuleConfig = BleScanRuleConfig.Builder().build()
- BleManager.getInstance().initScanRule(scanRuleConfig)
- BleManager.getInstance().scan(object : BleScanCallback() {
- override fun onScanStarted(success: Boolean) {
- SRBleUtil.instance.isScanInterrupt = false
- LogUtil.e("开始扫描...$success")
- }
-
- override fun onScanning(bleDevice: BleDevice?) {
- LogUtil.d("onScanning....$bleDevice")
- bleDevice?.apply {
- if (null != name && name.contains(SRBleUtil.instance.trackDeviceBleStartName)) {
- scanTrackBle.add(this)
- }
- }
- }
-
- override fun onScanFinished(scanResultList: MutableList?) {
- val interrupt = SRBleUtil.instance.isScanInterrupt
- LogUtil.e("automaticConnection--扫描完成..中断扫描$interrupt,${scanResultList?.size}")
- if (!interrupt) {
- compareDevice(scanTrackBle, localDevices)
- }
- }
- })
- }
- }
-
- /**
- * 从扫描到的设备中查找已添加的设备,并连接设备
- */
- private fun compareDevice(
- scanResultList: MutableList, localDevices: MutableList
- ) {
- if (scanResultList.size > 0) {
- var connected = false
- viewModelScope.launch(Dispatchers.IO) {
- //创建新的变量,防止别的蓝牙扫描(蓝牙找设备功能)改变scanResultList变量,导致异常
- val scanBleList = mutableListOf()
- scanBleList.addAll(scanResultList)
- for (device in localDevices) {
- for (bleDevice in scanBleList) {
- if (!TextUtils.isEmpty(bleDevice.name)) {
- if (device.macId == bleDevice.mac) {
- SRBleUtil.instance.connect(bleDevice)
- connected = true
- break
- }
- }
- }
- }
- if (!connected) {
- LogUtil.e("没有蓝牙设备可连")
- SRBleUtil.instance.isBleConnecting = false
-// XEventBus.post(EventName.ActionConDeviceState, ConState.DEVICE_NOT_FOUND)
- }
- }
- } else {
- LogUtil.e("蓝牙设备为0")
- SRBleUtil.instance.isBleConnecting = false
-// XEventBus.post(EventName.ActionConDeviceState, ConState.DEVICE_NOT_FOUND)
- }
- }
-
/**
* 连接中倒计时20s变为未连接状态
*/
diff --git a/app/src/main/java/com/abbidot/tracker/vm/SubscriptionPayViewModel.kt b/app/src/main/java/com/abbidot/tracker/vm/SubscriptionPayViewModel.kt
index 4e180b0..c6a411a 100644
--- a/app/src/main/java/com/abbidot/tracker/vm/SubscriptionPayViewModel.kt
+++ b/app/src/main/java/com/abbidot/tracker/vm/SubscriptionPayViewModel.kt
@@ -9,6 +9,7 @@ import com.abbidot.baselibrary.util.MMKVUtil
import com.abbidot.baselibrary.util.Utils
import com.abbidot.baselibrary.util.rsa.RSA
import com.abbidot.tracker.bean.CreditCardBean
+import com.abbidot.tracker.bean.OrderBean
import com.abbidot.tracker.bean.PayResultBean
import com.abbidot.tracker.bean.PaymentIDBean
import com.abbidot.tracker.bean.StripeSubscriptionPriceBean
@@ -30,6 +31,8 @@ class SubscriptionPayViewModel : ViewModel() {
val mCreatePaypalOrderLiveData = MutableLiveData>()
val mPaymentMethodIDLiveData = MutableLiveData>()
val mSavePaymentMethodIDLiveData = MutableLiveData>()
+ val mOrderAutoRenewalStatusLiveData = MutableLiveData>()
+ val mRemovePaymentMethodLiveData = MutableLiveData>()
/**
* Stripe支付创建消费用户
@@ -88,4 +91,27 @@ class SubscriptionPayViewModel : ViewModel() {
mSavePaymentMethodIDLiveData.value = result
}
}
+
+ /**
+ *获取用户订单中是否存在开启自动续订状态
+ */
+ fun getOrderAutoRenewalStatus() {
+ viewModelScope.launch {
+ val userId = MMKVUtil.getString(MMKVKey.UserId)
+ val result = NetworkApi.getOrderAutoRenewalStatus(userId)
+ mOrderAutoRenewalStatusLiveData.value = result
+ }
+ }
+
+ /**
+ *移除用户支付信息
+ * paymentMethodType=1为信用卡 2为PayPal
+ */
+ fun removePaymentMethodID(paymentMethodType: Int) {
+ viewModelScope.launch {
+ val userId = MMKVUtil.getString(MMKVKey.UserId)
+ val result = NetworkApi.removePaymentMethodID(userId, paymentMethodType)
+ mRemovePaymentMethodLiveData.value = result
+ }
+ }
}
\ No newline at end of file
diff --git a/app/src/main/res/layout/dialog_my_layout.xml b/app/src/main/res/layout/dialog_my_layout.xml
index cf8eaab..b664646 100644
--- a/app/src/main/res/layout/dialog_my_layout.xml
+++ b/app/src/main/res/layout/dialog_my_layout.xml
@@ -4,63 +4,63 @@
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@drawable/bg_dialog"
- android:paddingStart="@dimen/dp_8"
- android:paddingEnd="@dimen/dp_8">
+ android:gravity="center"
+ android:paddingHorizontal="@dimen/dp_8">
-
-
+
-
+
+
+
+
-
-
-
\ No newline at end of file
diff --git a/app/src/main/res/layout/fragment_credit_card_payment.xml b/app/src/main/res/layout/fragment_credit_card_payment.xml
index 0702af6..2e20e00 100644
--- a/app/src/main/res/layout/fragment_credit_card_payment.xml
+++ b/app/src/main/res/layout/fragment_credit_card_payment.xml
@@ -27,15 +27,38 @@
app:qmui_borderWidth="@dimen/dp_1"
app:typeface="@string/roboto_bold_font" />
-
+ android:gravity="center_horizontal"
+ android:orientation="vertical">
+
+
+
+
+
diff --git a/app/src/main/res/layout/fragment_paypal_payment.xml b/app/src/main/res/layout/fragment_paypal_payment.xml
index a071e24..be0f710 100644
--- a/app/src/main/res/layout/fragment_paypal_payment.xml
+++ b/app/src/main/res/layout/fragment_paypal_payment.xml
@@ -21,12 +21,12 @@
android:id="@+id/tv_paypal_payment_email"
style="@style/my_TextView_style_v2"
android:layout_width="match_parent"
- android:gravity="start|center"
- android:layout_marginHorizontal="@dimen/dp_16"
android:layout_height="@dimen/dp_56"
+ android:layout_marginHorizontal="@dimen/dp_16"
android:background="@drawable/shape8_dark_gray_border_white_yellow_bg"
android:drawableStart="@drawable/icon_payment_paypal_svg"
android:drawablePadding="@dimen/dp_6"
+ android:gravity="start|center"
android:paddingStart="@dimen/dp_20"
android:text="@string/app_name"
android:textSize="@dimen/textSize16"
@@ -61,4 +61,18 @@
android:layout_centerHorizontal="true"
android:src="@drawable/icon_payment_paypal_svg" />
+
\ No newline at end of file
diff --git a/app/src/main/res/values-de/strings.xml b/app/src/main/res/values-de/strings.xml
index f1285c9..90e02f5 100644
--- a/app/src/main/res/values-de/strings.xml
+++ b/app/src/main/res/values-de/strings.xml
@@ -897,5 +897,13 @@
terms_de.html
privacy_de.html
subscription_terms_conditions_de.html
+ Copyright © %d ABBIDOT. Alle Rechte vorbehalten
Sitzung abgelaufen. Bitte erneut anmelden
+
+ Zahlungsmethode entfernen
+ Möchten Sie diese Zahlungsmethode wirklich entfernen?
+ Bitte deaktivieren Sie die automatische Verlängerung, bevor Sie Ihre Zahlungsmethode entfernen.
+ Automatische Verlängerung ist aktiviert
+ Entfernen
+ Deaktivieren & entfernen
\ No newline at end of file
diff --git a/app/src/main/res/values-fr/strings.xml b/app/src/main/res/values-fr/strings.xml
index 545085c..4c6fcb8 100644
--- a/app/src/main/res/values-fr/strings.xml
+++ b/app/src/main/res/values-fr/strings.xml
@@ -899,4 +899,11 @@
privacy_fr.html
subscription_terms_conditions_fr.html
Session expirée. Veuillez vous reconnecter
+
+ Supprimer le mode de paiement
+ Voulez-vous vraiment supprimer ce mode de paiement ?
+ Veuillez désactiver le renouvellement automatique avant de supprimer votre mode de paiement.
+ Renouvellement automatique activé
+ Supprimer
+ Désactiver et supprimer
\ No newline at end of file
diff --git a/app/src/main/res/values-it/strings.xml b/app/src/main/res/values-it/strings.xml
index 6f2ebc4..17f409a 100644
--- a/app/src/main/res/values-it/strings.xml
+++ b/app/src/main/res/values-it/strings.xml
@@ -1,67 +1,85 @@
- La mia piccola
- Misura dal pavimento fino al punto più a \nlto delle scapole del tuo pet
+ Misura dal pavimento fino al punto più alto delle scapole del tuo \npet
Batteria: %s%%
%s Anni
%d lb
Versione%s
- Termini e condizioni
+ Termini & Condizioni
Accetta l\'Informativa sulla privacy e i Termini.
Il tracker è abbinato a %s
- Obiettivo dell\’attività
+ Obiettivo dell’attività
Ora di fine
- Personalizza la routine quotidiana del tuo animale domestico per divertirti con \nimpegno mattutino e serale focalizzato, considerando \nleloro esigenze, specie e razza.
+ Personalizza la routine quotidiana del tuo animale domestico per divertirti con \'impegno mattutino e serale focalizzato, considerando \n\nle loro esigenze, specie e razza.
+\tInvita
Il tuo familiare o amico condiviso può tracciare la posizione e la data del tuo \npet senza la possibilità di modificarli.
Inserisci il codice a 4 cifre inviato a %s.
Tempo rimanente:\t
- Registrandoti, accetti i Termini e condizioni e l\'Informativa sulla privacy di Nation Remit.
+ Registrandoti accetti i Termini & Condizioni e
Confermare che l\'ID di 6 caratteri corrisponda a quello \non sul retro del tracker.
Individua l\'ID di 6 caratteri sul retro del \ntracker.
L\'ID del tracker è errato, verifica \ne riprova
Parato con \nsuccesso
(Rinnovare a
Questa è la casa del tuo animale domestico?
-
Annulla assegnazione %s
- •\tNecessarioper una sincronizzazione accurata delle attività.
- •\tMostra la tua posizione sulla mappa\n•\ tRichiesta di sincronizzazione dei dati di attività\n•\ tMigliora la precisione del tracker
+ •\tNecessario per una sincronizzazione accurata delle attività.
+ •\tMostra la tua posizione sulla mappa\n•\tNecessario per sincronizzare i dati attività\n•\tMigliora la precisione del tracker
•\tConsenti alle notifiche di tenere traccia delle informazioni importanti, ad esempio se il tuo amico ha lasciato una zona sicura o se dovresti prendere in considerazione la ricarica del tuo dispositivo.
- Registrazione \nconsuccesso!
+ Registrazione\nconsuccesso!
Batteria inferiore a %s%%
- Seleziona \'Animale domestico\' > \'Tracker\'. Fai clic su \'Aggiornamento GPS\' Seleziona3/5/10/15 minuti.
+ Seleziona \'Pet\' > \'Tracker\'. Fare clic su \'Aggiornamento GPS\' Selezionare 3/5/10/15 minuti.
(Intervalli di rete più brevi scaricano più velocemente la batteria del Tracker. Per impostazione predefinita, la rete si riconnette ogni 15 minuti.)
- Quando la modalità Live è attivata, il Tracker entra in uno stato di posizionamento e networking rapido, di solito entro 15–20 secondi. Questa modalità scarica la batteria più velocemente, quindi è meglio riservarla alle situazioni di emergenza.
+ Quando la modalità Live è attivata, il Tracker entra in uno stato di posizionamento e networking rapido, di solito entro 15-20 secondi. Questa modalità scarica la batteria più velocemente, quindi è meglio riservarla alle situazioni di emergenza.
+
Rinnovo:
Invierà il codice di verifica a %s.
- Passa a Prime per sbloccare \nFunzionalità esclusive!
+ Passa a Prime per sbloccare\nFunzionalità esclusive!
Rilevata nuova versione firmware: %s
- "%s" ti invita a effettuare il check-in su "%s"
- Il tuo abbonamento è scaduto, \ntipreghiamo di ricaricarlo
+ "%@" ti invita a effettuare il check-in su "%@"
+ Il tuo abbonamento è scaduto,\ntipreghiamo di ricaricarlo
Set recinzioni %s
%s è nelle vicinanze
- Scollega il tuo Tracker dal tuo account solo se lo restituisci o lo dai via.
+ Scollega il tuo Tracker dal tuo account solo se lo stai restituendo o regalando.
Avvicinare il telefono al tracker %s.
Aggiornato: %s
Vicino a %s
/giorno
-
- Localizzazione…
- Si è addormentato %s fa
+ Localizzazione…
+ Caduto addormentato %sago
Sposta %s per svegliarti
(%s fa)
La configurazione iniziale può richiedere %s minuti
- 1. Muoviti all\'aperto con il dispositivo\n2. Attendere la connessione GPS LTE &\n3. Blu lampeggiante = LTE & GPS attivo
- 1. Muoviti all\'aperto con il dispositivo\n2. Attendere la connessione GPS LTE &\n3. Verde lampeggiante = LTE & GPS attivo
+ 1. Muoviti all\'aperto con il dispositivo\n2. Attendi la connessione LTE e GPS\n3. Blu lampeggiante = LTE e GPS attivi
+ 1. Muoviti all\'aperto con il dispositivo\n2. Attendi la connessione LTE e GPS\n3. Verde lampeggiante = LTE e GPS attivi
%s min
- %s Min
+ %s min
Sì
Il numero della carta esiste già. Sovrascriverlo?
Il Wi-Fi garantisce che il tuo tracker rimanga connesso quando i segnali LTE sono deboli.
Rinnovo: $%s/%s giorno su %s
/giorno x%s
%s Anno Cura
+ 1 sostituzione/anno, qualsiasi motivo
+ Salvato. Attivo quando è online.
+ Il periodo di rimborso è scaduto
+ Politica di rimborso\n
+ Rimborso automatico (entro 48 ore)
+ Tutti gli acquisti in abbonamento hanno diritto a un rimborso automatico completo entro 48 ore dal pagamento. I rimborsi verranno elaborati automaticamente senza revisione manuale.\n
+ Finestra di rimborso standard (30 giorni)
+ Dopo il periodo iniziale di 48 ore, gli utenti possono richiedere un rimborso entro 30 giorni dall’acquisto.\n\t1.Tutti i piani di abbonamento (3 mesi, 1 anno, 2 anni) sono idonei\n\t2.Le richieste di rimborso sono soggette a verifica e approvazione\n\t3.I rimborsi possono essere adeguati parzialmente in base all’utilizzo e al consumo del servizio\n
+ Gli abbonamenti più vecchi di 30 giorni non sono rimborsabili.
+ Nessun rimborso dopo 30 giorni
+ Arredamento per il
+ Parco
+ Giocare
+ Non sicuro
+ Orto
+ Acqua
+ È un piacere rivederti
+ E-mail
+ Password
+ Hai dimenticato la password?
Non hai ancora un account?
Inizia
Torna al login
@@ -79,8 +97,8 @@
Cancella la cache
Commenti
Tipo di domanda (obbligatorio)
- Informazioni sull\'app
- Informazioni su Tracker
+ Info app
+ Info tracker
Altro
Inserisci il tuo problema o suggerimento
Lasciaci la tua email in modo che possiamo aiutarti più velocemente
@@ -95,32 +113,11 @@
Tag
Attiva
No, grazie
- Strumento di monitoraggio delle squadre
- LED Light
+ Il mio tracker
+ Luce LED
Nuovo Assistente animali
Sblocca
- Non sicuro
- Orto
- Acqua
- È un piacere rivederti
- E-mail
- Password
- Hai dimenticato la password?
- Nessun rimborso dopo 30 giorni
- Arredamento per il
- Parco
- Giocare
- 1 sostituzione/anno, qualsiasi motivo
- Salvato. Attivo quando è online.
- Il periodo di rimborso è scaduto
- Politica di rimborso
- Rimborso automatico (entro 48 ore)
- Dopo il periodo iniziale di 48 ore, gli utenti possono richiedere un rimborso entro 30 giorni dall\'acquisto.\n\t1.Tutti i piani di abbonamento (3 mesi, 1 anno, 2 anni) sono idonei\n\t2.Le richieste di rimborso sono soggette a revisione e approvazione\n\t3.I rimborsi possono essere parzialmente adeguati in base all\'utilizzo e al consumo di servizi\n
- Tutti gli acquisti in abbonamento hanno diritto a un rimborso automatico completo entro 48 ore dal pagamento. I rimborsi verranno elaborati automaticamente senza revisione manuale.\n
- Finestra di rimborso standard (30 giorni)
- Gli abbonamenti più vecchi di 30 giorni non sono rimborsabili.
-
- Network
+ Rete
GPS
Bluetooth connesso
Bluetooth non connesso
@@ -136,10 +133,11 @@
Accolta.
Modalità respirazione
LAMPEGGIATORE
+ Il mio animale
Maschio
Femmina
Modificare
- Stop Live
+ Ferma live
Annulla
Tempo attivazione
Calorie
@@ -150,7 +148,7 @@
miglio
kcal
Si prega di compilare completamente
- Successful
+ Operazione riuscita
Caricamento completato
Salvato con successo
Accesso riuscito
@@ -162,7 +160,7 @@
Oggi
min
giorni
- Stop Live Tracking?
+ Interrompere il tracking live?
Elimina
Annulla
Lun
@@ -190,481 +188,484 @@
Pagamento non riuscito, riprova.
Connessione al Bluetooth
La cancellazione del tuo account cancellerà definitivamente tutti i dati. Sei sicuro?
- Incorrect username or password
+ Nome utente o password errati
Errore del codice di verifica
- Verification code expired
- User does not exist
- User already exists
- Reset password
- Privacy Policy
- Website
- Turn on phone Bluetooth please
- You cannot share with yourself
+ Codice di verifica scaduto
+ L\'utente non esiste
+ L\'utente esiste già
+ Reimposta password
+ Informativa sulla privacy
+ Sito web
+ Attiva il Bluetooth del telefono
+ Non puoi condividere con te stesso
Online
Offline
- Firmware Version
- Upgrade
- Device does not exist
- Disconnected
- Already latest version
- Activity
- Route
- Pet
- More
+ Versione firmware
+ Aggiorna
+ Il dispositivo non esiste
+ Disconnesso
+ È già disponibile l\'ultima versione
+ Attività
+ Percorso
+ Animale
+ Altro
KM
- Sleep
+ Sonno
Live
Tracker
- Badges
- View all
- Manage
- Time
- WiFi Zone
- Connected
- Weak signal
+ Badge
+ Visualizza tutto
+ Gestisci
+ Ora
+ Zona WiFi
+ Connesso
+ Segnale debole
Bluetooth
- Light
- Check the track and points
- Read All
- Subscription
- Help
- How It Works
-
- Units Setting
- Sign Out
- Calories Avg.
- Time Avg.
- Total Data
- hrs
- Last 7 days
- Last 30 days
- Ok
- January
- February
- March
- April
- May
- June
- July
- August
- September
- October
- November
- December
- As sound speeds up, the distance is closer.
- Stop Radar
- Edit WiFi Zone
- WiFi Name:
- Safe Zone
- + Add new
- No-go Zone
- No zone added, yet
- Add Safe Zone
- Edit Safe Zone
- Fence Name
- Zone Name
- Add No-go Zone
- Edit No-go Zone
- Data Board
- hr
- Set Daily Goal
- Awesome! Ready to begin!
+ Chiaro
+ Controllare la pista e i punti
+ Leggi tutto
+ Abbonamento
+ Aiuto
+ Come funziona
+ Impostazione unità
+ Esci
+ Calorie medie
+ Tempo medio
+ Dati totali:
+ ore
+ Ultimi 7 giorni
+ Ultimi 30 giorni
+ OK
+ Gennaio
+ Febbraio
+ Marzo
+ Aprile
+ Maggio
+ Giugno
+ Luglio
+ Agosto
+ Settembre
+ Ottobre
+ Novembre
+ Dicembre
+ Man mano che il suono accelera, la distanza è più vicina.
+ Radar
+ Modifica zona WiFi
+ NOME WI-FI
+ Zona sicura
+ + aggiungi nuovo
+ Zona vietata
+ Nessuna zona aggiunta, ancora
+ Aggiungi zona sicura
+ Modifica zona sicura
+ Nome recinto
+ Nome zona
+ Aggiungi zona vietata
+ Modifica zona vietata
+ Scheda dati
+ ore
+ Obiettivo giornaliero
+ Fantastico! Pronti per iniziare!
km
- Daily Avg. activity time
- Avg. Calories
- Daily Avg Resting time
+ Tempo medio giornaliero di attività
+ Calorie medie
+
+ Tempo medio giornaliero di riposo
Profilo
lb
- in
- Type
- Sex
- Dog
- Cat
- Other
+ poll.
+ Tipologia
+ Sesso
+ Cagnolo
+ Gatto
+ Altro
kg
cm
- Members
- Active
- Pending
- Choose avatar
- Unlock New Milestones!
- Congratulations!
- Share
- Log in
+ Soci
+ Attivo
+ In sospeso
+ Scegli Avatar
+ Sblocca nuovi traguardi!
+ Complimenti!
+ Condividi
+ Accedi
Inizia
- Create account
- Minimum 6 characters
- Country
- Email Address
- Continue
- OTP verification
+ Crea account
+ Almeno 6 caratteri
+ Nazione
+ Indirizzo e-mail
+ Continua
+ Verifica OTP
sec
- Resend Code
- Create new password
- Reset Now
- Confirm Password
- Password reset successful!
+ Invia di nuovo il codice
+ Crea nuova password
+ Reimposta
+ Confermi la password
+ Password reimpostata correttamente!
Standard
- Satellite
- Display Fences
- Select
- Always By Your Side!
- Powered by
- View Less
- See All
- Adventure
- New Tracker
- Add new tracker
- Charge and Power On
- Step 1 :
- Charge the tracker, 3 white lights flash, then red stays on.
- Unplug cable; slow green blinking indicates device is on.
- Step 2 :
- Searching for Tracker
- Bring the phone close to the tracker.
- Pair with Tracker
- ID number
+ Satellitare
+ Mostra recinzioni
+ Seleziona
+ Sempre al tuo fianco
+ Supportato da
+ Visualizza meno
+ Vedi tutto
+ Avventura
+ Nuovo tracker
+ Aggiungi nuovo tracker
+ Carica e Accensione
+ Passaggio 1:
+ Caricare il tracker, 3 luci bianche lampeggiano, quindi il rosso rimane acceso.
+ Scollegare il cavo; il lampeggio verde lento indica che il dispositivo è acceso.
+ Fase 2:
+ Ricerca del tracker
+ Avvicinare il telefono al tracker.
+ Abbina a Tracker
+ numero documento
No
- Input ID for Pairing
- Add Tracker
- Choose Your Plan
- Benefits
- Monthly Subscription
- /month
- /year
- Best Value
- Confirm Your Plan
- Device Number
- Terms and Conditions
- Summary
- Tax
- Payment Method
- My Card
- No Payment Method
- + Add New Card
- Primary
- Make Payment
- We will redirect to paypal
- Add Payment Method
- Save New Card
- Payment was Successful
- Accepted Payment Cards
- Set as primary Card
- Name On Card
- Permissions
- Skip
-
-
- Grant permissions for better experience.
- Tracker ID
- Plan:
- Renews On:
- Adding where they live can improve battery and provide extra safety
- Establish WiFi Zone
- Permanent residence saves power, enhances positioning.
- Permanent Residence
- Choose Wi-Fi network
- Later
- Notifications Setting
- Enter or leave Safe Zone/No-go Zone
- Tracker Status
- Subscription/Battery Warnings/Power Off
- Active/sleep reminder/goal achievement
- About WiFi Zone
- Choose a network in a trusted space where your spents lots of time. Like your home. Once in range, your tracker will recognize this network as a WiFi Zone.
- Office
- Save Power
- With Bluetooth range? Pinpoint a nearby tracker using Radar. Live will also become available, but using it will end power saving.
- Tracking your pet
- WiFi Zone Settings
- Please enter your feedback
- Enter Your Email Address
- Choose File
- Power Off
- What is your pet type?
- What is your pet name?
- Current LED
- Left the safe zone
- In the WiFi Zone
- In the no-go zone
- Strong signal
- WiFi Zone
- Deactivate
- Please use a valid email address.
- Please enter a full name.
- Please use a valid password.
- Please select a region.
- To ABBIDOT
- Entered passwords differ!
- No Member, yet
- Invite Members
- Home
- Live Duration
- About Live Duration
- Live Mode helps find pets with location updates every 2~3 seconds, but uses more battery. You’ll still get regular updates with default tracking.
- Live Tracking will stop at the end of the set duration, but you can stop it before to save battery.
- Keep it short
- GPS Location
- Receive Notifications
- Turn ON
- Device not activated. Subscribe to activate.
- Keep tracker on and nearby to scan.
- Outside
- Inside
- You have created too many fences
- LIVE has ended. LIVE time can set through Live Duration.
- Tracker power off
- Starting Live…
- Connecting to network
- GPS positioning
- Starting
+ ID input per l\'accoppiamento
+ Aggiungi tracker
+ Scegli il tuo piano
+ Vantaggi
+ Abbonamento mensile
+ /mese
+ /anno
+ Miglior Valore
+ Conferma il tuo
+ Numero dispositivo
+ Termini e condizioni
+ Riepilogo
+ Imposte
+ Metodo di pagamento
+ La mia scheda
+ Nessun metodo di pagamento
+ Aggiungi Nuova Carta
+ Primario
+ Effettua un pagamento
+ Reindirizzeremo a paypal
+ Aggiungi metodo di pagamento
+ Salva nuova carta
+ Il pagamento è avvenuto con successo
+ Carte di pagamento accettate
+ Imposta come primario
+ Nome del titolare
+ Permessi
+ Salta
+ Concedi le autorizzazioni per un\'esperienza migliore.
+ ID tracker
+ Piano terapeutico:
+ Rinnova Il
+ Aggiungere dove vivono può migliorare la batteria e fornire maggiore sicurezza
+ Stabilisci una zona WiFi
+ La residenza permanente consente di risparmiare energia, migliora il posizionamento.
+ Residenza permanente
+ Scegli la rete Wi-Fi
+ Dopo
+ Impostazione delle notifiche
+ Entrare o uscire dalla zona sicura/no-go zone
+ Stato del tracker
+ Abbonamento/Avvertenze batteria/Spegnimento
+ Promemoria attivo/sonno/raggiungimento degli obiettivi
+ Informazioni su WiFi Zone
+ Scegli una rete in uno spazio affidabile in cui trascorri molto tempo. Come la tua casa. Una volta nel raggio d\'azione, il tuo tracker riconoscerà questa rete come una zona WiFi.
+ Ufficio
+ Risparmio energia
+ Con portata Bluetooth? Individua un localizzatore nelle vicinanze utilizzando Radar. Anche Live sarà disponibile, ma il suo utilizzo metterà fine al risparmio energetico.
+ TRACCIAMENTO ATTIVITA\'
+ Impostazioni zona WiFi
+ Inserisci il tuo feedback
+ Inserisci il tuo indirizzo Email
+ Scegli file
+ Pulsante di accensione disattivo (OFF)
+ Qual è il tuo tipo di animale domestico?
+ Come ti chiami?
+ LED CORRENTE
+ Ha lasciato la zona sicura
+ Nella zona WiFi
+ Nella no-go zone
+ Forte segnale
+ Zona WiFi
+ Disattiva
+ Inserisci un indirizzo e-mail valido.
+ Scrivi il nome completo
+ Utilizza una password valida.
+ Seleziona una regione.
+ A ABBIDOT
+ Le password inserite differiscono!
+ Ancora nessun membro
+ Invita membri
+ Homepage
+ Durata in tempo reale
+ Informazioni sulla durata live
+ La modalità Live aiuta a trovare gli animali domestici con aggiornamenti della posizione ogni 2~3 secondi, ma utilizza più batteria. Riceverai comunque aggiornamenti regolari con il monitoraggio predefinito.
+ Il Live Tracking si interromperà alla fine della durata impostata, ma è possibile interromperlo prima per risparmiare batteria.
+ Sii conciso
+ Posizione GPS
+ Ricevi notifiche
+ Accensione
+ Dispositivo non attivato. Abbonati per attivare.
+ Tieni il tracker acceso e nelle vicinanze per eseguire la scansione.
+ Esterno
+ Interno
+ Hai creato troppe recinzioni
+ LA DIRETTA È terminata. IL tempo IN DIRETTA può essere impostato tramite la Durata in diretta.
+ Spegnimento del tracker
+ Avvio Live in corso...
+ Collegamento alla rete...
+ posizionamento GPS.
+ Avviamento
-min Live
- Timeout, please try again
- Close
- About Live
- Live Tracking will stop in one hour, but you can stop it before to save battery.
- Resting
- Resting time
- No signal
+ Si è verificato un timeout, riprovare.
+ Chiudi
+ Informazioni su Live
+ Il Live Tracking si interromperà tra un\'ora, ma puoi interromperlo prima per risparmiare batteria.
+ Riposando
+ TEMPO DI RIPOSO
+ Nessun segnale
WiFi
- Select measurement unit
- Metric(cm, kg)
- Imperial(in, lb)
+ Seleziona unità di misura
+ Metrico (cm, kg)
+ Imperiale(in, lb)
m
- ft
- Fences Alerts
- My Pet Fence
- Your feedback helps us get better.
- Type Message
- Please continue to verify your email
- Code valid for
- Create password
- Change Email successful!
- Change Email
- Enter new email
- Keep the app running in the background to receive tracker status notifications.
- Reminder
- Yesterday
- Power On/Off
- Charge and unplug to turn on \nFlashing green light = on
- 1. Choose a subscription \n2. Tap to activate the tracker \n3. Enable GPS and cellular tracking
- Active Tracker
- (The GPS and cellular network conditions can vary depending on the environment. Before placing it on your pet, check various locations around you to evaluate the GPS and network status.)
- Check Tracker Status
- When the Tracker detects no movement for 15 minutes, it turns off GPS and cellular networks, entering sleep mode automatically. Upon detecting movement, the Tracker activates and resumes normal operation.
- Connect the tracker to home WiFi (no password required). In the WiFi Zone, GPS activation is disabled. It connects to the network every 10–60 minutes, with very low power consumption.
- When your tracker is outside the WiFi Zone, it activates GPS and connects to the network every 3/5/10/15 minutes.
- Tracker Battery Life
- Choose location and adjust radius or shapeSave fence to activate it
- Alerts when pet enters or leaves the zone
- Create a Pet Fence
- Tracker in Sleeping Mode
- (Super Low power usage)
- Tracker in WiFi Zone
- Tracker outside WiFi Zone
- (Low power usage)
- (Standard power usage)
- (The highest power usage)
- Choose the right GPS update interval
- Tracker in Live Mode
- Fresh Paws
- Day 1 Devotee
- Newbie Navigator
- Furry Friend
+ piedi
+ Avvisi recinzioni
+ Il mio recinto per animali domestici
+ Il tuo feedback ci aiuta a migliorare.
+ Inserisci Messaggio
+ Continua a verificare la tua email
+ Codice valido per
+ Crea password
+ Modifica e-mail riuscita!
+ Cambia e-mail
+ Inserisci la tua nuova email
+ Mantieni l\'app in esecuzione in background per ricevere notifiche sullo stato del tracker.
+ Promemoria
+ Ieri
+ Accensione/spegnimento
+ Carica e scollega per accendere \nLuce verde lampeggiante = accesa
+ 1. Scegli un abbonamento \n2. Tocca per attivare il tracker \n3. Abilita GPS e tracciamento cellulare
+ Tracker attivo
+ (Le condizioni del GPS e della rete cellulare possono variare a seconda dell\'ambiente. Prima di posizionarlo sul tuo animale domestico, controlla le varie posizioni intorno a te per valutare lo stato del GPS e della rete.)
+ Controlla lo stato del tracker
+ Quando il Tracker non rileva alcun movimento per 15 minuti, spegne il GPS e le reti cellulari, entrando automaticamente in modalità sleep. Al rilevamento del movimento, il Tracker si attiva e riprende il normale funzionamento.
+ Collegare il tracker al WiFi di casa (non è richiesta alcuna password). Nella Zona WiFi, l\'attivazione del GPS è disabilitata. Si connette alla rete ogni 10–60 minuti, con un consumo energetico molto basso.
+ Quando il tuo tracker è al di fuori della Zona WiFi, attiva il GPS e si connette alla rete ogni 3/5/10/15 minuti.
+ Durata della batteria del tracker
+ Scegli la posizione e regola il raggio o la formaSalva la recinzione per attivarla
+ Avvisa quando il PET entra o esce dalla zona
+ Crea una recinzione per animali domestici
+ Tracker in modalità Sleeping
+ (Basso consumo energetico)
+ Tracker nella zona WiFi
+ Tracker al di fuori della zona WiFi
+ Basso consumo di potenza
+ (Consumo energetico standard)
+ (Massima potenza assorbita)
+ Scegli il giusto intervallo di aggiornamento GPS
+ Tracker in modalità Live
+ Zampe fresche
+ Devoto del 1° giorno
+ Navigatore per principianti
+ Pelosetto 8
Pawtential Pal
- Month Mate
+ Mese Mate
Tailwag Explorer
Pawsome Partner
- 1 Year Hugger
- Purrfect Partner
- 2 Year Companion
- Faithful Friend
- 3 Year Harmony
- Furr-timer Friend
- Welcome to the community! Start your journey with your first badge.
- You\’ve just started! Your dedication on the first day is noted.
- Log in for a day to earn this badge!
- You\’re finding your way around. Keep exploring to reach new milestones!
- Continue exploring for three days to achieve this milestone!
- A week in, and you\’re already becoming a part of our furry family!
- Stay active for a week to earn the Furry Friend badge!
- You\’re showing great potential! Keep up the good work.
- Keep engaging for fifteen days to unlock this badge!
- One month in and you\’re a valued member of our community!
- Be a part of our community for a month to achieve this badge!
- Three months of exploration and adventure—well done!
- Explore with us for three months to earn the Tailwag Explorer badge!
- Six months of fantastic partnership. Thanks for sticking with us!
- Stick around for six months to earn the Pawsome Partner badge!
- A whole year of dedication! Here\’s to many more!
- Continue with us for a year to achieve this milestone!
- Eighteen months and still going strong. You\’re truly purrfect!
- Stay engaged for eighteen months to earn the Purrfect Partner badge!
- Two years with us—your loyalty is greatly appreciated!
- Complete two years with us to receive the 2 Year Companion badge!
- Thirty months of faithful companionship. You\’re a treasured friend!
- Remain a faithful friend for thirty months to earn this badge!
- Three years together in perfect harmony. Thank you for being with us!
- Three years of harmony with us will earn you this badge!
- Five years of wonderful friendship. Your commitment is truly inspiring!
- Five years of commitment will unlock the Furr-timer Friend badge!
- How to get?
- Family Invitation
- Active Time:
- Expires On:
- Expired on:
- YEARS
- MONTHS
- DAYS
- Subscription Order
- Order ID:
- Enter your reason for the refund
- Request a refund
- Refund
- Waiting
- Refunding
- Refunded
- /year on
- /month on
- Annual Care
- Annual Care:
- LED Light Settings
- When the tracker is next to your phone, it is recommended to connect to the tracker via Bluetooth and adjust the LED settings. The changes will take effect immediately.
- Bluetooth Setup
- When the tracker is not near your phone, you can set the LED lights remotely via the network. In this case, it usually takes a few minutes for the settings to take effect.
- Sorry, duplicate WiFi not allowed
- Network Setup
- Set accurate weight to improve calorie accuracy.
- Enable Auto-Renew
- About Weight
- Order
- Set Premium
- Basic
+ Abbracciatore di 1 anno
+ Partner Purrfect
+ Compagno di 2 anni
+ Amico fedele
+ Armonia di 3 anni
+ Amico Furr-timer
+ Benvenuto nella community! Inizia il tuo viaggio con il tuo primo badge.
+ Hai appena iniziato! Si prende nota della tua dedizione il primo giorno.
+ Accedi per un giorno per ottenere questo badge!
+ Stai trovando la tua strada. Continua a esplorare per raggiungere nuovi traguardi!
+ Continua a esplorare per tre giorni per raggiungere questo traguardo!
+ Dopo una settimana, stai già entrando a far parte della nostra famiglia pelosa!
+ Rimani attivo per una settimana per ottenere il badge Furry Friend!
+ Stai mostrando un grande potenziale! Continua così.
+ Continua a impegnarti per quindici giorni per sbloccare questo distintivo!
+ Dopo un mese sei un prezioso membro della nostra community!
+ Entra a far parte della nostra community per un mese per ottenere questo distintivo!
+ Tre mesi di esplorazione e avventura, ben fatto!
+ Esplora con noi per tre mesi per ottenere il badge Tailwag Explorer!
+ Sei mesi di fantastica collaborazione. Grazie per essere rimasto con noi!
+ Rimani nei paraggi per sei mesi per ottenere il distintivo Pawsome Partner!
+ Un anno intero di dedizione! Brindiamo a molti altri!
+ Continua con noi per un anno per raggiungere questo traguardo!
+ Diciotto mesi e va ancora forte. Sei davvero perfetta!
+ Resta impegnato per diciotto mesi per ottenere il badge Purrfect Partner!
+ Due anni con noi: la tua fedeltà è molto apprezzata!
+ Completa due anni con noi per ricevere il badge Compagno di 2 anni!
+ Trenta mesi di fedele compagnia. Sei un amico prezioso!
+ Rimani un amico fedele per trenta mesi per ottenere questo distintivo!
+ Tre anni insieme in perfetta armonia. Grazie per essere stati con noi!
+ Tre anni di armonia con noi ti faranno guadagnare questo distintivo!
+ Cinque anni di meravigliosa amicizia. Il tuo impegno è davvero stimolante!
+ Cinque anni di impegno sbloccheranno il badge Furr-timer Friend!
+ Come Arrivare
+ Invito di famiglia
+ Tempo attivazione
+ Scade il:
+ Scade il:
+ ANNI
+ MESI
+ GIORNI
+ Nuovo ordine di abbonamento
+ ID:
+ Immetti causale rimborso
+ Richiedi un rimborso
+ Rimborso
+ Attendi
+ Rimborso
+ Rimborsato
+ /anno in data
+ /mese il
+ Assistenza annuale
+ Cura annuale:
+ Configurazione luce
+ Quando il tracker è accanto al telefono, si consiglia di connettersi al tracker tramite Bluetooth e regolare le impostazioni del LED. Le modifiche avranno effetto immediato.
+ Configurazione Bluetooth
+ Quando il tracker non è vicino al telefono, è possibile impostare le luci a LED da remoto tramite la rete. In questo caso, di solito ci vogliono alcuni minuti perché le impostazioni abbiano effetto.
+ Spiacenti, non è possibile duplicare il WiFi
+ Configurazione della rete
+ Imposta un peso preciso per migliorare la precisione calorica.
+ Attivare il rinnovo automatico
+ Informazioni sul peso
+ Ordine
+ Imposta Premium
+ Elementare
Premium
- Rejected
- Expired
- Upgrade Your Plan
- Residual Value
- Track and train pets to prevent loss or danger.
- Advanced Setting
- Delete Account
- Change Name
- Your Email Address:
- Change Now
- Upgrade Now
- Activity Time
- Not Set
- Done
- Weather to save?
- Connect
- Skip password
- Connecting
- Incorrect password, please try again.
- Your view access has ended.
- As long as your tracker detects your buddy is safe and sound in a Power Saving Zone, it will keep LIVE Tracking, Light and Sound off to extend battery life.
- About Tracking Duration
- Will be Deleted
- LED Light Setting
- Reserve
- Subscription Plan
- Connecting Tracker
- Annual Care included, non-adjustable
- Delete successfully
- Sure to delete this card?
- Account exists. Log in now?
- Selected date is out of range
- Shake to turn on \nFlashing green light confirms on
- GPS and cellular signals may vary by location. \nTest in different locations before use.
- Tracker is on charging
- Subscribed
- Baidu Maps
- Send
- To turn on, connect the power cable. After first-time startup, shake to turn on.
- As low as
- Payment Manager
- Basic Plan
- Premium Plan
- Activate Subscription
- Charging
- Total Time
- Live works on cellular only
- Unbind Device
- Edit Profile
- No internet connection
- System Error: Please try again later.
- Missing Parameters.
- Tracker Busy. Please wait and retry.
- Tracker Offline. Unable to proceed.
- Live stream in progress. Settings unavailable.
- Operation failed. Please try again.
- Tone
- Locate works on cellular only
- Pet is close, try Radar
- Fully charged
- Timeline
- Keep phone close to device
- Auto-Renew: Cancel
- Display Dashed Line
- First use
- Daily use
- Sleep Mode
- 1. 15 minutes no movement → sleep mode. \n2. Auto wake on movement. \n3. Battery updates every 24 hours.
- WiFi Zone(Home)
- 1. Connect to home WiFi. \n2. GPS off → save battery. \n3. Update every ~60 minutes.
- 1. Select 3–15 min. \n2. Short interval = higher battery use. \n3. Default: 5 min.
- Set Fence type
- Safe Zone or No-go Zone
- Set boundary
- Enable alerts in Account > Settings > Notifications
- Edit or delete fence in Manage
- Initializing Device
- Add Wi-Fi zone to prolong care time
- Add
- Already at minimum size
- Login with
- My Card
- Edit Payment Method
- Your phone number has already been bound
- Go to
- Pet > Tracker
- Pet > Tracker > GPS Update
- Pet > My Pet Fence > Manage > + Add New
- Check:
- · Network\n· WiFi Zone\n· GPS
- · Bluetooth\n· Battery\n· LED
- Privacy Policy
- Expires On
- Google Map
- Upgrade successful
- Upgrade failed
- Please enter email address.
- Enter Tracker ID
- No signal. Check if pet indoors.
- Recommenced
- Expiry Time:
+ Rifiutato
+ scaduta
+ Aggiorna il tuo piano
+ Valore Residuo
+ Tracciare e addestrare gli animali domestici per evitare perdite o pericoli.
+ Impostazioni avanzate
+ Elimina account
+ Cambia nome
+ Il tuo indirizzo email:
+ Modifica ora
+ Aggiorna ora
+ Durata dell\'evento
+ Non Impostato
+ Fine
+ Salvare il meteo?
+ Connettiti
+ Salta Password
+ Connessione in corso...
+ %1 (Parziale)
+ Il tuo accesso alle visualizzazioni è terminato.
+ Finché il tuo tracker rileva che il tuo amico è sano e salvo in una zona di risparmio energetico, manterrà il monitoraggio in TEMPO REALE, la luce e il suono spenti per prolungare la durata della batteria.
+ Informazioni sulla durata del monitoraggio
+ Sarà/saranno cancellato/i
+ Impostazioni luce
+ Prenota
+ Piano di Abbonamento
+ Collegamento del tracker
+ Assistenza annuale inclusa, non regolabile
+ Iscritto
+ Mappe Baidu
+ Invia
+ Eliminato con successo
+ Sei sicuro di voler eliminare questa carta?
+ L\'account esiste. Accedere ora?
+ La data selezionata non è compresa nell\'intervallo
+ Agita per accendere \n La luce verde lampeggiante conferma l\'accensione
+ I segnali GPS e cellulari possono variare in base alla posizione. \nEffettuare il test in luoghi diversi prima dell\'uso.
+ Il tracker è in carica
+ Per accendere, collegare il cavo di alimentazione. Dopo il primo avvio, agitare per accendere.
+ A partire da
+ Gestore pagamenti
+ Piano di base
+ Piano Premium
+ Attiva abbonamento
+ Carica
+ Tempo Totale
+ Live funziona solo su cellulare
+ Scollega dispositivo
+ Modifica profilo
+ Nessuna connessione Internet
+ ERRORE DI SISTEMA TIBCO. Riprova più tardi
+ Parametri mancanti
+ Tracker occupato. Attendi e riprova.
+ Tracker offline. Impossibile procedere.
+ Streaming live in corso. Impostazioni non disponibili.
+ "Operazione non riuscita, riprova",
+ Tono
+ Individua lavori solo su cellulare
+ L\'animale domestico è vicino, prova Radar
+ Carica piena
+ Sequenza temporale
+ Tieni il telefono vicino al dispositivo
+ Rinnovo automatico: Annulla
+ Visualizza linea tratteggiata
+ Messa in servizio
+ Uso quotidiano.
+ Modalità di sospensione
+ 1. 15 minuti in modalità di → sospensione senza movimento. \n2. Riattivazione automatica al movimento. \n3. La batteria si aggiorna ogni 24 ore.
+ Zona WiFi (Home)
+ 1. Connettiti al WiFi di casa. \n2. GPS spento → per risparmiare batteria. \n3. Aggiorna ogni ~60 minuti.
+ 1. Seleziona 3–15 min. \n2. Intervallo breve = maggiore utilizzo della batteria. \n3. Predefinito: 5 min.
+ Imposta tipo di recinzione
+ Zona sicura o no-go zone
+ Imposta limite
+ Abilita gli avvisi in Account > Impostazioni > Notifiche
+ Modifica o elimina recinzione in Gestisci
+ Inizializzazione del dispositivo
+ Aggiungi una zona Wi-Fi per prolungare il tempo di cura
+ Aggiungi
+ Già alle dimensioni minime
+ Accedi (Login) con
+ La mia scheda
+ Modifica Metodo di Pagamento
+ Il tuo numero di telefono è già stato associato
+ Andare su
+ PET > Tracker
+ PET > Tracker > Aggiornamento GPS
+ Pet > Il mio recinto per animali > Gestisci > + Aggiungi nuovo
+ Verificare:
+ · Rete\n· Zona WiFi \n· GPS
+ · Bluetooth\n· Batteria\n· LED
+ Scaduto il
+ Google Maps
+ Aggiornamento riuscito
+ Miglioramento non riuscito
+ Inserisci l\'indirizzo e-mail
+ Inserisci l\'ID del tracker
+ Nessun segnale. Controllare se l\'animale domestico è al chiuso.
+ Consigliato
+ Tempo di scadenza:
terms_it.html
privacy_it.html
subscription_terms_conditions_it.html
-
- Non hai ricevuto l\’e-mail?
+ Rimuovi metodo di pagamento
+ Sei sicuro di voler rimuovere questo metodo di pagamento?
+ Disattiva il rinnovo automatico prima di rimuovere il metodo di pagamento.
+ Il rinnovo automatico è attivo
+ Rimuovi
+ Disattiva e rimuovi
+ Informativa sulla privacy
+ Non hai ricevuto l’e-mail?
%d anno
%d/100 ottenuti
Ultima volta: %s
- Mostra percorso e punto
+ Mostra percorso & punto
Sei sicuro di voler condividere i dati dell\'animale con \' %s \'?
Seleziona 2 \~ 9 foto
Rinnova a %.2f all\'anno successivamente, annulla in qualsiasi momento
$%doff già
Il piano di abbonamento è attivo fino a %s
Il rinnovo automatico è disattivato e il piano di abbonamento non sarà disponibile dopo %s
- Salva e conferma
+ Salva & conferma
$%s/mese
Hai configurato correttamente il tuo animale domestico e hai \neparato il badge di sicurezza!
Dispositivo già associato, verifica \ne riprova
%s piedi
%s mph
Sei sicuro di voler eliminare la famiglia %s?
- 4. Attiva le notifiche: vai su 'Account' > 'Impostazioni'. Fai clic su 'Notifiche' e attiva
+ 4. Attiva le notifiche: vai su \'Account\' > \'Impostazioni\'. Fai clic su \'Notifiche\' e attiva
/mese x%s
/%s anno
A partire da %s
@@ -695,14 +696,14 @@
Lingua
Esci
Per favore, seleziona un tipo di domanda
- Genere.
+ Genere
Località
Telefono
Razza
Attiva il dispositivo per continuare.
Attiva
Tracker
- Strumento di monitoraggio delle squadre
+ Il mio tracker
Autorizzato
Recinto
Impostazione
@@ -726,7 +727,7 @@
miglio
kcal
Il tuo dispositivo è scaduto, rinnovalo
- Caricamento mappa in corso...
+ Caricamento mappa…
Ciao, frammento vuoto
Foto e Video
Seleziona
@@ -746,7 +747,7 @@
Data
Doppio click per modificare
Personalizza
- <g id="1">Selezione foto:</g>
+ Selezione foto:
GIF
Aggiungi Nuova Carta
Pagamento
@@ -776,7 +777,7 @@
Nome
Cognome
Informazioni legali
- Ho letto ed approvo la Privacy Policy
+ Accetto
Rifiuto
Scarica l\’indirizzo
Attendi...
@@ -813,7 +814,7 @@
Abilita
Annui)
Finché il tuo tracker rileva che il tuo amico è sano e salvo in una zona WiFi, manterrà il monitoraggio in tempo REALE, la luce e il suono spenti per prolungare la durata della batteria.
- Invitare
+ +Invitare
Questo eliminerà tutti
dati in modo permanente dal tuo account.
Bluetooth
@@ -821,7 +822,7 @@
Media 7 giorni
Segnale GPS debole
Nessun segnale di rete
- TEMPO DI RIPOSO
+ Tempo di riposo
km/h
mph
Un Suo/a amico/a
@@ -837,18 +838,24 @@
Visualizza tutto
Immetti un numero di telefono valido
Account
- 1. Protezione flessibile a breve termine\n\n2. Garanzia di rimborso di 30 giorni
- 1. Assistenza clienti dedicata\n\n2. Copertura annuale di protezione\n\n3. Garanzia di rimborso di 30 giorni
- 1. Sostituzione gratuita del dispositivo inclusa (1x)\n\n2. Protezione migliorata\n\n3. Protezione per animali domestici senza problemi\n\n4. Garanzia di rimborso di 30 giorni
+ 1. Protezione flessibile a breve termine
+\n2. Garanzia di rimborso di 30 giorni
+ 1. Assistenza clienti dedicata
+\n2. Copertura annuale di protezione
+\n3. Garanzia di rimborso di 30 giorni
+ 1. Sostituzione gratuita del dispositivo inclusa (1x)
+\n2. Protezione migliorata
+\n3. Protezione per animali domestici senza problemi
+\n4. Garanzia di rimborso di 30 giorni
Copyright © %d ABBIDOT Tutti i diritti riservati
Inseguitori %d
%d Animali domestici
- %d in
+ %d pollici
Impossibile ottenere l\'autorizzazione
- ANIMALI NON AMMESSI
+ Senza animali
Si prega di legare prima un animale domestico
%d%%
- %dY %dMon
+ %dY %dlun
Tutti i video
Completo(%1$d/%2$d)
Supporta fino a %d foto o video
@@ -859,7 +866,7 @@
Consenti le autorizzazioni pertinenti
%1$d/%2$d
Oggi\t%s
- 视频模式选择。
+ Selezione video
$\t%.2f
%s%%
Inserisci l\'indirizzo e-mail registrato nel tuo profilo.\nInvieremo un codice di 4 cifre alla tua e-mail.
@@ -887,5 +894,5 @@
(Rinnovare a $%s/%s mesi successivi)
Rinnovo: $%s/%s anni su %s
Rinnovo: $%s/%s mesi su %s
- Sessione scaduta. Accedi di nuovo
+ La sessione di accesso è scaduta. Accedi di nuovo
\ No newline at end of file
diff --git a/app/src/main/res/values-zh-rCN/strings.xml b/app/src/main/res/values-zh-rCN/strings.xml
index 650f058..51e73b2 100644
--- a/app/src/main/res/values-zh-rCN/strings.xml
+++ b/app/src/main/res/values-zh-rCN/strings.xml
@@ -942,4 +942,10 @@
privacy_zh.html
subscription_terms_conditions_zh.html
登录信息失效,请重新登录
+ 移除支付方式
+ 确定要移除该支付方式吗?
+ 移除支付方式前,请先关闭自动续订。
+ 自动续订已开启
+ 移除
+ 关闭并移除
\ No newline at end of file
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index 004b82e..bbb9a6d 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -993,4 +993,10 @@
privacy_en.html
subscription_terms_conditions_en.html
Login session expired. Please log in again
+ Remove Payment Method
+ Are you sure you want to remove this payment method?
+ Please turn off auto-renewal before removing your payment method.
+ Auto-Renewal Is On
+ Remove
+ Turn Off & Remove
\ No newline at end of file
diff --git a/baselibrary/src/main/java/com/abbidot/baselibrary/util/AppUtils.kt b/baselibrary/src/main/java/com/abbidot/baselibrary/util/AppUtils.kt
index d79017b..4ce5581 100644
--- a/baselibrary/src/main/java/com/abbidot/baselibrary/util/AppUtils.kt
+++ b/baselibrary/src/main/java/com/abbidot/baselibrary/util/AppUtils.kt
@@ -94,7 +94,7 @@ class AppUtils {
* 是否是国内
*/
fun isChina(type: String = SWITCH_PAGE_TYPE): Boolean {
- return true
+ return false
if (isDebug()) {
if (type == SWITCH_MAP_TYPE && MMKVUtil.getBoolean(MMKVKey.OnlyGoogleMap, false)) {
//只启用谷歌地图