From 630fc29f807900b58cede7a476cbf835c4d7d4b0 Mon Sep 17 00:00:00 2001 From: yezhiqiu <983577727@qq.com> Date: Mon, 24 Nov 2025 15:39:29 +0800 Subject: [PATCH] =?UTF-8?q?1.=E4=BF=AE=E6=94=B9=E5=9F=BA=E7=A1=80=E5=A5=97?= =?UTF-8?q?=E9=A4=90=E8=BF=87=E6=9C=9F=E6=88=96=E9=80=80=E6=AC=BE=EF=BC=8C?= =?UTF-8?q?=E8=A7=A6=E5=8F=91=E9=AB=98=E7=BA=A7=E5=A5=97=E9=A4=90=E5=8A=9F?= =?UTF-8?q?=E8=83=BD=E6=8F=90=E7=A4=BA=E8=BF=87=E6=9C=9F=E5=8E=BB=E5=85=85?= =?UTF-8?q?=E5=80=BC=202.=E5=8E=BB=E9=99=A4=E5=9C=B0=E5=9B=BE=E5=90=AF?= =?UTF-8?q?=E5=8A=A8=E7=A7=BB=E5=8A=A8=E5=8A=A8=E7=94=BB=203.=E4=BB=85?= =?UTF-8?q?=E5=9C=A8=E9=A6=96=E6=AC=A1=E5=90=AF=E5=8A=A8APP=E6=97=B6?= =?UTF-8?q?=EF=BC=8C=E6=8F=90=E7=A4=BA=E4=B8=80=E6=AC=A1=E8=93=9D=E7=89=99?= =?UTF-8?q?=E5=BC=80=E5=85=B3=EF=BC=9B=E5=8E=BB=E6=8E=89=E5=BC=80=E5=90=AF?= =?UTF-8?q?=E7=9B=B4=E6=92=AD=E5=9D=9A=E6=8C=81=E8=93=9D=E7=89=99=E5=BC=80?= =?UTF-8?q?=E5=85=B3=204.=E8=BE=93=E5=85=A5wifi=E5=AF=86=E7=A0=81=E7=95=8C?= =?UTF-8?q?=E9=9D=A2=E7=82=B9=E5=87=BB=E8=BF=9E=E6=8E=A5=E6=8C=89=E9=92=AE?= =?UTF-8?q?=E6=94=B6=E8=B5=B7=E9=94=AE=E7=9B=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/build.gradle | 2 +- .../com/abbidot/tracker/base/BaseFragment.kt | 3 + .../tracker/dialog/PackageUpgradeDialog.kt | 1 + .../tracker/ui/activity/HomeV2Activity.kt | 75 ++++++++----------- .../AddAndEditFencesZoneBaseActivity.kt | 13 ++-- .../fences/PreviewFencesZoneActivity.kt | 23 +++--- .../device/wifi/AddWifiPasswordActivity.kt | 2 + .../device/wifi/AddWifiPowerZone2Activity.kt | 9 ++- .../device/wifi/EditWifiPowerZoneActivity.kt | 47 +++++++----- .../tracker/ui/activity/map/LiveActivityV2.kt | 55 +++++++------- .../subscribe/MySubscriptionActivity.kt | 14 +++- .../subscribe/PaymentSuccessActivity.kt | 3 + .../subscribe/RequestRefundActivity.kt | 5 +- .../subscribe/SubscriptionHistoryActivity.kt | 14 +++- .../ui/common/PermissionsActivityCommon.kt | 2 +- .../tracker/ui/common/map/HomeMapCommon.kt | 14 ++-- .../ui/common/map/WifiZone2MapCommon.kt | 7 ++ .../ui/fragment/data/RouteV2Fragment.kt | 38 +++++++++- .../tracker/ui/fragment/map/MapV2Fragment.kt | 67 +++++++++++------ .../map/baidumap/BaseBaiduMapFragment.kt | 8 +- .../map/googlemap/BaseGoogleMapFragment.kt | 13 ++-- .../FencesAddEditGoogleMapFragment.kt | 2 +- .../map/googlemap/HomeMapGoogleMapFragment.kt | 39 +++++----- .../java/com/abbidot/tracker/util/Util.kt | 75 +++++++++++++++++-- .../java/com/abbidot/tracker/util/ViewUtil.kt | 3 + .../tracker/util/bluetooth/SRBleUtil.kt | 6 +- .../tracker/vm/ConnectionDeviceViewModel.kt | 6 +- .../tracker/vm/FindBleDeviceViewModel.kt | 2 +- .../layout/activity_add_wifi_power_zone2.xml | 9 ++- .../abbidot/baselibrary/constant/MMKVKey.kt | 6 ++ 30 files changed, 371 insertions(+), 192 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index 5d3c80d..3fda936 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-Beta1" + versionName "2.1.1-Beta2" testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" 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 25e5a47..520ebff 100644 --- a/app/src/main/java/com/abbidot/tracker/base/BaseFragment.kt +++ b/app/src/main/java/com/abbidot/tracker/base/BaseFragment.kt @@ -34,6 +34,9 @@ abstract class BaseFragment( var mContext: Context? = null var mLoadingDialog: QMUITipDialog? = null + //防止某个时间执行多次 + var mLimitExecutionTime = 0L + /** * Fragment中嵌套子Fragment时,如果父Fragment被销毁而子Fragment未被销毁,会导致子Fragment的视图不再显示‌ */ diff --git a/app/src/main/java/com/abbidot/tracker/dialog/PackageUpgradeDialog.kt b/app/src/main/java/com/abbidot/tracker/dialog/PackageUpgradeDialog.kt index 568b523..2949fee 100644 --- a/app/src/main/java/com/abbidot/tracker/dialog/PackageUpgradeDialog.kt +++ b/app/src/main/java/com/abbidot/tracker/dialog/PackageUpgradeDialog.kt @@ -65,6 +65,7 @@ class PackageUpgradeDialog(activity: BaseActivity<*>, deviceId: String) : } } }) + mSubscriptionsOrderLiveData.removeObservers(mBaseActivity) } getSubscriptionsOrder() } 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 6db9e4e..8d462be 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 @@ -23,7 +23,6 @@ import com.abbidot.tracker.R import com.abbidot.tracker.adapter.ChangePetListDialogAdapter import com.abbidot.tracker.adapter.ViewPagerAdapter import com.abbidot.tracker.base.BaseActivity -import com.abbidot.tracker.base.BaseDialog import com.abbidot.tracker.bean.BleTrackDeviceBean import com.abbidot.tracker.bean.PetBean import com.abbidot.tracker.bean.ReceiveDeviceData @@ -31,12 +30,10 @@ import com.abbidot.tracker.constant.ConstantInt import com.abbidot.tracker.constant.ConstantString import com.abbidot.tracker.constant.GetResultCallback import com.abbidot.tracker.databinding.ActivityHomeV2Binding -import com.abbidot.tracker.dialog.CommonDialog2 import com.abbidot.tracker.dialog.CommonListDialog import com.abbidot.tracker.receiver.BluetoothMonitorReceiver import com.abbidot.tracker.ui.DebugActivity import com.abbidot.tracker.ui.activity.device.AddNewTracker1Activity -import com.abbidot.tracker.ui.activity.subscribe.SubscriptionPlanActivity import com.abbidot.tracker.ui.fragment.account.AccountV2Fragment import com.abbidot.tracker.ui.fragment.data.ActivityV2Fragment import com.abbidot.tracker.ui.fragment.data.RouteV2Fragment @@ -321,34 +318,6 @@ class HomeV2Activity : BaseActivity(ActivityHomeV2Binding } } - /** - * 套餐过期查询订单回调,防止和升级套餐查询套餐回调冲突 - */ - private fun packageExpiresObserve() { - mSubscriptionViewModel.mSubscriptionsOrderLiveData.observe(this@HomeV2Activity) { - dealRequestResult(it, object : GetResultCallback { - override fun onResult(any: Any) { - it.getOrNull()?.let { list -> - val pet = mPetList[mSelectPetPosition] - for (l in list) { - if (l.deviceId == pet.deviceId) { - Intent( - mContext, SubscriptionPlanActivity::class.java - ).let { i -> - i.putExtra(ConstantString.LkSetMeal, l) - i.putExtra(ConstantString.RechargeType, ConstantInt.Type2) - startActivity(i) - } - break - } - } - } - } - }) - mSubscriptionViewModel.mSubscriptionsOrderLiveData.removeObservers(this@HomeV2Activity) - } - } - private fun setPetData(petList: MutableList) { mPetList.addAll(petList) if (mSelectPetPosition > mPetList.size - 1) { @@ -369,6 +338,7 @@ class HomeV2Activity : BaseActivity(ActivityHomeV2Binding getPet(false)?.apply { mLogBleReportViewModel.uploadLog(mContext, macID) } + (mFragments[2] as MapV2Fragment).showPetNameAndHead(mSelectPetPosition) } else { onChangeClick(mSelectPetPosition) when (mViewBinding.homeV2ViewPager2.currentItem) { @@ -394,7 +364,6 @@ class HomeV2Activity : BaseActivity(ActivityHomeV2Binding } } } - (mFragments[2] as MapV2Fragment).showPetNameAndHead(mSelectPetPosition) } } @@ -406,16 +375,7 @@ class HomeV2Activity : BaseActivity(ActivityHomeV2Binding getPet(false)?.apply { //判断套餐有没有到期 if (shared == ConstantInt.NoShare && availableOrder == ConstantInt.Type0) { - CommonDialog2( - mContext, - getString(R.string.txt_subscription_expired), - getString(R.string.txt_card_recharge), - object : BaseDialog.OnDialogOkListener { - override fun onOkClick(dialog: BaseDialog<*>) { - packageExpiresObserve() - mSubscriptionViewModel.getSubscriptionsOrder() - } - }).show() + Util.checkPackageExpired(this@HomeV2Activity, deviceId) } } } @@ -435,9 +395,11 @@ class HomeV2Activity : BaseActivity(ActivityHomeV2Binding * 检查获取定位蓝牙权限 */ private fun checkPermissions() { + val checkBleOpen = MMKVUtil.getBoolean(MMKVKey.isFirstCheckBleOpen, true) Util.checkBluetoothPermissionsEnabled(mContext, { // mAutomaticConnectionDeviceViewModel.autoConnectBleDevice(mContext) - }) + }, isCheckBleOpen = checkBleOpen) + if (checkBleOpen) MMKVUtil.putBoolean(MMKVKey.isFirstCheckBleOpen, false) } /** @@ -556,7 +518,7 @@ class HomeV2Activity : BaseActivity(ActivityHomeV2Binding private fun autoConnectDevice() { getPet(false)?.apply { if (TextUtils.isEmpty(macID)) return@apply - if (SRBleUtil.instance.isBlueEnable(mContext)) { + if (SRBleUtil.instance.isBleEnable(mContext)) { if (BleManager.getInstance().isConnected(macID)) { SRBleUtil.instance.cancelBleScan("已连接设备,取消其他连接扫描") val bleTrack = SRBleUtil.instance.getConnectMacDevice(macID) @@ -570,6 +532,31 @@ class HomeV2Activity : BaseActivity(ActivityHomeV2Binding } } +// override fun onTrimMemory(level: Int) { +// super.onTrimMemory(level) +// LogUtil.e("系统级别:$level"+printLevel(level)) +// } +// private fun printLevel( level:Int) :String{ +// var desc="" +// when (level) { +// TRIM_MEMORY_COMPLETE->//80 +// desc = "进程在LRU尾部,如果没有足够的内存, 将很快被杀死"; +// TRIM_MEMORY_MODERATE->//60 +// desc = "进程在LRU中部,如果系统进一步需要内存, 可能会被杀死"; +// TRIM_MEMORY_BACKGROUND->//40 +// desc = "进程在LRU头部,虽然本进程不会被高优杀死, 但系统已经开始准备杀死LRU列表中的其他进程"; +// TRIM_MEMORY_UI_HIDDEN->//20 +// desc = "界面不可见,建议释放UI资源"; +// TRIM_MEMORY_RUNNING_CRITICAL->//15 +// desc = "虽然进程不会被高优杀死, 但系统已经开始准备杀死LRU列表中的其他进程,应该释放无用资源以防止性能下降"; +// TRIM_MEMORY_RUNNING_LOW->//10 +// desc = "虽然进程不会被高优杀死, 但系统已经开始准备杀死LRU列表中的其他进程,应该释放不必要的资源来提供系统性能"; +// TRIM_MEMORY_RUNNING_MODERATE->//5 +// desc = "系统已经进入了低内存的状态,进程正在运行但是不会被杀死"; +// } +// return desc; +// } + private var mTempTime = 0L override fun listenBackPressed() { // 2s内再次选择back键有效 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 fe95515..1302597 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 @@ -124,13 +124,6 @@ open class AddAndEditFencesZoneBaseActivity : isEditFences, this@AddAndEditFencesZoneBaseActivity ) { -// mFencesList?.apply { -// mPetBean?.let { -// mFencesMapCommon.setPetHeadAndCurrentLocation( -// it.imgurl, latitude, longitude -// ) -// } -// } mapLoadOk() } supportFragmentManager.commit { @@ -392,6 +385,11 @@ open class AddAndEditFencesZoneBaseActivity : successTips(R.string.txt_save_successful) } } + + override fun onRequestError(exceptionCode: String?) { + super.onRequestError(exceptionCode) + setButtonEnabled(mViewBinding.btnSaveFencesZone, ConstantInt.Type1) + } }) } } @@ -688,6 +686,7 @@ open class AddAndEditFencesZoneBaseActivity : return } mActionType = ConstantInt.Type1 + setButtonEnabled(mViewBinding.btnSaveFencesZone, ConstantInt.Type0) mPetBean?.let { if (BleManager.getInstance().isConnected(it.macID)) { sendFenceData() 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 8970dd7..294951a 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 @@ -67,9 +67,6 @@ class PreviewFencesZoneActivity : mRightImageButton = addRightImageButton(R.drawable.icon_gray_delete_svg) } - val mapTypeSp = Util.getMapTypeSp() - isSatelliteMap = mapTypeSp == ConstantInt.Type1 - mFencesList = mutableListOf() intent?.apply { @@ -286,15 +283,24 @@ class PreviewFencesZoneActivity : mFencesList.addAll(this.toList()) } - var currentFencesId = "" mCurrentFences?.apply { - currentFencesId = fenceId setCurrentFencesInfo(this) + setFencesAndPetData() } + } + } + + private fun setFencesAndPetData() { + var currentFencesId = "" + val mapTypeSp = Util.getMapTypeSp() + isSatelliteMap = mapTypeSp == ConstantInt.Type1 + mCurrentFences?.apply { + currentFencesId = fenceId mFencesMapViewModel.setImageFencesData( mContext, mFencesList, mFragment, currentFencesId, isSatelliteMap ) - + } + mGetFencesBean?.apply { mPetBean?.let { mCurrentFences?.deviceServiceId = it.deviceServiceId mCurrentFences?.deviceId = it.deviceId @@ -420,13 +426,10 @@ class PreviewFencesZoneActivity : cbPreviewFencesSwitch -> mCurrentFences?.apply { changeOnAndOff(this) } ivPreviewFencesMapSwitchBtn -> { - isSatelliteMap = !isSatelliteMap mPreviewFencesMapCommon.switchSatelliteAndNormalMapType() //切换卫星地图,围栏换颜色 mCurrentFences?.apply { - mFencesMapViewModel.setImageFencesData( - mContext, mFencesList, mFragment, fenceId, isSatelliteMap - ) + setFencesAndPetData() } } diff --git a/app/src/main/java/com/abbidot/tracker/ui/activity/device/wifi/AddWifiPasswordActivity.kt b/app/src/main/java/com/abbidot/tracker/ui/activity/device/wifi/AddWifiPasswordActivity.kt index 3b6df32..dfa42ac 100644 --- a/app/src/main/java/com/abbidot/tracker/ui/activity/device/wifi/AddWifiPasswordActivity.kt +++ b/app/src/main/java/com/abbidot/tracker/ui/activity/device/wifi/AddWifiPasswordActivity.kt @@ -33,6 +33,7 @@ import com.clj.fastble.utils.HexUtil import kotlinx.coroutines.delay import kotlinx.coroutines.launch + class AddWifiPasswordActivity : BaseActivity(ActivityAddWifiPasswordBinding::inflate) { @@ -202,6 +203,7 @@ class AddWifiPasswordActivity : private fun sendPasswordStart() { showLoading(true, R.string.txt_please_wait) mViewBinding.apply { + hideInputMethod(ilAddWifiPwdPassword.etInputContent) btnAddWifiPwdConnect.isEnabled = false lavAddWifiPwdAnim.playAnimation() lavAddWifiPwdAnim.visibility = View.VISIBLE diff --git a/app/src/main/java/com/abbidot/tracker/ui/activity/device/wifi/AddWifiPowerZone2Activity.kt b/app/src/main/java/com/abbidot/tracker/ui/activity/device/wifi/AddWifiPowerZone2Activity.kt index fff7aff..7e78191 100644 --- a/app/src/main/java/com/abbidot/tracker/ui/activity/device/wifi/AddWifiPowerZone2Activity.kt +++ b/app/src/main/java/com/abbidot/tracker/ui/activity/device/wifi/AddWifiPowerZone2Activity.kt @@ -53,7 +53,12 @@ class AddWifiPowerZone2Activity : add(R.id.fc_wifi_power_zone2_map_fragment, mFragment) } - setOnClickListenerViews(btnAddWifiZone2Next, tbRefreshLocationBtn, tvWifiZone2LaterBtn) + setOnClickListenerViews( + btnAddWifiZone2Next, + tbRefreshLocationBtn, + tvWifiZone2LaterBtn, + ivWifiPowerZone2MapTypeBtn + ) } } @@ -100,6 +105,8 @@ class AddWifiPowerZone2Activity : ViewUtil.instance.viewAlphaAndRotationObjectAnimator(v) mWifiZone2MapCommon.refreshLocation() } + + ivWifiPowerZone2MapTypeBtn -> mWifiZone2MapCommon.switchSatelliteAndNormalMapType() } } } 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 f923ed9..47390ca 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 @@ -130,6 +130,10 @@ class EditWifiPowerZoneActivity : mViewBinding.ilEditPowerZoneBluetoothTips.trbBleConnectState.let { view -> val bgColor = if (trackDevice.conState == ConState.CONNECTED) { view.text = getString(R.string.tracker_manage_set_ble_connect) + mPetBean?.let { + //查找当前Mac的设备 + mBleTrackDeviceBean = SRBleUtil.instance.getConnectMacDevice(it.macID) + } ContextCompat.getColor(mContext, R.color.cyan_color1) } else { view.text = getString(R.string.tracker_manage_set_ble_unconnect) @@ -345,27 +349,30 @@ class EditWifiPowerZoneActivity : val data2 = SRBleCmdUtil.instance.byteToInt(data[2]) mRightImageButton?.isEnabled = true - - if (data1 == 0x01 && data2 == 0x00) { - //添加wifi 指令成功 - if (data0 == 0x10) { - LogUtil.e("设置设备wifi指令成功") - mWiFiZoneViewModel.addWifiZone(this, mWiFiZoneBean) + if (data0 == 0x10 || data0 == 0x11) { + if (data1 == 0x01 && data2 == 0x00) { + //添加wifi 指令成功 + if (data0 == 0x10) { + LogUtil.e("设置设备wifi指令成功") + mWiFiZoneViewModel.addWifiZone(this, mWiFiZoneBean) + } + //删除成功 + else { + LogUtil.e("删除设备wifi指令成功") + mWiFiZoneViewModel.deleteWifiZone( + this@EditWifiPowerZoneActivity, mWiFiZoneBean + ) + } + } else if (data1 == 0x01 && data2 == 0x01) { + showLoading(false) + setButtonEnabled(mViewBinding.btnSaveWifiZone, ConstantInt.Type1) + showToast(R.string.txt_duplicate_wifi_not, gravity = Gravity.CENTER) + } else { + setButtonEnabled(mViewBinding.btnSaveWifiZone, ConstantInt.Type1) + showLoading(false) + showToast("Fail", gravity = Gravity.CENTER) + LogUtil.e("设备wifi指令失败") } - //删除成功 - else if (data0 == 0x11) { - LogUtil.e("删除设备wifi指令成功") - mWiFiZoneViewModel.deleteWifiZone(this@EditWifiPowerZoneActivity, mWiFiZoneBean) - } - } else if (data1 == 0x01 && data2 == 0x01) { - showLoading(false) - setButtonEnabled(mViewBinding.btnSaveWifiZone, ConstantInt.Type1) - showToast(R.string.txt_duplicate_wifi_not, gravity = Gravity.CENTER) - } else { - setButtonEnabled(mViewBinding.btnSaveWifiZone, ConstantInt.Type1) - showLoading(false) - showToast("Fail", gravity = Gravity.CENTER) - LogUtil.e("设备wifi指令失败") } } } diff --git a/app/src/main/java/com/abbidot/tracker/ui/activity/map/LiveActivityV2.kt b/app/src/main/java/com/abbidot/tracker/ui/activity/map/LiveActivityV2.kt index 7a73062..537af22 100644 --- a/app/src/main/java/com/abbidot/tracker/ui/activity/map/LiveActivityV2.kt +++ b/app/src/main/java/com/abbidot/tracker/ui/activity/map/LiveActivityV2.kt @@ -5,6 +5,7 @@ import android.graphics.Typeface import android.view.View import android.widget.RelativeLayout import androidx.activity.viewModels +import androidx.core.view.isGone import androidx.fragment.app.Fragment import androidx.fragment.app.commit import androidx.lifecycle.lifecycleScope @@ -82,7 +83,7 @@ class LiveActivityV2 : BaseActivity(ActivityLiveV2Binding private var mMapDeviceBean: MapDeviceBean? = null //启动动画移动地图摄像机 - private var isAnimMoveCamera = true + private var isMoveCamera = true //是否显示围栏 private var isShowFence = true @@ -343,6 +344,11 @@ class LiveActivityV2 : BaseActivity(ActivityLiveV2Binding //接收蓝牙连接状态 XEventBus.observe(this, EventName.ConnectDeviceState) { trackBle: BleTrackDeviceBean -> + mPetBean?.apply { + if (trackBle.mac == macID && trackBle.conState != ConState.CONNECTED) { + mViewBinding.rvLiveV2MapDeviceMsg.visibility = View.GONE + } + } mMapDeviceBean?.apply { if (trackBle.mac == deviceMacId) { updateConState(trackBle) @@ -485,14 +491,17 @@ class LiveActivityV2 : BaseActivity(ActivityLiveV2Binding mViewBinding.ilLiveV2BluetoothFindDevice.ilLiveV2RadarLightSwitch.cbDeviceLightSwitch.isChecked = isOpen - if (haveLocationData && liveFlag == ConstantInt.Type1) { +// if (haveLocationData && liveFlag == ConstantInt.Type1) { + if (liveFlag == ConstantInt.Type1) { if (!isStartLive) { isStartLive = true liveStartTip() } - lifecycleScope.launch { - locationList?.let { location -> - liveDrawLines(location) + if (haveLocationData) { + lifecycleScope.launch { + locationList?.let { location -> + liveDrawLines(location) + } } } mHomeMapCommon.setMapDeviceBean(it) @@ -642,7 +651,11 @@ class LiveActivityV2 : BaseActivity(ActivityLiveV2Binding if (null == bleConDevice) { if (isLiveJump) { //没有连接,一进入页面就尝试连接 - mConDeviceViewModel.connectDeviceToMac(this@LiveActivityV2, macID) + if (SRBleUtil.instance.isBleEnable(mContext)) { + mConDeviceViewModel.connectDeviceToMac(this@LiveActivityV2, macID) + } else { + openNetLive(ConstantInt.Type2) + } } } else { updateConState(bleConDevice) @@ -669,9 +682,9 @@ class LiveActivityV2 : BaseActivity(ActivityLiveV2Binding mHomeMapCommon.let { it.setMapDeviceBean(this) - it.refreshPetCurrentLocation(latitude, longitude, isAnimMoveCamera) + it.refreshPetCurrentLocation(latitude, longitude, isMoveCamera) it.startRippleCircleAnim() - isAnimMoveCamera = false + isMoveCamera = false // val userAndPetDistance = it.getUserAndPetDistance() // mViewBinding.tvLiveV2Distance.text = String.format( // getString(R.string.txt_ft_unit), Utils.formatDecimal(userAndPetDistance) @@ -772,20 +785,18 @@ class LiveActivityV2 : BaseActivity(ActivityLiveV2Binding */ private fun liveStartTip() { LogUtil.e("直播开始了") -// mStartLiveIndex = 2 - //直播开始显示Starting 5-min Live -// mCountDownViewModel.startCountDown(2) + if (mStartLiveIndex == 0) { + mStartLiveIndex = 2 + //直播开始显示Starting 5-min Live + mCountDownViewModel.startCountDown(1) + mHomeMapCommon.greenRippleCircleAnim() + } } /** * 直播画线 */ private fun liveDrawLine(latitude: Double, longitude: Double) { - if (mStartLiveIndex == 0) { - mStartLiveIndex = 2 - //直播开始显示Starting 5-min Live - mCountDownViewModel.startCountDown(1) - } mHomeMapCommon.addTrackLine(latitude, longitude) val userAndPetDistance = mHomeMapCommon.getUserAndPetDistance() val distanceStr = Util.metricConvertUnits( @@ -798,11 +809,6 @@ class LiveActivityV2 : BaseActivity(ActivityLiveV2Binding * 直播画线 */ private fun liveDrawLines(trackList: MutableList) { - if (mStartLiveIndex == 0) { - mStartLiveIndex = 2 - //直播开始显示Starting 5-min Live - mCountDownViewModel.startCountDown(1) - } mHomeMapCommon.addTrackLines(trackList) val userAndPetDistance = mHomeMapCommon.getUserAndPetDistance() val distanceStr = Util.metricConvertUnits( @@ -819,7 +825,7 @@ class LiveActivityV2 : BaseActivity(ActivityLiveV2Binding miLiveV2MapAddressView.visibility = View.GONE val relativeLayout = ivMapLiveV2RefreshBtn.layoutParams as RelativeLayout.LayoutParams ivMapLiveV2RefreshBtn.visibility = View.GONE - if (ilLiveV2BluetoothFindDevice.root.visibility == View.GONE) { + if (ilLiveV2BluetoothFindDevice.root.isGone) { //找蓝牙设备布局显示 YoYo.with(Techniques.BounceInUp).duration(800).onStart { ilLiveV2OperateLayout.root.visibility = View.GONE @@ -863,7 +869,7 @@ class LiveActivityV2 : BaseActivity(ActivityLiveV2Binding private fun showLiveIssue() { mViewBinding.apply { miLiveV2MapAddressView.visibility = View.GONE - if (ilMapLiveV2IssueLayout.root.visibility == View.GONE) { + if (ilMapLiveV2IssueLayout.root.isGone) { YoYo.with(Techniques.BounceInUp).duration(700).onStart { ilLiveV2OperateLayout.root.visibility = View.GONE ilMapLiveV2IssueLayout.root.visibility = View.VISIBLE @@ -902,9 +908,6 @@ class LiveActivityV2 : BaseActivity(ActivityLiveV2Binding }) } - // override fun onBackPressed() { -// stopMapLive() -// } override fun listenBackPressed() { if (isLiveJump) stopMapLive() else super.listenBackPressed() diff --git a/app/src/main/java/com/abbidot/tracker/ui/activity/subscribe/MySubscriptionActivity.kt b/app/src/main/java/com/abbidot/tracker/ui/activity/subscribe/MySubscriptionActivity.kt index 73e325d..2b4bd4f 100644 --- a/app/src/main/java/com/abbidot/tracker/ui/activity/subscribe/MySubscriptionActivity.kt +++ b/app/src/main/java/com/abbidot/tracker/ui/activity/subscribe/MySubscriptionActivity.kt @@ -1,6 +1,8 @@ package com.abbidot.tracker.ui.activity.subscribe import androidx.activity.viewModels +import com.abbidot.baselibrary.constant.EventName +import com.abbidot.baselibrary.eventbus.XEventBus import com.abbidot.baselibrary.util.AppUtils import com.abbidot.tracker.R import com.abbidot.tracker.adapter.MySubscriptionAdapter @@ -18,6 +20,7 @@ class MySubscriptionActivity : private lateinit var mSubscriptionAdapter: MySubscriptionAdapter private var mPosition = 0 + private var mRefreshPackage = true override fun getTopBar() = mViewBinding.ilMySubscriptionTopBar.titleTopBar @@ -46,13 +49,16 @@ class MySubscriptionActivity : override fun onResume() { super.onResume() - mSubscriptionViewModel.getSubscriptionsOrder() + if (mRefreshPackage) { + mRefreshPackage = false + mSubscriptionViewModel.getSubscriptionsOrder() + } } override fun liveDataObserve() { -// XEventBus.observe(this, EventName.PayBack) { -// mSubscriptionViewModel.getSubscriptionsOrder() -// } + XEventBus.observe(this, EventName.RefreshPackage) { + mRefreshPackage = true + } mSubscriptionViewModel.apply { mSubscriptionsOrderLiveData.observe(this@MySubscriptionActivity) { dealRequestResult(it, object : GetResultCallback { diff --git a/app/src/main/java/com/abbidot/tracker/ui/activity/subscribe/PaymentSuccessActivity.kt b/app/src/main/java/com/abbidot/tracker/ui/activity/subscribe/PaymentSuccessActivity.kt index b5b6610..7094bf4 100644 --- a/app/src/main/java/com/abbidot/tracker/ui/activity/subscribe/PaymentSuccessActivity.kt +++ b/app/src/main/java/com/abbidot/tracker/ui/activity/subscribe/PaymentSuccessActivity.kt @@ -101,6 +101,7 @@ class PaymentSuccessActivity : override fun liveDataObserve() { //接收蓝牙连接状态 XEventBus.observe(this, EventName.ConnectDeviceState) { ble: BleTrackDeviceBean -> + if (TextUtils.isEmpty(mMac)) return@observe mViewBinding.ilPaymentSuccessBluetoothTips.trbBleConnectState.let { view -> val bgColor = if (ble.conState == ConState.CONNECTED) { setButtonEnabled(mViewBinding.btnPaymentSuccessContinue, ConstantInt.Type1) @@ -118,6 +119,7 @@ class PaymentSuccessActivity : //搜索蓝牙的设备状态 XEventBus.observe(this, EventName.ActionConDeviceState) { conState: Int -> + if (TextUtils.isEmpty(mMac)) return@observe setButtonEnabled(mViewBinding.btnPaymentSuccessContinue, ConstantInt.Type0) if (conState == ConState.DEVICE_NOT_FOUND) { // ViewUtil.instance.showDialog( @@ -139,6 +141,7 @@ class PaymentSuccessActivity : //接收蓝牙返回数据 XEventBus.observe(this, EventName.DeviceReceiveData) { receiveData: ReceiveDeviceData -> + if (TextUtils.isEmpty(mMac)) return@observe mPayResult?.apply { if (mMac == receiveData.mac) { val data = receiveData.data diff --git a/app/src/main/java/com/abbidot/tracker/ui/activity/subscribe/RequestRefundActivity.kt b/app/src/main/java/com/abbidot/tracker/ui/activity/subscribe/RequestRefundActivity.kt index 0f850a9..e27e43f 100644 --- a/app/src/main/java/com/abbidot/tracker/ui/activity/subscribe/RequestRefundActivity.kt +++ b/app/src/main/java/com/abbidot/tracker/ui/activity/subscribe/RequestRefundActivity.kt @@ -3,6 +3,8 @@ package com.abbidot.tracker.ui.activity.subscribe import android.text.TextUtils import android.view.View import androidx.activity.viewModels +import com.abbidot.baselibrary.constant.EventName +import com.abbidot.baselibrary.eventbus.XEventBus import com.abbidot.tracker.R import com.abbidot.tracker.base.BaseActivity import com.abbidot.tracker.bean.SubscriptionsOrderBean @@ -39,7 +41,7 @@ class RequestRefundActivity : val planName = getString(R.string.txt_plan) + " ${it.mealName}" tvRequestRefundPlanName.text = planName val refundRefund = getString(R.string.txt_refund) + ": " + String.format( - mContext.getString(R.string.txt_money_unit), it.totalAmountWithTax + mContext.getString(R.string.txt_money_unit), "${it.totalAmountWithTax}" ) tvRequestRefundRefund.text = refundRefund } @@ -73,6 +75,7 @@ class RequestRefundActivity : mRefundLiveData.observe(this@RequestRefundActivity) { dealRequestResult(it, object : GetResultCallback { override fun onResult(any: Any) { + XEventBus.post(EventName.RefreshPackage) showToast(R.string.txt_successful, true) } }) diff --git a/app/src/main/java/com/abbidot/tracker/ui/activity/subscribe/SubscriptionHistoryActivity.kt b/app/src/main/java/com/abbidot/tracker/ui/activity/subscribe/SubscriptionHistoryActivity.kt index 222c846..ff939e9 100644 --- a/app/src/main/java/com/abbidot/tracker/ui/activity/subscribe/SubscriptionHistoryActivity.kt +++ b/app/src/main/java/com/abbidot/tracker/ui/activity/subscribe/SubscriptionHistoryActivity.kt @@ -1,6 +1,8 @@ package com.abbidot.tracker.ui.activity.subscribe import androidx.activity.viewModels +import com.abbidot.baselibrary.constant.EventName +import com.abbidot.baselibrary.eventbus.XEventBus import com.abbidot.baselibrary.util.AppUtils import com.abbidot.tracker.R import com.abbidot.tracker.adapter.SubscriptionHistoryAdapter @@ -22,6 +24,7 @@ class SubscriptionHistoryActivity : private lateinit var mHistoryAdapter: SubscriptionHistoryAdapter private var mSubscriptionsOrderList = mutableListOf() private var mDeviceId = "" + private var mRefreshPackage = true override fun getTopBar() = mViewBinding.ilSubscriptionHistoryTopBar.titleTopBar @@ -44,13 +47,16 @@ class SubscriptionHistoryActivity : override fun onResume() { super.onResume() - mSubscriptionViewModel.getSubscriptionsHistory(mDeviceId) + if (mRefreshPackage) { + mRefreshPackage = false + mSubscriptionViewModel.getSubscriptionsHistory(mDeviceId) + } } override fun liveDataObserve() { -// XEventBus.observe(this, EventName.UpdateData) { -// mSubscriptionViewModel.getSubscriptionsHistory(mDeviceId) -// } + XEventBus.observe(this, EventName.RefreshPackage) { + mRefreshPackage = true + } mSubscriptionViewModel.mSubscriptionsHistoryLiveData.observe(this) { dealRequestResult(it, object : GetResultCallback { override fun onResult(any: Any) { diff --git a/app/src/main/java/com/abbidot/tracker/ui/common/PermissionsActivityCommon.kt b/app/src/main/java/com/abbidot/tracker/ui/common/PermissionsActivityCommon.kt index d353725..2e98667 100644 --- a/app/src/main/java/com/abbidot/tracker/ui/common/PermissionsActivityCommon.kt +++ b/app/src/main/java/com/abbidot/tracker/ui/common/PermissionsActivityCommon.kt @@ -105,7 +105,7 @@ class PermissionsActivityCommon(context: Context) { PermissionLists.getBluetoothScanPermission(), PermissionLists.getBluetoothConnectPermission() ) - ) && SRBleUtil.instance.isBlueEnable(mContext) + ) && SRBleUtil.instance.isBleEnable(mContext) ) { list[0].state = ConstantInt.Type1 list[0].selected = false diff --git a/app/src/main/java/com/abbidot/tracker/ui/common/map/HomeMapCommon.kt b/app/src/main/java/com/abbidot/tracker/ui/common/map/HomeMapCommon.kt index 8845668..271e72c 100644 --- a/app/src/main/java/com/abbidot/tracker/ui/common/map/HomeMapCommon.kt +++ b/app/src/main/java/com/abbidot/tracker/ui/common/map/HomeMapCommon.kt @@ -76,15 +76,15 @@ class HomeMapCommon @Inject constructor() : BaseMapCommon() { if (null != mHomeMapBaiduMapFragment) { mHomeMapBaiduMapFragment!!.mBaiduMap?.clear() } else if (null != mHomeMapGoogleMapFragment) { - mHomeMapGoogleMapFragment!!.mGoogleMap?.clear() + mHomeMapGoogleMapFragment!!.clearAllMarker() } } - fun refreshPetCurrentLocation(latitude: Double, longitude: Double, isAnimMoveCamera: Boolean) { + fun refreshPetCurrentLocation(latitude: Double, longitude: Double, isMoveCamera: Boolean) { if (null != mHomeMapBaiduMapFragment) { mHomeMapBaiduMapFragment?.apply { refreshPetCurrentLocation( - latitude, longitude, isAnimMoveCamera = isAnimMoveCamera + latitude, longitude, isMoveCamera ) } } else if (null != mHomeMapGoogleMapFragment) { @@ -92,9 +92,7 @@ class HomeMapCommon @Inject constructor() : BaseMapCommon() { MMKVUtil.putDouble(MMKVKey.MapShowDefaultLon, longitude) mHomeMapGoogleMapFragment?.apply { refreshPetCurrentLocation( - LatLng(latitude, longitude), - isAnimMoveCamera = isAnimMoveCamera, - needMoveCamera = isAnimMoveCamera + LatLng(latitude, longitude), needMoveCamera = isMoveCamera ) } } @@ -174,6 +172,10 @@ class HomeMapCommon @Inject constructor() : BaseMapCommon() { } } + fun greenRippleCircleAnim() { + mHomeMapGoogleMapFragment?.greenRippleCircleAnim() + } + fun setMarkerInfoViewOffset() { if (null != mHomeMapBaiduMapFragment) { } else if (null != mHomeMapGoogleMapFragment) { diff --git a/app/src/main/java/com/abbidot/tracker/ui/common/map/WifiZone2MapCommon.kt b/app/src/main/java/com/abbidot/tracker/ui/common/map/WifiZone2MapCommon.kt index dfd111a..3d311e2 100644 --- a/app/src/main/java/com/abbidot/tracker/ui/common/map/WifiZone2MapCommon.kt +++ b/app/src/main/java/com/abbidot/tracker/ui/common/map/WifiZone2MapCommon.kt @@ -32,6 +32,13 @@ class WifiZone2MapCommon : BaseMapCommon() { mWiFiZone2GoogleMapFragment?.getLastLocation() } + /** + * 切换地图类型 + */ + fun switchSatelliteAndNormalMapType() { + switchSatelliteAndNormalMapType(mBaiduMapFragment, mWiFiZone2GoogleMapFragment) + } + fun getDecWiFiAddressData(): HistoryDataBean? { if (null != mWiFiZone2GoogleMapFragment) { if (null !== mWiFiZone2GoogleMapFragment!!.mDecWifiAddressData) return mWiFiZone2GoogleMapFragment!!.mDecWifiAddressData 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 1363f42..c181231 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 @@ -9,7 +9,9 @@ import androidx.fragment.app.Fragment import androidx.fragment.app.commit import androidx.fragment.app.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.AppUtils import com.abbidot.baselibrary.util.MMKVUtil import com.abbidot.baselibrary.util.Utils @@ -68,6 +70,9 @@ class RouteV2Fragment : BaseFragment(FragmentRouteV2Bind private var isFirst = true private var mProgress = -1 + //充值续费或升级返回类型 + private var mRechargeBackType = ConstantInt.SpecialType + companion object { @JvmStatic fun newInstance(context: Context) = RouteV2Fragment().apply { @@ -209,6 +214,10 @@ class RouteV2Fragment : BaseFragment(FragmentRouteV2Bind activity?.apply { mHomeV2Activity = this as HomeV2Activity } + //续费成功后,不执行 + if (mRechargeBackType == ConstantInt.Type1) { + return + } if (mCurrentShowPetPos == mHomeV2Activity.mSelectPetPosition) { if (!isSelectCustomDate) { if (mHistoryDataMapCommon.isMapLoadOk()) { @@ -224,6 +233,14 @@ class RouteV2Fragment : BaseFragment(FragmentRouteV2Bind } override fun liveDataObserve() { + //更新套餐数据 + XEventBus.observe(this, EventName.RefreshPackage) { + //监听续费成功 + if (mRechargeBackType == ConstantInt.Type0) { + mRechargeBackType = ConstantInt.Type1 + } + } + mDataDetailViewModel.mHistoryDetailLive.observe(this) { dealRequestResult(it, object : GetResultCallback { override fun onResult(any: Any) { @@ -319,6 +336,7 @@ class RouteV2Fragment : BaseFragment(FragmentRouteV2Bind if (isResumed) { mHomeV2Activity.getPet()?.let { pet -> if (Util.checkPackageLimit(mHomeV2Activity, pet.deviceId)) { + mRechargeBackType = pet.availableOrder mHistoryDataMapCommon.setPetUserLatLng() return@launch } @@ -412,7 +430,15 @@ class RouteV2Fragment : BaseFragment(FragmentRouteV2Bind llHomeRouteCalendarFrom -> { mHomeV2Activity.getPet()?.let { - if (Util.checkPackageLimit(mHomeV2Activity, it.deviceId)) return@apply + //防止执行多次弹窗 + if (Util.isTimeLimit(mLimitExecutionTime)) { + return@apply + } + if (Util.checkPackageLimit(mHomeV2Activity, it.deviceId)) { + mRechargeBackType = it.availableOrder + mLimitExecutionTime = System.currentTimeMillis() + return@apply + } } if (null == mFromCalenderDialog) { @@ -433,7 +459,15 @@ class RouteV2Fragment : BaseFragment(FragmentRouteV2Bind llHomeRouteCalendarTo -> { mHomeV2Activity.getPet()?.let { - if (Util.checkPackageLimit(mHomeV2Activity, it.deviceId)) return@apply + //防止执行多次弹窗 + if (Util.isTimeLimit(mLimitExecutionTime)) { + return@apply + } + if (Util.checkPackageLimit(mHomeV2Activity, it.deviceId)) { + mRechargeBackType = it.availableOrder + mLimitExecutionTime = System.currentTimeMillis() + return@apply + } } if (null == mToCalenderDialog) { mToCalenderDialog = ShowCalenderAndTimeDialog( diff --git a/app/src/main/java/com/abbidot/tracker/ui/fragment/map/MapV2Fragment.kt b/app/src/main/java/com/abbidot/tracker/ui/fragment/map/MapV2Fragment.kt index 573d814..e51726c 100644 --- a/app/src/main/java/com/abbidot/tracker/ui/fragment/map/MapV2Fragment.kt +++ b/app/src/main/java/com/abbidot/tracker/ui/fragment/map/MapV2Fragment.kt @@ -85,8 +85,8 @@ class MapV2Fragment : BaseFragment(FragmentMapV2Binding::i private lateinit var mDeviceMsgList: MutableList private lateinit var mDeviceMsgAdapter: HomeMapDeviceMsgAdapter - //启动动画移动地图摄像机 - private var isAnimMoveCamera = true + //启动移动地图摄像机 + private var isMoveCamera = true private var mShowCenterLocationType = ConstantInt.PetLocationType //是否显示围栏 @@ -169,9 +169,7 @@ class MapV2Fragment : BaseFragment(FragmentMapV2Binding::i override fun onResume() { super.onResume() - activity?.apply { - mHomeV2Activity = this as HomeV2Activity - } + //其他页面是否选择了宠物 if (mCurrentShowPetPos != mHomeV2Activity.mSelectPetPosition) { showPetNameAndHead(mHomeV2Activity.mSelectPetPosition) @@ -192,6 +190,15 @@ class MapV2Fragment : BaseFragment(FragmentMapV2Binding::i } } + private fun getHomeV2Activity(): HomeV2Activity? { + return if (null == activity) { + LogUtil.e("getHomeV2Activity,null == activity") + null + } else { + activity as HomeV2Activity + } + } + /** * 地图加载好了 */ @@ -282,6 +289,8 @@ class MapV2Fragment : BaseFragment(FragmentMapV2Binding::i mHomeV2Activity.getPet(false)?.apply { //蓝牙断开就重新获取服务器数据,蓝牙数据上报断开 if (trackBle.mac == macID && trackBle.conState != ConState.CONNECTED) { + //隐藏蓝牙nearby + mViewBinding.rvHomeMapDeviceMsg.visibility = View.GONE updateMapDeviceStatus() } } @@ -306,7 +315,7 @@ class MapV2Fragment : BaseFragment(FragmentMapV2Binding::i } mHomeMapCommon.setMapDeviceBean(mMapDeviceBean) mHomeMapCommon.refreshPetCurrentLocation( - it.latitude, it.longitude, isAnimMoveCamera + it.latitude, it.longitude, isMoveCamera ) mHomeMapCommon.startRefreshUserLocation() } @@ -424,17 +433,17 @@ class MapV2Fragment : BaseFragment(FragmentMapV2Binding::i private fun updateMapDeviceStatus( isNeedCountDown: Boolean = true, useBleLocation: Boolean = false ) { - mShowCenterLocationType = ConstantInt.PetLocationType - ViewUtil.instance.setMapSwitchLocationButtonImage( - mViewBinding.homeMapRefreshBtn, mShowCenterLocationType - ) +// mShowCenterLocationType = ConstantInt.PetLocationType +// ViewUtil.instance.setMapSwitchLocationButtonImage( +// mViewBinding.homeMapRefreshBtn, mShowCenterLocationType +// ) if (mHomeV2Activity.mPetList.size <= mCurrentShowPetPos) return mHomeV2Activity.getPet()?.apply { //蓝牙连接上,就直接用蓝牙上报的位置刷新 if (useBleLocation && BleManager.getInstance().isConnected(macID)) { mMapDeviceBean?.let { mHomeMapCommon.refreshPetCurrentLocation( - it.latitude, it.longitude, isAnimMoveCamera + it.latitude, it.longitude, isMoveCamera ) mHomeMapCommon.startRefreshUserLocation() } @@ -546,14 +555,14 @@ class MapV2Fragment : BaseFragment(FragmentMapV2Binding::i } } - mShowCenterLocationType = ConstantInt.PetLocationType - ViewUtil.instance.setMapSwitchLocationButtonImage( - mViewBinding.homeMapRefreshBtn, mShowCenterLocationType - ) - mHomeMapCommon.refreshPetCurrentLocation(latitude, longitude, isAnimMoveCamera) +// mShowCenterLocationType = ConstantInt.PetLocationType +// ViewUtil.instance.setMapSwitchLocationButtonImage( +// mViewBinding.homeMapRefreshBtn, mShowCenterLocationType +// ) + mHomeMapCommon.refreshPetCurrentLocation(latitude, longitude, isMoveCamera) mHomeMapCommon.startRefreshUserLocation() - isAnimMoveCamera = false + isMoveCamera = false } } @@ -578,7 +587,7 @@ class MapV2Fragment : BaseFragment(FragmentMapV2Binding::i } } } else if (type == 1) { - if (!SRBleUtil.instance.isBlueEnable(mContext!!)) { + if (!SRBleUtil.instance.isBleEnable(mContext!!)) { SRBleUtil.instance.openBluetooth(mContext!!) } else if (mHomeV2Activity.isRequestPetData && mHomeV2Activity.mPetList.size == 0) { showToast(R.string.no_bind_pet) @@ -606,17 +615,27 @@ class MapV2Fragment : BaseFragment(FragmentMapV2Binding::i if (mShowCenterLocationType == ConstantInt.PetLocationType) { mShowCenterLocationType = ConstantInt.UserLocationType mHomeMapCommon.switchShowLocation(mShowCenterLocationType) - - ViewUtil.instance.setMapSwitchLocationButtonImage( - homeMapRefreshBtn, mShowCenterLocationType - ) } else { - isAnimMoveCamera = true + mShowCenterLocationType = ConstantInt.PetLocationType + isMoveCamera = true updateMapDeviceStatus(useBleLocation = true) } + ViewUtil.instance.setMapSwitchLocationButtonImage( + homeMapRefreshBtn, mShowCenterLocationType + ) + } + + homeMapLiveBtn -> { +// locationPermissionsTip() + mHomeV2Activity.getPet()?.apply { + mViewBinding.homeMapLiveBtn.isEnabled = false + val intent = Intent(mContext, LiveActivityV2::class.java) + intent.putExtra(ConstantString.JumpActivity, true) + intent.putExtra(ConstantString.Pet, this) + startActivity(intent) + } } - homeMapLiveBtn -> locationPermissionsTip() llHomeMapTopPet.ivTopPetBtnSmall -> showMapTypeDialog() homeMapBluetoothBtn -> checkPermissions(1) llHomeMapTopPet.homeDataPetNameSmall, llHomeMapTopPet.homeDataPetHeadSmall.root -> mHomeV2Activity.selectPetDialog() diff --git a/app/src/main/java/com/abbidot/tracker/ui/fragment/map/baidumap/BaseBaiduMapFragment.kt b/app/src/main/java/com/abbidot/tracker/ui/fragment/map/baidumap/BaseBaiduMapFragment.kt index 14228ea..d1cd814 100644 --- a/app/src/main/java/com/abbidot/tracker/ui/fragment/map/baidumap/BaseBaiduMapFragment.kt +++ b/app/src/main/java/com/abbidot/tracker/ui/fragment/map/baidumap/BaseBaiduMapFragment.kt @@ -292,7 +292,7 @@ abstract class BaseBaiduMapFragment : lat: Double, lon: Double, needMoveCamera: Boolean = true, - isAnimMoveCamera: Boolean = true, + isAnimMoveCamera: Boolean = false, needConvertGCJ02: Boolean = true, headBgResId: Int = R.drawable.pic_map_gps_avatar ) { @@ -316,7 +316,7 @@ abstract class BaseBaiduMapFragment : fun refreshPetCurrentLocation( latLng: LatLng, needMoveCamera: Boolean = true, - isAnimMoveCamera: Boolean = true, + isAnimMoveCamera: Boolean = false, headBgResId: Int = R.drawable.pic_map_gps_avatar ) { refreshPetCurrentLocation( @@ -341,7 +341,7 @@ abstract class BaseBaiduMapFragment : * @param needConvertGCJ02 是否需要转换GCJ02坐标 */ fun moveCameraLocation( - lat: Double, lon: Double, needConvertGCJ02: Boolean = true, isAnimMoveCamera: Boolean = true + lat: Double, lon: Double, needConvertGCJ02: Boolean = true, isAnimMoveCamera: Boolean = false ) { val latLng = getBaiduMapLatLng(lat, lon, needConvertGCJ02) @@ -359,7 +359,7 @@ abstract class BaseBaiduMapFragment : * 改变地图手势的中心点(地图的中心点) * @param latLng 已经是转换好的坐标 */ - fun moveCameraLocation(latLng: LatLng, isAnimMoveCamera: Boolean = true) { + fun moveCameraLocation(latLng: LatLng, isAnimMoveCamera: Boolean = false) { moveCameraLocation(latLng.latitude, latLng.longitude, false, isAnimMoveCamera) } diff --git a/app/src/main/java/com/abbidot/tracker/ui/fragment/map/googlemap/BaseGoogleMapFragment.kt b/app/src/main/java/com/abbidot/tracker/ui/fragment/map/googlemap/BaseGoogleMapFragment.kt index affa396..c4d5889 100644 --- a/app/src/main/java/com/abbidot/tracker/ui/fragment/map/googlemap/BaseGoogleMapFragment.kt +++ b/app/src/main/java/com/abbidot/tracker/ui/fragment/map/googlemap/BaseGoogleMapFragment.kt @@ -131,7 +131,8 @@ abstract class BaseGoogleMapFragment : //默认华盛顿经纬度 val lat = MMKVUtil.getDouble(MMKVKey.MapShowDefaultLat, 38.913611) val lon = MMKVUtil.getDouble(MMKVKey.MapShowDefaultLon, -77.013222) - val position = CameraPosition.fromLatLngZoom(LatLng(lat, lon), 4f) + //不使用地图摄像头移动动画,默认级别一样大 + val position = CameraPosition.fromLatLngZoom(LatLng(lat, lon), mGoogleMapZoom) camera(position) } mGoogleMapView = MapView(this.requireActivity(), options) @@ -244,7 +245,7 @@ abstract class BaseGoogleMapFragment : /** * 根据CameraUpdate移动摄像机 */ - fun moveCameraUpdate(lat: Double, lon: Double, isAnimMoveCamera: Boolean = true) { + fun moveCameraUpdate(lat: Double, lon: Double, isAnimMoveCamera: Boolean = false) { if (null == mCameraUpdate) { moveCameraLocation(lat, lon, isAnimMoveCamera) LogUtil.e("moveCameraUpdate---------->CameraUpdate=null,摄像机移动靠moveCameraLocation经纬度") @@ -263,14 +264,14 @@ abstract class BaseGoogleMapFragment : /** * 根据CameraUpdate移动摄像机 */ - fun moveCameraUpdate(latLng: LatLng, isAnimMoveCamera: Boolean = true) { + fun moveCameraUpdate(latLng: LatLng, isAnimMoveCamera: Boolean = false) { moveCameraUpdate(latLng.latitude, latLng.longitude, isAnimMoveCamera) } /** * 移动到某个位置 为中心点 */ - fun moveCameraLocation(latLng: LatLng, isAnimMoveCamera: Boolean = true) { + fun moveCameraLocation(latLng: LatLng, isAnimMoveCamera: Boolean = false) { mGoogleMap?.apply { //animateCamera使用动画 if (isAnimMoveCamera) { @@ -288,7 +289,7 @@ abstract class BaseGoogleMapFragment : /** * 移动到某个位置 为中心点 */ - fun moveCameraLocation(lat: Double, lon: Double, isAnimMoveCamera: Boolean = true) { + fun moveCameraLocation(lat: Double, lon: Double, isAnimMoveCamera: Boolean = false) { moveCameraLocation(LatLng(lat, lon), isAnimMoveCamera) } @@ -373,7 +374,7 @@ abstract class BaseGoogleMapFragment : fun refreshPetCurrentLocation( latLng: LatLng, needMoveCamera: Boolean = true, - isAnimMoveCamera: Boolean = true, + isAnimMoveCamera: Boolean = false, headBgResId: Int = R.drawable.pic_map_gps_avatar ) { mPetLatLng = latLng 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 542f97e..7e2715d 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 @@ -113,7 +113,7 @@ class FencesAddEditGoogleMapFragment : BaseGoogleMapFragment() { mFencesCircleView.postDelayed({ isMapZoomReady = true restoreEditFences() - }, 1500) + }, 1000) return } diff --git a/app/src/main/java/com/abbidot/tracker/ui/fragment/map/googlemap/HomeMapGoogleMapFragment.kt b/app/src/main/java/com/abbidot/tracker/ui/fragment/map/googlemap/HomeMapGoogleMapFragment.kt index 666bcdd..8a2ee70 100644 --- a/app/src/main/java/com/abbidot/tracker/ui/fragment/map/googlemap/HomeMapGoogleMapFragment.kt +++ b/app/src/main/java/com/abbidot/tracker/ui/fragment/map/googlemap/HomeMapGoogleMapFragment.kt @@ -251,14 +251,14 @@ class HomeMapGoogleMapFragment : BaseGoogleMapFragment() { // addUserAndPetLine(latLng) refreshPetCurrentLocation(latLng, needMoveCamera = isMoveCamera) - mRippleCircle?.apply { - //一像素对应几米 - val pxDis = 2.0.pow(15.5 - getGoogleMapZoom()) - mRippleCircleRadius = (pxDis * 150).toInt() - fillColor = (ContextCompat.getColor(mContext!!, R.color.select_color5)) - strokeColor = (ContextCompat.getColor(mContext!!, R.color.select_color5)) - mValueAnimator?.duration = 2000 - } +// mRippleCircle?.apply { +// //一像素对应几米 +// val pxDis = 2.0.pow(15.5 - getGoogleMapZoom()) +// mRippleCircleRadius = (pxDis * 150).toInt() +// fillColor = (ContextCompat.getColor(mContext!!, R.color.select_color5)) +// strokeColor = (ContextCompat.getColor(mContext!!, R.color.select_color5)) +// mValueAnimator?.duration = 2000 +// } } /** @@ -277,15 +277,6 @@ class HomeMapGoogleMapFragment : BaseGoogleMapFragment() { } } // addPolyLines(mGoogleMap!!, latLngList) - - mRippleCircle?.apply { - //一像素对应几米 - val pxDis = 2.0.pow(15.5 - getGoogleMapZoom()) - mRippleCircleRadius = (pxDis * 150).toInt() - fillColor = (ContextCompat.getColor(mContext!!, R.color.select_color5)) - strokeColor = (ContextCompat.getColor(mContext!!, R.color.select_color5)) - mValueAnimator?.duration = 2000 - } } /** @@ -301,6 +292,20 @@ class HomeMapGoogleMapFragment : BaseGoogleMapFragment() { } } + /** + * 直播开始之后,改变绿色波纹动画 + */ + fun greenRippleCircleAnim() { + mRippleCircle?.apply { + //一像素对应几米 + val pxDis = 2.0.pow(15.5 - getGoogleMapZoom()) + mRippleCircleRadius = (pxDis * 150).toInt() + fillColor = (ContextCompat.getColor(mContext!!, R.color.select_color5)) + strokeColor = (ContextCompat.getColor(mContext!!, R.color.select_color5)) + mValueAnimator?.duration = 2000 + } + } + override fun onDetach() { super.onDetach() mValueAnimator?.cancel() 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 980d89b..2a2c1c7 100644 --- a/app/src/main/java/com/abbidot/tracker/util/Util.kt +++ b/app/src/main/java/com/abbidot/tracker/util/Util.kt @@ -8,6 +8,7 @@ import android.os.Build import android.os.Parcelable import android.provider.Settings import androidx.lifecycle.LifecycleCoroutineScope +import androidx.lifecycle.ViewModelProvider import cn.jpush.android.api.JPushInterface import com.abbidot.baselibrary.constant.EventName import com.abbidot.baselibrary.constant.MMKVKey @@ -18,20 +19,25 @@ import com.abbidot.baselibrary.util.MMKVUtil import com.abbidot.baselibrary.util.Utils import com.abbidot.tracker.R import com.abbidot.tracker.base.BaseActivity +import com.abbidot.tracker.base.BaseDialog import com.abbidot.tracker.bean.BleReportDataBean import com.abbidot.tracker.bean.MapDeviceBean import com.abbidot.tracker.bean.MessageBean import com.abbidot.tracker.bean.UserBean 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.dialog.CommonDialog2 import com.abbidot.tracker.dialog.PackageUpgradeDialog import com.abbidot.tracker.ui.activity.HomeV2Activity import com.abbidot.tracker.ui.activity.SayHelloActivity import com.abbidot.tracker.ui.activity.device.AddNewTracker1Activity import com.abbidot.tracker.ui.activity.pet.ShowInviteDeviceActivity import com.abbidot.tracker.ui.activity.pet.first.FirstSetPetTypeActivity +import com.abbidot.tracker.ui.activity.subscribe.SubscriptionPlanActivity import com.abbidot.tracker.util.bluetooth.SRBleUtil +import com.abbidot.tracker.vm.SubscriptionManageViewModel import com.baidu.mapapi.utils.DistanceUtil import com.clj.fastble.BleManager import com.google.android.gms.maps.model.LatLng @@ -623,7 +629,7 @@ class Util { PermissionLists.getBluetoothScanPermission(), PermissionLists.getBluetoothConnectPermission() ) - ) || !SRBleUtil.instance.isBlueEnable(context) + ) || !SRBleUtil.instance.isBleEnable(context) ) { hasPermissions = false } @@ -658,14 +664,17 @@ class Util { * 检查蓝牙权限和开关 */ fun checkBluetoothPermissionsEnabled( - context: Context, successAuthorize: () -> Unit, isShowToast: Boolean = true + context: Context, + successAuthorize: () -> Unit, + isShowToast: Boolean = true, + isCheckBleOpen: Boolean = true ) { checkPermissions( context, object : RequestPermissionCallback { override fun onRequestPermissionSuccess() { //判断蓝牙是否打开 - if (!SRBleUtil.instance.isBlueEnable(context)) { + if (isCheckBleOpen && !SRBleUtil.instance.isBleEnable(context)) { SRBleUtil.instance.openBluetooth(context) return } @@ -715,13 +724,60 @@ class Util { ) } + /** + * 套餐过期提示充值 + */ + fun checkPackageExpired(activity: BaseActivity<*>, deviceId: String) { + LogUtil.e("套餐过期deviceId=$deviceId") + CommonDialog2( + activity, + activity.getString(R.string.txt_subscription_expired), + activity.getString(R.string.txt_card_recharge), + object : BaseDialog.OnDialogOkListener { + override fun onOkClick(dialog: BaseDialog<*>) { + ViewModelProvider(activity)[SubscriptionManageViewModel::class.java].apply { + mSubscriptionsOrderLiveData.observe(activity) { + activity.dealRequestResult(it, object : GetResultCallback { + override fun onResult(any: Any) { + it.getOrNull()?.let { list -> + for (l in list) { + if (l.deviceId == deviceId) { + Intent( + activity, + SubscriptionPlanActivity::class.java + ).let { i -> + i.putExtra(ConstantString.LkSetMeal, l) + i.putExtra( + ConstantString.RechargeType, + ConstantInt.Type2 + ) + activity.startActivity(i) + } + break + } + } + } + } + }) + mSubscriptionsOrderLiveData.removeObservers(activity) + } + getSubscriptionsOrder() + } + } + }).show() + } + /** * 基础套餐权限控制 */ - fun checkPackageLimit( - activity: BaseActivity<*>, deviceId: String - ): Boolean { + fun checkPackageLimit(activity: BaseActivity<*>, deviceId: String): Boolean { LogUtil.e("基础套餐权限控制deviceId=$deviceId") + //先判断有没有过期 + val availableOrder = MMKVUtil.getInt(MMKVKey.AvailableOrder, 1) + if (availableOrder == ConstantInt.Type0) { + checkPackageExpired(activity, deviceId) + return true + } val mealType = MMKVUtil.getInt(MMKVKey.MealType) if (ConstantInt.BasicPackage == mealType) { PackageUpgradeDialog(activity, deviceId).show() @@ -768,6 +824,13 @@ class Util { return updateMin > ConstantInt.ReportTimeOutTime } + /*** + * 是否限制时间执行 + */ + fun isTimeLimit(cTime: Long, limitSecond: Int = 1): Boolean { + return System.currentTimeMillis() - cTime < limitSecond * 1000 + } + /** * 获取保存的地图模式 地图类型,0标准 1卫星地图 */ diff --git a/app/src/main/java/com/abbidot/tracker/util/ViewUtil.kt b/app/src/main/java/com/abbidot/tracker/util/ViewUtil.kt index f97355c..8de9828 100644 --- a/app/src/main/java/com/abbidot/tracker/util/ViewUtil.kt +++ b/app/src/main/java/com/abbidot/tracker/util/ViewUtil.kt @@ -985,6 +985,9 @@ class ViewUtil private constructor() { MMKVUtil.putInt(MMKVKey.PetSelectPosition, selectPos) //保存当前设备的套餐类型,控制权限 MMKVUtil.putInt(MMKVKey.MealType, petBean.mealType) + //套餐是否过期 + MMKVUtil.putInt(MMKVKey.AvailableOrder, petBean.availableOrder) + LogUtil.e("保存宠物相关数据到本地,savePetSP") //保存当前宠物是否分享的 MMKVUtil.putInt(MMKVKey.Shared, petBean.shared) } diff --git a/app/src/main/java/com/abbidot/tracker/util/bluetooth/SRBleUtil.kt b/app/src/main/java/com/abbidot/tracker/util/bluetooth/SRBleUtil.kt index 476dae9..c3150ba 100644 --- a/app/src/main/java/com/abbidot/tracker/util/bluetooth/SRBleUtil.kt +++ b/app/src/main/java/com/abbidot/tracker/util/bluetooth/SRBleUtil.kt @@ -16,12 +16,10 @@ import com.abbidot.baselibrary.eventbus.XEventBus import com.abbidot.baselibrary.util.AppUtils import com.abbidot.baselibrary.util.LogUtil import com.abbidot.tracker.bean.BleTrackDeviceBean -import com.abbidot.tracker.bean.FencesBean import com.abbidot.tracker.bean.ReceiveDeviceData import com.abbidot.tracker.util.Util import com.clj.fastble.BleManager import com.clj.fastble.callback.BleGattCallback -import com.clj.fastble.callback.BleMtuChangedCallback import com.clj.fastble.callback.BleNotifyCallback import com.clj.fastble.callback.BleRssiCallback import com.clj.fastble.callback.BleWriteCallback @@ -112,7 +110,7 @@ class SRBleUtil private constructor() { /** * 判断当前Android设备的蓝牙是否已经打开 */ - fun isBlueEnable(context: Context): Boolean { + fun isBleEnable(context: Context): Boolean { // BleManager.getInstance().isBlueEnable // 获取BluetoothManager服务 val bluetoothManager = @@ -173,7 +171,7 @@ class SRBleUtil private constructor() { LogUtil.e("蓝牙断开${bleDevice.name},${bleDevice.mac},activeDisConnected=$isActiveDisConnected,status=$status") notifyDeviceState(bleDevice, ConState.DISCONNECTED) mContext?.apply { - if (isBlueEnable(this) && !isActiveDisConnected) { + if (isBleEnable(this) && !isActiveDisConnected) { connect(bleDevice) } } diff --git a/app/src/main/java/com/abbidot/tracker/vm/ConnectionDeviceViewModel.kt b/app/src/main/java/com/abbidot/tracker/vm/ConnectionDeviceViewModel.kt index b22ae16..8a815ae 100644 --- a/app/src/main/java/com/abbidot/tracker/vm/ConnectionDeviceViewModel.kt +++ b/app/src/main/java/com/abbidot/tracker/vm/ConnectionDeviceViewModel.kt @@ -35,7 +35,7 @@ class ConnectionDeviceViewModel : ViewModel() { fun autoConnectBleDevice(context: Context) { //判断蓝牙是否打开 - if (!SRBleUtil.instance.isBlueEnable(context)) { + if (!SRBleUtil.instance.isBleEnable(context)) { LogUtil.e("automaticConnection,蓝牙没打开") return } @@ -144,6 +144,10 @@ class ConnectionDeviceViewModel : ViewModel() { if (TextUtils.isEmpty(mac)) { return } + if (BleManager.getInstance().isConnected(mac)) { + LogUtil.e("设备已经连接") + return + } if (SRBleUtil.instance.isBleConnecting) { LogUtil.e("已经有设备在连接中...") XEventBus.post(EventName.ActionConDeviceState, ConState.CONNECTING_MAC) diff --git a/app/src/main/java/com/abbidot/tracker/vm/FindBleDeviceViewModel.kt b/app/src/main/java/com/abbidot/tracker/vm/FindBleDeviceViewModel.kt index 284845a..5981909 100644 --- a/app/src/main/java/com/abbidot/tracker/vm/FindBleDeviceViewModel.kt +++ b/app/src/main/java/com/abbidot/tracker/vm/FindBleDeviceViewModel.kt @@ -64,7 +64,7 @@ class FindBleDeviceViewModel : ViewModel() { if (TextUtils.isEmpty(mac)) { return } - if (!SRBleUtil.instance.isBlueEnable(activity)) { + if (!SRBleUtil.instance.isBleEnable(activity)) { activity.showToast(R.string.txt_ble_enable) return } diff --git a/app/src/main/res/layout/activity_add_wifi_power_zone2.xml b/app/src/main/res/layout/activity_add_wifi_power_zone2.xml index cc0ebc3..79bae84 100644 --- a/app/src/main/res/layout/activity_add_wifi_power_zone2.xml +++ b/app/src/main/res/layout/activity_add_wifi_power_zone2.xml @@ -48,7 +48,14 @@ style="@style/map_image_yellow_btn_style" android:layout_gravity="bottom|end" android:layout_marginEnd="@dimen/dp_18" - android:layout_marginBottom="@dimen/dp_36" /> + android:layout_marginBottom="@dimen/dp_36" + android:visibility="gone" /> + + diff --git a/baselibrary/src/main/java/com/abbidot/baselibrary/constant/MMKVKey.kt b/baselibrary/src/main/java/com/abbidot/baselibrary/constant/MMKVKey.kt index a30c933..0db699b 100644 --- a/baselibrary/src/main/java/com/abbidot/baselibrary/constant/MMKVKey.kt +++ b/baselibrary/src/main/java/com/abbidot/baselibrary/constant/MMKVKey.kt @@ -37,6 +37,8 @@ import androidx.annotation.StringDef MMKVKey.MapType, MMKVKey.ShowFence, MMKVKey.isCrash, + MMKVKey.AvailableOrder, + MMKVKey.isFirstCheckBleOpen, MMKVKey.Shared ) @Retention(AnnotationRetention.SOURCE) @@ -93,9 +95,13 @@ annotation class MMKVKey { //套餐类型 const val MealType = "mealType" + //套餐是否可用 + const val AvailableOrder = "availableOrder" //是否分享的 const val Shared = "shared" const val isCrash = "isCrash" + //首次检查蓝牙是否开关 + const val isFirstCheckBleOpen = "isFirstCheckBleOpen" } }