From 0654ec87bc991f315bdfe4b07cfdb01c8601dca3 Mon Sep 17 00:00:00 2001 From: yezhiqiu <983577727@qq.com> Date: Mon, 11 May 2026 09:53:49 +0800 Subject: [PATCH] =?UTF-8?q?1.=E4=BF=AE=E5=A4=8D=E4=BD=8D=E7=BD=AE=E6=BB=9E?= =?UTF-8?q?=E5=90=8E=E6=97=B6=E9=97=B4=E4=B8=8E=E4=B8=8A=E6=8A=A5=E6=97=B6?= =?UTF-8?q?=E9=97=B4=E9=87=8D=E5=8F=A0=E9=97=AE=E9=A2=98=202.=E5=AE=A0?= =?UTF-8?q?=E7=89=A9=E5=90=8D=E7=A7=B0=E9=99=90=E5=88=B6=E5=AD=97=E6=95=B0?= =?UTF-8?q?-=E9=99=90=E5=88=B6=E4=B8=BA16=E4=B8=AA=E5=AD=97=E7=AC=A6?= =?UTF-8?q?=E9=95=BF=E5=BA=A6=EF=BC=88=E4=B8=AD=E6=96=87=E4=B8=BA8?= =?UTF-8?q?=E4=B8=AA=E5=AD=97=EF=BC=89=203.=E4=BC=98=E5=8C=96=E6=B7=BB?= =?UTF-8?q?=E5=8A=A0=E5=92=8C=E7=BC=96=E8=BE=91wifi=EF=BC=8C=E6=8C=89?= =?UTF-8?q?=E9=92=AE=E6=93=8D=E4=BD=9C=E8=BF=87=E7=A8=8B=E4=B8=AD=E7=A6=81?= =?UTF-8?q?=E6=AD=A2=E7=82=B9=E5=87=BB=E5=85=B6=E4=BB=96=E6=8C=89=E9=92=AE?= =?UTF-8?q?=204.=E4=BC=98=E5=8C=96=E8=BF=90=E5=8A=A8=E8=B6=85=E8=BF=87?= =?UTF-8?q?=E8=BF=90=E5=8A=A8=E7=9B=AE=E6=A0=87=E5=90=8E=EF=BC=8C=E6=98=BE?= =?UTF-8?q?=E7=A4=BA=E6=8C=87=E5=AE=9A=E7=9A=84=E7=99=BE=E5=88=86=E6=AF=94?= =?UTF-8?q?=EF=BC=8C=E5=8F=96=E6=B6=88=E6=9C=80=E5=A4=A7=E5=80=BC=E4=B8=BA?= =?UTF-8?q?100%=205.=E4=BC=98=E5=8C=96=E5=AE=A0=E7=89=A9=E5=92=8C=E6=89=8B?= =?UTF-8?q?=E6=9C=BA=E4=BD=8D=E7=BD=AE=E7=9B=B4=E7=BA=BF=E8=99=9A=E7=BA=BF?= =?UTF-8?q?=E9=BB=98=E8=AE=A4=E6=98=BE=E7=A4=BA=E6=94=B9=E4=B8=BA=E9=BB=98?= =?UTF-8?q?=E8=AE=A4=E4=B8=8D=E6=98=BE=E7=A4=BA=206.=E4=BF=AE=E5=A4=8D?= =?UTF-8?q?=E6=89=93=E5=BC=80=E9=82=80=E8=AF=B7=E5=AE=B6=E4=BA=BA=E9=A1=B5?= =?UTF-8?q?=E9=9D=A2=EF=BC=8C=E5=88=87=E6=8D=A2=E5=88=B0=E5=85=B6=E5=AE=83?= =?UTF-8?q?=E5=BA=94=E7=94=A8=E5=86=8D=E5=88=87=E6=8D=A2=E5=9B=9E=E6=9D=A5?= =?UTF-8?q?=EF=BC=8C=E5=B7=A6=E4=B8=8A=E8=A7=92=E8=BF=94=E5=9B=9E=E6=8C=89?= =?UTF-8?q?=E9=92=AE=E9=94=99=E4=BD=8D=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/build.gradle | 6 ++-- .../com/abbidot/tracker/base/BaseActivity.kt | 3 +- .../tracker/dialog/SelectMapTypeDialog.kt | 2 +- .../ui/activity/data/MoreActivityActivity.kt | 4 +-- .../device/wifi/EditWifiPowerZoneActivity.kt | 28 +++++++++++++++++ .../tracker/ui/activity/map/LiveActivityV3.kt | 2 +- .../ui/activity/pet/InviteFamilyActivity.kt | 3 +- .../ui/activity/pet/PetProfileActivity.kt | 10 +++++++ .../ui/fragment/data/ActivityV2Fragment.kt | 4 +-- .../tracker/ui/fragment/map/MapV3Fragment.kt | 4 +-- .../java/com/abbidot/tracker/util/Util.kt | 30 +++++++++++++++++++ .../res/layout/layout_pet_location_info.xml | 2 ++ 12 files changed, 83 insertions(+), 15 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index 43980d0..10a42ac 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -28,9 +28,9 @@ android { applicationId "com.abbidot.tracker" minSdkVersion 23 targetSdkVersion 35 - versionCode 2204 -// versionName "2.2.4" - versionName "2.2.4-Beta1" + versionCode 2205 +// versionName "2.2.5" + versionName "2.2.5-Beta1" testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" diff --git a/app/src/main/java/com/abbidot/tracker/base/BaseActivity.kt b/app/src/main/java/com/abbidot/tracker/base/BaseActivity.kt index a386a14..2774781 100644 --- a/app/src/main/java/com/abbidot/tracker/base/BaseActivity.kt +++ b/app/src/main/java/com/abbidot/tracker/base/BaseActivity.kt @@ -61,7 +61,7 @@ abstract class BaseActivity(val inflater: (inflater: LayoutInfl private var mLoadingDialog: QMUITipDialog? = null //默认删除去掉titleTopBar底部间隔下划线 - var mDeleteBottomDivider: Boolean = true + private var mDeleteBottomDivider: Boolean = true //Activity是否在前台显示运行 var isFrontRunning = false @@ -168,6 +168,7 @@ abstract class BaseActivity(val inflater: (inflater: LayoutInfl override fun onPause() { super.onPause() + isFrontRunning = false //键盘隐藏恢复默认状态 mTranslateView?.apply { scrollTo(0, 0) diff --git a/app/src/main/java/com/abbidot/tracker/dialog/SelectMapTypeDialog.kt b/app/src/main/java/com/abbidot/tracker/dialog/SelectMapTypeDialog.kt index 456b98d..f3e56f7 100644 --- a/app/src/main/java/com/abbidot/tracker/dialog/SelectMapTypeDialog.kt +++ b/app/src/main/java/com/abbidot/tracker/dialog/SelectMapTypeDialog.kt @@ -36,7 +36,7 @@ class SelectMapTypeDialog( ) cbDialogMapFencesSwitch.isChecked = Util.getShowFenceSp() cbDialogMapDashedLineSwitch.isChecked = - MMKVUtil.getBoolean(MMKVKey.ShowDashedLine, true) + MMKVUtil.getBoolean(MMKVKey.ShowDashedLine, false) cbDialogMapFencesSwitch.setOnCheckedChangeListener(mFenceCheckedChangeListener) cbDialogMapDashedLineSwitch.setOnCheckedChangeListener(mDashedCheckedChangeListener) } diff --git a/app/src/main/java/com/abbidot/tracker/ui/activity/data/MoreActivityActivity.kt b/app/src/main/java/com/abbidot/tracker/ui/activity/data/MoreActivityActivity.kt index 5780e56..795c355 100644 --- a/app/src/main/java/com/abbidot/tracker/ui/activity/data/MoreActivityActivity.kt +++ b/app/src/main/java/com/abbidot/tracker/ui/activity/data/MoreActivityActivity.kt @@ -174,9 +174,7 @@ class MoreActivityActivity : tvMoreActivityGoal.text = String.format(getString(R.string.txt_min_unit_lower), "$activeMin/$goal") var goalPercent = activeMin / goal.toFloat() - if (goalPercent > 1) { - goalPercent = 1f - } + goalPercent = Utils.formatDecimal(goalPercent, 2).toFloat() goalPercent *= 100 ViewUtil.instance.viewNumberValueAnimator( tvMoreActivityGoalPercent, diff --git a/app/src/main/java/com/abbidot/tracker/ui/activity/device/wifi/EditWifiPowerZoneActivity.kt b/app/src/main/java/com/abbidot/tracker/ui/activity/device/wifi/EditWifiPowerZoneActivity.kt index acf68c5..bc3ef53 100644 --- a/app/src/main/java/com/abbidot/tracker/ui/activity/device/wifi/EditWifiPowerZoneActivity.kt +++ b/app/src/main/java/com/abbidot/tracker/ui/activity/device/wifi/EditWifiPowerZoneActivity.kt @@ -69,6 +69,9 @@ class EditWifiPowerZoneActivity : //禁用模式,无法点击的情况 private var isDisabledMode = false + //冻结点击 + private var isBlockedClick = false + override fun getTopBar() = mViewBinding.editPowerZoneTopBar.titleTopBar @SuppressLint("ClickableViewAccessibility") @@ -129,6 +132,11 @@ class EditWifiPowerZoneActivity : } } + override fun leftBackOnClick() { + if (isBlockedClick) return + super.leftBackOnClick() + } + override fun liveDataObserve() { //接收蓝牙返回数据 XEventBus.observe(this, EventName.DeviceReceiveData) { receiveData: ReceiveDeviceData -> @@ -183,6 +191,11 @@ class EditWifiPowerZoneActivity : showToast(R.string.txt_add_successful, true, gravity = Gravity.CENTER) } } + + override fun onRequestError(exceptionCode: String?) { + super.onRequestError(exceptionCode) + isBlockedClick = false + } }) } @@ -192,6 +205,10 @@ class EditWifiPowerZoneActivity : XEventBus.post(EventName.RefreshWiFiZone) showToast(R.string.txt_change_successful, true, gravity = Gravity.CENTER) } + override fun onRequestError(exceptionCode: String?) { + super.onRequestError(exceptionCode) + isBlockedClick = false + } }) } @@ -201,6 +218,10 @@ class EditWifiPowerZoneActivity : XEventBus.post(EventName.DeleteWiFiZone) showToast(R.string.txt_delete_success, true, gravity = Gravity.CENTER) } + override fun onRequestError(exceptionCode: String?) { + super.onRequestError(exceptionCode) + isBlockedClick = false + } }) } } @@ -336,10 +357,12 @@ class EditWifiPowerZoneActivity : } private fun saveWiFiZone() { + if (isBlockedClick) return val name = mViewBinding.ilWifiNameInputLayout.etInputContent.text.toString() if (!TextUtils.isEmpty(name)) { mWiFiZoneBean.wifiZoneName = name } + isBlockedClick = true if (isEdit) { mWiFiZoneViewModel.updateWifiZone(this, mWiFiZoneBean) } else { @@ -348,6 +371,7 @@ class EditWifiPowerZoneActivity : } private fun deleteWifiZone() { + if (isBlockedClick) return if (isDisabledMode) return if (null == mBleTrackDeviceBean) { showToast(R.string.tracker_manage_set_ble_unconnect, gravity = Gravity.CENTER) @@ -357,6 +381,7 @@ class EditWifiPowerZoneActivity : mContext, R.string.txt_delete_tips, object : BaseDialog.OnDialogOkListener { override fun onOkClick(dialog: BaseDialog<*>) { dialog.dismiss() + isBlockedClick = true sendDeleteWiFiZoneCmd() } }, okTextResId = R.string.txt_sure @@ -390,11 +415,13 @@ class EditWifiPowerZoneActivity : showLoading(false) mRightImageButton?.isEnabled = true setButtonEnabled(mViewBinding.btnSaveWifiZone, ConstantInt.Type1) + isBlockedClick = false showToast(R.string.txt_duplicate_wifi_not, gravity = Gravity.CENTER) } else { mRightImageButton?.isEnabled = true setButtonEnabled(mViewBinding.btnSaveWifiZone, ConstantInt.Type1) showLoading(false) + isBlockedClick = false showToast("Fail", gravity = Gravity.CENTER) LogUtil.e("设备wifi指令失败") } @@ -498,6 +525,7 @@ class EditWifiPowerZoneActivity : btnSaveWifiZone -> saveWiFiZone() mRightImageButton -> deleteWifiZone() btnCancelWifiZone -> { + if (isBlockedClick) return if (isFirstBind) { finish() } else { diff --git a/app/src/main/java/com/abbidot/tracker/ui/activity/map/LiveActivityV3.kt b/app/src/main/java/com/abbidot/tracker/ui/activity/map/LiveActivityV3.kt index 6807c51..dd69069 100644 --- a/app/src/main/java/com/abbidot/tracker/ui/activity/map/LiveActivityV3.kt +++ b/app/src/main/java/com/abbidot/tracker/ui/activity/map/LiveActivityV3.kt @@ -141,7 +141,7 @@ class LiveActivityV3 : BaseActivity(ActivityLiveV3Binding } isShowFence = Util.getShowFenceSp() - isShowDashed = MMKVUtil.getBoolean(MMKVKey.ShowDashedLine, true) + isShowDashed = MMKVUtil.getBoolean(MMKVKey.ShowDashedLine, false) mViewBinding.apply { ViewUtil.instance.viewRotationAnimator( diff --git a/app/src/main/java/com/abbidot/tracker/ui/activity/pet/InviteFamilyActivity.kt b/app/src/main/java/com/abbidot/tracker/ui/activity/pet/InviteFamilyActivity.kt index b703f32..1ef25d1 100644 --- a/app/src/main/java/com/abbidot/tracker/ui/activity/pet/InviteFamilyActivity.kt +++ b/app/src/main/java/com/abbidot/tracker/ui/activity/pet/InviteFamilyActivity.kt @@ -18,6 +18,7 @@ import com.abbidot.tracker.base.BaseActivity import com.abbidot.tracker.bean.DataBean import com.abbidot.tracker.bean.FamilyBean import com.abbidot.tracker.bean.PetBean +import com.abbidot.tracker.constant.ConstantInt import com.abbidot.tracker.constant.ConstantString import com.abbidot.tracker.constant.GetResultCallback import com.abbidot.tracker.databinding.ActivityInviteFamilyBinding @@ -87,7 +88,7 @@ class InviteFamilyActivity : setOnClickListenerViews(btnInviteFamilyInvite) } - setListenKeyboardChange(210) + setListenKeyboardChange(210,methodType = ConstantInt.Type1) } override fun liveDataObserve() { diff --git a/app/src/main/java/com/abbidot/tracker/ui/activity/pet/PetProfileActivity.kt b/app/src/main/java/com/abbidot/tracker/ui/activity/pet/PetProfileActivity.kt index 2c26d51..1ac8e95 100644 --- a/app/src/main/java/com/abbidot/tracker/ui/activity/pet/PetProfileActivity.kt +++ b/app/src/main/java/com/abbidot/tracker/ui/activity/pet/PetProfileActivity.kt @@ -6,6 +6,7 @@ import android.view.View import androidx.activity.result.contract.ActivityResultContracts import androidx.activity.viewModels import androidx.core.content.ContextCompat +import androidx.core.widget.doAfterTextChanged import coil.load import com.abbidot.baselibrary.constant.EventName import com.abbidot.baselibrary.constant.ResultCode @@ -30,6 +31,7 @@ import com.abbidot.tracker.dialog.SelectPetLabelDialog import com.abbidot.tracker.dialog.SetPetWeightDialog import com.abbidot.tracker.dialog.ShowCalenderDialog import com.abbidot.tracker.util.Util +import com.abbidot.tracker.util.Util.Companion.limitLetterChinese import com.abbidot.tracker.util.ViewUtil import com.abbidot.tracker.vm.PetInfoViewModel import com.abbidot.tracker.vm.TakePhotoAndCompressViewModel @@ -86,6 +88,14 @@ class PetProfileActivity : mViewBinding.apply { root.setBackgroundResource(R.color.white) + ilPetProfileNameLayout.etInputContent.doAfterTextChanged { + it?.let { s -> + val text = s.toString().limitLetterChinese(16) + if (text != s.toString()) { + s.replace(0, s.length, text) + } + } + } ilPetProfileType.let { it.tvInputNameTitle.text = getString(R.string.txt_type) ViewUtil.instance.setEditTextDropSelectState(it.etInputContent) diff --git a/app/src/main/java/com/abbidot/tracker/ui/fragment/data/ActivityV2Fragment.kt b/app/src/main/java/com/abbidot/tracker/ui/fragment/data/ActivityV2Fragment.kt index d69cb24..a917937 100644 --- a/app/src/main/java/com/abbidot/tracker/ui/fragment/data/ActivityV2Fragment.kt +++ b/app/src/main/java/com/abbidot/tracker/ui/fragment/data/ActivityV2Fragment.kt @@ -224,9 +224,7 @@ class ActivityV2Fragment : tvHomeActivityV2Goal.text = String.format(getString(R.string.txt_min_unit_lower), "$activeMin/$goal") var goalPercent = activeMin / goal.toFloat() - if (goalPercent > 1) { - goalPercent = 1f - } + goalPercent = Utils.formatDecimal(goalPercent, 2).toFloat() goalPercent *= 100 ViewUtil.instance.viewNumberValueAnimator( tvHomeActivityV2GoalPercent, diff --git a/app/src/main/java/com/abbidot/tracker/ui/fragment/map/MapV3Fragment.kt b/app/src/main/java/com/abbidot/tracker/ui/fragment/map/MapV3Fragment.kt index 1c43062..c068d82 100644 --- a/app/src/main/java/com/abbidot/tracker/ui/fragment/map/MapV3Fragment.kt +++ b/app/src/main/java/com/abbidot/tracker/ui/fragment/map/MapV3Fragment.kt @@ -126,7 +126,7 @@ class MapV3Fragment : BaseFragment(FragmentMapV3Binding::i } isShowFence = Util.getShowFenceSp() - isShowDashed = MMKVUtil.getBoolean(MMKVKey.ShowDashedLine, true) + isShowDashed = MMKVUtil.getBoolean(MMKVKey.ShowDashedLine, false) mViewBinding.apply { getHomeV2Activity()?.edgeToEdgeAdapterBars( @@ -215,7 +215,7 @@ class MapV3Fragment : BaseFragment(FragmentMapV3Binding::i } val showFence = Util.getShowFenceSp() - val showDashed = MMKVUtil.getBoolean(MMKVKey.ShowDashedLine, true) + val showDashed = MMKVUtil.getBoolean(MMKVKey.ShowDashedLine, false) //检测直播页面有没有修改围栏显示 if (isShowFence != showFence) { if (null == mSelectMapTypeDialog) { 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 55a0f19..f21abfe 100644 --- a/app/src/main/java/com/abbidot/tracker/util/Util.kt +++ b/app/src/main/java/com/abbidot/tracker/util/Util.kt @@ -870,6 +870,36 @@ class Util { clipboard.setPrimaryClip(clip) } + + /** + * 限制16个字母或8个中文 + * 截断到最大16单位 + * @param limitLetterLength 限制字母的个数 + */ + fun String.limitLetterChinese(limitLetterLength: Int): String { + val sb = StringBuilder() + for (c in this) { + val temp = sb.toString() + c + if (temp.calcLengthUnit() > limitLetterLength) break + sb.append(c) + } + return sb.toString() + } + + private fun CharSequence.calcLengthUnit(): Int { + var count = 0 + for (c in this) { + count += if (c.isChinese()) 2 else 1 + } + return count + } + + // 判断是否是中文 + private fun Char.isChinese(): Boolean { + return this.code in 0x4E00..0x9FA5 + } + + } /** diff --git a/app/src/main/res/layout/layout_pet_location_info.xml b/app/src/main/res/layout/layout_pet_location_info.xml index 60aa6a0..fc5591f 100644 --- a/app/src/main/res/layout/layout_pet_location_info.xml +++ b/app/src/main/res/layout/layout_pet_location_info.xml @@ -34,6 +34,8 @@ android:id="@+id/tv_pet_location_update_time_format" style="@style/my_TextView_style_v2" android:layout_alignBaseline="@id/tv_pet_location_update_time" + android:layout_marginStart="@dimen/dp_4" + android:layout_toEndOf="@id/tv_pet_location_update_time" android:gravity="start" android:textColor="@color/orange_color5" android:textSize="@dimen/textSize10"