1.订阅套餐新ui:增加套餐描述;修改价格区底色;Best 用皇冠图标代替;

2.新增Initializing Device界面
3.校对新增多语言字符
This commit is contained in:
yezhiqiu
2026-05-14 17:14:58 +08:00
parent 46c0a5b2a4
commit ca554656c5
28 changed files with 325 additions and 52 deletions

View File

@@ -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'

View File

@@ -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"

View File

@@ -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 -> ""
} }
} }
} }

View File

@@ -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

View File

@@ -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

View File

@@ -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
) )
} }

View File

@@ -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() {
}
}

View File

@@ -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)

View File

@@ -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

View File

@@ -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())
} }
} }

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 18 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 11 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 24 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 34 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 18 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 37 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 58 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.6 KiB

View 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>

View File

@@ -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">

View File

@@ -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: 315 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>

View File

@@ -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更新选择315分钟。间隔越短耗电越高。默认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>

View File

@@ -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>

View File

@@ -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 &amp; GPS connection\n3. Blue flashing = LTE &amp; GPS active</string>
<string name="txt_init_g40_dec">1. Move outdoors with device\n2. Wait for LTE &amp; GPS connection\n3. Green flashing = LTE &amp; 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>