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

@@ -1,7 +1,11 @@
package com.abbidot.tracker.adapter
import android.content.Context
import android.content.res.ColorStateList
import android.text.TextUtils
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.RecyclerViewHolder
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.constant.ConstantInt
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.
@@ -51,6 +57,10 @@ class ChoosePlanAdapter(
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
else View.INVISIBLE
}
@@ -62,6 +72,44 @@ class ChoosePlanAdapter(
if (item.popularType == ConstantInt.Type1) 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 everyMonthSafeFee: Double,
var billedMode: String,
var selected: Boolean
var selected: Boolean,
var bottomBgColor: String,
var listTitleCode: Int,
var planNameCode: Int,
var list: MutableList<PackageBenefitsBean>?
) : Parcelable

View File

@@ -1,8 +1,12 @@
package com.abbidot.tracker.bean
import android.os.Parcelable
import kotlinx.parcelize.Parcelize
/**
*Created by .yzq on 2024/9/5/005.
* @link
* @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
)
mUploadImageUrl = MMKVUtil.getString(MMKVKey.HeadUrl)
// mUploadImageUrl = MMKVUtil.getString(MMKVKey.HeadUrl)
ViewUtil.instance.imageLoadUrl(
ilUserProfileHeadLayout.ilPetProfileHead.appHeadImage,
mUploadImageUrl,
R.drawable.pic_avatar_df
ilUserProfileHeadLayout.ilPetProfileHead.appHeadImage, "", 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.databinding.ActivityPaymentSuccessBinding
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.ViewUtil
import com.abbidot.tracker.util.bluetooth.SRBleCmdUtil
@@ -221,9 +221,12 @@ class PaymentSuccessActivity :
mViewBinding.root.postDelayed({
MMKVUtil.putInt(MMKVKey.isBindPet, ConstantInt.isBind)
mPetBean?.apply {
val intent = Intent(mContext, AddWifiPowerZone1Activity::class.java)
val intent = Intent(mContext, InitializingDeviceActivity::class.java)
intent.putExtra(ConstantString.Pet, this)
intent.putExtra(ConstantString.isFirstBind, true)
mPayResult?.let { p ->
intent.putExtra(ConstantString.Type, p.deviceType)
}
startActivity(intent)
}
}, 1500)

View File

@@ -113,11 +113,11 @@ class HomeMapGoogleMapFragmentV3 : BaseGoogleMapFragment() {
layout.tvPetLocationUpdateTimeFormat.visibility =
if (powerSwitch == ConstantInt.Type2) View.GONE
else {
if (Util.isTimeoutReport(updateTime, gnssInterval)) {
if (Util.isTimeoutReport(latLonUpdateTime, gnssInterval)) {
layout.tvPetLocationUpdateTimeFormat.text = String.format(
getString(R.string.txt_location_ago),
Utils.getTimeDifference(
updateTime * 1000, System.currentTimeMillis()
latLonUpdateTime * 1000, System.currentTimeMillis()
)
)
View.VISIBLE

View File

@@ -48,6 +48,7 @@ import androidx.recyclerview.widget.LinearLayoutManager
import androidx.recyclerview.widget.RecyclerView
import androidx.viewpager2.widget.ViewPager2
import coil.load
import coil.request.CachePolicy
import coil.transform.Transformation
import com.abbidot.baselibrary.constant.ConState
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.widget.dialog.QMUIBottomSheet.BottomListSheetBuilder
import com.qmuiteam.qmui.widget.grouplist.QMUICommonListItemView
import okhttp3.internal.http2.Header
import java.util.Calendar
@@ -641,10 +643,19 @@ class ViewUtil private constructor() {
error(errorImageResId)
//淡入淡出的动画时间
// crossfade(2000)
// memoryCachePolicy(CachePolicy.ENABLED)//设置内存的缓存策略
// diskCachePolicy(CachePolicy.ENABLED)//设置磁盘的缓存策略
// networkCachePolicy(CachePolicy.ENABLED)//设置网络的缓存策略
// OkHttpClient.Builder().cache(CoilUtils.createDefaultCache(context))
diskCachePolicy(CachePolicy.ENABLED)//设置磁盘的缓存策略
memoryCachePolicy(CachePolicy.ENABLED)//设置内存的缓存策略
networkCachePolicy(CachePolicy.ENABLED)//设置网络的缓存策略
// 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())
}
}