添加搜索连接设备ui改版
This commit is contained in:
@@ -0,0 +1,44 @@
|
|||||||
|
package com.abbidot.tracker.adapter
|
||||||
|
|
||||||
|
import android.content.Context
|
||||||
|
import android.view.View
|
||||||
|
import androidx.core.content.ContextCompat
|
||||||
|
import com.abbidot.baselibrary.constant.ConState
|
||||||
|
import com.abbidot.baselibrary.list.BaseRecyclerAdapter
|
||||||
|
import com.abbidot.baselibrary.list.RecyclerViewHolder
|
||||||
|
import com.abbidot.tracker.R
|
||||||
|
import com.abbidot.tracker.bean.DeviceBean
|
||||||
|
|
||||||
|
/**
|
||||||
|
*Created by .yzq on 2025/12/19/周五.
|
||||||
|
* @link
|
||||||
|
* @description:
|
||||||
|
*/
|
||||||
|
class ScanDeviceAdapter(
|
||||||
|
ctx: Context, list: MutableList<DeviceBean>?
|
||||||
|
) : BaseRecyclerAdapter<DeviceBean>(ctx, list) {
|
||||||
|
|
||||||
|
var isConnect = false
|
||||||
|
|
||||||
|
override fun getEmptyLayoutId(viewType: Int) = 0
|
||||||
|
|
||||||
|
override fun getItemLayoutId(viewType: Int) = R.layout.layout_san_device_item
|
||||||
|
|
||||||
|
override fun bindData(holder: RecyclerViewHolder?, position: Int, item: DeviceBean) {
|
||||||
|
holder?.let {
|
||||||
|
it.getTextView(R.id.tv_add_new_tracker3_device_out_id_item).apply {
|
||||||
|
text = item.deviceOutId
|
||||||
|
val tColor = if (isConnect) {
|
||||||
|
R.color.line_color1
|
||||||
|
} else {
|
||||||
|
R.color.data_black_color
|
||||||
|
}
|
||||||
|
setTextColor(ContextCompat.getColor(mContext, tColor))
|
||||||
|
}
|
||||||
|
|
||||||
|
holder.getView(R.id.ld_add_new_tracker3_connect_state).visibility =
|
||||||
|
if (item.conState == ConState.CONNECTING) View.VISIBLE
|
||||||
|
else View.GONE
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -26,9 +26,11 @@ import androidx.core.view.WindowInsetsCompat
|
|||||||
import androidx.fragment.app.Fragment
|
import androidx.fragment.app.Fragment
|
||||||
import androidx.fragment.app.FragmentTransaction
|
import androidx.fragment.app.FragmentTransaction
|
||||||
import androidx.viewbinding.ViewBinding
|
import androidx.viewbinding.ViewBinding
|
||||||
|
import com.abbidot.baselibrary.constant.MMKVKey
|
||||||
import com.abbidot.baselibrary.network.exception.ErrorCode
|
import com.abbidot.baselibrary.network.exception.ErrorCode
|
||||||
import com.abbidot.baselibrary.util.AppUtils
|
import com.abbidot.baselibrary.util.AppUtils
|
||||||
import com.abbidot.baselibrary.util.LogUtil
|
import com.abbidot.baselibrary.util.LogUtil
|
||||||
|
import com.abbidot.baselibrary.util.MMKVUtil
|
||||||
import com.abbidot.tracker.R
|
import com.abbidot.tracker.R
|
||||||
import com.abbidot.tracker.constant.ConstantInt
|
import com.abbidot.tracker.constant.ConstantInt
|
||||||
import com.abbidot.tracker.constant.GetResultCallback
|
import com.abbidot.tracker.constant.GetResultCallback
|
||||||
@@ -94,6 +96,7 @@ abstract class BaseActivity<T : ViewBinding>(val inflater: (inflater: LayoutInfl
|
|||||||
|
|
||||||
//防止按钮多次点击
|
//防止按钮多次点击
|
||||||
private var mLimitExecutionTime = 0L
|
private var mLimitExecutionTime = 0L
|
||||||
|
var checkCrash = true
|
||||||
|
|
||||||
override fun onCreate(savedInstanceState: Bundle?) {
|
override fun onCreate(savedInstanceState: Bundle?) {
|
||||||
isFrontRunning = true
|
isFrontRunning = true
|
||||||
@@ -195,6 +198,11 @@ abstract class BaseActivity<T : ViewBinding>(val inflater: (inflater: LayoutInfl
|
|||||||
* 初始化
|
* 初始化
|
||||||
*/
|
*/
|
||||||
open fun initData() {
|
open fun initData() {
|
||||||
|
if (checkCrash) {
|
||||||
|
//出现闪退,退出当前页面
|
||||||
|
val isCrash = MMKVUtil.getBoolean(MMKVKey.isCrash, false)
|
||||||
|
if (isCrash) finish()
|
||||||
|
}
|
||||||
//沉浸式状态栏
|
//沉浸式状态栏
|
||||||
QMUIStatusBarHelper.translucent(window)
|
QMUIStatusBarHelper.translucent(window)
|
||||||
//判断是否是深色模式
|
//判断是否是深色模式
|
||||||
@@ -560,6 +568,7 @@ abstract class BaseActivity<T : ViewBinding>(val inflater: (inflater: LayoutInfl
|
|||||||
//拦截请求异常code
|
//拦截请求异常code
|
||||||
if (netErrorCodeTips(exceptionCode)) {
|
if (netErrorCodeTips(exceptionCode)) {
|
||||||
//已经处理相关错误码就直接返回
|
//已经处理相关错误码就直接返回
|
||||||
|
getResultCallback.onErrorCode()
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -9,5 +9,6 @@ interface GetResultCallback {
|
|||||||
fun onResult(any: Any)
|
fun onResult(any: Any)
|
||||||
|
|
||||||
//默认可以不重写,相当于java中的default修饰的
|
//默认可以不重写,相当于java中的default修饰的
|
||||||
fun onRequestError(exceptionCode:String?) {}
|
fun onRequestError(exceptionCode: String?) {}
|
||||||
|
fun onErrorCode() {}
|
||||||
}
|
}
|
||||||
@@ -124,6 +124,7 @@ class HomeV2Activity : BaseActivity<ActivityHomeV2Binding>(ActivityHomeV2Binding
|
|||||||
|
|
||||||
override fun initData() {
|
override fun initData() {
|
||||||
isEdgeToEdgeAdapterNavigationBars = false
|
isEdgeToEdgeAdapterNavigationBars = false
|
||||||
|
checkCrash=false
|
||||||
super.initData()
|
super.initData()
|
||||||
setStatusBarLight()
|
setStatusBarLight()
|
||||||
|
|
||||||
@@ -168,7 +169,7 @@ class HomeV2Activity : BaseActivity<ActivityHomeV2Binding>(ActivityHomeV2Binding
|
|||||||
MMKVUtil.putBoolean(MMKVKey.isCrash, false)
|
MMKVUtil.putBoolean(MMKVKey.isCrash, false)
|
||||||
showToast(R.string.txt_show_crash)
|
showToast(R.string.txt_show_crash)
|
||||||
mCountdownType = ConstantInt.Type0
|
mCountdownType = ConstantInt.Type0
|
||||||
mCountDownTimerViewModel.startCountDown(5)
|
mCountDownTimerViewModel.startCountDown(4)
|
||||||
} else {
|
} else {
|
||||||
val connectivityManager = getSystemService(CONNECTIVITY_SERVICE) as ConnectivityManager
|
val connectivityManager = getSystemService(CONNECTIVITY_SERVICE) as ConnectivityManager
|
||||||
val networkCallback: ConnectivityManager.NetworkCallback =
|
val networkCallback: ConnectivityManager.NetworkCallback =
|
||||||
|
|||||||
@@ -94,7 +94,7 @@ class AddNewTracker1Activity :
|
|||||||
*/
|
*/
|
||||||
private fun checkPermissions() {
|
private fun checkPermissions() {
|
||||||
Util.checkBluetoothPermissionsEnabled(mContext, {
|
Util.checkBluetoothPermissionsEnabled(mContext, {
|
||||||
val intent = Intent(mContext, AddNewTracker2Activity::class.java)
|
val intent = Intent(mContext, AddNewTracker3Activity::class.java)
|
||||||
intent.putExtra(ConstantString.isFirstBind, isFirstBind)
|
intent.putExtra(ConstantString.isFirstBind, isFirstBind)
|
||||||
startActivity(intent)
|
startActivity(intent)
|
||||||
})
|
})
|
||||||
|
|||||||
@@ -1,144 +1,236 @@
|
|||||||
package com.abbidot.tracker.ui.activity.device
|
package com.abbidot.tracker.ui.activity.device
|
||||||
|
|
||||||
|
import android.animation.AnimatorSet
|
||||||
import android.content.Intent
|
import android.content.Intent
|
||||||
import android.text.TextUtils
|
import android.text.TextUtils
|
||||||
import android.view.View
|
import android.view.View
|
||||||
import android.widget.NumberPicker
|
|
||||||
import androidx.activity.viewModels
|
import androidx.activity.viewModels
|
||||||
import com.abbidot.baselibrary.constant.ConState
|
import com.abbidot.baselibrary.constant.ConState
|
||||||
import com.abbidot.baselibrary.constant.EventName
|
import com.abbidot.baselibrary.constant.EventName
|
||||||
import com.abbidot.baselibrary.eventbus.XEventBus
|
import com.abbidot.baselibrary.eventbus.XEventBus
|
||||||
|
import com.abbidot.baselibrary.list.BaseRecyclerAdapter
|
||||||
|
import com.abbidot.baselibrary.util.LogUtil
|
||||||
import com.abbidot.tracker.R
|
import com.abbidot.tracker.R
|
||||||
|
import com.abbidot.tracker.adapter.ScanDeviceAdapter
|
||||||
import com.abbidot.tracker.base.BaseActivity
|
import com.abbidot.tracker.base.BaseActivity
|
||||||
|
import com.abbidot.tracker.base.BaseDialog
|
||||||
import com.abbidot.tracker.bean.BleTrackDeviceBean
|
import com.abbidot.tracker.bean.BleTrackDeviceBean
|
||||||
import com.abbidot.tracker.bean.DataBean
|
import com.abbidot.tracker.bean.DeviceBean
|
||||||
import com.abbidot.tracker.constant.ConstantInt
|
|
||||||
import com.abbidot.tracker.constant.ConstantString
|
import com.abbidot.tracker.constant.ConstantString
|
||||||
import com.abbidot.tracker.constant.GetResultCallback
|
import com.abbidot.tracker.constant.GetResultCallback
|
||||||
import com.abbidot.tracker.databinding.ActivityAddNewTracker3Binding
|
import com.abbidot.tracker.databinding.ActivityAddNewTracker3Binding
|
||||||
import com.abbidot.tracker.util.Util
|
|
||||||
import com.abbidot.tracker.util.ViewUtil
|
import com.abbidot.tracker.util.ViewUtil
|
||||||
import com.abbidot.tracker.util.bluetooth.SRBleUtil
|
import com.abbidot.tracker.util.bluetooth.SRBleUtil
|
||||||
import com.abbidot.tracker.vm.ConnectionDeviceViewModel
|
import com.abbidot.tracker.vm.ConnectionDeviceViewModel
|
||||||
import com.abbidot.tracker.vm.TrackerSetViewModel
|
import com.abbidot.tracker.vm.TrackerSetViewModel
|
||||||
|
import com.clj.fastble.BleManager
|
||||||
|
import com.clj.fastble.callback.BleScanCallback
|
||||||
|
import com.clj.fastble.data.BleDevice
|
||||||
|
import com.clj.fastble.scan.BleScanRuleConfig
|
||||||
|
import com.clj.fastble.utils.HexUtil
|
||||||
|
import com.qmuiteam.qmui.util.QMUIDisplayHelper
|
||||||
|
|
||||||
class AddNewTracker3Activity :
|
class AddNewTracker3Activity :
|
||||||
BaseActivity<ActivityAddNewTracker3Binding>(ActivityAddNewTracker3Binding::inflate),
|
BaseActivity<ActivityAddNewTracker3Binding>(ActivityAddNewTracker3Binding::inflate) {
|
||||||
NumberPicker.OnValueChangeListener {
|
|
||||||
|
|
||||||
private val mTrackerSetViewModel: TrackerSetViewModel by viewModels()
|
private val mTrackerSetViewModel: TrackerSetViewModel by viewModels()
|
||||||
private val mConnectionDeviceViewModel: ConnectionDeviceViewModel by viewModels()
|
private val mConnectionDeviceViewModel: ConnectionDeviceViewModel by viewModels()
|
||||||
|
|
||||||
private var isFirstBind = false
|
private var isFirstBind = false
|
||||||
private var mDeviceOutId = ""
|
|
||||||
private var mDeviceId = ""
|
private var mDeviceId = ""
|
||||||
private var mScanDeviceList: ArrayList<DataBean>? = null
|
private var mDeviceOutId = ""
|
||||||
private var mConBleMac = ""
|
private var mConBleMac = ""
|
||||||
|
|
||||||
|
private lateinit var mScanDeviceAdapter: ScanDeviceAdapter
|
||||||
|
|
||||||
|
private var mAnimatorSet: AnimatorSet? = null
|
||||||
|
|
||||||
override fun getTopBar() = mViewBinding.ilAddNewTracker3TopBar.titleTopBar
|
override fun getTopBar() = mViewBinding.ilAddNewTracker3TopBar.titleTopBar
|
||||||
|
|
||||||
override fun initData() {
|
override fun initData() {
|
||||||
super.initData()
|
super.initData()
|
||||||
setTopBarTitle(R.string.txt_add_new_tracker)
|
setTopBarTitle(R.string.txt_add_new_tracker)
|
||||||
setLeftBackImage(R.drawable.icon_white_back_svg)
|
setLeftBackImage(R.drawable.icon_white_back_svg)
|
||||||
mRightImageButton = addRightImageButton(R.drawable.icon_refresh)
|
|
||||||
|
|
||||||
intent.extras?.apply {
|
intent.extras?.apply {
|
||||||
isFirstBind = getBoolean(ConstantString.isFirstBind, false)
|
isFirstBind = getBoolean(ConstantString.isFirstBind, false)
|
||||||
mDeviceOutId = getString(ConstantString.DeviceOutId, "")
|
|
||||||
mScanDeviceList = Util.getParcelableArrayListAdaptive(
|
|
||||||
intent, ConstantString.DeviceInfo, DataBean::class.java
|
|
||||||
)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (null == mScanDeviceList) finish()
|
mScanDeviceAdapter = ScanDeviceAdapter(mContext, mutableListOf()).apply {
|
||||||
|
setOnItemClickListener(object : BaseRecyclerAdapter.OnItemClickListener {
|
||||||
mViewBinding.apply {
|
override fun onItemClick(itemView: View?, pos: Int) {
|
||||||
|
if (isConnect) return
|
||||||
mScanDeviceList?.let {
|
SRBleUtil.instance.cancelBleScan("AddNewTracker2Activity,开始连接蓝牙,取消蓝牙扫描")
|
||||||
if (it.size == 1) {
|
disconnectBle()
|
||||||
mDeviceOutId = it[0].name
|
getData().let {
|
||||||
tvAddNewTracker3DeviceOutId.visibility = View.VISIBLE
|
isConnect = true
|
||||||
rlAddNewTracker3DeviceLayout.visibility = View.GONE
|
it[pos].conState = ConState.CONNECTING
|
||||||
tvAddNewTracker3DeviceOutId.text = mDeviceOutId
|
notifyItemRangeChanged(0, it.size)
|
||||||
} else if (it.size > 1) {
|
mDeviceOutId = it[pos].deviceOutId
|
||||||
mDeviceOutId = it[0].name
|
mConBleMac = it[pos].macId
|
||||||
val deviceOutIds = mutableListOf<String>()
|
mTrackerSetViewModel.bindDevice(
|
||||||
for (d in it) {
|
|
||||||
deviceOutIds.add(d.name)
|
|
||||||
}
|
|
||||||
tvAddNewTracker3DeviceOutId.visibility = View.GONE
|
|
||||||
rlAddNewTracker3DeviceLayout.visibility = View.VISIBLE
|
|
||||||
npAddNewTracker3DeviceList.let { np ->
|
|
||||||
ViewUtil.instance.setNumberPickerAttributes(
|
|
||||||
mContext,
|
|
||||||
np,
|
|
||||||
0,
|
|
||||||
it.size - 1,
|
|
||||||
0,
|
|
||||||
26,
|
|
||||||
valueChangeListener = this@AddNewTracker3Activity,
|
|
||||||
removeUpDownLine = true,
|
|
||||||
loopSelector = false
|
|
||||||
)
|
|
||||||
np.displayedValues = deviceOutIds.toTypedArray()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
setOnClickListenerViews(btnPairTrackerNo, btnPairTrackerYes, mRightImageButton)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun liveDataObserve() {
|
|
||||||
//接收蓝牙连接状态
|
|
||||||
XEventBus.observe(this, EventName.ConnectDeviceState) { ble: BleTrackDeviceBean ->
|
|
||||||
setButtonEnabled(mViewBinding.btnPairTrackerYes, ConstantInt.Type1)
|
|
||||||
if (ble.conState == ConState.CONNECTED) {
|
|
||||||
mConBleMac = ble.mac
|
|
||||||
val intent = Intent(mContext, AddPairedSuccessActivity::class.java)
|
|
||||||
intent.putExtra(ConstantString.DeviceOutId, mDeviceOutId)
|
|
||||||
intent.putExtra(ConstantString.isFirstBind, isFirstBind)
|
|
||||||
intent.putExtra(ConstantString.DeviceId, mDeviceId)
|
|
||||||
intent.putExtra(ConstantString.Mac, ble.mac)
|
|
||||||
startActivity(intent)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
//搜索蓝牙的设备状态
|
|
||||||
XEventBus.observe(this, EventName.ActionConDeviceState) { conState: Int ->
|
|
||||||
if (conState == ConState.DEVICE_NOT_FOUND) {
|
|
||||||
setButtonEnabled(mViewBinding.btnPairTrackerYes, ConstantInt.Type1)
|
|
||||||
showToast(R.string.txt_ble_connect_fail)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
XEventBus.observe(this, EventName.RefreshDevice) {
|
|
||||||
finish()
|
|
||||||
}
|
|
||||||
|
|
||||||
mTrackerSetViewModel.mAddBindDeviceLiveData.observe(this) {
|
|
||||||
setButtonEnabled(mViewBinding.btnPairTrackerYes, ConstantInt.Type1)
|
|
||||||
dealRequestResult(it, object : GetResultCallback {
|
|
||||||
override fun onResult(any: Any) {
|
|
||||||
it.getOrNull()?.apply {
|
|
||||||
mDeviceId = deviceId
|
|
||||||
setButtonEnabled(mViewBinding.btnPairTrackerYes, ConstantInt.Type0)
|
|
||||||
//连接蓝牙,方便发送激活指令
|
|
||||||
mConnectionDeviceViewModel.connectDeviceToDeviceOutId(
|
|
||||||
this@AddNewTracker3Activity, mDeviceOutId
|
this@AddNewTracker3Activity, mDeviceOutId
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
mViewBinding.apply {
|
||||||
|
ViewUtil.instance.setRecyclerViewVerticalLinearLayout(
|
||||||
|
mContext,
|
||||||
|
rvAddNewTracker3DeviceList,
|
||||||
|
mScanDeviceAdapter,
|
||||||
|
top = QMUIDisplayHelper.dpToPx(12)
|
||||||
|
)
|
||||||
|
|
||||||
|
setOnClickListenerViews(ivAddNewTracker3RefreshBtn)
|
||||||
|
}
|
||||||
|
startScanBle()
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun onValueChange(picker: NumberPicker?, oldVal: Int, newVal: Int) {
|
override fun liveDataObserve() {
|
||||||
mScanDeviceList?.let {
|
//接收蓝牙连接状态
|
||||||
mDeviceOutId = it[newVal].name
|
XEventBus.observe(this, EventName.ConnectDeviceState) { ble: BleTrackDeviceBean ->
|
||||||
|
if (mConBleMac == ble.mac) {
|
||||||
|
if (ble.conState == ConState.CONNECTED) {
|
||||||
|
setNoConnectState()
|
||||||
|
val intent = Intent(mContext, AddPairedSuccessActivity::class.java)
|
||||||
|
intent.putExtra(ConstantString.DeviceOutId, mDeviceOutId)
|
||||||
|
intent.putExtra(ConstantString.isFirstBind, isFirstBind)
|
||||||
|
intent.putExtra(ConstantString.DeviceId, mDeviceId)
|
||||||
|
intent.putExtra(ConstantString.Mac, ble.mac)
|
||||||
|
startActivity(intent)
|
||||||
|
} else if (ble.conState == ConState.CONNECTION_FAIL) {
|
||||||
|
setNoConnectState()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
//搜索蓝牙的设备状态
|
||||||
|
// XEventBus.observe(this, EventName.ActionConDeviceState) { conState: Int ->
|
||||||
|
// if (conState == ConState.DEVICE_NOT_FOUND) {
|
||||||
|
// setNoConnectState()
|
||||||
|
// showToast(R.string.txt_ble_connect_fail)
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
|
||||||
|
XEventBus.observe(this, EventName.RefreshDevice) {
|
||||||
|
finish()
|
||||||
|
}
|
||||||
|
|
||||||
|
mTrackerSetViewModel.mAddBindDeviceLiveData.observe(this) {
|
||||||
|
dealRequestResult(it, object : GetResultCallback {
|
||||||
|
override fun onResult(any: Any) {
|
||||||
|
it.getOrNull()?.apply {
|
||||||
|
mDeviceId = deviceId
|
||||||
|
//连接蓝牙,方便发送激活指令
|
||||||
|
mConnectionDeviceViewModel.connectDeviceToMac(
|
||||||
|
this@AddNewTracker3Activity, mConBleMac
|
||||||
|
)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun onErrorCode() {
|
||||||
|
super.onErrorCode()
|
||||||
|
setNoConnectState()
|
||||||
|
}
|
||||||
|
})
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private fun setNoConnectState() {
|
||||||
|
mScanDeviceAdapter.apply {
|
||||||
|
getData().let {
|
||||||
|
if (it.size > 0) {
|
||||||
|
isConnect = false
|
||||||
|
for (device in it) {
|
||||||
|
if (device.conState == ConState.CONNECTING) device.conState =
|
||||||
|
ConState.DISCONNECTED
|
||||||
|
}
|
||||||
|
notifyItemRangeChanged(0, it.size)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private fun startScanBle() {
|
||||||
|
SRBleUtil.instance.cancelBleScan("AddNewTracker2Activity,已经在扫描蓝牙,取消蓝牙扫描")
|
||||||
|
|
||||||
|
mScanDeviceAdapter.getData().let { list ->
|
||||||
|
mScanDeviceAdapter.notifyItemRangeRemoved(0, list.size)
|
||||||
|
list.clear()
|
||||||
|
mViewBinding.rvAddNewTracker3DeviceList.visibility = View.GONE
|
||||||
|
}
|
||||||
|
mViewBinding.ivAddNewTracker3RefreshBtn.let {
|
||||||
|
it.isEnabled = false
|
||||||
|
|
||||||
|
if (null == mAnimatorSet) {
|
||||||
|
mAnimatorSet = ViewUtil.instance.viewAlphaAndRotationObjectAnimator(it, true)
|
||||||
|
} else {
|
||||||
|
mAnimatorSet!!.start()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// 扫描超时时间,可选
|
||||||
|
val scanRuleConfig = BleScanRuleConfig.Builder().setScanTimeOut(15 * 1000).build()
|
||||||
|
BleManager.getInstance().initScanRule(scanRuleConfig)
|
||||||
|
BleManager.getInstance().scan(object : BleScanCallback() {
|
||||||
|
override fun onScanStarted(success: Boolean) {
|
||||||
|
LogUtil.e("开始扫描...$success")
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun onScanning(bleDevice: BleDevice?) {
|
||||||
|
LogUtil.d("onScanning....$bleDevice")
|
||||||
|
bleDevice?.apply {
|
||||||
|
if (null != name && name.contains(SRBleUtil.instance.trackDeviceBleStartName)) {
|
||||||
|
val start = 45
|
||||||
|
val end = start + 6
|
||||||
|
val subArray = scanRecord.sliceArray(start until end)
|
||||||
|
LogUtil.e("截取后的外显id广播=${HexUtil.formatHexString(subArray, true)}")
|
||||||
|
val deviceOutId = subArray.decodeToString()
|
||||||
|
DeviceBean().let {
|
||||||
|
it.deviceOutId = deviceOutId
|
||||||
|
it.macId = mac
|
||||||
|
mScanDeviceAdapter.getData().let { list ->
|
||||||
|
ViewUtil.instance.viewShow(mViewBinding.rvAddNewTracker3DeviceList)
|
||||||
|
list.add(it)
|
||||||
|
mScanDeviceAdapter.notifyItemRangeInserted(list.size - 1, 1)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun onScanFinished(scanResultList: MutableList<BleDevice>?) {
|
||||||
|
LogUtil.e("automaticConnection--扫描完成...${scanResultList?.size}")
|
||||||
|
scanFinished()
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
private fun scanFinished() {
|
||||||
|
mAnimatorSet?.cancel()
|
||||||
|
mViewBinding.ivAddNewTracker3RefreshBtn.isEnabled = true
|
||||||
|
if (mScanDeviceAdapter.getData().size == 0) {
|
||||||
|
ViewUtil.instance.showDialog(
|
||||||
|
mContext,
|
||||||
|
R.string.txt_no_search_device,
|
||||||
|
object : BaseDialog.OnDialogOkListener {
|
||||||
|
override fun onOkClick(dialog: BaseDialog<*>) {
|
||||||
|
dialog.dismiss()
|
||||||
|
startScanBle()
|
||||||
|
}
|
||||||
|
},
|
||||||
|
okTextResId = R.string.txt_ok,
|
||||||
|
cancelTextResId = R.string.txt_cancel,
|
||||||
|
cancelListener = object : BaseDialog.OnDialogCancelListener {
|
||||||
|
override fun onCancelClick(dialog: BaseDialog<*>) {
|
||||||
|
dialog.dismiss()
|
||||||
|
finish()
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
override fun leftBackOnClick() {
|
override fun leftBackOnClick() {
|
||||||
disconnectBle()
|
disconnectBle()
|
||||||
super.leftBackOnClick()
|
super.leftBackOnClick()
|
||||||
@@ -156,29 +248,11 @@ class AddNewTracker3Activity :
|
|||||||
override fun onClick(v: View?) {
|
override fun onClick(v: View?) {
|
||||||
mViewBinding.apply {
|
mViewBinding.apply {
|
||||||
when (v!!) {
|
when (v!!) {
|
||||||
btnPairTrackerNo -> {
|
ivAddNewTracker3RefreshBtn -> {
|
||||||
val intent = Intent(mContext, AddNewTracker4Activity::class.java)
|
|
||||||
intent.putExtra(ConstantString.isFirstBind, isFirstBind)
|
|
||||||
startActivity(intent)
|
|
||||||
}
|
|
||||||
|
|
||||||
btnPairTrackerYes -> {
|
|
||||||
disconnectBle()
|
disconnectBle()
|
||||||
setButtonEnabled(mViewBinding.btnPairTrackerYes, ConstantInt.Type0)
|
startScanBle()
|
||||||
mTrackerSetViewModel.bindDevice(
|
|
||||||
this@AddNewTracker3Activity, mDeviceOutId
|
|
||||||
)
|
|
||||||
}
|
|
||||||
|
|
||||||
mRightImageButton -> {
|
|
||||||
disconnectBle()
|
|
||||||
val intent = Intent(mContext, AddNewTracker2Activity::class.java)
|
|
||||||
intent.putExtra(ConstantString.isFirstBind, isFirstBind)
|
|
||||||
startActivityFinish(intent)
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
@@ -34,6 +34,7 @@ import android.widget.ProgressBar
|
|||||||
import android.widget.RelativeLayout
|
import android.widget.RelativeLayout
|
||||||
import android.widget.TextView
|
import android.widget.TextView
|
||||||
import androidx.annotation.DrawableRes
|
import androidx.annotation.DrawableRes
|
||||||
|
import androidx.core.animation.doOnCancel
|
||||||
import androidx.core.content.ContextCompat
|
import androidx.core.content.ContextCompat
|
||||||
import androidx.core.view.isGone
|
import androidx.core.view.isGone
|
||||||
import androidx.core.view.isInvisible
|
import androidx.core.view.isInvisible
|
||||||
@@ -728,6 +729,11 @@ class ViewUtil private constructor() {
|
|||||||
}
|
}
|
||||||
val animatorSet = AnimatorSet().apply {
|
val animatorSet = AnimatorSet().apply {
|
||||||
play(objectAnimator).with(objectAnimator2)
|
play(objectAnimator).with(objectAnimator2)
|
||||||
|
//取消动画,状态恢复原来状态
|
||||||
|
doOnCancel {
|
||||||
|
view.alpha = 1f
|
||||||
|
view.rotation = 0f
|
||||||
|
}
|
||||||
start()
|
start()
|
||||||
}
|
}
|
||||||
return animatorSet
|
return animatorSet
|
||||||
|
|||||||
@@ -70,8 +70,7 @@ class GeoCoderViewModel : ViewModel() {
|
|||||||
if (AppUtils.isChina(AppUtils.SWITCH_MAP_TYPE)) {
|
if (AppUtils.isChina(AppUtils.SWITCH_MAP_TYPE)) {
|
||||||
baiduMapReverseGeocoder(latitude, longitude)
|
baiduMapReverseGeocoder(latitude, longitude)
|
||||||
} else {
|
} else {
|
||||||
// baiduMapReverseGeocoder(-110.95, 44.65)
|
// baiduMapReverseGeocoder(latitude, longitude)
|
||||||
// mapBoxReverseGeocoder(42.23, -103.18)
|
|
||||||
mapBoxReverseGeocoder(latitude, longitude)
|
mapBoxReverseGeocoder(latitude, longitude)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -32,8 +32,7 @@
|
|||||||
|
|
||||||
<RelativeLayout
|
<RelativeLayout
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="0dp"
|
android:layout_height="wrap_content"
|
||||||
android:layout_weight="1"
|
|
||||||
android:gravity="center_vertical"
|
android:gravity="center_vertical"
|
||||||
android:orientation="horizontal">
|
android:orientation="horizontal">
|
||||||
|
|
||||||
@@ -48,74 +47,98 @@
|
|||||||
android:layout_height="@dimen/dp_200"
|
android:layout_height="@dimen/dp_200"
|
||||||
android:layout_alignParentEnd="true"
|
android:layout_alignParentEnd="true"
|
||||||
android:src="@drawable/icon_pair_tracker_image2" />
|
android:src="@drawable/icon_pair_tracker_image2" />
|
||||||
</RelativeLayout>
|
|
||||||
|
|
||||||
<com.abbidot.tracker.widget.TypefaceTextView
|
|
||||||
style="@style/my_TextView_style_v2"
|
|
||||||
android:layout_width="match_parent"
|
|
||||||
android:layout_marginBottom="@dimen/dp_14"
|
|
||||||
android:text="@string/txt_id_number"
|
|
||||||
android:textColor="@color/select_color3"
|
|
||||||
android:textSize="@dimen/textSize16"
|
|
||||||
app:typeface="@string/roboto_regular_font" />
|
|
||||||
|
|
||||||
<com.abbidot.tracker.widget.TypefaceTextView
|
|
||||||
android:id="@+id/tv_add_new_tracker3_device_out_id"
|
|
||||||
style="@style/my_TextView_style_v2"
|
|
||||||
android:layout_width="match_parent"
|
|
||||||
android:text="a0c0c1"
|
|
||||||
android:textAllCaps="true"
|
|
||||||
android:textSize="@dimen/textSize36"
|
|
||||||
android:textStyle="bold" />
|
|
||||||
|
|
||||||
<RelativeLayout
|
|
||||||
android:id="@+id/rl_add_new_tracker3_device_layout"
|
|
||||||
android:layout_width="match_parent"
|
|
||||||
android:layout_height="wrap_content"
|
|
||||||
android:visibility="gone">
|
|
||||||
|
|
||||||
<NumberPicker
|
|
||||||
android:id="@+id/np_add_new_tracker3_device_list"
|
|
||||||
android:layout_width="wrap_content"
|
|
||||||
android:layout_height="wrap_content"
|
|
||||||
android:layout_centerHorizontal="true" />
|
|
||||||
|
|
||||||
<androidx.appcompat.widget.AppCompatImageView
|
<androidx.appcompat.widget.AppCompatImageView
|
||||||
|
android:id="@+id/iv_add_new_tracker3_refresh_btn"
|
||||||
android:layout_width="wrap_content"
|
android:layout_width="wrap_content"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:layout_alignTop="@id/np_add_new_tracker3_device_list"
|
android:layout_alignParentEnd="true"
|
||||||
android:layout_alignBottom="@id/np_add_new_tracker3_device_list"
|
android:layout_marginTop="@dimen/dp_210"
|
||||||
android:layout_marginEnd="@dimen/dp_8"
|
android:layout_marginEnd="@dimen/dp_18"
|
||||||
android:layout_toStartOf="@id/np_add_new_tracker3_device_list"
|
android:src="@drawable/icon_refresh" />
|
||||||
android:src="@drawable/icon_permission_check_svg" />
|
|
||||||
|
|
||||||
|
<com.abbidot.tracker.widget.TypefaceTextView
|
||||||
|
style="@style/my_TextView_style_v2"
|
||||||
|
android:layout_alignTop="@id/iv_add_new_tracker3_refresh_btn"
|
||||||
|
android:layout_marginStart="@dimen/dp_40"
|
||||||
|
android:text="@string/txt_id_number"
|
||||||
|
android:textColor="@color/select_color3"
|
||||||
|
android:textSize="@dimen/textSize16"
|
||||||
|
app:typeface="@string/roboto_regular_font" />
|
||||||
</RelativeLayout>
|
</RelativeLayout>
|
||||||
|
|
||||||
<com.abbidot.tracker.widget.TypefaceButton
|
|
||||||
android:id="@+id/btn_pair_tracker_no"
|
<androidx.recyclerview.widget.RecyclerView
|
||||||
style="@style/my_match_RoundRect_Button_style"
|
android:id="@+id/rv_add_new_tracker3_device_list"
|
||||||
android:layout_height="@dimen/dp_50"
|
android:layout_width="match_parent"
|
||||||
android:layout_marginHorizontal="@dimen/dp_16"
|
android:layout_height="wrap_content"
|
||||||
android:layout_marginTop="@dimen/dp_68"
|
android:layout_marginHorizontal="@dimen/dp_18"
|
||||||
android:layout_marginBottom="@dimen/dp_8"
|
android:layout_marginVertical="@dimen/dp_10"
|
||||||
android:background="@color/block_color"
|
android:background="@drawable/shape24_white_bg"
|
||||||
android:text="@string/txt_no"
|
android:fadeScrollbars="false"
|
||||||
android:textSize="@dimen/textSize14"
|
android:paddingTop="@dimen/dp_6"
|
||||||
android:textStyle="bold"
|
android:paddingBottom="@dimen/dp_18"
|
||||||
android:visibility="gone"
|
android:scrollbars="vertical"
|
||||||
app:qmui_radius="@dimen/dp_24" />
|
android:visibility="gone" />
|
||||||
|
|
||||||
|
<!-- <com.abbidot.tracker.widget.TypefaceTextView-->
|
||||||
|
<!-- android:id="@+id/tv_add_new_tracker3_device_out_id"-->
|
||||||
|
<!-- style="@style/my_TextView_style_v2"-->
|
||||||
|
<!-- android:layout_width="match_parent"-->
|
||||||
|
<!-- android:text="a0c0c1"-->
|
||||||
|
<!-- android:textAllCaps="true"-->
|
||||||
|
<!-- android:textSize="@dimen/textSize36"-->
|
||||||
|
<!-- android:textStyle="bold" />-->
|
||||||
|
|
||||||
|
<!-- <RelativeLayout-->
|
||||||
|
<!-- android:id="@+id/rl_add_new_tracker3_device_layout"-->
|
||||||
|
<!-- android:layout_width="match_parent"-->
|
||||||
|
<!-- android:layout_height="wrap_content"-->
|
||||||
|
<!-- android:visibility="gone">-->
|
||||||
|
|
||||||
|
<!-- <NumberPicker-->
|
||||||
|
<!-- android:id="@+id/np_add_new_tracker3_device_list"-->
|
||||||
|
<!-- android:layout_width="wrap_content"-->
|
||||||
|
<!-- android:layout_height="wrap_content"-->
|
||||||
|
<!-- android:layout_centerHorizontal="true" />-->
|
||||||
|
|
||||||
|
<!-- <androidx.appcompat.widget.AppCompatImageView-->
|
||||||
|
<!-- android:layout_width="wrap_content"-->
|
||||||
|
<!-- android:layout_height="wrap_content"-->
|
||||||
|
<!-- android:layout_alignTop="@id/np_add_new_tracker3_device_list"-->
|
||||||
|
<!-- android:layout_alignBottom="@id/np_add_new_tracker3_device_list"-->
|
||||||
|
<!-- android:layout_marginEnd="@dimen/dp_8"-->
|
||||||
|
<!-- android:layout_toStartOf="@id/np_add_new_tracker3_device_list"-->
|
||||||
|
<!-- android:src="@drawable/icon_permission_check_svg" />-->
|
||||||
|
|
||||||
|
<!-- </RelativeLayout>-->
|
||||||
|
|
||||||
|
<!-- <com.abbidot.tracker.widget.TypefaceButton-->
|
||||||
|
<!-- android:id="@+id/btn_pair_tracker_no"-->
|
||||||
|
<!-- style="@style/my_match_RoundRect_Button_style"-->
|
||||||
|
<!-- android:layout_height="@dimen/dp_50"-->
|
||||||
|
<!-- android:layout_marginHorizontal="@dimen/dp_16"-->
|
||||||
|
<!-- android:layout_marginTop="@dimen/dp_68"-->
|
||||||
|
<!-- android:layout_marginBottom="@dimen/dp_8"-->
|
||||||
|
<!-- android:background="@color/block_color"-->
|
||||||
|
<!-- android:text="@string/txt_no"-->
|
||||||
|
<!-- android:textSize="@dimen/textSize14"-->
|
||||||
|
<!-- android:textStyle="bold"-->
|
||||||
|
<!-- android:visibility="gone"-->
|
||||||
|
<!-- app:qmui_radius="@dimen/dp_24" />-->
|
||||||
|
|
||||||
|
|
||||||
<com.abbidot.tracker.widget.TypefaceButton
|
<!-- <com.abbidot.tracker.widget.TypefaceButton-->
|
||||||
android:id="@+id/btn_pair_tracker_yes"
|
<!-- android:id="@+id/btn_pair_tracker_yes"-->
|
||||||
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_50"
|
<!-- android:layout_marginTop="@dimen/dp_50"-->
|
||||||
android:layout_marginBottom="@dimen/dp_32"
|
<!-- android:layout_marginBottom="@dimen/dp_32"-->
|
||||||
android:text="@string/register_txt_next"
|
<!-- android:text="@string/register_txt_next"-->
|
||||||
android:textSize="@dimen/textSize14"
|
<!-- android:textSize="@dimen/textSize14"-->
|
||||||
android:textStyle="bold"
|
<!-- android:textStyle="bold"-->
|
||||||
app:qmui_radius="@dimen/dp_24" />
|
<!-- app:qmui_radius="@dimen/dp_24" />-->
|
||||||
|
|
||||||
</androidx.appcompat.widget.LinearLayoutCompat>
|
</androidx.appcompat.widget.LinearLayoutCompat>
|
||||||
32
app/src/main/res/layout/layout_san_device_item.xml
Normal file
32
app/src/main/res/layout/layout_san_device_item.xml
Normal file
@@ -0,0 +1,32 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<androidx.appcompat.widget.LinearLayoutCompat xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:gravity="center_vertical"
|
||||||
|
android:orientation="horizontal"
|
||||||
|
android:paddingHorizontal="@dimen/dp_30">
|
||||||
|
|
||||||
|
<androidx.appcompat.widget.AppCompatImageView
|
||||||
|
android:layout_width="@dimen/dp_24"
|
||||||
|
android:layout_height="@dimen/dp_24"
|
||||||
|
android:layout_marginEnd="@dimen/dp_10"
|
||||||
|
android:src="@drawable/icon_tracker_device_small" />
|
||||||
|
|
||||||
|
<com.abbidot.tracker.widget.TypefaceTextView
|
||||||
|
android:id="@+id/tv_add_new_tracker3_device_out_id_item"
|
||||||
|
style="@style/my_TextView_style_v2"
|
||||||
|
android:text="a0c0c1"
|
||||||
|
android:textAllCaps="true"
|
||||||
|
android:textSize="@dimen/textSize24"
|
||||||
|
android:textStyle="bold" />
|
||||||
|
|
||||||
|
<View
|
||||||
|
android:layout_width="0dp"
|
||||||
|
android:layout_height="@dimen/dp_1"
|
||||||
|
android:layout_weight="1" />
|
||||||
|
|
||||||
|
<com.qmuiteam.qmui.widget.QMUILoadingView
|
||||||
|
android:id="@+id/ld_add_new_tracker3_connect_state"
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content" />
|
||||||
|
</androidx.appcompat.widget.LinearLayoutCompat>
|
||||||
@@ -46,6 +46,7 @@
|
|||||||
<dimen name="dp_180">180dp</dimen>
|
<dimen name="dp_180">180dp</dimen>
|
||||||
<dimen name="dp_190">190dp</dimen>
|
<dimen name="dp_190">190dp</dimen>
|
||||||
<dimen name="dp_200">200dp</dimen>
|
<dimen name="dp_200">200dp</dimen>
|
||||||
|
<dimen name="dp_210">210dp</dimen>
|
||||||
<dimen name="dp_220">220dp</dimen>
|
<dimen name="dp_220">220dp</dimen>
|
||||||
<dimen name="dp_255">255dp</dimen>
|
<dimen name="dp_255">255dp</dimen>
|
||||||
<dimen name="dp_260">260dp</dimen>
|
<dimen name="dp_260">260dp</dimen>
|
||||||
|
|||||||
Reference in New Issue
Block a user