1.修复位置滞后时间与上报时间重叠问题
2.宠物名称限制字数-限制为16个字符长度(中文为8个字) 3.优化添加和编辑wifi,按钮操作过程中禁止点击其他按钮 4.优化运动超过运动目标后,显示指定的百分比,取消最大值为100% 5.优化宠物和手机位置直线虚线默认显示改为默认不显示 6.修复打开邀请家人页面,切换到其它应用再切换回来,左上角返回按钮错位问题
This commit is contained in:
@@ -28,9 +28,9 @@ android {
|
|||||||
applicationId "com.abbidot.tracker"
|
applicationId "com.abbidot.tracker"
|
||||||
minSdkVersion 23
|
minSdkVersion 23
|
||||||
targetSdkVersion 35
|
targetSdkVersion 35
|
||||||
versionCode 2204
|
versionCode 2205
|
||||||
// versionName "2.2.4"
|
// versionName "2.2.5"
|
||||||
versionName "2.2.4-Beta1"
|
versionName "2.2.5-Beta1"
|
||||||
|
|
||||||
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
|
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
|
||||||
|
|
||||||
|
|||||||
@@ -61,7 +61,7 @@ abstract class BaseActivity<T : ViewBinding>(val inflater: (inflater: LayoutInfl
|
|||||||
private var mLoadingDialog: QMUITipDialog? = null
|
private var mLoadingDialog: QMUITipDialog? = null
|
||||||
|
|
||||||
//默认删除去掉titleTopBar底部间隔下划线
|
//默认删除去掉titleTopBar底部间隔下划线
|
||||||
var mDeleteBottomDivider: Boolean = true
|
private var mDeleteBottomDivider: Boolean = true
|
||||||
|
|
||||||
//Activity是否在前台显示运行
|
//Activity是否在前台显示运行
|
||||||
var isFrontRunning = false
|
var isFrontRunning = false
|
||||||
@@ -168,6 +168,7 @@ abstract class BaseActivity<T : ViewBinding>(val inflater: (inflater: LayoutInfl
|
|||||||
|
|
||||||
override fun onPause() {
|
override fun onPause() {
|
||||||
super.onPause()
|
super.onPause()
|
||||||
|
isFrontRunning = false
|
||||||
//键盘隐藏恢复默认状态
|
//键盘隐藏恢复默认状态
|
||||||
mTranslateView?.apply {
|
mTranslateView?.apply {
|
||||||
scrollTo(0, 0)
|
scrollTo(0, 0)
|
||||||
|
|||||||
@@ -36,7 +36,7 @@ class SelectMapTypeDialog(
|
|||||||
)
|
)
|
||||||
cbDialogMapFencesSwitch.isChecked = Util.getShowFenceSp()
|
cbDialogMapFencesSwitch.isChecked = Util.getShowFenceSp()
|
||||||
cbDialogMapDashedLineSwitch.isChecked =
|
cbDialogMapDashedLineSwitch.isChecked =
|
||||||
MMKVUtil.getBoolean(MMKVKey.ShowDashedLine, true)
|
MMKVUtil.getBoolean(MMKVKey.ShowDashedLine, false)
|
||||||
cbDialogMapFencesSwitch.setOnCheckedChangeListener(mFenceCheckedChangeListener)
|
cbDialogMapFencesSwitch.setOnCheckedChangeListener(mFenceCheckedChangeListener)
|
||||||
cbDialogMapDashedLineSwitch.setOnCheckedChangeListener(mDashedCheckedChangeListener)
|
cbDialogMapDashedLineSwitch.setOnCheckedChangeListener(mDashedCheckedChangeListener)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -174,9 +174,7 @@ class MoreActivityActivity :
|
|||||||
tvMoreActivityGoal.text =
|
tvMoreActivityGoal.text =
|
||||||
String.format(getString(R.string.txt_min_unit_lower), "$activeMin/$goal")
|
String.format(getString(R.string.txt_min_unit_lower), "$activeMin/$goal")
|
||||||
var goalPercent = activeMin / goal.toFloat()
|
var goalPercent = activeMin / goal.toFloat()
|
||||||
if (goalPercent > 1) {
|
goalPercent = Utils.formatDecimal(goalPercent, 2).toFloat()
|
||||||
goalPercent = 1f
|
|
||||||
}
|
|
||||||
goalPercent *= 100
|
goalPercent *= 100
|
||||||
ViewUtil.instance.viewNumberValueAnimator(
|
ViewUtil.instance.viewNumberValueAnimator(
|
||||||
tvMoreActivityGoalPercent,
|
tvMoreActivityGoalPercent,
|
||||||
|
|||||||
@@ -69,6 +69,9 @@ class EditWifiPowerZoneActivity :
|
|||||||
//禁用模式,无法点击的情况
|
//禁用模式,无法点击的情况
|
||||||
private var isDisabledMode = false
|
private var isDisabledMode = false
|
||||||
|
|
||||||
|
//冻结点击
|
||||||
|
private var isBlockedClick = false
|
||||||
|
|
||||||
override fun getTopBar() = mViewBinding.editPowerZoneTopBar.titleTopBar
|
override fun getTopBar() = mViewBinding.editPowerZoneTopBar.titleTopBar
|
||||||
|
|
||||||
@SuppressLint("ClickableViewAccessibility")
|
@SuppressLint("ClickableViewAccessibility")
|
||||||
@@ -129,6 +132,11 @@ class EditWifiPowerZoneActivity :
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
override fun leftBackOnClick() {
|
||||||
|
if (isBlockedClick) return
|
||||||
|
super.leftBackOnClick()
|
||||||
|
}
|
||||||
|
|
||||||
override fun liveDataObserve() {
|
override fun liveDataObserve() {
|
||||||
//接收蓝牙返回数据
|
//接收蓝牙返回数据
|
||||||
XEventBus.observe(this, EventName.DeviceReceiveData) { receiveData: ReceiveDeviceData ->
|
XEventBus.observe(this, EventName.DeviceReceiveData) { receiveData: ReceiveDeviceData ->
|
||||||
@@ -183,6 +191,11 @@ class EditWifiPowerZoneActivity :
|
|||||||
showToast(R.string.txt_add_successful, true, gravity = Gravity.CENTER)
|
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)
|
XEventBus.post(EventName.RefreshWiFiZone)
|
||||||
showToast(R.string.txt_change_successful, true, gravity = Gravity.CENTER)
|
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)
|
XEventBus.post(EventName.DeleteWiFiZone)
|
||||||
showToast(R.string.txt_delete_success, true, gravity = Gravity.CENTER)
|
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() {
|
private fun saveWiFiZone() {
|
||||||
|
if (isBlockedClick) return
|
||||||
val name = mViewBinding.ilWifiNameInputLayout.etInputContent.text.toString()
|
val name = mViewBinding.ilWifiNameInputLayout.etInputContent.text.toString()
|
||||||
if (!TextUtils.isEmpty(name)) {
|
if (!TextUtils.isEmpty(name)) {
|
||||||
mWiFiZoneBean.wifiZoneName = name
|
mWiFiZoneBean.wifiZoneName = name
|
||||||
}
|
}
|
||||||
|
isBlockedClick = true
|
||||||
if (isEdit) {
|
if (isEdit) {
|
||||||
mWiFiZoneViewModel.updateWifiZone(this, mWiFiZoneBean)
|
mWiFiZoneViewModel.updateWifiZone(this, mWiFiZoneBean)
|
||||||
} else {
|
} else {
|
||||||
@@ -348,6 +371,7 @@ class EditWifiPowerZoneActivity :
|
|||||||
}
|
}
|
||||||
|
|
||||||
private fun deleteWifiZone() {
|
private fun deleteWifiZone() {
|
||||||
|
if (isBlockedClick) return
|
||||||
if (isDisabledMode) return
|
if (isDisabledMode) return
|
||||||
if (null == mBleTrackDeviceBean) {
|
if (null == mBleTrackDeviceBean) {
|
||||||
showToast(R.string.tracker_manage_set_ble_unconnect, gravity = Gravity.CENTER)
|
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 {
|
mContext, R.string.txt_delete_tips, object : BaseDialog.OnDialogOkListener {
|
||||||
override fun onOkClick(dialog: BaseDialog<*>) {
|
override fun onOkClick(dialog: BaseDialog<*>) {
|
||||||
dialog.dismiss()
|
dialog.dismiss()
|
||||||
|
isBlockedClick = true
|
||||||
sendDeleteWiFiZoneCmd()
|
sendDeleteWiFiZoneCmd()
|
||||||
}
|
}
|
||||||
}, okTextResId = R.string.txt_sure
|
}, okTextResId = R.string.txt_sure
|
||||||
@@ -390,11 +415,13 @@ class EditWifiPowerZoneActivity :
|
|||||||
showLoading(false)
|
showLoading(false)
|
||||||
mRightImageButton?.isEnabled = true
|
mRightImageButton?.isEnabled = true
|
||||||
setButtonEnabled(mViewBinding.btnSaveWifiZone, ConstantInt.Type1)
|
setButtonEnabled(mViewBinding.btnSaveWifiZone, ConstantInt.Type1)
|
||||||
|
isBlockedClick = false
|
||||||
showToast(R.string.txt_duplicate_wifi_not, gravity = Gravity.CENTER)
|
showToast(R.string.txt_duplicate_wifi_not, gravity = Gravity.CENTER)
|
||||||
} else {
|
} else {
|
||||||
mRightImageButton?.isEnabled = true
|
mRightImageButton?.isEnabled = true
|
||||||
setButtonEnabled(mViewBinding.btnSaveWifiZone, ConstantInt.Type1)
|
setButtonEnabled(mViewBinding.btnSaveWifiZone, ConstantInt.Type1)
|
||||||
showLoading(false)
|
showLoading(false)
|
||||||
|
isBlockedClick = false
|
||||||
showToast("Fail", gravity = Gravity.CENTER)
|
showToast("Fail", gravity = Gravity.CENTER)
|
||||||
LogUtil.e("设备wifi指令失败")
|
LogUtil.e("设备wifi指令失败")
|
||||||
}
|
}
|
||||||
@@ -498,6 +525,7 @@ class EditWifiPowerZoneActivity :
|
|||||||
btnSaveWifiZone -> saveWiFiZone()
|
btnSaveWifiZone -> saveWiFiZone()
|
||||||
mRightImageButton -> deleteWifiZone()
|
mRightImageButton -> deleteWifiZone()
|
||||||
btnCancelWifiZone -> {
|
btnCancelWifiZone -> {
|
||||||
|
if (isBlockedClick) return
|
||||||
if (isFirstBind) {
|
if (isFirstBind) {
|
||||||
finish()
|
finish()
|
||||||
} else {
|
} else {
|
||||||
|
|||||||
@@ -141,7 +141,7 @@ class LiveActivityV3 : BaseActivity<ActivityLiveV3Binding>(ActivityLiveV3Binding
|
|||||||
}
|
}
|
||||||
|
|
||||||
isShowFence = Util.getShowFenceSp()
|
isShowFence = Util.getShowFenceSp()
|
||||||
isShowDashed = MMKVUtil.getBoolean(MMKVKey.ShowDashedLine, true)
|
isShowDashed = MMKVUtil.getBoolean(MMKVKey.ShowDashedLine, false)
|
||||||
|
|
||||||
mViewBinding.apply {
|
mViewBinding.apply {
|
||||||
ViewUtil.instance.viewRotationAnimator(
|
ViewUtil.instance.viewRotationAnimator(
|
||||||
|
|||||||
@@ -18,6 +18,7 @@ import com.abbidot.tracker.base.BaseActivity
|
|||||||
import com.abbidot.tracker.bean.DataBean
|
import com.abbidot.tracker.bean.DataBean
|
||||||
import com.abbidot.tracker.bean.FamilyBean
|
import com.abbidot.tracker.bean.FamilyBean
|
||||||
import com.abbidot.tracker.bean.PetBean
|
import com.abbidot.tracker.bean.PetBean
|
||||||
|
import com.abbidot.tracker.constant.ConstantInt
|
||||||
import com.abbidot.tracker.constant.ConstantString
|
import com.abbidot.tracker.constant.ConstantString
|
||||||
import com.abbidot.tracker.constant.GetResultCallback
|
import com.abbidot.tracker.constant.GetResultCallback
|
||||||
import com.abbidot.tracker.databinding.ActivityInviteFamilyBinding
|
import com.abbidot.tracker.databinding.ActivityInviteFamilyBinding
|
||||||
@@ -87,7 +88,7 @@ class InviteFamilyActivity :
|
|||||||
setOnClickListenerViews(btnInviteFamilyInvite)
|
setOnClickListenerViews(btnInviteFamilyInvite)
|
||||||
}
|
}
|
||||||
|
|
||||||
setListenKeyboardChange(210)
|
setListenKeyboardChange(210,methodType = ConstantInt.Type1)
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun liveDataObserve() {
|
override fun liveDataObserve() {
|
||||||
|
|||||||
@@ -6,6 +6,7 @@ import android.view.View
|
|||||||
import androidx.activity.result.contract.ActivityResultContracts
|
import androidx.activity.result.contract.ActivityResultContracts
|
||||||
import androidx.activity.viewModels
|
import androidx.activity.viewModels
|
||||||
import androidx.core.content.ContextCompat
|
import androidx.core.content.ContextCompat
|
||||||
|
import androidx.core.widget.doAfterTextChanged
|
||||||
import coil.load
|
import coil.load
|
||||||
import com.abbidot.baselibrary.constant.EventName
|
import com.abbidot.baselibrary.constant.EventName
|
||||||
import com.abbidot.baselibrary.constant.ResultCode
|
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.SetPetWeightDialog
|
||||||
import com.abbidot.tracker.dialog.ShowCalenderDialog
|
import com.abbidot.tracker.dialog.ShowCalenderDialog
|
||||||
import com.abbidot.tracker.util.Util
|
import com.abbidot.tracker.util.Util
|
||||||
|
import com.abbidot.tracker.util.Util.Companion.limitLetterChinese
|
||||||
import com.abbidot.tracker.util.ViewUtil
|
import com.abbidot.tracker.util.ViewUtil
|
||||||
import com.abbidot.tracker.vm.PetInfoViewModel
|
import com.abbidot.tracker.vm.PetInfoViewModel
|
||||||
import com.abbidot.tracker.vm.TakePhotoAndCompressViewModel
|
import com.abbidot.tracker.vm.TakePhotoAndCompressViewModel
|
||||||
@@ -86,6 +88,14 @@ class PetProfileActivity :
|
|||||||
|
|
||||||
mViewBinding.apply {
|
mViewBinding.apply {
|
||||||
root.setBackgroundResource(R.color.white)
|
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 {
|
ilPetProfileType.let {
|
||||||
it.tvInputNameTitle.text = getString(R.string.txt_type)
|
it.tvInputNameTitle.text = getString(R.string.txt_type)
|
||||||
ViewUtil.instance.setEditTextDropSelectState(it.etInputContent)
|
ViewUtil.instance.setEditTextDropSelectState(it.etInputContent)
|
||||||
|
|||||||
@@ -224,9 +224,7 @@ class ActivityV2Fragment :
|
|||||||
tvHomeActivityV2Goal.text =
|
tvHomeActivityV2Goal.text =
|
||||||
String.format(getString(R.string.txt_min_unit_lower), "$activeMin/$goal")
|
String.format(getString(R.string.txt_min_unit_lower), "$activeMin/$goal")
|
||||||
var goalPercent = activeMin / goal.toFloat()
|
var goalPercent = activeMin / goal.toFloat()
|
||||||
if (goalPercent > 1) {
|
goalPercent = Utils.formatDecimal(goalPercent, 2).toFloat()
|
||||||
goalPercent = 1f
|
|
||||||
}
|
|
||||||
goalPercent *= 100
|
goalPercent *= 100
|
||||||
ViewUtil.instance.viewNumberValueAnimator(
|
ViewUtil.instance.viewNumberValueAnimator(
|
||||||
tvHomeActivityV2GoalPercent,
|
tvHomeActivityV2GoalPercent,
|
||||||
|
|||||||
@@ -126,7 +126,7 @@ class MapV3Fragment : BaseFragment<FragmentMapV3Binding>(FragmentMapV3Binding::i
|
|||||||
}
|
}
|
||||||
|
|
||||||
isShowFence = Util.getShowFenceSp()
|
isShowFence = Util.getShowFenceSp()
|
||||||
isShowDashed = MMKVUtil.getBoolean(MMKVKey.ShowDashedLine, true)
|
isShowDashed = MMKVUtil.getBoolean(MMKVKey.ShowDashedLine, false)
|
||||||
|
|
||||||
mViewBinding.apply {
|
mViewBinding.apply {
|
||||||
getHomeV2Activity()?.edgeToEdgeAdapterBars(
|
getHomeV2Activity()?.edgeToEdgeAdapterBars(
|
||||||
@@ -215,7 +215,7 @@ class MapV3Fragment : BaseFragment<FragmentMapV3Binding>(FragmentMapV3Binding::i
|
|||||||
}
|
}
|
||||||
|
|
||||||
val showFence = Util.getShowFenceSp()
|
val showFence = Util.getShowFenceSp()
|
||||||
val showDashed = MMKVUtil.getBoolean(MMKVKey.ShowDashedLine, true)
|
val showDashed = MMKVUtil.getBoolean(MMKVKey.ShowDashedLine, false)
|
||||||
//检测直播页面有没有修改围栏显示
|
//检测直播页面有没有修改围栏显示
|
||||||
if (isShowFence != showFence) {
|
if (isShowFence != showFence) {
|
||||||
if (null == mSelectMapTypeDialog) {
|
if (null == mSelectMapTypeDialog) {
|
||||||
|
|||||||
@@ -870,6 +870,36 @@ class Util {
|
|||||||
clipboard.setPrimaryClip(clip)
|
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
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
@@ -34,6 +34,8 @@
|
|||||||
android:id="@+id/tv_pet_location_update_time_format"
|
android:id="@+id/tv_pet_location_update_time_format"
|
||||||
style="@style/my_TextView_style_v2"
|
style="@style/my_TextView_style_v2"
|
||||||
android:layout_alignBaseline="@id/tv_pet_location_update_time"
|
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:gravity="start"
|
||||||
android:textColor="@color/orange_color5"
|
android:textColor="@color/orange_color5"
|
||||||
android:textSize="@dimen/textSize10"
|
android:textSize="@dimen/textSize10"
|
||||||
|
|||||||
Reference in New Issue
Block a user