1.订阅套餐新ui:增加套餐描述;修改价格区底色;Best 用皇冠图标代替;
2.新增Initializing Device界面 3.校对新增多语言字符
@@ -193,6 +193,9 @@ dependencies {
|
|||||||
// implementation 'com.google.android.material:material:1.10.0'
|
// implementation 'com.google.android.material:material:1.10.0'
|
||||||
// implementation "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version"
|
// implementation "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version"
|
||||||
implementation 'androidx.legacy:legacy-support-v4:1.0.0'
|
implementation 'androidx.legacy:legacy-support-v4:1.0.0'
|
||||||
|
implementation 'androidx.appcompat:appcompat:1.6.1'
|
||||||
|
implementation 'com.google.android.material:material:1.10.0'
|
||||||
|
implementation 'androidx.activity:activity:1.8.0'
|
||||||
|
|
||||||
testImplementation 'junit:junit:4.13.2'
|
testImplementation 'junit:junit:4.13.2'
|
||||||
androidTestImplementation 'androidx.test.ext:junit:1.2.1'
|
androidTestImplementation 'androidx.test.ext:junit:1.2.1'
|
||||||
|
|||||||
@@ -38,6 +38,7 @@
|
|||||||
<uses-permission
|
<uses-permission
|
||||||
android:name="android.permission.WRITE_SETTINGS"
|
android:name="android.permission.WRITE_SETTINGS"
|
||||||
tools:ignore="ProtectedPermissions" /> <!-- android 9.0上使用前台服务,需要添加权限 -->
|
tools:ignore="ProtectedPermissions" /> <!-- android 9.0上使用前台服务,需要添加权限 -->
|
||||||
|
<uses-permission android:name="android.permission.FOREGROUND_SERVICE" /> <!-- BLUETOOTH permissions are added by lib_dfu module. -->
|
||||||
<uses-permission android:name="android.permission.FOREGROUND_SERVICE" /> <!-- 用于读取手机当前的状态 -->
|
<uses-permission android:name="android.permission.FOREGROUND_SERVICE" /> <!-- 用于读取手机当前的状态 -->
|
||||||
<uses-permission android:name="android.permission.READ_PHONE_STATE" /> <!-- 读取缓存数据 -->
|
<uses-permission android:name="android.permission.READ_PHONE_STATE" /> <!-- 读取缓存数据 -->
|
||||||
<!-- 蓝牙扫描权限 -->
|
<!-- 蓝牙扫描权限 -->
|
||||||
@@ -85,8 +86,7 @@
|
|||||||
android:name="android.permission.BLUETOOTH_SCAN"
|
android:name="android.permission.BLUETOOTH_SCAN"
|
||||||
android:usesPermissionFlags="neverForLocation"
|
android:usesPermissionFlags="neverForLocation"
|
||||||
tools:targetApi="s" />
|
tools:targetApi="s" />
|
||||||
<uses-permission android:name="android.permission.BLUETOOTH_CONNECT" /> <!-- BLUETOOTH permissions are added by lib_dfu module. -->
|
<uses-permission android:name="android.permission.BLUETOOTH_CONNECT" />
|
||||||
<uses-permission android:name="android.permission.FOREGROUND_SERVICE" />
|
|
||||||
<uses-permission android:name="android.permission.FOREGROUND_SERVICE_CONNECTED_DEVICE" /> <!-- 指定微信包名 -->
|
<uses-permission android:name="android.permission.FOREGROUND_SERVICE_CONNECTED_DEVICE" /> <!-- 指定微信包名 -->
|
||||||
<queries>
|
<queries>
|
||||||
<package android:name="com.tencent.mm" />
|
<package android:name="com.tencent.mm" />
|
||||||
@@ -105,6 +105,9 @@
|
|||||||
android:usesCleartextTraffic="true"
|
android:usesCleartextTraffic="true"
|
||||||
tools:replace="android:supportsRtl"
|
tools:replace="android:supportsRtl"
|
||||||
tools:targetApi="n">
|
tools:targetApi="n">
|
||||||
|
<activity
|
||||||
|
android:name=".ui.activity.device.InitializingDeviceActivity"
|
||||||
|
android:exported="false" />
|
||||||
<activity
|
<activity
|
||||||
android:name=".ui.activity.device.set.PowerOffActivity"
|
android:name=".ui.activity.device.set.PowerOffActivity"
|
||||||
android:exported="false"
|
android:exported="false"
|
||||||
|
|||||||
@@ -1,7 +1,11 @@
|
|||||||
package com.abbidot.tracker.adapter
|
package com.abbidot.tracker.adapter
|
||||||
|
|
||||||
import android.content.Context
|
import android.content.Context
|
||||||
|
import android.content.res.ColorStateList
|
||||||
|
import android.text.TextUtils
|
||||||
import android.view.View
|
import android.view.View
|
||||||
|
import androidx.core.content.ContextCompat
|
||||||
|
import androidx.core.graphics.toColorInt
|
||||||
import com.abbidot.baselibrary.list.BaseRecyclerAdapter
|
import com.abbidot.baselibrary.list.BaseRecyclerAdapter
|
||||||
import com.abbidot.baselibrary.list.RecyclerViewHolder
|
import com.abbidot.baselibrary.list.RecyclerViewHolder
|
||||||
import com.abbidot.baselibrary.util.Utils
|
import com.abbidot.baselibrary.util.Utils
|
||||||
@@ -9,6 +13,8 @@ import com.abbidot.tracker.R
|
|||||||
import com.abbidot.tracker.bean.PackageBean
|
import com.abbidot.tracker.bean.PackageBean
|
||||||
import com.abbidot.tracker.constant.ConstantInt
|
import com.abbidot.tracker.constant.ConstantInt
|
||||||
import com.abbidot.tracker.constant.ConstantString
|
import com.abbidot.tracker.constant.ConstantString
|
||||||
|
import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundButtonDrawable
|
||||||
|
import com.qmuiteam.qmui.widget.roundwidget.QMUIRoundRelativeLayout
|
||||||
|
|
||||||
/**
|
/**
|
||||||
*Created by .yzq on 2024/8/6/006.
|
*Created by .yzq on 2024/8/6/006.
|
||||||
@@ -51,6 +57,10 @@ class ChoosePlanAdapter(
|
|||||||
|
|
||||||
|
|
||||||
getView(R.id.ll_choose_plan_item_discount_percent).let {
|
getView(R.id.ll_choose_plan_item_discount_percent).let {
|
||||||
|
it.visibility = if (item.popularType == ConstantInt.Type1) View.INVISIBLE
|
||||||
|
else View.INVISIBLE
|
||||||
|
}
|
||||||
|
getView(R.id.iv_choose_plan_item_popular_image).let {
|
||||||
it.visibility = if (item.popularType == ConstantInt.Type1) View.VISIBLE
|
it.visibility = if (item.popularType == ConstantInt.Type1) View.VISIBLE
|
||||||
else View.INVISIBLE
|
else View.INVISIBLE
|
||||||
}
|
}
|
||||||
@@ -62,6 +72,44 @@ class ChoosePlanAdapter(
|
|||||||
if (item.popularType == ConstantInt.Type1) it.visibility = View.GONE
|
if (item.popularType == ConstantInt.Type1) it.visibility = View.GONE
|
||||||
else it.visibility = View.GONE
|
else it.visibility = View.GONE
|
||||||
}
|
}
|
||||||
|
|
||||||
|
(getView(R.id.rl_choose_plan_item_price) as QMUIRoundRelativeLayout).let {
|
||||||
|
(it.background as QMUIRoundButtonDrawable).let { drawable ->
|
||||||
|
val bgColor = if (TextUtils.isEmpty(item.bottomBgColor)) {
|
||||||
|
ContextCompat.getColor(mContext, R.color.tracker_manage_bg_color)
|
||||||
|
} else {
|
||||||
|
item.bottomBgColor.toColorInt()
|
||||||
|
}
|
||||||
|
drawable.setBgData(ColorStateList.valueOf(bgColor))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
getTextView(R.id.tv_choose_plan_item_power).let {
|
||||||
|
it.visibility = if (item.list.isNullOrEmpty()) View.GONE
|
||||||
|
else {
|
||||||
|
var str = getManyLanguageLimitDec(item.listTitleCode)
|
||||||
|
if (TextUtils.isEmpty(str)) {
|
||||||
|
for (i in 0 until item.list!!.size) {
|
||||||
|
val packageDec = item.list!![i]
|
||||||
|
str += "${i + 1}.${packageDec.title}"
|
||||||
|
if (i != item.list!!.size - 1) {
|
||||||
|
str += "\n"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
it.text = str
|
||||||
|
View.VISIBLE
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private fun getManyLanguageLimitDec(nameCode: Int): String {
|
||||||
|
return when (nameCode) {
|
||||||
|
ConstantInt.Type1 -> mContext.getString(R.string.txt_package_permission1)
|
||||||
|
ConstantInt.Type2 -> mContext.getString(R.string.txt_package_permission2)
|
||||||
|
ConstantInt.Type3 -> mContext.getString(R.string.txt_package_permission3)
|
||||||
|
else -> ""
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -24,5 +24,9 @@ data class PackageBean(
|
|||||||
var planTimeMonthsCount: Int,
|
var planTimeMonthsCount: Int,
|
||||||
var everyMonthSafeFee: Double,
|
var everyMonthSafeFee: Double,
|
||||||
var billedMode: String,
|
var billedMode: String,
|
||||||
var selected: Boolean
|
var selected: Boolean,
|
||||||
|
var bottomBgColor: String,
|
||||||
|
var listTitleCode: Int,
|
||||||
|
var planNameCode: Int,
|
||||||
|
var list: MutableList<PackageBenefitsBean>?
|
||||||
) : Parcelable
|
) : Parcelable
|
||||||
|
|||||||
@@ -1,8 +1,12 @@
|
|||||||
package com.abbidot.tracker.bean
|
package com.abbidot.tracker.bean
|
||||||
|
|
||||||
|
import android.os.Parcelable
|
||||||
|
import kotlinx.parcelize.Parcelize
|
||||||
|
|
||||||
/**
|
/**
|
||||||
*Created by .yzq on 2024/9/5/005.
|
*Created by .yzq on 2024/9/5/005.
|
||||||
* @link
|
* @link
|
||||||
* @description:
|
* @description:
|
||||||
*/
|
*/
|
||||||
data class PackageBenefitsBean(var title: String, var status: Int, var titleCode: Int)
|
@Parcelize
|
||||||
|
data class PackageBenefitsBean(var title: String, var status: Int, var titleCode: Int) : Parcelable
|
||||||
|
|||||||
@@ -98,11 +98,9 @@ class UserProfileActivity :
|
|||||||
ilUserProfileEmailLayout.ivInputRepresentImage
|
ilUserProfileEmailLayout.ivInputRepresentImage
|
||||||
)
|
)
|
||||||
|
|
||||||
mUploadImageUrl = MMKVUtil.getString(MMKVKey.HeadUrl)
|
// mUploadImageUrl = MMKVUtil.getString(MMKVKey.HeadUrl)
|
||||||
ViewUtil.instance.imageLoadUrl(
|
ViewUtil.instance.imageLoadUrl(
|
||||||
ilUserProfileHeadLayout.ilPetProfileHead.appHeadImage,
|
ilUserProfileHeadLayout.ilPetProfileHead.appHeadImage, "", R.drawable.pic_avatar_df
|
||||||
mUploadImageUrl,
|
|
||||||
R.drawable.pic_avatar_df
|
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -0,0 +1,52 @@
|
|||||||
|
package com.abbidot.tracker.ui.activity.device
|
||||||
|
|
||||||
|
import android.content.Intent
|
||||||
|
import com.abbidot.tracker.R
|
||||||
|
import com.abbidot.tracker.base.BaseActivity
|
||||||
|
import com.abbidot.tracker.bean.PetBean
|
||||||
|
import com.abbidot.tracker.constant.ConstantInt
|
||||||
|
import com.abbidot.tracker.constant.ConstantString
|
||||||
|
import com.abbidot.tracker.databinding.ActivityInitializingDeviceBinding
|
||||||
|
import com.abbidot.tracker.ui.activity.device.wifi.AddWifiPowerZone1Activity
|
||||||
|
import com.abbidot.tracker.util.Util
|
||||||
|
|
||||||
|
class InitializingDeviceActivity :
|
||||||
|
BaseActivity<ActivityInitializingDeviceBinding>(ActivityInitializingDeviceBinding::inflate) {
|
||||||
|
|
||||||
|
private var mPetBean: PetBean? = null
|
||||||
|
private var isFirstBind = false
|
||||||
|
private var mDeviceType = ConstantInt.Type1
|
||||||
|
|
||||||
|
override fun getTopBar() = null
|
||||||
|
|
||||||
|
override fun initData() {
|
||||||
|
super.initData()
|
||||||
|
|
||||||
|
intent.extras?.apply {
|
||||||
|
isFirstBind = getBoolean(ConstantString.isFirstBind, false)
|
||||||
|
mPetBean = Util.getParcelableAdaptive(intent, ConstantString.Pet, PetBean::class.java)
|
||||||
|
mDeviceType = getInt(ConstantString.Type, ConstantInt.Type1)
|
||||||
|
}
|
||||||
|
|
||||||
|
mViewBinding.apply {
|
||||||
|
val str = if (mDeviceType == ConstantInt.Type2) {
|
||||||
|
tvPaySuccessInitDeviceDec.setText(R.string.txt_init_g40_dec)
|
||||||
|
ivInitDeviceFlashImage.setImageResource(R.drawable.icon_init_g40_flash_image)
|
||||||
|
String.format(getString(R.string.txt_init_device_tip), "1-5")
|
||||||
|
} else String.format(getString(R.string.txt_init_device_tip), "15-20")
|
||||||
|
tvPaySuccessInitDeviceTip.text = str
|
||||||
|
|
||||||
|
btnPaySuccessInitDeviceNext.setOnClickListener {
|
||||||
|
val intent = Intent(mContext, AddWifiPowerZone1Activity::class.java)
|
||||||
|
intent.putExtra(ConstantString.Pet, mPetBean)
|
||||||
|
intent.putExtra(ConstantString.isFirstBind, isFirstBind)
|
||||||
|
startActivityFinish(intent)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun leftBackOnClick() {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@@ -25,7 +25,7 @@ import com.abbidot.tracker.constant.ConstantString
|
|||||||
import com.abbidot.tracker.constant.GetResultCallback
|
import com.abbidot.tracker.constant.GetResultCallback
|
||||||
import com.abbidot.tracker.databinding.ActivityPaymentSuccessBinding
|
import com.abbidot.tracker.databinding.ActivityPaymentSuccessBinding
|
||||||
import com.abbidot.tracker.deprecated.ui.activity.vm.AddTrackerDeviceViewModel
|
import com.abbidot.tracker.deprecated.ui.activity.vm.AddTrackerDeviceViewModel
|
||||||
import com.abbidot.tracker.ui.activity.device.wifi.AddWifiPowerZone1Activity
|
import com.abbidot.tracker.ui.activity.device.InitializingDeviceActivity
|
||||||
import com.abbidot.tracker.util.Util
|
import com.abbidot.tracker.util.Util
|
||||||
import com.abbidot.tracker.util.ViewUtil
|
import com.abbidot.tracker.util.ViewUtil
|
||||||
import com.abbidot.tracker.util.bluetooth.SRBleCmdUtil
|
import com.abbidot.tracker.util.bluetooth.SRBleCmdUtil
|
||||||
@@ -221,9 +221,12 @@ class PaymentSuccessActivity :
|
|||||||
mViewBinding.root.postDelayed({
|
mViewBinding.root.postDelayed({
|
||||||
MMKVUtil.putInt(MMKVKey.isBindPet, ConstantInt.isBind)
|
MMKVUtil.putInt(MMKVKey.isBindPet, ConstantInt.isBind)
|
||||||
mPetBean?.apply {
|
mPetBean?.apply {
|
||||||
val intent = Intent(mContext, AddWifiPowerZone1Activity::class.java)
|
val intent = Intent(mContext, InitializingDeviceActivity::class.java)
|
||||||
intent.putExtra(ConstantString.Pet, this)
|
intent.putExtra(ConstantString.Pet, this)
|
||||||
intent.putExtra(ConstantString.isFirstBind, true)
|
intent.putExtra(ConstantString.isFirstBind, true)
|
||||||
|
mPayResult?.let { p ->
|
||||||
|
intent.putExtra(ConstantString.Type, p.deviceType)
|
||||||
|
}
|
||||||
startActivity(intent)
|
startActivity(intent)
|
||||||
}
|
}
|
||||||
}, 1500)
|
}, 1500)
|
||||||
|
|||||||
@@ -113,11 +113,11 @@ class HomeMapGoogleMapFragmentV3 : BaseGoogleMapFragment() {
|
|||||||
layout.tvPetLocationUpdateTimeFormat.visibility =
|
layout.tvPetLocationUpdateTimeFormat.visibility =
|
||||||
if (powerSwitch == ConstantInt.Type2) View.GONE
|
if (powerSwitch == ConstantInt.Type2) View.GONE
|
||||||
else {
|
else {
|
||||||
if (Util.isTimeoutReport(updateTime, gnssInterval)) {
|
if (Util.isTimeoutReport(latLonUpdateTime, gnssInterval)) {
|
||||||
layout.tvPetLocationUpdateTimeFormat.text = String.format(
|
layout.tvPetLocationUpdateTimeFormat.text = String.format(
|
||||||
getString(R.string.txt_location_ago),
|
getString(R.string.txt_location_ago),
|
||||||
Utils.getTimeDifference(
|
Utils.getTimeDifference(
|
||||||
updateTime * 1000, System.currentTimeMillis()
|
latLonUpdateTime * 1000, System.currentTimeMillis()
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
View.VISIBLE
|
View.VISIBLE
|
||||||
|
|||||||
@@ -48,6 +48,7 @@ import androidx.recyclerview.widget.LinearLayoutManager
|
|||||||
import androidx.recyclerview.widget.RecyclerView
|
import androidx.recyclerview.widget.RecyclerView
|
||||||
import androidx.viewpager2.widget.ViewPager2
|
import androidx.viewpager2.widget.ViewPager2
|
||||||
import coil.load
|
import coil.load
|
||||||
|
import coil.request.CachePolicy
|
||||||
import coil.transform.Transformation
|
import coil.transform.Transformation
|
||||||
import com.abbidot.baselibrary.constant.ConState
|
import com.abbidot.baselibrary.constant.ConState
|
||||||
import com.abbidot.baselibrary.constant.MMKVKey
|
import com.abbidot.baselibrary.constant.MMKVKey
|
||||||
@@ -86,6 +87,7 @@ import com.qmuiteam.qmui.alpha.QMUIAlphaImageButton
|
|||||||
import com.qmuiteam.qmui.util.QMUIDisplayHelper
|
import com.qmuiteam.qmui.util.QMUIDisplayHelper
|
||||||
import com.qmuiteam.qmui.widget.dialog.QMUIBottomSheet.BottomListSheetBuilder
|
import com.qmuiteam.qmui.widget.dialog.QMUIBottomSheet.BottomListSheetBuilder
|
||||||
import com.qmuiteam.qmui.widget.grouplist.QMUICommonListItemView
|
import com.qmuiteam.qmui.widget.grouplist.QMUICommonListItemView
|
||||||
|
import okhttp3.internal.http2.Header
|
||||||
import java.util.Calendar
|
import java.util.Calendar
|
||||||
|
|
||||||
|
|
||||||
@@ -641,10 +643,19 @@ class ViewUtil private constructor() {
|
|||||||
error(errorImageResId)
|
error(errorImageResId)
|
||||||
//淡入淡出的动画时间
|
//淡入淡出的动画时间
|
||||||
// crossfade(2000)
|
// crossfade(2000)
|
||||||
// memoryCachePolicy(CachePolicy.ENABLED)//设置内存的缓存策略
|
diskCachePolicy(CachePolicy.ENABLED)//设置磁盘的缓存策略
|
||||||
// diskCachePolicy(CachePolicy.ENABLED)//设置磁盘的缓存策略
|
memoryCachePolicy(CachePolicy.ENABLED)//设置内存的缓存策略
|
||||||
// networkCachePolicy(CachePolicy.ENABLED)//设置网络的缓存策略
|
networkCachePolicy(CachePolicy.ENABLED)//设置网络的缓存策略
|
||||||
// OkHttpClient.Builder().cache(CoilUtils.createDefaultCache(context))
|
// val okHttpCache = Cache(
|
||||||
|
// context.cacheDir.resolve("okhttp_cache"), 50 * 1024 * 1024L
|
||||||
|
// )
|
||||||
|
// OkHttpClient.Builder().cache(okHttpCache)
|
||||||
|
|
||||||
|
// 请求优先 WebP 更小更快
|
||||||
|
Header("Accept", "image/webp,image/jpeg;q=0.8")
|
||||||
|
if (imageView.width > 0 && imageView.height > 0) {
|
||||||
|
size(imageView.width, imageView.height)// 按View实际大小解码
|
||||||
|
}
|
||||||
transformations(transformations.toList())
|
transformations(transformations.toList())
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
BIN
app/src/main/res/drawable-xhdpi/icon_init_device_dec_image.png
Normal file
|
After Width: | Height: | Size: 7.0 KiB |
BIN
app/src/main/res/drawable-xhdpi/icon_init_g30_flash_image.png
Normal file
|
After Width: | Height: | Size: 12 KiB |
BIN
app/src/main/res/drawable-xhdpi/icon_init_g40_flash_image.png
Normal file
|
After Width: | Height: | Size: 18 KiB |
BIN
app/src/main/res/drawable-xhdpi/icon_popular_package_image.png
Normal file
|
After Width: | Height: | Size: 3.7 KiB |
BIN
app/src/main/res/drawable-xxhdpi/icon_init_device_dec_image.png
Normal file
|
After Width: | Height: | Size: 11 KiB |
BIN
app/src/main/res/drawable-xxhdpi/icon_init_g30_flash_image.png
Normal file
|
After Width: | Height: | Size: 24 KiB |
BIN
app/src/main/res/drawable-xxhdpi/icon_init_g40_flash_image.png
Normal file
|
After Width: | Height: | Size: 34 KiB |
BIN
app/src/main/res/drawable-xxhdpi/icon_popular_package_image.png
Normal file
|
After Width: | Height: | Size: 5.9 KiB |
BIN
app/src/main/res/drawable-xxxhdpi/icon_init_device_dec_image.png
Normal file
|
After Width: | Height: | Size: 18 KiB |
BIN
app/src/main/res/drawable-xxxhdpi/icon_init_g30_flash_image.png
Normal file
|
After Width: | Height: | Size: 37 KiB |
BIN
app/src/main/res/drawable-xxxhdpi/icon_init_g40_flash_image.png
Normal file
|
After Width: | Height: | Size: 58 KiB |
BIN
app/src/main/res/drawable-xxxhdpi/icon_popular_package_image.png
Normal file
|
After Width: | Height: | Size: 8.6 KiB |
61
app/src/main/res/layout/activity_initializing_device.xml
Normal file
@@ -0,0 +1,61 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<androidx.appcompat.widget.LinearLayoutCompat xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
|
xmlns:app="http://schemas.android.com/apk/res-auto"
|
||||||
|
xmlns:tools="http://schemas.android.com/tools"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="match_parent"
|
||||||
|
android:gravity="center_horizontal"
|
||||||
|
android:orientation="vertical"
|
||||||
|
tools:context=".ui.activity.device.InitializingDeviceActivity">
|
||||||
|
|
||||||
|
<com.abbidot.tracker.widget.TypefaceTextView
|
||||||
|
style="@style/my_second_bold_title_TextView_style"
|
||||||
|
android:layout_marginTop="@dimen/dp_100"
|
||||||
|
android:text="@string/txt_init_device" />
|
||||||
|
|
||||||
|
<com.abbidot.tracker.widget.TypefaceTextView
|
||||||
|
android:id="@+id/tv_pay_success_init_device_tip"
|
||||||
|
style="@style/my_TextView_style_v2"
|
||||||
|
android:layout_marginHorizontal="@dimen/dp_42"
|
||||||
|
android:layout_marginTop="@dimen/dp_12"
|
||||||
|
android:text="@string/txt_init_device_tip"
|
||||||
|
android:textColor="@color/select_color3"
|
||||||
|
android:textSize="@dimen/textSize14"
|
||||||
|
app:lineHeight="@dimen/textSize20"
|
||||||
|
app:typeface="@string/roboto_regular_font" />
|
||||||
|
|
||||||
|
<androidx.appcompat.widget.AppCompatImageView
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_marginTop="@dimen/dp_50"
|
||||||
|
android:src="@drawable/icon_init_device_dec_image" />
|
||||||
|
|
||||||
|
<com.abbidot.tracker.widget.TypefaceTextView
|
||||||
|
android:id="@+id/tv_pay_success_init_device_dec"
|
||||||
|
style="@style/my_TextView_style_v2"
|
||||||
|
android:layout_marginTop="@dimen/dp_26"
|
||||||
|
android:gravity="start"
|
||||||
|
android:text="@string/txt_init_device_dec"
|
||||||
|
android:textSize="@dimen/textSize14"
|
||||||
|
app:lineHeight="@dimen/textSize26"
|
||||||
|
app:typeface="@string/roboto_regular_font" />
|
||||||
|
|
||||||
|
<androidx.appcompat.widget.AppCompatImageView
|
||||||
|
android:id="@+id/iv_init_device_flash_image"
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_marginTop="@dimen/dp_30"
|
||||||
|
android:src="@drawable/icon_init_g30_flash_image" />
|
||||||
|
|
||||||
|
<View
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="0dp"
|
||||||
|
android:layout_weight="1" />
|
||||||
|
|
||||||
|
<com.abbidot.tracker.widget.TypefaceButton
|
||||||
|
android:id="@+id/btn_pay_success_init_device_next"
|
||||||
|
style="@style/my_match_RoundRect_Button_style"
|
||||||
|
android:text="@string/txt_continue"
|
||||||
|
app:qmui_radius="@dimen/dp_64"
|
||||||
|
app:typeface="@string/roboto_bold_font" />
|
||||||
|
</androidx.appcompat.widget.LinearLayoutCompat>
|
||||||
@@ -30,6 +30,7 @@
|
|||||||
android:textSize="@dimen/textSize16"
|
android:textSize="@dimen/textSize16"
|
||||||
android:textStyle="bold" />
|
android:textStyle="bold" />
|
||||||
|
|
||||||
|
|
||||||
<com.qmuiteam.qmui.widget.roundwidget.QMUIRoundLinearLayout
|
<com.qmuiteam.qmui.widget.roundwidget.QMUIRoundLinearLayout
|
||||||
android:id="@+id/ll_choose_plan_item_discount_percent"
|
android:id="@+id/ll_choose_plan_item_discount_percent"
|
||||||
android:layout_width="wrap_content"
|
android:layout_width="wrap_content"
|
||||||
@@ -61,46 +62,79 @@
|
|||||||
app:typeface="@string/roboto_bold_font" />
|
app:typeface="@string/roboto_bold_font" />
|
||||||
</com.qmuiteam.qmui.widget.roundwidget.QMUIRoundLinearLayout>
|
</com.qmuiteam.qmui.widget.roundwidget.QMUIRoundLinearLayout>
|
||||||
|
|
||||||
<com.abbidot.tracker.widget.TypefaceTextView
|
<androidx.appcompat.widget.AppCompatImageView
|
||||||
android:id="@+id/tv_choose_plan_item_money"
|
android:id="@+id/iv_choose_plan_item_popular_image"
|
||||||
style="@style/my_TextView_style_v2"
|
android:layout_width="wrap_content"
|
||||||
android:layout_below="@id/tv_choose_plan_item_name"
|
android:layout_height="wrap_content"
|
||||||
android:layout_alignStart="@id/tv_choose_plan_item_name"
|
android:layout_alignParentEnd="true"
|
||||||
android:layout_marginVertical="@dimen/dp_22"
|
android:layout_marginTop="@dimen/dp_12"
|
||||||
android:text="@string/txt_money_unit"
|
android:layout_marginEnd="@dimen/dp_18"
|
||||||
android:textColor="@color/select_color"
|
android:src="@drawable/icon_popular_package_image" />
|
||||||
android:textSize="@dimen/textSize26"
|
|
||||||
android:textStyle="bold" />
|
|
||||||
|
|
||||||
<com.abbidot.tracker.widget.TypefaceTextView
|
<com.abbidot.tracker.widget.TypefaceTextView
|
||||||
android:id="@+id/tv_choose_plan_item_unit"
|
android:id="@+id/tv_choose_plan_item_power"
|
||||||
style="@style/my_TextView_style_v2"
|
style="@style/my_TextView_style_v2"
|
||||||
android:layout_alignBaseline="@id/tv_choose_plan_item_money"
|
android:layout_below="@id/iv_choose_plan_item_popular_image"
|
||||||
android:layout_alignTop="@id/tv_choose_plan_item_money"
|
android:layout_alignStart="@id/tv_choose_plan_item_name"
|
||||||
android:layout_toEndOf="@id/tv_choose_plan_item_money"
|
android:textSize="@dimen/textSize12"
|
||||||
android:text="@string/txt_per_month"
|
android:gravity="start"
|
||||||
android:textSize="@dimen/textSize14"
|
android:visibility="gone"
|
||||||
app:typeface="@string/roboto_regular_font" />
|
app:typeface="@string/roboto_regular_font" />
|
||||||
|
|
||||||
|
<com.qmuiteam.qmui.widget.roundwidget.QMUIRoundRelativeLayout
|
||||||
|
android:id="@+id/rl_choose_plan_item_price"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_below="@+id/tv_choose_plan_item_power"
|
||||||
|
android:layout_marginTop="@dimen/dp_14"
|
||||||
|
app:qmui_backgroundColor="@color/tracker_manage_bg_color"
|
||||||
|
app:qmui_borderColor="@color/transparent"
|
||||||
|
app:qmui_radiusBottomLeft="@dimen/dp_20"
|
||||||
|
app:qmui_radiusBottomRight="@dimen/dp_20">
|
||||||
|
|
||||||
<com.abbidot.tracker.widget.TypefaceTextView
|
<com.abbidot.tracker.widget.TypefaceTextView
|
||||||
android:id="@+id/tv_choose_plan_item_billed_money"
|
android:id="@+id/tv_choose_plan_item_money"
|
||||||
style="@style/my_TextView_style_v2"
|
style="@style/my_TextView_style_v2"
|
||||||
android:layout_alignBaseline="@id/tv_choose_plan_item_money"
|
android:layout_below="@id/tv_choose_plan_item_name"
|
||||||
android:layout_alignEnd="@id/ll_choose_plan_item_discount_percent"
|
android:layout_marginVertical="@dimen/dp_22"
|
||||||
android:text="@string/txt_billed_annually"
|
android:layout_marginStart="@dimen/dp_18"
|
||||||
android:textColor="@color/select_color"
|
android:text="@string/txt_money_unit"
|
||||||
android:textSize="@dimen/textSize10" />
|
android:textColor="@color/select_color"
|
||||||
|
android:textSize="@dimen/textSize26"
|
||||||
|
android:textStyle="bold" />
|
||||||
|
|
||||||
|
<com.abbidot.tracker.widget.TypefaceTextView
|
||||||
|
android:id="@+id/tv_choose_plan_item_unit"
|
||||||
|
style="@style/my_TextView_style_v2"
|
||||||
|
android:layout_alignBaseline="@id/tv_choose_plan_item_money"
|
||||||
|
android:layout_alignTop="@id/tv_choose_plan_item_money"
|
||||||
|
android:layout_toEndOf="@id/tv_choose_plan_item_money"
|
||||||
|
android:text="@string/txt_per_month"
|
||||||
|
android:textSize="@dimen/textSize14"
|
||||||
|
app:typeface="@string/roboto_regular_font" />
|
||||||
|
|
||||||
|
|
||||||
|
<com.abbidot.tracker.widget.TypefaceTextView
|
||||||
|
android:id="@+id/tv_choose_plan_item_billed_money"
|
||||||
|
style="@style/my_TextView_style_v2"
|
||||||
|
android:layout_alignBaseline="@id/tv_choose_plan_item_money"
|
||||||
|
android:layout_alignParentEnd="true"
|
||||||
|
android:layout_marginEnd="@dimen/dp_18"
|
||||||
|
android:text="@string/txt_billed_annually"
|
||||||
|
android:textColor="@color/select_color"
|
||||||
|
android:textSize="@dimen/textSize10" />
|
||||||
|
|
||||||
|
<com.abbidot.tracker.widget.TypefaceTextView
|
||||||
|
android:id="@+id/tv_choose_plan_item_plan_money"
|
||||||
|
style="@style/my_TextView_style_v2"
|
||||||
|
android:layout_above="@id/tv_choose_plan_item_billed_money"
|
||||||
|
android:layout_alignEnd="@id/tv_choose_plan_item_billed_money"
|
||||||
|
android:text="@string/txt_money_unit"
|
||||||
|
android:textColor="@color/select_color"
|
||||||
|
android:textSize="@dimen/textSize16"
|
||||||
|
android:textStyle="bold" />
|
||||||
|
</com.qmuiteam.qmui.widget.roundwidget.QMUIRoundRelativeLayout>
|
||||||
|
|
||||||
<com.abbidot.tracker.widget.TypefaceTextView
|
|
||||||
android:id="@+id/tv_choose_plan_item_plan_money"
|
|
||||||
style="@style/my_TextView_style_v2"
|
|
||||||
android:layout_above="@id/tv_choose_plan_item_billed_money"
|
|
||||||
android:layout_alignEnd="@id/tv_choose_plan_item_billed_money"
|
|
||||||
android:text="@string/txt_money_unit"
|
|
||||||
android:textColor="@color/select_color"
|
|
||||||
android:textSize="@dimen/textSize16"
|
|
||||||
android:textStyle="bold" />
|
|
||||||
|
|
||||||
</RelativeLayout>
|
</RelativeLayout>
|
||||||
|
|
||||||
@@ -112,7 +146,6 @@
|
|||||||
android:layout_width="wrap_content"
|
android:layout_width="wrap_content"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:layout_marginStart="@dimen/dp_16"
|
android:layout_marginStart="@dimen/dp_16"
|
||||||
android:visibility="gone"
|
|
||||||
app:cardBackgroundColor="@color/select_color2"
|
app:cardBackgroundColor="@color/select_color2"
|
||||||
app:cardCornerRadius="@dimen/dp_50"
|
app:cardCornerRadius="@dimen/dp_50"
|
||||||
app:cardElevation="@dimen/dp_4">
|
app:cardElevation="@dimen/dp_4">
|
||||||
|
|||||||
@@ -979,6 +979,7 @@
|
|||||||
<string name="txt_fence_saved">espeichert. Aktiv, wenn online.</string>
|
<string name="txt_fence_saved">espeichert. Aktiv, wenn online.</string>
|
||||||
<string name="txt_renewal_years">Verlängerung: $%s / %s Jahre am %s</string>
|
<string name="txt_renewal_years">Verlängerung: $%s / %s Jahre am %s</string>
|
||||||
<string name="txt_renewal_months">Verlängerung: $%s / %s Monate am %s</string>
|
<string name="txt_renewal_months">Verlängerung: $%s / %s Monate am %s</string>
|
||||||
|
<string name="map_baidu_map">Baidu Maps</string>
|
||||||
<string name ="txt_refund_expired">Die Rückerstattungsfrist ist abgelaufen</string>
|
<string name ="txt_refund_expired">Die Rückerstattungsfrist ist abgelaufen</string>
|
||||||
<string name ="txt_refund_policy">Rückerstattungsrichtlinie\n</string>
|
<string name ="txt_refund_policy">Rückerstattungsrichtlinie\n</string>
|
||||||
<string name ="txt_automatic_refund">Automatische Rückerstattung (innerhalb von 48 Stunden)</string>
|
<string name ="txt_automatic_refund">Automatische Rückerstattung (innerhalb von 48 Stunden)</string>
|
||||||
@@ -988,5 +989,26 @@
|
|||||||
<string name ="txt_no_refund_dec">Abonnements, die älter als 30 Tage sind, können nicht erstattet werden.</string>
|
<string name ="txt_no_refund_dec">Abonnements, die älter als 30 Tage sind, können nicht erstattet werden.</string>
|
||||||
<string name ="txt_no_refund">Keine Rückerstattung nach 30 Tagen</string>
|
<string name ="txt_no_refund">Keine Rückerstattung nach 30 Tagen</string>
|
||||||
<string name ="txt_display_dashed_line">Gestrichelte Linie anzeigen</string>
|
<string name ="txt_display_dashed_line">Gestrichelte Linie anzeigen</string>
|
||||||
|
<string name="txt_first_use">Erstmalige Verwendung</string>
|
||||||
|
<string name="txt_daily_use">Tägliche Verwendung</string>
|
||||||
|
<string name="txt_sleep_mode">Schlafmodus</string>
|
||||||
|
<string name="txt_sleep_mode_help">15 Minuten keine Bewegung → Schlafmodus. Automatisches Aufwachen bei Bewegung. Batterieaktualisierung alle 24 Stunden</string>
|
||||||
|
<string name="txt_wifi_zone_home">WiFi-Zone (Zuhause)</string>
|
||||||
|
<string name="txt_wifi_zone_home_help">Mit heimischem WLAN verbinden – GPS aus → spart Batterie. Aktualisierung ca. alle 60 Minuten</string>
|
||||||
|
<string name="txt_gps_update_help">Haustier > Tracker > GPS-Update: 3–15 min wählen. Kurzes Intervall = höherer Batterieverbrauch. Standard: 5 min</string>
|
||||||
|
<string name="txt_set_fence_type">Zaun-Typ festlegen</string>
|
||||||
|
<string name="txt_fence_type_help">Sicherer Bereich oder Verbotsbereich</string>
|
||||||
|
<string name="txt_set_boundary">Grenze festlegen</string>
|
||||||
|
<string name="txt_enable_set_notify">Alarme aktivieren in: Konto > Einstellungen > Benachrichtigungen</string>
|
||||||
|
<string name="txt_edit_delete_fence">Zaun bearbeiten oder löschen unter „Verwalten“</string>
|
||||||
|
<string name="txt_total">Gesamt</string>
|
||||||
|
<string name="txt_location_ago">(Vor %s)</string>
|
||||||
|
<string name="txt_init_device_tip">Die Erstinstallation kann %s Minuten dauern</string>
|
||||||
|
<string name="txt_init_device_dec">1. Gehen Sie mit dem Gerät nach draußen\n2. Warten Sie auf LTE- und GPS-Verbindung\n3. Blaues Blinken = LTE und GPS aktiv</string>
|
||||||
|
<string name="txt_init_g40_dec">1. Gehen Sie mit dem Gerät nach draußen\n2. Warten Sie auf LTE- und GPS-Verbindung\n3. Grünes Blinken = LTE und GPS aktiv</string>
|
||||||
|
<string name="txt_init_device">Gerät wird initialisiert</string>
|
||||||
|
<string name="txt_package_permission1">1. Flexibler kurzfristiger Schutz\n2.Standard-Kundensupport</string>
|
||||||
|
<string name="txt_package_permission2">1.1 Geräteaustausch inbegriffen\n2. Dedizierter Kundensupport\n3. Jährlicher Schutzumfang</string>
|
||||||
|
<string name="txt_package_permission3">1. VIP-Prioritätssupport\n2. Schneller Austauschservice (1x inbegriffen)\n3. Erweiterter Schutz\n4. Sorgenfreier Haustierschutz</string>
|
||||||
|
|
||||||
</resources>
|
</resources>
|
||||||
@@ -1023,6 +1023,7 @@
|
|||||||
<string name="txt_fence_saved">已保存,上线时生效。</string>
|
<string name="txt_fence_saved">已保存,上线时生效。</string>
|
||||||
<string name="txt_renewal_years">续订:$%s / %s 年,于 %s</string>
|
<string name="txt_renewal_years">续订:$%s / %s 年,于 %s</string>
|
||||||
<string name="txt_renewal_months">续订:$%s / %s 月,于 %s</string>
|
<string name="txt_renewal_months">续订:$%s / %s 月,于 %s</string>
|
||||||
|
<string name="map_baidu_map">百度地图</string>
|
||||||
<string name="txt_refund_expired">退款期限已过</string>
|
<string name="txt_refund_expired">退款期限已过</string>
|
||||||
<string name="txt_refund_policy">退款政策\n</string>
|
<string name="txt_refund_policy">退款政策\n</string>
|
||||||
<string name="txt_automatic_refund">自动退款(48小时内)</string>
|
<string name="txt_automatic_refund">自动退款(48小时内)</string>
|
||||||
@@ -1032,5 +1033,27 @@
|
|||||||
<string name="txt_no_refund_dec">超过30天的订阅不可退款。</string>
|
<string name="txt_no_refund_dec">超过30天的订阅不可退款。</string>
|
||||||
<string name="txt_no_refund">30天后不退款</string>
|
<string name="txt_no_refund">30天后不退款</string>
|
||||||
<string name="txt_display_dashed_line">显示虚线</string>
|
<string name="txt_display_dashed_line">显示虚线</string>
|
||||||
|
<string name="txt_first_use">首次使用</string>
|
||||||
|
<string name="txt_daily_use">日常使用</string>
|
||||||
|
<string name="txt_sleep_mode">休眠模式</string>
|
||||||
|
<string name="txt_sleep_mode_help">15分钟无移动 → 进入休眠模式。移动时自动唤醒。电量每24小时更新一次</string>
|
||||||
|
<string name="txt_wifi_zone_home">WiFi区域(家)</string>
|
||||||
|
<string name="txt_wifi_zone_home_help">连接家庭WiFi → GPS关闭 → 节省电池。约每60分钟更新一次</string>
|
||||||
|
<string name="txt_gps_update_help">宠物 > 追踪器 > GPS更新:选择3–15分钟。间隔越短,耗电越高。默认:5分钟</string>
|
||||||
|
<string name="txt_set_fence_type">设置围栏类型</string>
|
||||||
|
<string name="txt_fence_type_help">安全区域 或 禁区</string>
|
||||||
|
<string name="txt_set_boundary">设置边界</string>
|
||||||
|
<string name="txt_enable_set_notify">在“账户 > 设置 > 通知”中启用提醒</string>
|
||||||
|
<string name="txt_edit_delete_fence">在“管理”中编辑或删除围栏</string>
|
||||||
|
<string name="txt_total">总计</string>
|
||||||
|
<string name="txt_location_ago">(%s前)</string>
|
||||||
|
<string name="txt_init_device_tip">初始化设置可能需要 %s 分钟</string>
|
||||||
|
<string name="txt_init_device_dec">1. 携带设备到户外\n2. 等待 LTE 和 GPS 连接\n3. 蓝色闪烁 = LTE 和 GPS 已激活</string>
|
||||||
|
<string name="txt_init_g40_dec">1. 携带设备到户外\n2. 等待 LTE 和 GPS 连接\n3. 绿色闪烁 = LTE 和 GPS 已激活</string>
|
||||||
|
<string name="txt_init_device">正在初始化设备</string>
|
||||||
|
<string name="txt_package_permission1">1. 灵活的短期保障\n2. 标准客户支持</string>
|
||||||
|
<string name="txt_package_permission2">1.设备1次更换\n2. 专属客户支持\n3. 年度保障服务</string>
|
||||||
|
<string name="txt_package_permission3">1. VIP 优先支持\n2. 快速更换服务(含1次)\n3. 增强型保障\n4. 无忧宠物保护</string>
|
||||||
|
|
||||||
|
|
||||||
</resources>
|
</resources>
|
||||||
@@ -380,4 +380,5 @@
|
|||||||
<color name="grey_color_91">#B0B0B0</color>
|
<color name="grey_color_91">#B0B0B0</color>
|
||||||
<color name="grey_color_92">#758E94</color>
|
<color name="grey_color_92">#758E94</color>
|
||||||
<color name="orange_color5">#FF996E</color>
|
<color name="orange_color5">#FF996E</color>
|
||||||
|
<color name="orange_color6">#FEF6E4</color>
|
||||||
</resources>
|
</resources>
|
||||||
@@ -1037,7 +1037,7 @@
|
|||||||
<string name="txt_geofencing">Geofencing</string>
|
<string name="txt_geofencing">Geofencing</string>
|
||||||
<string name="txt_route_records">Route History Records</string>
|
<string name="txt_route_records">Route History Records</string>
|
||||||
<string name="txt_family_sharing">Family Members Sharing</string>
|
<string name="txt_family_sharing">Family Members Sharing</string>
|
||||||
<string name="txt_customer_support">Premium Customer Support</string>
|
<string name="txt_customer_support">30-days return guarantee</string>
|
||||||
<string name="txt_show_crash">The program has an exception and is about to exit</string>
|
<string name="txt_show_crash">The program has an exception and is about to exit</string>
|
||||||
<string name="txt_activate_subscribe">Activate Subscription</string>
|
<string name="txt_activate_subscribe">Activate Subscription</string>
|
||||||
<string name="txt_powered_off">Powered off</string>
|
<string name="txt_powered_off">Powered off</string>
|
||||||
@@ -1081,7 +1081,7 @@
|
|||||||
<string name="txt_fence_saved">Saved. Active when online.</string>
|
<string name="txt_fence_saved">Saved. Active when online.</string>
|
||||||
<string name="txt_renewal_years">Renewal: $%s/%s years on %s</string>
|
<string name="txt_renewal_years">Renewal: $%s/%s years on %s</string>
|
||||||
<string name="txt_renewal_months">Renewal: $%s/%s months on %s</string>
|
<string name="txt_renewal_months">Renewal: $%s/%s months on %s</string>
|
||||||
<string name="map_baidu_map">Baidu Map</string>
|
<string name="map_baidu_map">Baidu Maps</string>
|
||||||
<string name="txt_refund_expired">Refund period has expired</string>
|
<string name="txt_refund_expired">Refund period has expired</string>
|
||||||
<string name="txt_refund_policy">Refund Policy\n</string>
|
<string name="txt_refund_policy">Refund Policy\n</string>
|
||||||
<string name="txt_automatic_refund">Automatic Refund (Within 48 Hours)</string>
|
<string name="txt_automatic_refund">Automatic Refund (Within 48 Hours)</string>
|
||||||
@@ -1105,5 +1105,12 @@
|
|||||||
<string name="txt_edit_delete_fence">Edit or delete fence in Manage</string>
|
<string name="txt_edit_delete_fence">Edit or delete fence in Manage</string>
|
||||||
<string name="txt_total">Total</string>
|
<string name="txt_total">Total</string>
|
||||||
<string name="txt_location_ago">(%s ago)</string>
|
<string name="txt_location_ago">(%s ago)</string>
|
||||||
|
<string name="txt_init_device_tip">Initial setup may take %s minutes</string>
|
||||||
|
<string name="txt_init_device_dec">1. Move outdoors with device\n2. Wait for LTE & GPS connection\n3. Blue flashing = LTE & GPS active</string>
|
||||||
|
<string name="txt_init_g40_dec">1. Move outdoors with device\n2. Wait for LTE & GPS connection\n3. Green flashing = LTE & GPS active</string>
|
||||||
|
<string name="txt_init_device">Initializing Device</string>
|
||||||
|
<string name="txt_package_permission1">1.Flexible short-term protection\n2.Standard customer support</string>
|
||||||
|
<string name="txt_package_permission2">1.1 device replacement included\n2.Dedicated customer support\n3.Annual protection coverage</string>
|
||||||
|
<string name="txt_package_permission3">1.VIP priority support\n2.Fast replacement service (1 included)\n3.Enhanced protection\n4.Hassle-free pet protection</string>
|
||||||
|
|
||||||
</resources>
|
</resources>
|
||||||