From 5b489a251983c1fd5a8371f8957541dd6aabde11 Mon Sep 17 00:00:00 2001 From: yezhiqiu <983577727@qq.com> Date: Thu, 18 Dec 2025 18:29:58 +0800 Subject: [PATCH] =?UTF-8?q?1.=E4=BF=AE=E5=A4=8D=E7=BC=96=E8=BE=91wifi=20zo?= =?UTF-8?q?ne=E5=90=8D=E7=A7=B0=E6=97=B6=EF=BC=8C=E9=83=A8=E5=88=86?= =?UTF-8?q?=E6=9C=BA=E5=9E=8B=E8=BE=93=E5=85=A5=E6=B3=95=E4=BC=9A=E6=8C=A1?= =?UTF-8?q?=E4=BD=8F=E8=BE=93=E5=85=A5=E6=A1=86=202.GPS=E7=9A=84=E2=80=9CW?= =?UTF-8?q?eak=20signal=E2=80=9D=E6=9B=BF=E6=8D=A2=E2=80=9CNo=20signal?= =?UTF-8?q?=E2=80=9D=E7=8A=B6=E6=80=81=203.=E9=9A=90=E8=97=8FAPP=E4=B8=AD?= =?UTF-8?q?=E7=9A=84=E9=87=8C=E7=A8=8B=E5=92=8C=E6=80=BB=E9=87=8C=E7=A8=8B?= =?UTF-8?q?=E6=98=BE=E7=A4=BA=204.=E6=96=B0=E5=A2=9E=E6=89=8B=E6=9C=BA?= =?UTF-8?q?=E6=97=A0=E7=BD=91=E7=BB=9C=EF=BC=8C=E5=BC=80=E5=90=AFAPP?= =?UTF-8?q?=E5=90=8E=EF=BC=8C=E6=89=8B=E6=9C=BA=E7=BD=91=E7=BB=9C=E6=81=A2?= =?UTF-8?q?=E5=A4=8D=EF=BC=8CAPP=E8=87=AA=E5=8A=A8=E8=8E=B7=E5=8F=96?= =?UTF-8?q?=E5=86=85=E5=AE=B9=205.=E6=B7=BB=E5=8A=A0/=E7=BC=96=E8=BE=91wif?= =?UTF-8?q?i=E6=97=B6=EF=BC=8C=E4=B8=8D=E6=98=BE=E7=A4=BA=E5=A4=8D?= =?UTF-8?q?=E4=BD=8D=E6=8C=89=E9=92=AE=EF=BC=9B=E4=BD=8D=E7=BD=AE=E4=B8=8D?= =?UTF-8?q?=E5=8F=AF=E6=8B=96=E5=8A=A8=EF=BC=8C=E4=B8=8D=E6=98=BE=E7=A4=BA?= =?UTF-8?q?=E5=AE=A0=E7=89=A9=206.=E4=BF=AE=E6=94=B9toast=E7=99=BD?= =?UTF-8?q?=E5=BA=95=E9=BB=91=E5=AD=97=E6=A0=B7=E5=BC=8F=207.=E7=9B=B4?= =?UTF-8?q?=E6=92=AD=E7=A6=81=E7=94=A8=EF=BC=8C=E9=87=87=E7=94=A8=E4=B8=8D?= =?UTF-8?q?=E5=8F=AF=E7=82=B9=E5=87=BB=E7=8A=B6=E6=80=81=EF=BC=8C=E8=80=8C?= =?UTF-8?q?=E4=B8=8D=E6=98=AF=E9=9A=90=E8=97=8F=E6=8C=89=E9=92=AE=EF=BC=8C?= =?UTF-8?q?=E7=82=B9=E5=87=BB=E6=8F=90=E7=A4=BA=E6=96=87=E6=A1=88=EF=BC=9A?= =?UTF-8?q?Live=20works=20on=20cellular=20only=208.=20=E4=BF=AE=E6=94=B9?= =?UTF-8?q?=E4=B8=8D=E8=83=BD=E6=B7=BB=E5=8A=A0=E6=88=96=E8=80=85=E8=A7=A3?= =?UTF-8?q?=E7=BB=91=E5=AE=A0=E7=89=A9=EF=BC=8C=E6=B7=BB=E5=8A=A0=E8=AE=BE?= =?UTF-8?q?=E5=A4=87=E8=87=AA=E5=8A=A8=E7=BB=91=E5=AE=9A=E5=AE=A0=E7=89=A9?= =?UTF-8?q?=E2=80=9CMy=20Pet=E2=80=9D=209.=E8=A7=A3=E7=BB=91=E8=AE=BE?= =?UTF-8?q?=E5=A4=87=E6=94=B9=E4=B8=BA=E4=B8=8D=E9=9C=80=E8=A6=81=E8=93=9D?= =?UTF-8?q?=E7=89=99=E8=A7=A3=E7=BB=91=E5=B9=B6=E4=BC=98=E5=8C=96ui?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/build.gradle | 3 +- app/proguard-rules.pro | 15 +- .../tracker/adapter/MyTrackerV2Adapter.kt | 8 +- .../com/abbidot/tracker/base/BaseFragment.kt | 15 +- .../ui/activity/profile/FencesAddActivity.kt | 6 +- .../tracker/ui/activity/HomeV2Activity.kt | 32 ++- .../ui/activity/data/MoreActivityActivity.kt | 2 +- .../device/AddPairedSuccessActivity.kt | 27 +-- .../activity/device/DeleteTracker1Activity.kt | 107 +++++++++- .../ui/activity/device/MyTrackerV2Activity.kt | 184 ++++++++++-------- .../AddAndEditFencesZoneBaseActivity.kt | 7 +- .../fences/PreviewFencesZoneActivity.kt | 11 +- .../device/wifi/EditWifiPowerZoneActivity.kt | 29 ++- .../ui/common/map/FencesAddEditMapCommon.kt | 2 +- .../ui/fragment/data/ActivityV2Fragment.kt | 19 +- .../ui/fragment/data/RouteV2Fragment.kt | 6 +- .../ui/fragment/device/HomeTrackFragment.kt | 2 +- .../tracker/ui/fragment/map/MapV3Fragment.kt | 58 ++++-- .../FencesAddEditGoogleMapFragment.kt | 33 ++-- .../com/abbidot/tracker/vm/MapViewModel.kt | 8 +- .../tracker/widget/CustomViewInterfaces.kt | 3 +- .../tracker/widget/FencesCircleView.kt | 14 +- .../main/res/drawable/icon_gray_cir_ring.xml | 11 ++ .../drawable/shape38_gray_alpha_circle_bg.xml | 15 ++ ....xml => shape38_green_alpha_circle_bg.xml} | 4 +- .../res/drawable/shape40_black70_toast_bg.xml | 2 +- .../main/res/layout/activity_data_board.xml | 1 + .../res/layout/activity_delete_tracker1.xml | 2 +- .../res/layout/activity_edit_power_zone.xml | 10 +- .../res/layout/activity_more_activity.xml | 4 +- app/src/main/res/layout/fragment_map_v2.xml | 2 +- app/src/main/res/layout/fragment_map_v3.xml | 13 +- .../res/layout/item_my_tracker_v2_layout.xml | 3 +- .../res/layout/layout_map_device_battery.xml | 6 +- app/src/main/res/layout/toast_my_layout.xml | 2 +- app/src/main/res/values/strings.xml | 4 + 36 files changed, 479 insertions(+), 191 deletions(-) create mode 100644 app/src/main/res/drawable/icon_gray_cir_ring.xml create mode 100644 app/src/main/res/drawable/shape38_gray_alpha_circle_bg.xml rename app/src/main/res/drawable/{shape_white_alpha_circle_bg.xml => shape38_green_alpha_circle_bg.xml} (81%) diff --git a/app/build.gradle b/app/build.gradle index a159518..18406a0 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -30,7 +30,7 @@ android { targetSdkVersion 35 versionCode 2101 // versionName "2.1.1" - versionName "2.1.1-Beta9" + versionName "2.1.1-Beta10" testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" @@ -102,6 +102,7 @@ android { zipAlignEnabled false // 设置混淆 minifyEnabled false + proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro' signingConfig signingConfigs.debug } diff --git a/app/proguard-rules.pro b/app/proguard-rules.pro index 481bb43..eeb0807 100644 --- a/app/proguard-rules.pro +++ b/app/proguard-rules.pro @@ -18,4 +18,17 @@ # If you keep the line number information, uncomment this to # hide the original source file name. -#-renamesourcefileattribute SourceFile \ No newline at end of file +#-renamesourcefileattribute SourceFile + + + +#禁用所有优化规则,查看混淆后 APK是否可以正常工作 +-dontoptimize + +# Please add these rules to your existing keep rules in order to suppress warnings. +# This is generated automatically by the Android Gradle plugin. +-dontwarn com.baidu.mapsdkplatform.comapi.util.SysOSAPI +-dontwarn com.daimajia.easing.Glider +-dontwarn com.daimajia.easing.Skill + +-keep class android.* \ No newline at end of file diff --git a/app/src/main/java/com/abbidot/tracker/adapter/MyTrackerV2Adapter.kt b/app/src/main/java/com/abbidot/tracker/adapter/MyTrackerV2Adapter.kt index a225529..0e8f9bd 100644 --- a/app/src/main/java/com/abbidot/tracker/adapter/MyTrackerV2Adapter.kt +++ b/app/src/main/java/com/abbidot/tracker/adapter/MyTrackerV2Adapter.kt @@ -34,9 +34,11 @@ class MyTrackerV2Adapter( val batteryTextView = holder!!.getTextView(R.id.iv_item_my_tracker_v2_battery) val trackerImageView = holder.getImageView(R.id.iv_item_my_tracker_v2_device) val addTrackerLayout = holder.getView(R.id.ll_my_tracker_v2_add_tracker_layout) + val petAddLayout = holder.getView(R.id.rl_my_tracker_v2_pet) val petHead = holder.getView(R.id.il_my_tracker_v2_pet_head) as QMUIRadiusImageView val addPetLayout = holder.getView(R.id.ll_my_tracker_v2_add_pet_layout) val trackerName = holder.getTextView(R.id.tv_my_tracker_v2_device_name) + val linkImage = holder.getImageView(R.id.iv_my_tracker_v2_link_image) val petName = holder.getTextView(R.id.tv_my_tracker_v2_pet_name) holder.getImageView(R.id.iv_my_tracker_v2_share).apply { @@ -79,10 +81,14 @@ class MyTrackerV2Adapter( trackerName.visibility = View.GONE addTrackerLayout.visibility = View.VISIBLE - addPetLayout.visibility = View.VISIBLE + petAddLayout.visibility = View.GONE + addPetLayout.visibility = View.GONE + linkImage.visibility = View.GONE petHead.visibility = View.GONE petName.visibility = View.GONE } else { + petAddLayout.visibility = View.VISIBLE + linkImage.visibility = View.VISIBLE if (TextUtils.isEmpty(item.deviceOutId)) { addTrackerLayout.visibility = View.VISIBLE batteryTextView.visibility = View.GONE diff --git a/app/src/main/java/com/abbidot/tracker/base/BaseFragment.kt b/app/src/main/java/com/abbidot/tracker/base/BaseFragment.kt index 520ebff..f02c09b 100644 --- a/app/src/main/java/com/abbidot/tracker/base/BaseFragment.kt +++ b/app/src/main/java/com/abbidot/tracker/base/BaseFragment.kt @@ -15,6 +15,7 @@ import androidx.viewbinding.ViewBinding import com.abbidot.baselibrary.util.LogUtil import com.abbidot.tracker.R import com.abbidot.tracker.constant.GetResultCallback +import com.abbidot.tracker.util.Util import com.qmuiteam.qmui.alpha.QMUIAlphaButton import com.qmuiteam.qmui.alpha.QMUIAlphaImageButton import com.qmuiteam.qmui.widget.dialog.QMUITipDialog @@ -35,7 +36,7 @@ abstract class BaseFragment( var mLoadingDialog: QMUITipDialog? = null //防止某个时间执行多次 - var mLimitExecutionTime = 0L + private var mLimitExecutionTime = 0L /** * Fragment中嵌套子Fragment时,如果父Fragment被销毁而子Fragment未被销毁,会导致子Fragment的视图不再显示‌ @@ -151,6 +152,18 @@ abstract class BaseFragment( (activity as BaseActivity<*>).launchActivity(activityResultLauncher, intent) } + /** + * 限制多次点击按钮 + */ + fun isLimitClick(): Boolean { + //防止执行多次弹窗 + if (Util.isTimeLimit(mLimitExecutionTime)) { + return true + } + mLimitExecutionTime = System.currentTimeMillis() + return false + } + /** * 统一处理网络请求结果 */ diff --git a/app/src/main/java/com/abbidot/tracker/deprecated/ui/activity/profile/FencesAddActivity.kt b/app/src/main/java/com/abbidot/tracker/deprecated/ui/activity/profile/FencesAddActivity.kt index 6dded26..bb648ed 100644 --- a/app/src/main/java/com/abbidot/tracker/deprecated/ui/activity/profile/FencesAddActivity.kt +++ b/app/src/main/java/com/abbidot/tracker/deprecated/ui/activity/profile/FencesAddActivity.kt @@ -489,13 +489,17 @@ class FencesAddActivity : BaseActivity(ActivityFencesA override fun rectEndDragClick() { } - override fun circleScaleClick() { + override fun circleScaleEndClick() { mFencesMapCommon.refreshDistance() } override fun circleStartDragClick() { } + override fun circleScalingClick() { + + } + override fun circleEndDragClick() { } diff --git a/app/src/main/java/com/abbidot/tracker/ui/activity/HomeV2Activity.kt b/app/src/main/java/com/abbidot/tracker/ui/activity/HomeV2Activity.kt index 8b48a65..1618f2f 100644 --- a/app/src/main/java/com/abbidot/tracker/ui/activity/HomeV2Activity.kt +++ b/app/src/main/java/com/abbidot/tracker/ui/activity/HomeV2Activity.kt @@ -3,6 +3,10 @@ package com.abbidot.tracker.ui.activity import android.bluetooth.BluetoothAdapter import android.content.Intent import android.content.IntentFilter +import android.net.ConnectivityManager +import android.net.Network +import android.net.NetworkCapabilities +import android.net.NetworkRequest import android.text.TextUtils import android.view.MenuItem import android.view.View @@ -66,6 +70,7 @@ import dagger.hilt.android.AndroidEntryPoint import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.launch + /** * v2版主页 */ @@ -139,7 +144,7 @@ class HomeV2Activity : BaseActivity(ActivityHomeV2Binding }, 1) //解决异常 https://blog.csdn.net/w_lin/article/details/123872656 - it.isSaveEnabled=false + it.isSaveEnabled = false edgeToEdgeAdapterBars(it) } @@ -163,8 +168,29 @@ class HomeV2Activity : BaseActivity(ActivityHomeV2Binding MMKVUtil.putBoolean(MMKVKey.isCrash, false) showToast(R.string.txt_show_crash) mCountdownType = ConstantInt.Type0 - mCountDownTimerViewModel.startCountDown(6) + mCountDownTimerViewModel.startCountDown(5) } else { + val connectivityManager = getSystemService(CONNECTIVITY_SERVICE) as ConnectivityManager + val networkCallback: ConnectivityManager.NetworkCallback = + object : ConnectivityManager.NetworkCallback() { + override fun onAvailable(network: Network) { + // 当网络可用时调用 + super.onAvailable(network) + LogUtil.e("当网络可用时,onAvailable") + if (mNetworkRequestsFailRetryCount == mNetworkRequestsFailMaxCount && mPetList.size == 0) { + mNetworkRequestsFailRetryCount = 0 + isFirst = false + mDataViewModel.getHomeBindPetList(this@HomeV2Activity) + } + } + } + val networkRequest = + NetworkRequest.Builder().addCapability(NetworkCapabilities.NET_CAPABILITY_INTERNET) + .addTransportType(NetworkCapabilities.TRANSPORT_WIFI) + .addTransportType(NetworkCapabilities.TRANSPORT_ETHERNET) + .addTransportType(NetworkCapabilities.TRANSPORT_CELLULAR).build() + connectivityManager.registerNetworkCallback(networkRequest, networkCallback) + //注册监听蓝牙开关广播 mBleListenerReceiver = BluetoothMonitorReceiver() val intentFilter = IntentFilter() @@ -174,7 +200,7 @@ class HomeV2Activity : BaseActivity(ActivityHomeV2Binding checkPermissions() - mDataViewModel.getHomeBindPetList(this) + mDataViewModel.getHomeBindPetList(this@HomeV2Activity) //设置bugly的用户id CrashReport.setUserId(MMKVUtil.getString(MMKVKey.Email)) 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 889f3a5..6254d81 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 @@ -30,7 +30,7 @@ class MoreActivityActivity : private val mDataDetailViewModel: DataDetailViewModel by viewModels() - private var mCalenderDialog: ShowCalenderDialog? = null + // private var mCalenderDialog: ShowCalenderDialog? = null private lateinit var mMonthsAbbr: Array private var mPetBean: PetBean? = null diff --git a/app/src/main/java/com/abbidot/tracker/ui/activity/device/AddPairedSuccessActivity.kt b/app/src/main/java/com/abbidot/tracker/ui/activity/device/AddPairedSuccessActivity.kt index f456b5f..7dd2a62 100644 --- a/app/src/main/java/com/abbidot/tracker/ui/activity/device/AddPairedSuccessActivity.kt +++ b/app/src/main/java/com/abbidot/tracker/ui/activity/device/AddPairedSuccessActivity.kt @@ -125,12 +125,14 @@ class AddPairedSuccessActivity : override fun onResult(any: Any) { MMKVUtil.putInt(MMKVKey.isBindDevice, ConstantInt.isBind) XEventBus.post(EventName.RefreshDevice) - if (isFirstBind) { - mUserProfileViewModel.updateMeasureUnit(ConstantInt.Type1) -// val intent = Intent(mContext, FirstSetPetTypeActivity::class.java) -// intent.putExtra(ConstantString.isFirstBind, isFirstBind) -// startActivityFinish(intent) - } else finish() + + mUserProfileViewModel.updateMeasureUnit(ConstantInt.Type1) +// if (isFirstBind) { +// mUserProfileViewModel.updateMeasureUnit(ConstantInt.Type1) +//// val intent = Intent(mContext, FirstSetPetTypeActivity::class.java) +//// intent.putExtra(ConstantString.isFirstBind, isFirstBind) +//// startActivityFinish(intent) +// } else finish() } override fun onRequestError(exceptionCode: String?) { @@ -202,11 +204,14 @@ class AddPairedSuccessActivity : showToast(R.string.txt_bind_success, isFinish = true) mViewBinding.root.postDelayed({ MMKVUtil.putInt(MMKVKey.isBindPet, ConstantInt.isBind) - mPetBean?.apply { - val intent = Intent(mContext, AddWifiPowerZone1Activity::class.java) - intent.putExtra(ConstantString.Pet, this) - intent.putExtra(ConstantString.isFirstBind, isFirstBind) - startActivity(intent) + if (isFirstBind) { + mPetBean?.apply { + val intent = + Intent(mContext, AddWifiPowerZone1Activity::class.java) + intent.putExtra(ConstantString.Pet, this) + intent.putExtra(ConstantString.isFirstBind, isFirstBind) + startActivity(intent) + } } }, 1500) } diff --git a/app/src/main/java/com/abbidot/tracker/ui/activity/device/DeleteTracker1Activity.kt b/app/src/main/java/com/abbidot/tracker/ui/activity/device/DeleteTracker1Activity.kt index b91b845..4b47238 100644 --- a/app/src/main/java/com/abbidot/tracker/ui/activity/device/DeleteTracker1Activity.kt +++ b/app/src/main/java/com/abbidot/tracker/ui/activity/device/DeleteTracker1Activity.kt @@ -1,17 +1,37 @@ package com.abbidot.tracker.ui.activity.device import android.content.Intent +import android.graphics.Typeface import android.view.View +import androidx.activity.viewModels +import androidx.lifecycle.lifecycleScope +import com.abbidot.baselibrary.constant.EventName +import com.abbidot.baselibrary.constant.MMKVKey +import com.abbidot.baselibrary.eventbus.XEventBus +import com.abbidot.baselibrary.util.MMKVUtil import com.abbidot.tracker.R import com.abbidot.tracker.base.BaseActivity +import com.abbidot.tracker.base.BaseDialog import com.abbidot.tracker.bean.DeviceBean +import com.abbidot.tracker.constant.ConstantInt import com.abbidot.tracker.constant.ConstantString +import com.abbidot.tracker.constant.GetResultCallback +import com.abbidot.tracker.database.MyDatabase import com.abbidot.tracker.databinding.ActivityDeleteTracker1Binding +import com.abbidot.tracker.dialog.CommonDialog1 import com.abbidot.tracker.util.Util +import com.abbidot.tracker.util.ViewUtil +import com.abbidot.tracker.util.bluetooth.SRBleUtil +import com.abbidot.tracker.vm.TrackerSetViewModel +import kotlinx.coroutines.Dispatchers +import kotlinx.coroutines.launch +import kotlinx.coroutines.withContext class DeleteTracker1Activity : BaseActivity(ActivityDeleteTracker1Binding::inflate) { + private val mTrackerSetViewModel: TrackerSetViewModel by viewModels() + private var mDeviceBean: DeviceBean? = null private var isOnlyBindOneDevice = false @@ -34,16 +54,93 @@ class DeleteTracker1Activity : } } + override fun liveDataObserve() { + //解绑设备/删除设备 + mTrackerSetViewModel.mUnbindDeviceLiveData.observe(this@DeleteTracker1Activity) { + dealRequestResult(it, object : GetResultCallback { + override fun onResult(any: Any) { + lifecycleScope.launch { + withContext(Dispatchers.IO) { + mDeviceBean?.let { device -> + SRBleUtil.instance.disconnectToMac(device.macId) + //删除设备成功后,把本地数据库中的设备也删除 + MyDatabase.deviceDao().deleteByParams( + ConstantString.DeviceId, + device.deviceId, + MyDatabase.DeviceTableName + ) + runOnUiThread { + showDeleteDialog() + } + } + } + } + } + + override fun onRequestError(exceptionCode: String?) { + super.onRequestError(exceptionCode) + setButtonEnabled(mViewBinding.btnNextDeleteTracker1, ConstantInt.Type1) + } + }) + } + } + + private fun showDeleteDialog() { + if (isOnlyBindOneDevice) { + XEventBus.post(EventName.LogOut) + MMKVUtil.putInt(MMKVKey.isBindDevice, ConstantInt.Type0) + MMKVUtil.putInt(MMKVKey.isBindPet, ConstantInt.Type0) + } else { + XEventBus.post(EventName.DeleteDevice) + } + CommonDialog1( + mContext, + "", + getString(R.string.txt_delete_succe), + false, + 5f, + Typeface.BOLD, + R.color.data_black_color, + false, + okClickListener = object : BaseDialog.OnDialogOkListener { + override fun onOkClick(dialog: BaseDialog<*>) { + if (isOnlyBindOneDevice) { + val intent = Intent(mContext, AddNewTracker1Activity::class.java) + intent.putExtra(ConstantString.isFirstBind, true) + startActivityFinish(intent) + } else { + finish() + } + } + }).show() + } + + private fun sureDeleteDevice() { + ViewUtil.instance.showDialog( + mContext, getString(R.string.txt_delete_tips), object : BaseDialog.OnDialogOkListener { + override fun onOkClick(dialog: BaseDialog<*>) { + dialog.dismiss() + mDeviceBean?.apply { + setButtonEnabled(mViewBinding.btnNextDeleteTracker1, ConstantInt.Type0) + mTrackerSetViewModel.unbindDevice(this@DeleteTracker1Activity, deviceId) + } + } + }, okTextResId = R.string.txt_sure + ) + } + override fun onClick(v: View?) { + if (isLimitClick()) return mViewBinding.apply { when (v!!) { btnCancelDeleteTracker1 -> finish() btnNextDeleteTracker1 -> { - Intent(mContext, DeleteTracker2Activity::class.java).let { - it.putExtra(ConstantString.DeviceInfo, mDeviceBean) - it.putExtra(ConstantString.isCheck, isOnlyBindOneDevice) - startActivityFinish(it) - } + sureDeleteDevice() +// Intent(mContext, DeleteTracker2Activity::class.java).let { +// it.putExtra(ConstantString.DeviceInfo, mDeviceBean) +// it.putExtra(ConstantString.isCheck, isOnlyBindOneDevice) +// startActivityFinish(it) +// } } } } diff --git a/app/src/main/java/com/abbidot/tracker/ui/activity/device/MyTrackerV2Activity.kt b/app/src/main/java/com/abbidot/tracker/ui/activity/device/MyTrackerV2Activity.kt index 553683f..b8d782b 100644 --- a/app/src/main/java/com/abbidot/tracker/ui/activity/device/MyTrackerV2Activity.kt +++ b/app/src/main/java/com/abbidot/tracker/ui/activity/device/MyTrackerV2Activity.kt @@ -398,31 +398,35 @@ class MyTrackerV2Activity : val device = mMyTrackerAdapter.getData()[pos] ViewUtil.instance.showBottomSheetList(mContext, { dialog, itemView, position, tag -> dialog.dismiss() - when (position) { - 0 -> if (null == device.pet) deleteDevice(device) - else getUnAssignDeviceData() - - 1 -> if (!isOnlyBindOneDevice) unAssignDeviceDialogTips(device) - else deleteDevice(device) - - 2 -> deleteDevice(device) - } - }, title = device.deviceOutId).apply { - if (null == device.pet) { - addItem( - getString(R.string.txt_delete) + " ${device.deviceOutId}" - ) - } else { - addItem(getString(R.string.txt_assign_other_tracker)) - if (!isOnlyBindOneDevice) { - addItem( - String.format(getString(R.string.txt_unassign_other), device.deviceOutId) - ) - } - addItem( - getString(R.string.txt_delete) + " ${device.deviceOutId}" - ) + deleteDevice(device) +// when (position) { +// 0 -> if (null == device.pet) deleteDevice(device) +// else getUnAssignDeviceData() +// +// 1 -> if (!isOnlyBindOneDevice) unAssignDeviceDialogTips(device) +// else deleteDevice(device) +// +// 2 -> deleteDevice(device) +// } + }).apply { + if (!isOnlyBindOneDevice) { + addItem(getString(R.string.txt_unbind_device)) } +// if (null == device.pet) { +// addItem( +// getString(R.string.txt_delete) + " ${device.deviceOutId}" +// ) +// } else { +// addItem(getString(R.string.txt_assign_other_tracker)) +// if (!isOnlyBindOneDevice) { +// addItem( +// String.format(getString(R.string.txt_unassign_other), device.deviceOutId) +// ) +// } +// addItem( +// getString(R.string.txt_delete) + " ${device.deviceOutId}" +// ) +// } }.build().show() } @@ -432,54 +436,56 @@ class MyTrackerV2Activity : fun showPetBottomSheetMenu(pos: Int) { mCurrentBeanOption = pos val device = mMyTrackerAdapter.getData()[pos] - var petName = "" - device.pet?.let { - petName = it.petName - } +// var petName = "" +// device.pet?.let { +// petName = it.petName +// } ViewUtil.instance.showBottomSheetList(mContext, { dialog, itemView, position, tag -> dialog.dismiss() - when (position) { - 0 -> { - //关联其他宠物 - if (!TextUtils.isEmpty(device.deviceOutId)) { - getUnAssignPetData() - } else { - //编辑 - goEditPet(device) - } - } - - 1 -> { - //有绑定对应的设备 - if (!TextUtils.isEmpty(device.deviceOutId)) { - //只有最后一对设备,只有编辑 - if (isOnlyBindOneDevice) goEditPet(device) - //解绑宠物 - else unAssignDeviceDialogTips(device) - } else { - //删除 - deletePetDialogTips(device) - } - } - //编辑 - 2 -> goEditPet(device) - 3 -> deletePetDialogTips(device) - } - }, title = petName).apply { + goEditPet(device) +// when (position) { +// 0 -> { +// //关联其他宠物 +// if (!TextUtils.isEmpty(device.deviceOutId)) { +// getUnAssignPetData() +// } else { +// //编辑 +// goEditPet(device) +// } +// } +// +// 1 -> { +// //有绑定对应的设备 +// if (!TextUtils.isEmpty(device.deviceOutId)) { +// //只有最后一对设备,只有编辑 +// if (isOnlyBindOneDevice) goEditPet(device) +// //解绑宠物 +// else unAssignDeviceDialogTips(device) +// } else { +// //删除 +// deletePetDialogTips(device) +// } +// } +// //编辑 +// 2 -> goEditPet(device) +// 3 -> deletePetDialogTips(device) +// } + }).apply { + addItem(getString(R.string.txt_edit_profile)) //有绑定对应的设备 - if (!TextUtils.isEmpty(device.deviceOutId)) { - addItem(getString(R.string.txt_assign_other_pet)) - if (!isOnlyBindOneDevice) addItem( - String.format(getString(R.string.txt_unassign_other), petName) - ) - addItem(getString(R.string.pet_manage_detail_edit) + " $petName") - if (!isOnlyBindOneDevice) addItem( - getString(R.string.txt_delete) + " $petName" - ) - } else { - addItem(getString(R.string.pet_manage_detail_edit) + " $petName") - addItem(getString(R.string.txt_delete) + " $petName") - } +// if (!TextUtils.isEmpty(device.deviceOutId)) { +// addItem(getString(R.string.txt_assign_other_pet)) +// if (!isOnlyBindOneDevice) addItem( +// String.format(getString(R.string.txt_unassign_other), petName) +// ) +// addItem(getString(R.string.pet_manage_detail_edit) + " $petName") +// if (!isOnlyBindOneDevice) addItem( +// getString(R.string.txt_delete) + " $petName" +// ) +// } else { +// addItem(getString(R.string.pet_manage_detail_edit) + " $petName") +// addItem(getString(R.string.txt_delete) + " $petName") +// } }.build().show() } @@ -513,22 +519,30 @@ class MyTrackerV2Activity : * 删除设备 */ private fun deleteDevice(device: DeviceBean) { - ViewUtil.instance.showDialog( - mContext, getString(R.string.txt_delete_tips), object : BaseDialog.OnDialogOkListener { - override fun onOkClick(dialog: BaseDialog<*>) { - dialog.dismiss() - Intent(mContext, DeleteTracker1Activity::class.java).let { - it.putExtra(ConstantString.DeviceInfo, device) - val isUnbindLastOne = if (isOnlyBindOneDevice && null == device.pet) { - false - } else isOnlyBindOneDevice - it.putExtra(ConstantString.isCheck, isUnbindLastOne) - startActivity(it) - } -// mTrackerSetViewModel.unbindDevice(this@MyTrackerV2Activity, device.deviceId) - } - }, okTextResId = R.string.txt_sure - ) + Intent(mContext, DeleteTracker1Activity::class.java).let { + it.putExtra(ConstantString.DeviceInfo, device) + val isUnbindLastOne = if (isOnlyBindOneDevice && null == device.pet) { + false + } else isOnlyBindOneDevice + it.putExtra(ConstantString.isCheck, isUnbindLastOne) + startActivity(it) + } +// ViewUtil.instance.showDialog( +// mContext, getString(R.string.txt_delete_tips), object : BaseDialog.OnDialogOkListener { +// override fun onOkClick(dialog: BaseDialog<*>) { +// dialog.dismiss() +// Intent(mContext, DeleteTracker1Activity::class.java).let { +// it.putExtra(ConstantString.DeviceInfo, device) +// val isUnbindLastOne = if (isOnlyBindOneDevice && null == device.pet) { +// false +// } else isOnlyBindOneDevice +// it.putExtra(ConstantString.isCheck, isUnbindLastOne) +// startActivity(it) +// } +//// mTrackerSetViewModel.unbindDevice(this@MyTrackerV2Activity, device.deviceId) +// } +// }, okTextResId = R.string.txt_sure +// ) } /** diff --git a/app/src/main/java/com/abbidot/tracker/ui/activity/device/fences/AddAndEditFencesZoneBaseActivity.kt b/app/src/main/java/com/abbidot/tracker/ui/activity/device/fences/AddAndEditFencesZoneBaseActivity.kt index 1302597..95e6656 100644 --- a/app/src/main/java/com/abbidot/tracker/ui/activity/device/fences/AddAndEditFencesZoneBaseActivity.kt +++ b/app/src/main/java/com/abbidot/tracker/ui/activity/device/fences/AddAndEditFencesZoneBaseActivity.kt @@ -799,7 +799,7 @@ open class AddAndEditFencesZoneBaseActivity : mFencesMapCommon.calculateDistanceAndGetPointLatLng(delayMillis = 0) } - override fun circleScaleClick() { + override fun circleScaleEndClick() { mFencesMapCommon.calculateDistanceAndGetPointLatLng(delayMillis = 0) } @@ -807,6 +807,10 @@ open class AddAndEditFencesZoneBaseActivity : mFencesBean.startDrag = true } + override fun circleScalingClick() { +// mFencesMapCommon.calculateDistanceAndGetPointLatLng(delayMillis = 0) + } + override fun circleEndDragClick() { mFencesBean.startDrag = false mFencesMapCommon.calculateDistanceAndGetPointLatLng(delayMillis = 0) @@ -878,6 +882,7 @@ open class AddAndEditFencesZoneBaseActivity : override fun calculationDistance(distances: Array) { if (mFencesBean.startDrag) return LogUtil.e("选点计算距离返回${distances.toList()}") + if (distances[0].toDouble() <= 0) return when (mFencesBean.fenceShapeType) { ConstantInt.CircleShapeType -> { mFencesBean.radius = Utils.roundOffToInt(distances[0].toDouble()) diff --git a/app/src/main/java/com/abbidot/tracker/ui/activity/device/fences/PreviewFencesZoneActivity.kt b/app/src/main/java/com/abbidot/tracker/ui/activity/device/fences/PreviewFencesZoneActivity.kt index 294951a..f27016f 100644 --- a/app/src/main/java/com/abbidot/tracker/ui/activity/device/fences/PreviewFencesZoneActivity.kt +++ b/app/src/main/java/com/abbidot/tracker/ui/activity/device/fences/PreviewFencesZoneActivity.kt @@ -103,15 +103,14 @@ class PreviewFencesZoneActivity : mCurrentFences?.apply { deviceId = mCurrentDeviceId } - ViewUtil.instance.setMapSwitchLocationButtonImage( - ivPreviewFencesRefreshBtn, mShowCenterLocationType - ) - val duration = 2500L +// ViewUtil.instance.setMapSwitchLocationButtonImage( +// ivPreviewFencesRefreshBtn, mShowCenterLocationType +// ) + val duration = 600L YoYo.with(Techniques.FadeIn).duration(duration).onEnd { ivPreviewFencesMapSwitchBtn.visibility = View.VISIBLE - ivPreviewFencesRefreshBtn.visibility = View.VISIBLE +// ivPreviewFencesRefreshBtn.visibility = View.VISIBLE }.playOn(rlPreviewFencesInfoLayout) -// ViewUtil.instance.viewShowFadeInAnimation(rlPreviewFencesInfoLayout, duration) setOnClickListenerViews( btnPreviewFencesEdit, 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 d483c49..573d5e5 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 @@ -1,5 +1,6 @@ package com.abbidot.tracker.ui.activity.device.wifi +import android.annotation.SuppressLint import android.content.Intent import android.text.TextUtils import android.view.Gravity @@ -70,6 +71,7 @@ class EditWifiPowerZoneActivity : override fun getTopBar() = mViewBinding.editPowerZoneTopBar.titleTopBar + @SuppressLint("ClickableViewAccessibility") override fun initData() { super.initData() setTopBarTitle(R.string.txt_edit_power_zone) @@ -91,9 +93,9 @@ class EditWifiPowerZoneActivity : mViewBinding.apply { ilWifiNameInputLayout.tvInputNameTitle.text = getString(R.string.txt_zone_name) - ViewUtil.instance.setMapSwitchLocationButtonImage( - ivEditWifiZoneRefreshBtn, mShowCenterLocationType - ) +// ViewUtil.instance.setMapSwitchLocationButtonImage( +// ivEditWifiZoneRefreshBtn, mShowCenterLocationType +// ) setOnClickListenerViews( ivEditWifiZoneRefreshBtn, btnSaveWifiZone, @@ -101,6 +103,10 @@ class EditWifiPowerZoneActivity : btnCancelWifiZone, ilEditPowerZoneBluetoothTips.trbBleConnectState ) + rvEditWifiZoneType.setOnTouchListener { v, _ -> + v?.let { hideInputMethod(it) } + false + } setListData() @@ -112,7 +118,7 @@ class EditWifiPowerZoneActivity : add(R.id.fc_edit_power_zone_map_fragment, mFragment) } - setListenKeyboardChange() + setListenKeyboardChange(600) if (null != mBleTrackDeviceBean) { ilEditPowerZoneBluetoothTips.trbBleConnectState.let { @@ -205,12 +211,12 @@ class EditWifiPowerZoneActivity : */ private fun mapLoadOk() { mWiFiZoneBean.apply { - mEditZoneMapCommon.setShowWifiLocation(latitude, longitude, isEdit) - mPetBean?.let { - mEditZoneMapCommon.setPetLatLon( - it.imgurl, it.petType, mPetCurrentLat, mPetCurrentLon - ) - } + mEditZoneMapCommon.setShowWifiLocation(latitude, longitude, false) +// mPetBean?.let { +// mEditZoneMapCommon.setPetLatLon( +// it.imgurl, it.petType, mPetCurrentLat, mPetCurrentLon +// ) +// } } } @@ -291,9 +297,11 @@ class EditWifiPowerZoneActivity : mSelectTypeShadeAdapter = SelectFencesTypeCardShadeAdapter(mContext, typeList).apply { setOnItemClickListener(object : BaseRecyclerAdapter.OnItemClickListener { override fun onItemClick(itemView: View?, pos: Int) { + hideInputMethod(mViewBinding.root) ViewUtil.instance.updateDataBeanOnlySelectedItem( mSelectTypeShadeAdapter, typeList, pos ) + if (mWiFiZoneBean.type == pos + 1) return mWiFiZoneBean.type = pos + 1 mViewBinding.apply { ilWifiNameInputLayout.let { @@ -450,6 +458,7 @@ class EditWifiPowerZoneActivity : override fun onClick(v: View?) { if (isLimitClick()) return mViewBinding.apply { + hideInputMethod(root) when (v!!) { ivEditWifiZoneRefreshBtn -> { mWiFiZoneBean.let { diff --git a/app/src/main/java/com/abbidot/tracker/ui/common/map/FencesAddEditMapCommon.kt b/app/src/main/java/com/abbidot/tracker/ui/common/map/FencesAddEditMapCommon.kt index b1086d8..755bc35 100644 --- a/app/src/main/java/com/abbidot/tracker/ui/common/map/FencesAddEditMapCommon.kt +++ b/app/src/main/java/com/abbidot/tracker/ui/common/map/FencesAddEditMapCommon.kt @@ -137,7 +137,7 @@ class FencesAddEditMapCommon : BaseMapCommon() { } fun calculateDistanceAndGetPointLatLng( - activity: BaseActivity<*>? = null, delayMillis: Long = 1000 + activity: BaseActivity<*>? = null, delayMillis: Long = 600 ) { activity?.showLoading(true) if (null != mFencesGoogleMapFragment) { 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 837bc4d..042a89f 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 @@ -23,7 +23,6 @@ import com.abbidot.tracker.databinding.FragmentActivityV2Binding import com.abbidot.tracker.ui.activity.HomeV2Activity import com.abbidot.tracker.ui.activity.data.MoreActivityActivity import com.abbidot.tracker.ui.activity.data.MoreSleepActivity -import com.abbidot.tracker.util.Util import com.abbidot.tracker.util.ViewUtil import com.abbidot.tracker.vm.DataViewModel import com.qmuiteam.qmui.widget.pullRefreshLayout.QMUIPullRefreshLayout @@ -59,6 +58,12 @@ class ActivityV2Fragment : svHomeActivityScroll, WindowInsetsCompat.Type.statusBars() ) + ilSportDistanceLayout.apply { + ivSportDataType.setImageResource(R.drawable.icon_active_time) + tvSportDataTitle.text = getString(R.string.txt_time) + tvSportDataUnit.text = getString(R.string.txt_min) + } + ilSportActiveLayout.let { it.root.background = ContextCompat.getDrawable(mContext!!, R.drawable.shape8_gray_yellow_bg) @@ -128,7 +133,7 @@ class ActivityV2Fragment : String.format(getString(R.string.txt_min_unit_lower), "0/$goal") ilSportDistanceLayout.let { it.tvSportDataContent.text = "0" - it.tvSportDataUnit.text = Util.getMetricUnits(mContext!!, ConstantInt.Type4) +// it.tvSportDataUnit.text = Util.getMetricUnits(mContext!!, ConstantInt.Type4) } ilSportCaloriesLayout.let { it.ivSportDataType.setImageResource(R.drawable.icon_calories) @@ -189,11 +194,15 @@ class ActivityV2Fragment : String.format(getString(R.string.txt_update_time), updateTime) homeDataBean.activeTime?.let { + ViewUtil.instance.viewNumberValueAnimator( - ilSportDistanceLayout.tvSportDataContent, - 0, - Util.metricConvertUnits(it.distance.toFloat(), ConstantInt.Type4, 2) + ilSportDistanceLayout.tvSportDataContent, 0, it.activeTime / 60 ) +// ViewUtil.instance.viewNumberValueAnimator( +// ilSportDistanceLayout.tvSportDataContent, +// 0, +// Util.metricConvertUnits(it.distance.toFloat(), ConstantInt.Type4, 2) +// ) ViewUtil.instance.viewNumberValueAnimator( ilSportCaloriesLayout.tvSportDataContent, 0, it.calories ) diff --git a/app/src/main/java/com/abbidot/tracker/ui/fragment/data/RouteV2Fragment.kt b/app/src/main/java/com/abbidot/tracker/ui/fragment/data/RouteV2Fragment.kt index bce267c..6fb20e9 100644 --- a/app/src/main/java/com/abbidot/tracker/ui/fragment/data/RouteV2Fragment.kt +++ b/app/src/main/java/com/abbidot/tracker/ui/fragment/data/RouteV2Fragment.kt @@ -437,12 +437,11 @@ class RouteV2Fragment : BaseFragment(FragmentRouteV2Bind llHomeRouteCalendarFrom -> { getHomeV2Activity()?.getPet()?.let { //防止执行多次弹窗 - if (Util.isTimeLimit(mLimitExecutionTime)) { + if (isLimitClick()) { return@apply } if (Util.checkPackageLimit(getHomeV2Activity()!!, it.deviceId)) { mRechargeBackType = it.availableOrder - mLimitExecutionTime = System.currentTimeMillis() return@apply } } @@ -466,12 +465,11 @@ class RouteV2Fragment : BaseFragment(FragmentRouteV2Bind llHomeRouteCalendarTo -> { getHomeV2Activity()?.getPet()?.let { //防止执行多次弹窗 - if (Util.isTimeLimit(mLimitExecutionTime)) { + if (isLimitClick()) { return@apply } if (Util.checkPackageLimit(getHomeV2Activity()!!, it.deviceId)) { mRechargeBackType = it.availableOrder - mLimitExecutionTime = System.currentTimeMillis() return@apply } } diff --git a/app/src/main/java/com/abbidot/tracker/ui/fragment/device/HomeTrackFragment.kt b/app/src/main/java/com/abbidot/tracker/ui/fragment/device/HomeTrackFragment.kt index 6337d1b..a5017b8 100644 --- a/app/src/main/java/com/abbidot/tracker/ui/fragment/device/HomeTrackFragment.kt +++ b/app/src/main/java/com/abbidot/tracker/ui/fragment/device/HomeTrackFragment.kt @@ -538,7 +538,7 @@ class HomeTrackFragment : it.colorRedId = R.color.orange_color3 it.menuValue = if (isTimeoutReport || gpsSignal == ConstantInt.NoSignal || powerSwitch == ConstantInt.Type0 || powerSwitch == ConstantInt.Type2 || inWifiZone == ConstantInt.Type1) { - getString(R.string.txt_no_signal) + getString(R.string.txt_weak_signal) } else if (gpsSignal > ConstantInt.WeakSignal) { it.colorRedId = R.color.blue_color1 getString(R.string.txt_strong_signal) 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 eecb4db..99eead3 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 @@ -2,11 +2,14 @@ package com.abbidot.tracker.ui.fragment.map import android.content.Context import android.content.Intent +import android.content.res.ColorStateList import android.graphics.Typeface import android.location.LocationManager import android.provider.Settings +import android.view.Gravity import android.view.View import androidx.activity.result.contract.ActivityResultContracts +import androidx.core.content.ContextCompat import androidx.core.view.WindowInsetsCompat import androidx.fragment.app.Fragment import androidx.fragment.app.commit @@ -87,6 +90,9 @@ class MapV3Fragment : BaseFragment(FragmentMapV3Binding::i //地图类型,标准和卫星地图 private var mMapType = ConstantInt.Type0 + //是否可用直播 + private var isCanLive = false + companion object { @JvmStatic fun newInstance(context: Context) = MapV3Fragment().apply { @@ -174,11 +180,6 @@ class MapV3Fragment : BaseFragment(FragmentMapV3Binding::i } } - mViewBinding.apply { - homeMapLiveBtn.isEnabled = true - homeMapBluetoothBtn.isEnabled = true - } - val showFence = Util.getShowFenceSp() //检测直播页面有没有修改围栏显示 if (isShowFence != showFence) { @@ -467,6 +468,7 @@ class MapV3Fragment : BaseFragment(FragmentMapV3Binding::i //隐藏蓝牙nearby mViewBinding.ilHomeMapDeviceMsg.root.visibility = View.GONE + mViewBinding.homeMapLiveBtn.visibility = View.GONE mViewBinding.llHomeMapDeviceBatteryLayout.visibility = View.INVISIBLE mViewBinding.ilHomeMapPetLocation.root.visibility = View.INVISIBLE @@ -520,12 +522,42 @@ class MapV3Fragment : BaseFragment(FragmentMapV3Binding::i } } + private fun setLiveBtnState(canLive: Boolean) { + mViewBinding.apply { + ViewUtil.instance.viewShow(homeMapLiveBtn) + val tColor = if (canLive) { + homeMapLiveBtn.setBackgroundResource(R.drawable.shape38_green_alpha_circle_bg) + R.color.data_black_color + } else { + homeMapLiveBtn.setBackgroundResource(R.drawable.shape38_gray_alpha_circle_bg) + R.color.grey_color + } + tvHomeMapLiveTitle.setTextColor(ContextCompat.getColor(mContext!!, tColor)) + + ivHomeMapLiveImage.let { + val bg = if (canLive) { + it.imageTintList = ColorStateList.valueOf(0) + it.setImageResource(R.drawable.icon_red_dot) + R.drawable.icon_black_cir_ring + } else { + it.imageTintList = ColorStateList.valueOf( + ContextCompat.getColor( + mContext!!, R.color.grey_color + ) + ) + R.drawable.icon_gray_cir_ring + } + it.setBackgroundResource(bg) + } + } + } + private fun setMapDeviceBean(mapDeviceBean: MapDeviceBean) { mapDeviceBean.apply { //分钟后无上报、没有lte信号或在wifi中隐藏直播按钮 - mViewBinding.homeMapLiveBtn.visibility = - if (Util.isTimeoutReport(updateTime) || powerSwitch == ConstantInt.Type0 || powerSwitch == ConstantInt.Type2 || powerSwitch == ConstantInt.Type3 || inWifiZone == ConstantInt.Type1) View.GONE - else View.VISIBLE + isCanLive = + !(Util.isTimeoutReport(updateTime) || powerSwitch == ConstantInt.Type0 || powerSwitch == ConstantInt.Type2 || powerSwitch == ConstantInt.Type3 || inWifiZone == ConstantInt.Type1) + setLiveBtnState(isCanLive) mViewBinding.ilHomeMapDeviceBatteryLayout.let { mMapViewModel.setMapDeviceBattery( @@ -601,11 +633,6 @@ class MapV3Fragment : BaseFragment(FragmentMapV3Binding::i private fun goLive(isLiveJump: Boolean) { getHomeV2Activity()?.apply { getPet()?.apply { - if (isLiveJump) { - mViewBinding.homeMapLiveBtn.isEnabled = false - } else { - mViewBinding.homeMapBluetoothBtn.isEnabled = false - } val intent = Intent(mContext, LiveActivityV3::class.java) intent.putExtra(ConstantString.JumpActivity, isLiveJump) intent.putExtra(ConstantString.Pet, this) @@ -621,6 +648,7 @@ class MapV3Fragment : BaseFragment(FragmentMapV3Binding::i } override fun onClick(v: View?) { + if (isLimitClick()) return mViewBinding.apply { when (v!!) { homeMapRefreshBtn -> { @@ -644,6 +672,10 @@ class MapV3Fragment : BaseFragment(FragmentMapV3Binding::i } homeMapLiveBtn -> { + if (!isCanLive) { + showToast(R.string.txt_live_works_cellular, gravity = Gravity.CENTER) + return + } // locationPermissionsTip() goLive(true) } diff --git a/app/src/main/java/com/abbidot/tracker/ui/fragment/map/googlemap/FencesAddEditGoogleMapFragment.kt b/app/src/main/java/com/abbidot/tracker/ui/fragment/map/googlemap/FencesAddEditGoogleMapFragment.kt index 7e2715d..d7b0f1d 100644 --- a/app/src/main/java/com/abbidot/tracker/ui/fragment/map/googlemap/FencesAddEditGoogleMapFragment.kt +++ b/app/src/main/java/com/abbidot/tracker/ui/fragment/map/googlemap/FencesAddEditGoogleMapFragment.kt @@ -71,7 +71,7 @@ class FencesAddEditGoogleMapFragment : BaseGoogleMapFragment() { if (isCanExecuteCameraCallBack) { //现在围栏控件改成随地图移动,只需要执行一次 isCanExecuteCameraCallBack = false - mapOkAndDistancePointLatLng() + mapOkAndDistancePointLatLng(500) } } @@ -113,7 +113,7 @@ class FencesAddEditGoogleMapFragment : BaseGoogleMapFragment() { mFencesCircleView.postDelayed({ isMapZoomReady = true restoreEditFences() - }, 1000) + }, 500) return } @@ -155,11 +155,10 @@ class FencesAddEditGoogleMapFragment : BaseGoogleMapFragment() { /** * 地图准备好计算距离 */ - fun mapOkAndDistancePointLatLng(delayMillis: Long = 1000) { + fun mapOkAndDistancePointLatLng(delayMillis: Long) { if (mFencesBean.startDrag) return if (delayMillis == 0L) { val arrayOfDistance = getLatLngAndCalDistance() - if (mFencesBean.startDrag) return mOnActivityCallBack?.calculationDistance(arrayOfDistance) } else { //延时计算距离,防止围栏没画好/地图摄像头移动中 @@ -177,11 +176,17 @@ class FencesAddEditGoogleMapFragment : BaseGoogleMapFragment() { return when (mFencesBean.fenceShapeType) { ConstantInt.CircleShapeType -> { + var centrePointX = 0 + var startPointX = 0 //手机坐标点转换为经纬度 - val centreLatLng = mFencesCircleView.getCircleCentrePoint() - .let { mGoogleMap!!.projection.fromScreenLocation(it) } - val startLatLng = mFencesCircleView.getCircleLineStartPoint() - .let { mGoogleMap!!.projection.fromScreenLocation(it) } + val centreLatLng = mFencesCircleView.getCircleCentrePoint().let { + centrePointX = it.x + mGoogleMap!!.projection.fromScreenLocation(it) + } + val startLatLng = mFencesCircleView.getCircleLineStartPoint().let { + startPointX = it.x + mGoogleMap!!.projection.fromScreenLocation(it) + } val endLatLng = mFencesCircleView.getCircleLineEndPoint() .let { mGoogleMap!!.projection.fromScreenLocation(it) } LogUtil.e("GoogleMap,setOnCameraIdleListener 监听回调") @@ -192,6 +197,11 @@ class FencesAddEditGoogleMapFragment : BaseGoogleMapFragment() { endLatLng.latitude, endLatLng.longitude ) +// if (distance.toInt() < 50) { +// LogUtil.e("xxxxxxxxx$distance") +// mFencesCircleView.mLimitRadius = abs(centrePointX - startPointX).toFloat() +// return arrayOf("50") +// } mFencesBean.apply { latitudeCenter = centreLatLng.latitude longitudeCenter = centreLatLng.longitude @@ -202,6 +212,7 @@ class FencesAddEditGoogleMapFragment : BaseGoogleMapFragment() { } arrayOf( Utils.formatDecimal(distance, 2) +// distance.toInt().toString() ) } @@ -332,7 +343,7 @@ class FencesAddEditGoogleMapFragment : BaseGoogleMapFragment() { * 还原圆形围栏 */ private fun restoreCircleFences() { - if (null==mGoogleMap)return + if (null == mGoogleMap) return mFencesBean.apply { mFencesCircleView.let { it.visibility = View.VISIBLE @@ -375,7 +386,7 @@ class FencesAddEditGoogleMapFragment : BaseGoogleMapFragment() { * 还原矩形围栏大小 */ private fun restoreRectFences() { - if (null==mGoogleMap)return + if (null == mGoogleMap) return mFencesBean.apply { mFencesRectView.let { it.visibility = View.VISIBLE @@ -414,7 +425,7 @@ class FencesAddEditGoogleMapFragment : BaseGoogleMapFragment() { * 还原多边形围栏大小 */ private fun restorePolygonFences() { - if (null==mGoogleMap)return + if (null == mGoogleMap) return mFencesBean.apply { mFencesPolygonView.let { it.visibility = View.VISIBLE diff --git a/app/src/main/java/com/abbidot/tracker/vm/MapViewModel.kt b/app/src/main/java/com/abbidot/tracker/vm/MapViewModel.kt index 5f76f66..a90770f 100644 --- a/app/src/main/java/com/abbidot/tracker/vm/MapViewModel.kt +++ b/app/src/main/java/com/abbidot/tracker/vm/MapViewModel.kt @@ -315,7 +315,7 @@ class MapViewModel : ViewModel() { val gpsValue = if (isTimeoutReport || it.gpsSignal == ConstantInt.NoSignal || it.powerSwitch == ConstantInt.Type0 || it.powerSwitch == ConstantInt.Type2 || it.inWifiZone == ConstantInt.Type1) { menuType = ConstantInt.Close - context.getString(R.string.txt_no_signal) + context.getString(R.string.txt_weak_signal) } else if (it.gpsSignal > ConstantInt.WeakSignal) { context.getString(R.string.txt_strong_signal) } else { @@ -449,11 +449,11 @@ class MapViewModel : ViewModel() { ) it.text = context.getString(R.string.txt_charging) ViewUtil.instance.viewShow(closeBtn) - } else if (batteryLevel <= ConstantInt.LowBattery30) { + } else if (batteryLevel <= ConstantInt.LowBattery20) { val lowBattery = if (batteryLevel <= ConstantInt.LowBattery10) ConstantInt.LowBattery10 - else if (batteryLevel <= ConstantInt.LowBattery20) ConstantInt.LowBattery20 - else ConstantInt.LowBattery30 +// else if (batteryLevel <= ConstantInt.LowBattery20) ConstantInt.LowBattery20 + else ConstantInt.LowBattery20 it.setCompoundDrawablesWithIntrinsicBounds( R.drawable.icon_low_battery_image, 0, 0, 0 ) diff --git a/app/src/main/java/com/abbidot/tracker/widget/CustomViewInterfaces.kt b/app/src/main/java/com/abbidot/tracker/widget/CustomViewInterfaces.kt index aebfdc8..75e3920 100644 --- a/app/src/main/java/com/abbidot/tracker/widget/CustomViewInterfaces.kt +++ b/app/src/main/java/com/abbidot/tracker/widget/CustomViewInterfaces.kt @@ -6,8 +6,9 @@ package com.abbidot.tracker.widget * @description: */ interface OnCircleViewScaleClickListener { - fun circleScaleClick() + fun circleScaleEndClick() fun circleStartDragClick() + fun circleScalingClick() fun circleEndDragClick() } diff --git a/app/src/main/java/com/abbidot/tracker/widget/FencesCircleView.kt b/app/src/main/java/com/abbidot/tracker/widget/FencesCircleView.kt index 4cf918f..958f16d 100644 --- a/app/src/main/java/com/abbidot/tracker/widget/FencesCircleView.kt +++ b/app/src/main/java/com/abbidot/tracker/widget/FencesCircleView.kt @@ -38,6 +38,9 @@ class FencesCircleView : View { //最外面的圆半径 private var mMaxCircleRadius = 0f + //限制圆的半径 + var mLimitRadius = 0f + //中心坐标点 private var mCentreX = 0f private var mCentreY = 0f @@ -243,7 +246,7 @@ class FencesCircleView : View { /** * 设置默认的半径 */ - fun initDefaultRadius(dp: Int = 68) { + fun initDefaultRadius(dp: Int = 100) { if (dp <= 0) return setCircleRadius(dp) } @@ -364,12 +367,15 @@ class FencesCircleView : View { val y = event.y if (isScale) { val transformX = x - mOldX + val circleRadius = mMaxCircleRadius + transformX //限制缩放不能太小 - if (mMaxCircleRadius + transformX < mLocationBitmap!!.height / 2f) { + if (mLimitRadius == 0f && circleRadius < mLocationBitmap!!.height / 2f) { +// if (circleRadius < mLimitRadius || circleRadius < mLocationBitmap!!.height / 2f) { return true } - mMaxCircleRadius += transformX + mMaxCircleRadius = circleRadius mOldX = x + mScaleClickListener?.circleScalingClick() invalidate() return true } else if (isDrag) { @@ -386,7 +392,7 @@ class FencesCircleView : View { MotionEvent.ACTION_UP -> { if (isScale) { - mScaleClickListener?.circleScaleClick() + mScaleClickListener?.circleScaleEndClick() isScale = false } else if (isDrag) { mScaleClickListener?.circleEndDragClick() diff --git a/app/src/main/res/drawable/icon_gray_cir_ring.xml b/app/src/main/res/drawable/icon_gray_cir_ring.xml new file mode 100644 index 0000000..bfd1e02 --- /dev/null +++ b/app/src/main/res/drawable/icon_gray_cir_ring.xml @@ -0,0 +1,11 @@ + + + diff --git a/app/src/main/res/drawable/shape38_gray_alpha_circle_bg.xml b/app/src/main/res/drawable/shape38_gray_alpha_circle_bg.xml new file mode 100644 index 0000000..39adde6 --- /dev/null +++ b/app/src/main/res/drawable/shape38_gray_alpha_circle_bg.xml @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/shape_white_alpha_circle_bg.xml b/app/src/main/res/drawable/shape38_green_alpha_circle_bg.xml similarity index 81% rename from app/src/main/res/drawable/shape_white_alpha_circle_bg.xml rename to app/src/main/res/drawable/shape38_green_alpha_circle_bg.xml index 9270c03..5665786 100644 --- a/app/src/main/res/drawable/shape_white_alpha_circle_bg.xml +++ b/app/src/main/res/drawable/shape38_green_alpha_circle_bg.xml @@ -3,13 +3,13 @@ - + - + \ No newline at end of file diff --git a/app/src/main/res/drawable/shape40_black70_toast_bg.xml b/app/src/main/res/drawable/shape40_black70_toast_bg.xml index f96bf99..580a09b 100644 --- a/app/src/main/res/drawable/shape40_black70_toast_bg.xml +++ b/app/src/main/res/drawable/shape40_black70_toast_bg.xml @@ -2,7 +2,7 @@ - + diff --git a/app/src/main/res/layout/activity_data_board.xml b/app/src/main/res/layout/activity_data_board.xml index 1dd2a86..029f8ce 100644 --- a/app/src/main/res/layout/activity_data_board.xml +++ b/app/src/main/res/layout/activity_data_board.xml @@ -39,6 +39,7 @@ layout="@layout/layout_data_board_item" android:layout_width="match_parent" android:layout_height="wrap_content" + android:visibility="gone" android:layout_marginTop="@dimen/dp_16" /> diff --git a/app/src/main/res/layout/activity_edit_power_zone.xml b/app/src/main/res/layout/activity_edit_power_zone.xml index 9aa6601..97e42bb 100644 --- a/app/src/main/res/layout/activity_edit_power_zone.xml +++ b/app/src/main/res/layout/activity_edit_power_zone.xml @@ -36,14 +36,16 @@ android:layout_alignParentEnd="true" android:layout_alignParentBottom="true" android:layout_marginEnd="@dimen/dp_12" - android:layout_marginBottom="@dimen/dp_36" /> + android:layout_marginBottom="@dimen/dp_36" + android:visibility="gone" /> diff --git a/app/src/main/res/layout/activity_more_activity.xml b/app/src/main/res/layout/activity_more_activity.xml index 9c9b7b4..582ff07 100644 --- a/app/src/main/res/layout/activity_more_activity.xml +++ b/app/src/main/res/layout/activity_more_activity.xml @@ -171,6 +171,7 @@ @@ -351,6 +352,7 @@ android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginTop="@dimen/dp_8" + android:visibility="gone" android:background="@drawable/shape8_white_gray_bg" android:orientation="horizontal" android:paddingHorizontal="@dimen/dp_12" diff --git a/app/src/main/res/layout/fragment_map_v2.xml b/app/src/main/res/layout/fragment_map_v2.xml index 0029956..a09bb12 100644 --- a/app/src/main/res/layout/fragment_map_v2.xml +++ b/app/src/main/res/layout/fragment_map_v2.xml @@ -75,7 +75,7 @@ android:layout_alignParentBottom="true" android:layout_centerHorizontal="true" android:layout_marginBottom="@dimen/dp_58" - android:background="@drawable/shape_white_alpha_circle_bg" + android:background="@drawable/shape38_green_alpha_circle_bg" android:orientation="vertical" android:paddingHorizontal="@dimen/dp_36" android:paddingVertical="@dimen/dp_6" diff --git a/app/src/main/res/layout/fragment_map_v3.xml b/app/src/main/res/layout/fragment_map_v3.xml index 1914d67..46dec23 100644 --- a/app/src/main/res/layout/fragment_map_v3.xml +++ b/app/src/main/res/layout/fragment_map_v3.xml @@ -86,23 +86,26 @@ android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignTop="@id/home_map_refresh_btn" - android:background="@drawable/shape_white_alpha_circle_bg" + android:background="@drawable/shape38_gray_alpha_circle_bg" android:orientation="vertical" android:paddingHorizontal="@dimen/dp_14" - android:paddingVertical="@dimen/dp_16" - android:visibility="invisible"> + android:paddingVertical="@dimen/dp_16"> + android:src="@drawable/icon_red_dot" + android:tint="@color/grey_color" /> diff --git a/app/src/main/res/layout/item_my_tracker_v2_layout.xml b/app/src/main/res/layout/item_my_tracker_v2_layout.xml index 2fb6022..f9c185b 100644 --- a/app/src/main/res/layout/item_my_tracker_v2_layout.xml +++ b/app/src/main/res/layout/item_my_tracker_v2_layout.xml @@ -1,7 +1,5 @@ @@ -138,6 +136,7 @@ android:textStyle="bold" /> - - + \ No newline at end of file diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index f143c68..2ddb4be 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -1053,5 +1053,9 @@ Powered off Near %s Charging + Total Time + Live works on cellular only + Unbind Device + Edit Profile \ No newline at end of file