fix: 매 connect 마다 device-specific state 리셋
증상: 디바이스 A → B 로 스위치 시 firmware/battery/serial 이 이전 디바이스 값으로 잠깐 그대로 노출됨. STATE_DISCONNECTED 콜백이 안 떴거나 다른 디바이스로 즉시 스위치하는 경우. 원인: BleManager 가 singleton 이라 state 가 연결-연결 사이에 유지됨. 새 mid?/msn? 응답 받기 전까진 이전 디바이스 값이 보임 → 사용자가 잘못된 정보로 진단. 수정: - connect(BleDevice) 진입부에 firmwareVersion / hardwareVersion / serialNumber / batteryLevel / connectedDeviceName / isServiceReady 모두 reset - reconnectToLastDevice 도 동일 처리 - connectByAddress 는 connect 위임 → 자동 커버 연결 시작 ~ mid?/msn? 응답 도착 사이 잠깐 빈 값/0으로 보임 → 정확. 응답 도착하면 즉시 새 값 반영.
This commit is contained in:
@@ -223,6 +223,16 @@ class BleManager private constructor(private val context: Context) {
|
||||
rxCharacteristic = null
|
||||
}
|
||||
|
||||
// 이전 디바이스의 state 가 남아있는 걸 방지 — 매 connect 마다 fresh.
|
||||
// 새 mid?/msn? 응답 받기 전까진 빈 값으로 보임 → 정확.
|
||||
// (STATE_DISCONNECTED 콜백이 안 떴거나 다른 디바이스로 바로 스위치하는 경우 대응)
|
||||
firmwareVersion.value = ""
|
||||
hardwareVersion.value = ""
|
||||
serialNumber.value = ""
|
||||
batteryLevel.value = 0
|
||||
connectedDeviceName.value = ""
|
||||
isServiceReady.value = false
|
||||
|
||||
val idx = discoveredDevices.indexOfFirst { it.address == bleDevice.address }
|
||||
if (idx >= 0) discoveredDevices[idx] = discoveredDevices[idx].copy(isConnecting = true)
|
||||
|
||||
@@ -402,6 +412,14 @@ class BleManager private constructor(private val context: Context) {
|
||||
bluetoothGatt = null
|
||||
}
|
||||
|
||||
// 이전 디바이스 state fresh (다른 디바이스로 스위치하는 reconnect 케이스 대비)
|
||||
firmwareVersion.value = ""
|
||||
hardwareVersion.value = ""
|
||||
serialNumber.value = ""
|
||||
batteryLevel.value = 0
|
||||
connectedDeviceName.value = ""
|
||||
isServiceReady.value = false
|
||||
|
||||
isReconnecting.value = true
|
||||
val device = bluetoothAdapter.getRemoteDevice(lastDeviceAddress)
|
||||
bluetoothGatt = device.connectGatt(context, false, gattCallback, BluetoothDevice.TRANSPORT_LE)
|
||||
|
||||
Reference in New Issue
Block a user