Forráskód Böngészése

refactor(蓝牙&硬件管理):
- 优化蓝牙扫描逻辑,新增停止扫描方法
- 仓位管理和初始化页面支持CAN模式下钥匙和锁的UI展示

周文健 1 hónapja
szülő
commit
351d96595f

+ 23 - 3
app/src/main/java/com/grkj/iscs/features/init/fragment/InitDeviceRegistrationKeyAndLockFragment.kt

@@ -16,6 +16,7 @@ import com.google.android.flexbox.FlexboxLayoutManager
 import com.google.android.flexbox.JustifyContent
 import com.grkj.data.config.ISCSConfig
 import com.grkj.data.data.EventConstants
+import com.grkj.data.data.MMKVConstants
 import com.grkj.data.enums.HardwareMode
 import com.grkj.data.hardware.DockData
 import com.grkj.data.hardware.modbus.DockBean
@@ -29,6 +30,7 @@ import com.grkj.iscs.features.init.viewmodel.InitDeviceRegistrationKeyAndLockVie
 import com.grkj.shared.model.EventBean
 import com.grkj.ui_base.base.BaseFragment
 import com.grkj.ui_base.utils.CommonUtils
+import com.sik.sikcore.extension.getMMKVData
 import com.sik.sikcore.extension.setDebouncedClickListener
 import com.sik.sikcore.thread.ThreadUtils
 import dagger.hilt.android.AndroidEntryPoint
@@ -64,7 +66,13 @@ class InitDeviceRegistrationKeyAndLockFragment :
                 navController.navigate(R.id.action_initDeviceRegistrationKeyAndLockFragment_to_initCardRegistrationFragment)
             }
         }
-        binding.dockRv.linear().dividerSpace(
+        binding.dockRv.apply {
+            if (MMKVConstants.KEY_HARDWARE_MODE.getMMKVData(HardwareMode.MODBUS.name) == HardwareMode.MODBUS.name) {
+                linear()
+            } else {
+                grid(2)
+            }
+        }.dividerSpace(
             requireContext().resources.getDimension(com.grkj.ui_base.R.dimen.iscs_space_4)
                 .toInt(), DividerOrientation.GRID
         ).setup {
@@ -99,7 +107,13 @@ class InitDeviceRegistrationKeyAndLockFragment :
                 val keyDatas = keyDock.flatMap { it.keyData }
                 val newKeyDock = DockData.KeyDock()
                 newKeyDock.keyData.addAll(keyDatas)
-                val newKeyDockList = newKeyDock.keyData.chunked(4).map { subList ->
+                val newKeyDockList = newKeyDock.keyData.let {
+                    if (MMKVConstants.KEY_HARDWARE_MODE.getMMKVData(HardwareMode.MODBUS.name) == HardwareMode.MODBUS.name) {
+                        it.chunked(4)
+                    }else{
+                        it.chunked(2)
+                    }
+                }.map { subList ->
                     DockData.KeyDock().apply { keyData.addAll(subList) }
                 }
                 val lockDock = HardwareMode.getCurrentHardwareMode().getLockDockData()
@@ -130,7 +144,13 @@ class InitDeviceRegistrationKeyAndLockFragment :
         lockDock: DockData.LockDock,
     ) {
         val itemBinding = getBinding<ItemDeviceRegistrationLockLayoutBinding>()
-        itemBinding.rvLockLayout.grid(10).dividerSpace(10, DividerOrientation.GRID).setup {
+        itemBinding.rvLockLayout.apply {
+            if (MMKVConstants.KEY_HARDWARE_MODE.getMMKVData(HardwareMode.MODBUS.name) == HardwareMode.MODBUS.name) {
+                grid(10)
+            } else {
+                grid(5)
+            }
+        }.dividerSpace(10, DividerOrientation.GRID).setup {
             addType<DockData.LockDock.LockBean>(R.layout.item_device_registration_lock)
             onBind {
                 val itemLockBinding = getBinding<ItemDeviceRegistrationLockBinding>()

+ 9 - 1
app/src/main/java/com/grkj/iscs/features/main/fragment/hardware_manage/SlotsManageFragment.kt

@@ -15,6 +15,7 @@ import com.google.android.flexbox.FlexWrap
 import com.google.android.flexbox.FlexboxLayoutManager
 import com.google.android.flexbox.JustifyContent
 import com.grkj.data.config.ISCSConfig
+import com.grkj.data.data.MMKVConstants
 import com.grkj.data.data.MainDomainData
 import com.grkj.data.enums.CommonDictDataEnum
 import com.grkj.data.enums.HardwareMode
@@ -33,6 +34,7 @@ import com.grkj.shared.utils.i18n.I18nManager
 import com.grkj.ui_base.base.BaseFragment
 import com.grkj.ui_base.dialog.TipDialog
 import com.grkj.ui_base.utils.CommonUtils
+import com.sik.sikcore.extension.getMMKVData
 import com.sik.sikcore.extension.setDebouncedClickListener
 import com.sik.sikcore.thread.ThreadUtils
 import dagger.hilt.android.AndroidEntryPoint
@@ -53,7 +55,13 @@ class SlotsManageFragment : BaseFragment<FragmentSlotsManageBinding>() {
             viewModel.unregisterStatusListener()
             navController.popBackStack()
         }
-        binding.dockRv.linear().dividerSpace(
+        binding.dockRv.apply {
+            if (MMKVConstants.KEY_HARDWARE_MODE.getMMKVData(HardwareMode.MODBUS.name) == HardwareMode.MODBUS.name) {
+                linear()
+            } else {
+                grid(2)
+            }
+        }.dividerSpace(
             requireContext().resources.getDimension(com.grkj.ui_base.R.dimen.iscs_space_4)
                 .toInt(), DividerOrientation.GRID
         ).setup {

+ 9 - 1
app/src/main/java/com/grkj/iscs/features/main/viewmodel/hardware_manage/SlotsManageViewModel.kt

@@ -2,6 +2,7 @@ package com.grkj.iscs.features.main.viewmodel.hardware_manage
 
 import androidx.lifecycle.LiveData
 import androidx.lifecycle.liveData
+import com.grkj.data.data.MMKVConstants
 import com.grkj.data.enums.HardwareMode
 import com.grkj.data.model.dos.IsKey
 import com.grkj.data.model.dos.IsLock
@@ -13,6 +14,7 @@ import com.grkj.ui_base.business.HardwareBusinessManager
 import com.grkj.data.hardware.ble.BleConnectionManager
 import com.grkj.data.hardware.modbus.DeviceConst
 import com.grkj.data.hardware.modbus.DockBean
+import com.sik.sikcore.extension.getMMKVData
 import com.sik.sikcore.extension.toJson
 import dagger.hilt.android.lifecycle.HiltViewModel
 import kotlinx.coroutines.Dispatchers
@@ -251,7 +253,13 @@ class SlotsManageViewModel @Inject constructor(
             val keyDatas = keyDock.flatMap { it.keyData }
             val newKeyDock = DockData.KeyDock()
             newKeyDock.keyData.addAll(keyDatas)
-            val newKeyDockList = newKeyDock.keyData.chunked(4).map { subList ->
+            val newKeyDockList = newKeyDock.keyData.let {
+                if (MMKVConstants.KEY_HARDWARE_MODE.getMMKVData(HardwareMode.MODBUS.name) == HardwareMode.MODBUS.name) {
+                    it.chunked(4)
+                } else {
+                    it.chunked(2)
+                }
+            }.map { subList ->
                 DockData.KeyDock().apply { keyData.addAll(subList) }
             }
             val lockDock = HardwareMode.getCurrentHardwareMode().getLockDockData()

+ 2 - 2
data/src/main/java/com/grkj/data/hardware/ble/BleConnectionManager.kt

@@ -306,7 +306,7 @@ object BleConnectionManager {
                     if (isNeedLoading) LoadingEvent.Companion.sendLoadingEvent(null, false)
                     prepareDoneCallBack?.invoke(false, null)
                 } else if (!success && retryTimes > 0) {
-                    BleManager.cancelScan()
+                    BleUtil.instance?.stopScan()
                     ThreadUtils.runOnMainDelayed(3000) {
                         doScanBle(mac, isNeedLoading, retryTimes - 1, isSend, prepareDoneCallBack)
                     }
@@ -324,7 +324,7 @@ object BleConnectionManager {
                 if (scanMac.equals(mac, ignoreCase = true)) {
                     // 找到目标设备,马上停止扫描
                     logger.info("找到目标设备 $mac,停止扫描并尝试连接")
-                    BleManager.cancelScan()
+                    BleUtil.instance?.stopScan()
                     // 立刻调用 doConnect,下一步进入连接流程
                     doConnect(
                         newDevice,

+ 10 - 0
data/src/main/java/com/grkj/data/hardware/ble/BleUtil.kt

@@ -1,6 +1,7 @@
 package com.grkj.data.hardware.ble
 
 import android.Manifest
+import android.annotation.SuppressLint
 import android.app.Application
 import android.bluetooth.BluetoothGatt
 import android.bluetooth.le.ScanSettings
@@ -115,6 +116,15 @@ class BleUtil private constructor() {
         }
     }
 
+    /**
+     * 停止扫描
+     */
+    @SuppressLint("MissingPermission")
+    fun stopScan() {
+        inScan = false
+        BleManager.cancelScan()
+    }
+
     @RequiresPermission(Manifest.permission.BLUETOOTH_CONNECT)
     fun connectBySelect(bleDevice: BleDevice, bleGattCallback: CustomBleGattCallback) {
         if (BleManager.isSupportBle(SIKCore.getApplication())) {