1.修改基础套餐过期或退款,触发高级套餐功能提示过期去充值

2.去除地图启动移动动画
3.仅在首次启动APP时,提示一次蓝牙开关;去掉开启直播坚持蓝牙开关
4.输入wifi密码界面点击连接按钮收起键盘
This commit is contained in:
yezhiqiu
2025-11-24 15:39:29 +08:00
parent b4b8f22741
commit 630fc29f80
30 changed files with 371 additions and 192 deletions

View File

@@ -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"

View File

@@ -34,6 +34,9 @@ abstract class BaseFragment<T : ViewBinding>(
var mContext: Context? = null
var mLoadingDialog: QMUITipDialog? = null
//防止某个时间执行多次
var mLimitExecutionTime = 0L
/**
* Fragment中嵌套子Fragment时如果父Fragment被销毁而子Fragment未被销毁会导致子Fragment的视图不再显示
*/

View File

@@ -65,6 +65,7 @@ class PackageUpgradeDialog(activity: BaseActivity<*>, deviceId: String) :
}
}
})
mSubscriptionsOrderLiveData.removeObservers(mBaseActivity)
}
getSubscriptionsOrder()
}

View File

@@ -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>(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<PetBean>) {
mPetList.addAll(petList)
if (mSelectPetPosition > mPetList.size - 1) {
@@ -369,6 +338,7 @@ class HomeV2Activity : BaseActivity<ActivityHomeV2Binding>(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>(ActivityHomeV2Binding
}
}
}
(mFragments[2] as MapV2Fragment).showPetNameAndHead(mSelectPetPosition)
}
}
@@ -406,16 +375,7 @@ class HomeV2Activity : BaseActivity<ActivityHomeV2Binding>(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>(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>(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>(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键有效

View File

@@ -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()

View File

@@ -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()
}
}

View File

@@ -33,6 +33,7 @@ import com.clj.fastble.utils.HexUtil
import kotlinx.coroutines.delay
import kotlinx.coroutines.launch
class AddWifiPasswordActivity :
BaseActivity<ActivityAddWifiPasswordBinding>(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

View File

@@ -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()
}
}
}

View File

@@ -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指令失败")
}
}
}

View File

@@ -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>(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>(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>(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>(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>(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>(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>(ActivityLiveV2Binding
* 直播画线
*/
private fun liveDrawLines(trackList: MutableList<HistoryDataBean>) {
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>(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>(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>(ActivityLiveV2Binding
})
}
// override fun onBackPressed() {
// stopMapLive()
// }
override fun listenBackPressed() {
if (isLiveJump) stopMapLive()
else super.listenBackPressed()

View File

@@ -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 {

View File

@@ -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

View File

@@ -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)
}
})

View File

@@ -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<SubscriptionsOrderBean>()
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) {

View File

@@ -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

View File

@@ -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) {

View File

@@ -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

View File

@@ -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<FragmentRouteV2Binding>(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<FragmentRouteV2Binding>(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<FragmentRouteV2Binding>(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<FragmentRouteV2Binding>(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<FragmentRouteV2Binding>(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<FragmentRouteV2Binding>(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(

View File

@@ -85,8 +85,8 @@ class MapV2Fragment : BaseFragment<FragmentMapV2Binding>(FragmentMapV2Binding::i
private lateinit var mDeviceMsgList: MutableList<DataBean>
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>(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>(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>(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>(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>(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>(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>(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>(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()

View File

@@ -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)
}

View File

@@ -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

View File

@@ -113,7 +113,7 @@ class FencesAddEditGoogleMapFragment : BaseGoogleMapFragment() {
mFencesCircleView.postDelayed({
isMapZoomReady = true
restoreEditFences()
}, 1500)
}, 1000)
return
}

View File

@@ -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()

View File

@@ -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卫星地图
*/

View File

@@ -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)
}

View File

@@ -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)
}
}

View File

@@ -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)

View File

@@ -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
}

View File

@@ -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" />
<androidx.appcompat.widget.AppCompatImageView
android:id="@+id/iv_wifi_power_zone2_map_type_btn"
style="@style/map_image_white_btn_style"
android:layout_gravity="bottom|end"
android:layout_margin="@dimen/dp_16" />
</androidx.cardview.widget.CardView>

View File

@@ -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"
}
}