UX #4: HOME 진입 시 BLE 연결 유지 + Start 시 설정/Placement skip
회의 피드백: 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) <noreply@anthropic.com>
This commit is contained in:
@@ -82,8 +82,10 @@ class AppState(private val context: Context) {
|
|||||||
fun goHome() {
|
fun goHome() {
|
||||||
NirsManager.instance.stopStreaming()
|
NirsManager.instance.stopStreaming()
|
||||||
NirsManager.instance.reset()
|
NirsManager.instance.reset()
|
||||||
if (!isDemoMode) bleManager.disconnect()
|
// 회의 결정: 실제 BLE 연결은 HOME에서도 유지. 다음 Start 시 설정/scan skip하고
|
||||||
isDeviceConnected = false
|
// 바로 PiezoMonitoring으로 진입할 수 있도록.
|
||||||
|
// Demo 모드는 가짜 연결이므로 isDeviceConnected reset.
|
||||||
|
if (isDemoMode) isDeviceConnected = false
|
||||||
isDemoMode = false
|
isDemoMode = false
|
||||||
currentScreen = AppScreen.HOME
|
currentScreen = AppScreen.HOME
|
||||||
}
|
}
|
||||||
@@ -101,8 +103,9 @@ class AppState(private val context: Context) {
|
|||||||
fun startFromHome() {
|
fun startFromHome() {
|
||||||
sensorMode = SensorMode.PIEZO
|
sensorMode = SensorMode.PIEZO
|
||||||
storage.sensorMode = SensorMode.PIEZO
|
storage.sensorMode = SensorMode.PIEZO
|
||||||
// 페어링 완료 상태에서도 Personalization부터 시작해야 함 — Monitoring 직행 버그 fix
|
// 회의 결정: 이미 연결된 상태이면 설정/Placement skip하고 바로 도넛차트.
|
||||||
currentScreen = if (isDeviceConnected) AppScreen.PIEZO_PERSONALIZATION else AppScreen.DEVICE_SCAN
|
// 연결되지 않은 상태에서만 DeviceScan부터 일련의 과정 진행.
|
||||||
|
currentScreen = if (isDeviceConnected) AppScreen.PIEZO_MONITORING else AppScreen.DEVICE_SCAN
|
||||||
}
|
}
|
||||||
|
|
||||||
fun selectSensor(mode: SensorMode) {
|
fun selectSensor(mode: SensorMode) {
|
||||||
|
|||||||
@@ -80,6 +80,21 @@ fun HomeView(appState: AppState) {
|
|||||||
val versionName = context.packageManager.getPackageInfo(context.packageName, 0).versionName
|
val versionName = context.packageManager.getPackageInfo(context.packageName, 0).versionName
|
||||||
Text(versionName ?: "", fontSize = 12.sp, color = MlSecondaryText.copy(alpha = 0.5f))
|
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))
|
Spacer(modifier = Modifier.weight(1f))
|
||||||
|
|
||||||
Button(
|
Button(
|
||||||
|
|||||||
Reference in New Issue
Block a user