From c0394f63b76fe1b77143377c3b84321e4d3e8bdc Mon Sep 17 00:00:00 2001 From: jjangddu Date: Mon, 1 Jun 2026 17:46:54 +0900 Subject: [PATCH] =?UTF-8?q?Clinical:=20BLE=20Connected=20=EC=B9=B4?= =?UTF-8?q?=EB=93=9C=EC=97=90=20Unpair=20=EB=B2=84=ED=8A=BC=20=EC=B6=94?= =?UTF-8?q?=EA=B0=80=20=E2=80=94=20=EC=B8=A1=EC=A0=95=20=ED=9B=84=20?= =?UTF-8?q?=ED=8E=98=EC=96=B4=EB=A7=81=20=EB=81=8A=EA=B8=B0=20=ED=8E=B8?= =?UTF-8?q?=EC=9D=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit PiezoMonitoring의 'Delete' 패턴과 동일: confirm dialog → bleManager.disconnectAndUnbond(). ClinicalHome에 머무르므로 곧바로 BLE 카드가 Not Connected 상태로 전환되어 다음 사람 측정 전에 Connect 버튼 활성화. Co-Authored-By: Claude Opus 4.7 (1M context) --- .../ui/views/clinical/ClinicalHomeView.kt | 23 +++++++++++++++++++ 1 file changed, 23 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 7dbf865..340c1c9 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 @@ -84,6 +84,7 @@ fun ClinicalHomeView(appState: AppState) { mutableStateOf(lastFolder?.let { LabdbUploader.lastError(it) }) } var uploadBusy by remember { mutableStateOf(false) } + var showUnpairConfirm by remember { mutableStateOf(false) } // 진입 시 status 자동 확인 (apiKey 있을 때만) LaunchedEffect(Unit) { @@ -151,6 +152,10 @@ fun ClinicalHomeView(appState: AppState) { fontWeight = FontWeight.SemiBold) } } + OutlinedButton( + onClick = { showUnpairConfirm = true }, + colors = ButtonDefaults.outlinedButtonColors(contentColor = Color(0xFFE53935)) + ) { Text("Unpair", fontSize = 12.sp) } } else { Text("BLE Not Connected", fontWeight = FontWeight.Bold, fontSize = 14.sp, color = Color(0xFFFF9800), modifier = Modifier.weight(1f)) @@ -441,6 +446,24 @@ fun ClinicalHomeView(appState: AppState) { Text("저장 위치: Downloads/VesiScan_Sessions/", fontSize = 10.sp, color = MlSecondaryText) } + + if (showUnpairConfirm) { + AlertDialog( + onDismissRequest = { showUnpairConfirm = false }, + title = { Text("Delete pairing?") }, + text = { Text("기기 본딩을 삭제하고 연결을 끊습니다. 다음 측정 시 다시 페어링이 필요합니다.") }, + confirmButton = { + TextButton(onClick = { + showUnpairConfirm = false + bleManager.disconnectAndUnbond() + Toast.makeText(context, "Unpaired", Toast.LENGTH_SHORT).show() + }) { Text("Delete", color = Color.Red) } + }, + dismissButton = { + TextButton(onClick = { showUnpairConfirm = false }) { Text("Cancel") } + } + ) + } } @Composable