From 35887802fdcac4a90337eb2326033b86c5cfd832 Mon Sep 17 00:00:00 2001 From: jjangddu Date: Mon, 8 Jun 2026 16:34:33 +0900 Subject: [PATCH] =?UTF-8?q?ClinicalHome=20Unpair:=20appState.isDeviceConne?= =?UTF-8?q?cted=EB=A5=BC=20false=EB=A1=9C=20=EB=8F=99=EA=B8=B0=ED=99=94?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 증상: Clinical → Unpair → 메인 → Start → 도넛차트 진입 시 BLE 끊긴 상태로 도착. 새 페어링 없이 측정 시도 → 응답 없음. 원인: ClinicalHomeView의 Unpair 다이얼로그가 BleManager.disconnectAndUnbond() 만 호출하고 appState.isDeviceConnected는 안 건드림. BleManager.isConnected.value 는 false로 reset되지만 appState 측은 stale true 상태로 남아 있음. AppState.startFromHome()이 isDeviceConnected==true 분기에서 DeviceScan을 건너뛰고 곧장 PIEZO_PERSONALIZATION으로 이동하기 때문에, 재페어링 단계 자체가 누락된 채 MaxCapacity → AutoScan → Placement(skip) → 도넛차트까지 미연결 상태로 진행. 수정: Unpair 확인 시 appState.isDeviceConnected = false 한 줄 추가. 이제 Start → DeviceScan 화면으로 가서 정상적으로 재페어링. 참고: PiezoMonitoring의 Disconnect 다이얼로그는 appState.goHome() 호출하고 그 안에서 isDeviceConnected=false 처리되므로 별도 fix 불필요. Co-Authored-By: Claude Opus 4.7 (1M context) --- .../medilightv2android/ui/views/clinical/ClinicalHomeView.kt | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/app/src/main/java/com/example/medilightv2android/ui/views/clinical/ClinicalHomeView.kt b/app/src/main/java/com/example/medilightv2android/ui/views/clinical/ClinicalHomeView.kt index 340c1c9..976641b 100644 --- a/app/src/main/java/com/example/medilightv2android/ui/views/clinical/ClinicalHomeView.kt +++ b/app/src/main/java/com/example/medilightv2android/ui/views/clinical/ClinicalHomeView.kt @@ -456,6 +456,11 @@ fun ClinicalHomeView(appState: AppState) { TextButton(onClick = { showUnpairConfirm = false bleManager.disconnectAndUnbond() + // BleManager.isConnected.value는 disconnectAndUnbond 내부에서 false로 reset되지만 + // appState.isDeviceConnected는 별도 — 명시적으로 동기화하지 않으면 stale true 상태가 + // 유지되어 HOME→Start 시 DeviceScan 건너뛰고 Personalization으로 직진 → 도넛차트 + // 진입 시 BLE 미연결 상태로 도착하는 버그 발생. + appState.isDeviceConnected = false Toast.makeText(context, "Unpaired", Toast.LENGTH_SHORT).show() }) { Text("Delete", color = Color.Red) } },