From 0dbfab95198361b1f2674fb2cb2abba9d0a5f4b5 Mon Sep 17 00:00:00 2001 From: km2023 Date: Fri, 8 May 2026 16:38:37 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E6=B5=81=E7=A8=8B=E5=AF=B9=E9=BD=90=20i?= =?UTF-8?q?OS=20=E4=B8=A5=E6=A0=BC=201:1=EF=BC=88disconnect=20=E4=B8=8D?= =?UTF-8?q?=E6=B8=85=20sn/firmwareUpgrade=EF=BC=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 发现并修正以下 1:1 复刻偏离: 1. SDK:disconnect 行为 - iOS:被动断开 / 主动 disconnect 都 **不清** sn / firmwareUpgrade · sn 仅在 unbind 成功 / fetchLatestFirmware 软绑失败回滚时清空 · firmwareUpgrade 仅在 fetchLatestFirmware 成功时覆盖 - 之前 Android 在两个 disconnect 入口都清,与 iOS 不一致;现已修正 2. Demo:otaFetchUserId / otaFetchSn 进入页面时的初始化 - iOS:onAppear 时同步默认 userId / 当前 sdk.sn 到字段 - Android:之前 bind 后才填,进入页面默认空;现已与 iOS 对齐 3. Demo:ConfigField 禁用自动大写 / 自动纠错 - iOS 用 .autocapitalization(.none).disableAutocorrection(true) - Android 加 KeyboardOptions(autoCorrect=false, capitalization=None) Co-Authored-By: Claude Opus 4.7 (1M context) --- .../kotlin/com/duooomi/ble/demo/DemoScreen.kt | 22 ++++++++++++++----- .../kotlin/com/duooomi/ble/DuooomiBleSDK.kt | 7 +++--- 2 files changed, 19 insertions(+), 10 deletions(-) diff --git a/demo/src/main/kotlin/com/duooomi/ble/demo/DemoScreen.kt b/demo/src/main/kotlin/com/duooomi/ble/demo/DemoScreen.kt index 5cbb497..e425716 100644 --- a/demo/src/main/kotlin/com/duooomi/ble/demo/DemoScreen.kt +++ b/demo/src/main/kotlin/com/duooomi/ble/demo/DemoScreen.kt @@ -84,14 +84,20 @@ fun DemoScreen( var otaFetchVersion by remember(sdk) { mutableStateOf("") } var otaFetchUserId by remember(sdk) { mutableStateOf("") } - // bind 完成 → 回填 OTA 入参 - LaunchedEffect(isActivated, sn) { - if (isActivated && sn.isNotEmpty()) { + // 进入页面初次填充(对齐 iOS WrapperTestView onAppear) + LaunchedEffect(sdk) { + if (otaFetchSn.isEmpty()) otaFetchSn = sn + if (otaFetchVersion.isEmpty()) otaFetchVersion = version + if (otaFetchUserId.isEmpty()) otaFetchUserId = userId + } + // bind 完成 → 自动回填 sn / currentVersion(对齐 iOS onChange isActivated) + LaunchedEffect(isActivated) { + if (isActivated) { otaFetchSn = sn - if (version.isNotEmpty()) otaFetchVersion = version - if (otaFetchUserId.isEmpty()) otaFetchUserId = userId + otaFetchVersion = version } } + // getVersion 单独触发时也同步过来 LaunchedEffect(version) { if (version.isNotEmpty()) otaFetchVersion = version } @@ -605,7 +611,11 @@ private fun ConfigField(label: String, value: String, onChange: (String) -> Unit onValueChange = onChange, modifier = Modifier.weight(1f), singleLine = true, - textStyle = androidx.compose.ui.text.TextStyle(fontSize = 12.sp) + textStyle = androidx.compose.ui.text.TextStyle(fontSize = 12.sp), + keyboardOptions = androidx.compose.foundation.text.KeyboardOptions( + autoCorrect = false, + capitalization = androidx.compose.ui.text.input.KeyboardCapitalization.None + ) ) } } diff --git a/sdk/src/main/kotlin/com/duooomi/ble/DuooomiBleSDK.kt b/sdk/src/main/kotlin/com/duooomi/ble/DuooomiBleSDK.kt index 14a879c..20be589 100644 --- a/sdk/src/main/kotlin/com/duooomi/ble/DuooomiBleSDK.kt +++ b/sdk/src/main/kotlin/com/duooomi/ble/DuooomiBleSDK.kt @@ -100,11 +100,12 @@ class DuooomiBleSDK(context: Context, val config: DuooomiBleConfig) { _deviceInfo.value = null _version.value = "" _isActivated.value = false - _sn.value = "" - _firmwareUpgrade.value = null _btState.value = ConnectionState.DISCONNECTED protocolService.stopListening() cancelAllPending(DuooomiBleError.NotConnected) + // 与 iOS 一致:sn / firmwareUpgrade 不在断开时重置 + // —— sn 仅在 unbind 成功 / fetchLatestFirmware 软绑失败回滚时清空 + // —— firmwareUpgrade 仅在 fetchLatestFirmware 成功时覆盖 } } } @@ -198,8 +199,6 @@ class DuooomiBleSDK(context: Context, val config: DuooomiBleConfig) { _deviceInfo.value = null _version.value = "" _isActivated.value = false - _sn.value = "" - _firmwareUpgrade.value = null _btState.value = ConnectionState.DISCONNECTED BleLog.i("Disconnected", "Connect")