完善绑定设备流程,有套餐设备绑定也发送蓝牙1a指令

This commit is contained in:
yezhiqiu
2026-01-14 17:14:22 +08:00
parent ed0a3e803d
commit 8bb497b548
3 changed files with 151 additions and 33 deletions

View File

@@ -28,9 +28,9 @@ android {
applicationId "com.abbidot.tracker" applicationId "com.abbidot.tracker"
minSdkVersion 23 minSdkVersion 23
targetSdkVersion 35 targetSdkVersion 35
versionCode 2103 versionCode 2104
// versionName "2.1.3" // versionName "2.1.4"
versionName "2.1.3-Beta2" versionName "2.1.4-Beta1"
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"

View File

@@ -2,8 +2,11 @@ package com.abbidot.tracker.ui.activity.device
import android.content.Intent import android.content.Intent
import android.text.TextUtils import android.text.TextUtils
import android.view.Gravity
import android.view.View import android.view.View
import androidx.activity.viewModels import androidx.activity.viewModels
import androidx.core.content.ContextCompat
import com.abbidot.baselibrary.constant.ConState
import com.abbidot.baselibrary.constant.EventName import com.abbidot.baselibrary.constant.EventName
import com.abbidot.baselibrary.constant.MMKVKey import com.abbidot.baselibrary.constant.MMKVKey
import com.abbidot.baselibrary.eventbus.XEventBus import com.abbidot.baselibrary.eventbus.XEventBus
@@ -12,7 +15,9 @@ import com.abbidot.baselibrary.util.MMKVUtil
import com.abbidot.baselibrary.util.Utils import com.abbidot.baselibrary.util.Utils
import com.abbidot.tracker.R import com.abbidot.tracker.R
import com.abbidot.tracker.base.BaseActivity import com.abbidot.tracker.base.BaseActivity
import com.abbidot.tracker.bean.BleTrackDeviceBean
import com.abbidot.tracker.bean.PetBean import com.abbidot.tracker.bean.PetBean
import com.abbidot.tracker.bean.ReceiveDeviceData
import com.abbidot.tracker.bean.SubscriptionsOrderBean import com.abbidot.tracker.bean.SubscriptionsOrderBean
import com.abbidot.tracker.constant.ConstantInt import com.abbidot.tracker.constant.ConstantInt
import com.abbidot.tracker.constant.ConstantString import com.abbidot.tracker.constant.ConstantString
@@ -22,9 +27,14 @@ import com.abbidot.tracker.deprecated.ui.activity.vm.AddTrackerDeviceViewModel
import com.abbidot.tracker.ui.activity.device.wifi.AddWifiPowerZone1Activity import com.abbidot.tracker.ui.activity.device.wifi.AddWifiPowerZone1Activity
import com.abbidot.tracker.ui.activity.subscribe.SubscriptionPlanActivity import com.abbidot.tracker.ui.activity.subscribe.SubscriptionPlanActivity
import com.abbidot.tracker.util.Util import com.abbidot.tracker.util.Util
import com.abbidot.tracker.util.ViewUtil
import com.abbidot.tracker.util.bluetooth.SRBleCmdUtil
import com.abbidot.tracker.util.bluetooth.SRBleUtil
import com.abbidot.tracker.vm.ConnectionDeviceViewModel
import com.abbidot.tracker.vm.PetInfoViewModel import com.abbidot.tracker.vm.PetInfoViewModel
import com.abbidot.tracker.vm.PetRelationViewModel import com.abbidot.tracker.vm.PetRelationViewModel
import com.abbidot.tracker.vm.UserProfileViewModel import com.abbidot.tracker.vm.UserProfileViewModel
import com.clj.fastble.BleManager
class AddPairedSuccessActivity : class AddPairedSuccessActivity :
BaseActivity<ActivityAddPairedSuccessBinding>(ActivityAddPairedSuccessBinding::inflate) { BaseActivity<ActivityAddPairedSuccessBinding>(ActivityAddPairedSuccessBinding::inflate) {
@@ -33,6 +43,7 @@ class AddPairedSuccessActivity :
private val mPetViewModel: PetInfoViewModel by viewModels() private val mPetViewModel: PetInfoViewModel by viewModels()
private val mUserProfileViewModel: UserProfileViewModel by viewModels() private val mUserProfileViewModel: UserProfileViewModel by viewModels()
private val mPetRelationViewModel: PetRelationViewModel by viewModels() private val mPetRelationViewModel: PetRelationViewModel by viewModels()
private val mConnectionDeviceViewModel: ConnectionDeviceViewModel by viewModels()
private lateinit var mSubscriptionsOrderBean: SubscriptionsOrderBean private lateinit var mSubscriptionsOrderBean: SubscriptionsOrderBean
@@ -42,6 +53,9 @@ class AddPairedSuccessActivity :
private var mMac = "" private var mMac = ""
private var mPetBean: PetBean? = null private var mPetBean: PetBean? = null
//判断设备可用套餐状态
private var mAvailableOrder = 0
override fun getTopBar() = mViewBinding.ilAddPairedSuccessTopBar.titleTopBar override fun getTopBar() = mViewBinding.ilAddPairedSuccessTopBar.titleTopBar
override fun initData() { override fun initData() {
@@ -61,13 +75,14 @@ class AddPairedSuccessActivity :
tvPairSuccessDeviceOutId.text = mDeviceOutId tvPairSuccessDeviceOutId.text = mDeviceOutId
setOnClickListenerViews(btnPairSuccessActivate) setOnClickListenerViews(btnPairSuccessActivate)
} }
setButtonEnabled(mViewBinding.btnPairSuccessActivate, ConstantInt.Type0)
mAddTrackerViewModel.getDeviceOrderStatus(this@AddPairedSuccessActivity, mDeviceOutId)
} }
override fun liveDataObserve() { override fun liveDataObserve() {
mAddTrackerViewModel.apply { mAddTrackerViewModel.apply {
//获取设备套餐可用状态 //获取设备套餐可用状态
mDeviceOrderStatusLiveData.observe(this@AddPairedSuccessActivity) { mDeviceOrderStatusLiveData.observe(this@AddPairedSuccessActivity) {
setButtonEnabled(mViewBinding.btnPairSuccessActivate, ConstantInt.Type1)
dealRequestResult(it, object : GetResultCallback { dealRequestResult(it, object : GetResultCallback {
override fun onResult(any: Any) { override fun onResult(any: Any) {
it.getOrNull()?.apply { it.getOrNull()?.apply {
@@ -80,35 +95,41 @@ class AddPairedSuccessActivity :
o.deviceId = mDeviceId o.deviceId = mDeviceId
o.userId = MMKVUtil.getString(MMKVKey.UserId) o.userId = MMKVUtil.getString(MMKVKey.UserId)
} }
mNetworkRequestsFailRetryCount = 0
mAvailableOrder = availableOrder
//判断设备是否有可用套餐 //判断设备是否有可用套餐
if (availableOrder == ConstantInt.Type1) { if (availableOrder == ConstantInt.Type1) {
setButtonEnabled( bleNotify()
mViewBinding.btnPairSuccessActivate, ConstantInt.Type0 connectBle(mMac)
)
//刷新设备绑定
mAddTrackerViewModel.updatePayDeviceState(
this@AddPairedSuccessActivity, mDeviceId
)
} else { } else {
mAddTrackerViewModel.getIccId( setButtonEnabled(
this@AddPairedSuccessActivity, mDeviceOutId mViewBinding.btnPairSuccessActivate, ConstantInt.Type1
) )
} }
} }
} }
override fun onRequestError(exceptionCode: String?) {
LogUtil.e("获取设备套餐可用状态---->请求错误onRequestError再次请求")
if (exceptionCode == mNetworkRequestsFailLimit) {
finish()
} else {
mAddTrackerViewModel.getDeviceOrderStatus(
this@AddPairedSuccessActivity, mDeviceOutId
)
}
}
}) })
} }
//获取设备sim卡IccId //获取设备sim卡IccId
mGetIccIdLiveData.observe(this@AddPairedSuccessActivity) { mGetIccIdLiveData.observe(this@AddPairedSuccessActivity) {
setButtonEnabled(mViewBinding.btnPairSuccessActivate, ConstantInt.Type1)
dealRequestResult(it, object : GetResultCallback { dealRequestResult(it, object : GetResultCallback {
override fun onResult(any: Any) { override fun onResult(any: Any) {
it.getOrNull()?.apply { it.getOrNull()?.apply {
mSubscriptionsOrderBean.deviceOutId = mDeviceOutId mSubscriptionsOrderBean.deviceOutId = mDeviceOutId
mSubscriptionsOrderBean.iccid = iccid mSubscriptionsOrderBean.iccid = iccid
setButtonEnabled(mViewBinding.btnPairSuccessActivate, ConstantInt.Type0)
val intent = Intent(mContext, SubscriptionPlanActivity::class.java) val intent = Intent(mContext, SubscriptionPlanActivity::class.java)
intent.putExtra(ConstantString.LkSetMeal, mSubscriptionsOrderBean) intent.putExtra(ConstantString.LkSetMeal, mSubscriptionsOrderBean)
@@ -116,6 +137,11 @@ class AddPairedSuccessActivity :
startActivityFinish(intent) startActivityFinish(intent)
} }
} }
override fun onRequestError(exceptionCode: String?) {
super.onRequestError(exceptionCode)
setButtonEnabled(mViewBinding.btnPairSuccessActivate, ConstantInt.Type1)
}
}) })
} }
@@ -126,20 +152,18 @@ class AddPairedSuccessActivity :
MMKVUtil.putInt(MMKVKey.isBindDevice, ConstantInt.isBind) MMKVUtil.putInt(MMKVKey.isBindDevice, ConstantInt.isBind)
XEventBus.post(EventName.RefreshDevice) XEventBus.post(EventName.RefreshDevice)
mUserProfileViewModel.updateMeasureUnit(ConstantInt.Type1) SRBleUtil.instance.getConnectMacDevice(mMac)?.let { ble ->
// if (isFirstBind) { SRBleUtil.instance.writeData(
// mUserProfileViewModel.updateMeasureUnit(ConstantInt.Type1) ble.bleDevice, SRBleCmdUtil.instance.setWorkingStatus()
//// val intent = Intent(mContext, FirstSetPetTypeActivity::class.java) )
//// intent.putExtra(ConstantString.isFirstBind, isFirstBind) }
//// startActivityFinish(intent)
// } else finish()
} }
override fun onRequestError(exceptionCode: String?) { override fun onRequestError(exceptionCode: String?) {
LogUtil.e("支付成功后,更新绑定状态------->请求宠物数据错误onRequestError再次请求") LogUtil.e("有套餐,更新绑定状态--->请求数据错误onRequestError再次请求")
if (exceptionCode == mNetworkRequestsFailLimit) { if (exceptionCode == mNetworkRequestsFailLimit) {
setButtonEnabled(mViewBinding.btnPairSuccessActivate, ConstantInt.Type1)
} else { } else {
setButtonEnabled(mViewBinding.btnPairSuccessActivate, ConstantInt.Type0)
mAddTrackerViewModel.updatePayDeviceState( mAddTrackerViewModel.updatePayDeviceState(
this@AddPairedSuccessActivity, mSubscriptionsOrderBean.deviceId this@AddPairedSuccessActivity, mSubscriptionsOrderBean.deviceId
) )
@@ -197,7 +221,7 @@ class AddPairedSuccessActivity :
} }
//绑定默认宠物 //绑定默认宠物
mPetRelationViewModel.mBindPetLiveData.observe(this@AddPairedSuccessActivity) { mPetRelationViewModel.mBindPetLiveData.observe(this@AddPairedSuccessActivity) {
setButtonEnabled(mViewBinding.btnPairSuccessActivate, ConstantInt.Type1) // setButtonEnabled(mViewBinding.btnPairSuccessActivate, ConstantInt.Type1)
dealRequestResult(it, object : GetResultCallback { dealRequestResult(it, object : GetResultCallback {
override fun onResult(any: Any) { override fun onResult(any: Any) {
XEventBus.post(EventName.RefreshPet) XEventBus.post(EventName.RefreshPet)
@@ -216,15 +240,96 @@ class AddPairedSuccessActivity :
}, 1500) }, 1500)
} }
override fun onRequestError(exceptionCode: String?) { // override fun onRequestError(exceptionCode: String?) {
super.onRequestError(exceptionCode) // super.onRequestError(exceptionCode)
setButtonEnabled(mViewBinding.btnPairSuccessActivate, ConstantInt.Type1) // setButtonEnabled(mViewBinding.btnPairSuccessActivate, ConstantInt.Type1)
} // }
}) })
} }
} }
} }
private fun bleNotify() {
//接收蓝牙连接状态
XEventBus.observe(this, EventName.ConnectDeviceState) { ble: BleTrackDeviceBean ->
if (TextUtils.isEmpty(mMac)) return@observe
mViewBinding.ilPairSuccessBluetoothTips.trbBleConnectState.let { view ->
val bgColor = if (ble.conState == ConState.CONNECTED) {
setButtonEnabled(mViewBinding.btnPairSuccessActivate, ConstantInt.Type1)
view.text = getString(R.string.tracker_manage_set_ble_connect)
ContextCompat.getColor(mContext, R.color.cyan_color1)
} else {
setButtonEnabled(mViewBinding.btnPairSuccessActivate, ConstantInt.Type0)
view.text = getString(R.string.tracker_manage_set_ble_unconnect)
ContextCompat.getColor(mContext, R.color.red_color4)
}
view.setBackgroundColor(bgColor)
ViewUtil.instance.bleConStateToast(this, ble.conState, Gravity.CENTER)
}
}
//搜索蓝牙的设备状态
XEventBus.observe(this, EventName.ActionConDeviceState) { conState: Int ->
if (TextUtils.isEmpty(mMac)) return@observe
setButtonEnabled(mViewBinding.btnPairSuccessActivate, ConstantInt.Type0)
if (conState == ConState.DEVICE_NOT_FOUND) {
// ViewUtil.instance.showDialog(
// mContext,
// R.string.txt_no_search_device,
// object : BaseDialog.OnDialogOkListener {
// override fun onOkClick(dialog: BaseDialog<*>) {
// dialog.dismiss()
// }
// },
// okTextResId = R.string.txt_sure,
// cancelTextResId = R.string.txt_cancel
// )
}
mViewBinding.ilPairSuccessBluetoothTips.trbBleConnectState.let { view ->
ViewUtil.instance.bleConActionState(this, view, conState)
}
}
//接收蓝牙返回数据
XEventBus.observe(this, EventName.DeviceReceiveData) { receiveData: ReceiveDeviceData ->
if (TextUtils.isEmpty(mMac)) return@observe
if (mMac == receiveData.mac) {
val data = receiveData.data
parseData(data)
}
}
}
/**
* 解析数据
*/
private fun parseData(data: ByteArray?) {
if (null != data && data.isNotEmpty()) {
val data0 = SRBleCmdUtil.instance.byteToInt(data[0])
val data1 = SRBleCmdUtil.instance.byteToInt(data[1])
val data2 = SRBleCmdUtil.instance.byteToInt(data[2])
if (data0 == 0x1A && data1 == 1 && data2 == 0) {
mUserProfileViewModel.updateMeasureUnit(ConstantInt.Type1)
}
}
}
private fun connectBle(mac: String) {
mViewBinding.ilPairSuccessBluetoothTips.root.visibility = View.VISIBLE
//是否连接了蓝牙
if (BleManager.getInstance().isConnected(mac)) {
mViewBinding.ilPairSuccessBluetoothTips.trbBleConnectState.let {
it.setBackgroundColor(
ContextCompat.getColor(mContext, R.color.cyan_color1)
)
it.text = getString(R.string.tracker_manage_set_ble_connect)
}
setButtonEnabled(mViewBinding.btnPairSuccessActivate, ConstantInt.Type1)
} else {
mConnectionDeviceViewModel.connectDeviceToMac(this@AddPairedSuccessActivity, mac)
}
}
private fun addBindActivateDevice() { private fun addBindActivateDevice() {
if (TextUtils.isEmpty(mDeviceOutId)) { if (TextUtils.isEmpty(mDeviceOutId)) {
@@ -232,9 +337,12 @@ class AddPairedSuccessActivity :
return return
} }
setButtonEnabled(mViewBinding.btnPairSuccessActivate, ConstantInt.Type0) setButtonEnabled(mViewBinding.btnPairSuccessActivate, ConstantInt.Type0)
mAddTrackerViewModel.getDeviceOrderStatus( if (mAvailableOrder == ConstantInt.Type1) {
this@AddPairedSuccessActivity, mDeviceOutId //刷新设备绑定
) mAddTrackerViewModel.updatePayDeviceState(this@AddPairedSuccessActivity, mDeviceId)
} else {
mAddTrackerViewModel.getIccId(this@AddPairedSuccessActivity, mDeviceOutId)
}
} }
override fun onClick(v: View?) { override fun onClick(v: View?) {

View File

@@ -62,12 +62,22 @@
app:lineHeight="@dimen/textSize20" app:lineHeight="@dimen/textSize20"
app:typeface="@string/roboto_regular_font" /> app:typeface="@string/roboto_regular_font" />
<include
android:id="@+id/il_pair_success_bluetooth_tips"
layout="@layout/layout_ble_connect_state"
android:layout_width="wrap_content"
android:visibility="invisible"
android:layout_height="wrap_content"
android:layout_above="@id/btn_payment_success_continue"
android:layout_centerHorizontal="true"
android:layout_marginTop="@dimen/dp_38" />
<com.abbidot.tracker.widget.TypefaceButton <com.abbidot.tracker.widget.TypefaceButton
android:id="@+id/btn_pair_success_activate" android:id="@+id/btn_pair_success_activate"
style="@style/my_match_RoundRect_Button_style" style="@style/my_match_RoundRect_Button_style"
android:layout_height="@dimen/dp_50" android:layout_height="@dimen/dp_50"
android:layout_marginHorizontal="@dimen/dp_16" android:layout_marginHorizontal="@dimen/dp_16"
android:layout_marginTop="@dimen/dp_60"
android:layout_marginBottom="@dimen/dp_49" android:layout_marginBottom="@dimen/dp_49"
android:text="@string/txt_continue" android:text="@string/txt_continue"
android:textStyle="bold" android:textStyle="bold"