ClinicalHome Unpair: appState.isDeviceConnected를 false로 동기화

증상: 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) <noreply@anthropic.com>
This commit is contained in:
2026-06-08 16:34:33 +09:00
parent fb6f722b53
commit 35887802fd
@@ -456,6 +456,11 @@ fun ClinicalHomeView(appState: AppState) {
TextButton(onClick = { TextButton(onClick = {
showUnpairConfirm = false showUnpairConfirm = false
bleManager.disconnectAndUnbond() 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() Toast.makeText(context, "Unpaired", Toast.LENGTH_SHORT).show()
}) { Text("Delete", color = Color.Red) } }) { Text("Delete", color = Color.Red) }
}, },