From 12f1919bc66620a0346ac8d0be814d5d3e5fc7ff Mon Sep 17 00:00:00 2001 From: jjangddu Date: Mon, 8 Jun 2026 17:58:18 +0900 Subject: [PATCH] =?UTF-8?q?UX=20#4:=20HOME=20=EC=A7=84=EC=9E=85=20?= =?UTF-8?q?=EC=8B=9C=20BLE=20=EC=97=B0=EA=B2=B0=20=EC=9C=A0=EC=A7=80=20+?= =?UTF-8?q?=20Start=20=EC=8B=9C=20=EC=84=A4=EC=A0=95/Placement=20skip?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 회의 피드백: BLE 연결된 상태에서 HOME으로 가면 연결이 끊겨 다음 측정 때 DeviceScan부터 다시 거쳐야 하는 불편. 연결을 유지하고, Start 시 설정 단계 모두 skip하고 바로 도넛차트로 진입할 수 있도록. AppState.goHome(): - bleManager.disconnect() 제거 — BLE 연결 유지 - isDeviceConnected reset도 제거 (실제 연결 상태 유지) - Demo 모드인 경우만 isDeviceConnected=false (가짜 연결 정리) - NIRS 스트리밍 정지 / 데모 종료 처리는 유지 AppState.startFromHome(): - 연결됨(isDeviceConnected==true) → PIEZO_MONITORING 직진 (도넛차트) - 미연결 → DEVICE_SCAN (기존 흐름) HomeView: - 연결된 상태이면 "● Connected — Start to resume" chip 표시 사용자가 다음 Start가 바로 도넛차트로 갈 것임을 인지 가능 기존 동작 유지: - ClinicalHome Unpair → appState.isDeviceConnected=false (어제 fix 그대로) → HOME 진입 시 chip 안 보임 → Start 시 DeviceScan으로 정상 진입 - PiezoMonitoring Disconnect 다이얼로그 → goHome() 그대로 호출되지만 이젠 BLE 끊기지 않음. 의도적으로 끊고 싶으면 disconnectAndUnbond 사용. Co-Authored-By: Claude Opus 4.7 (1M context) --- .../com/example/medilightv2android/AppState.kt | 11 +++++++---- .../medilightv2android/ui/views/home/HomeView.kt | 15 +++++++++++++++ 2 files changed, 22 insertions(+), 4 deletions(-) diff --git a/app/src/main/java/com/example/medilightv2android/AppState.kt b/app/src/main/java/com/example/medilightv2android/AppState.kt index 762cfcc..e216934 100644 --- a/app/src/main/java/com/example/medilightv2android/AppState.kt +++ b/app/src/main/java/com/example/medilightv2android/AppState.kt @@ -82,8 +82,10 @@ class AppState(private val context: Context) { fun goHome() { NirsManager.instance.stopStreaming() NirsManager.instance.reset() - if (!isDemoMode) bleManager.disconnect() - isDeviceConnected = false + // 회의 결정: 실제 BLE 연결은 HOME에서도 유지. 다음 Start 시 설정/scan skip하고 + // 바로 PiezoMonitoring으로 진입할 수 있도록. + // Demo 모드는 가짜 연결이므로 isDeviceConnected reset. + if (isDemoMode) isDeviceConnected = false isDemoMode = false currentScreen = AppScreen.HOME } @@ -101,8 +103,9 @@ class AppState(private val context: Context) { fun startFromHome() { sensorMode = SensorMode.PIEZO storage.sensorMode = SensorMode.PIEZO - // 페어링 완료 상태에서도 Personalization부터 시작해야 함 — Monitoring 직행 버그 fix - currentScreen = if (isDeviceConnected) AppScreen.PIEZO_PERSONALIZATION else AppScreen.DEVICE_SCAN + // 회의 결정: 이미 연결된 상태이면 설정/Placement skip하고 바로 도넛차트. + // 연결되지 않은 상태에서만 DeviceScan부터 일련의 과정 진행. + currentScreen = if (isDeviceConnected) AppScreen.PIEZO_MONITORING else AppScreen.DEVICE_SCAN } fun selectSensor(mode: SensorMode) { diff --git a/app/src/main/java/com/example/medilightv2android/ui/views/home/HomeView.kt b/app/src/main/java/com/example/medilightv2android/ui/views/home/HomeView.kt index 23e14a0..a5ea3b2 100644 --- a/app/src/main/java/com/example/medilightv2android/ui/views/home/HomeView.kt +++ b/app/src/main/java/com/example/medilightv2android/ui/views/home/HomeView.kt @@ -80,6 +80,21 @@ fun HomeView(appState: AppState) { val versionName = context.packageManager.getPackageInfo(context.packageName, 0).versionName Text(versionName ?: "", fontSize = 12.sp, color = MlSecondaryText.copy(alpha = 0.5f)) + Spacer(modifier = Modifier.height(8.dp)) + + // BLE 연결 상태 chip — 연결 유지 정책에서 사용자가 인지 가능하도록 + if (appState.isDeviceConnected) { + Text( + "● Connected — Start to resume", + fontSize = 12.sp, + fontWeight = FontWeight.SemiBold, + color = Color(0xFF4CAF50), + modifier = Modifier + .background(Color(0xFF4CAF50).copy(alpha = 0.12f), RoundedCornerShape(8.dp)) + .padding(horizontal = 10.dp, vertical = 4.dp) + ) + } + Spacer(modifier = Modifier.weight(1f)) Button(