From 75b10c2f77c77d05206c1133941fba5eee0c57ac Mon Sep 17 00:00:00 2001 From: jjangddu Date: Mon, 11 May 2026 11:51:27 +0900 Subject: [PATCH] =?UTF-8?q?UI:=20=ED=9E=8C=ED=8A=B8=20=EC=9C=84=EC=B9=98?= =?UTF-8?q?=20=EC=9D=B4=EB=8F=99=20+=20=EB=B2=84=ED=8A=BC=20=ED=85=8D?= =?UTF-8?q?=EC=8A=A4=ED=8A=B8=20+=20Alignment=20=EB=B9=84=ED=99=9C?= =?UTF-8?q?=EC=84=B1=20+=20Bladder=20Capacity?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit #1 Placement 힌트 메시지: 몸 아래 → Step 아래/몸 위로 이동 #2 버튼 텍스트: Catheterize→Catheterization, Auto→Automatic, 글자 크기 UP #3 Alignment Complete: GREEN(Optimal)일 때만 활성 (Skip과 차별화) #4 Max Volume → Bladder Capacity (설정+Personalization 모두) - Bladdy 도넛 내 위치 3% 위로 보정 Co-Authored-By: Claude Opus 4.6 (1M context) --- .../views/monitoring/PiezoMonitoringView.kt | 16 ++--- .../ui/views/monitoring/PlacementGuideView.kt | 60 +++++++++---------- .../PiezoPersonalizationView.kt | 4 +- 3 files changed, 40 insertions(+), 40 deletions(-) diff --git a/app/src/main/java/com/example/medilightv2android/ui/views/monitoring/PiezoMonitoringView.kt b/app/src/main/java/com/example/medilightv2android/ui/views/monitoring/PiezoMonitoringView.kt index 245524a..19de251 100644 --- a/app/src/main/java/com/example/medilightv2android/ui/views/monitoring/PiezoMonitoringView.kt +++ b/app/src/main/java/com/example/medilightv2android/ui/views/monitoring/PiezoMonitoringView.kt @@ -900,11 +900,11 @@ fun PiezoMonitoringView(appState: AppState) { lineWidth = donutLineWidth, size = donutSize ) - // Bladdy + 볼륨 (정중앙) + // Bladdy + 볼륨 (약간 위로 보정) Column( horizontalAlignment = Alignment.CenterHorizontally, verticalArrangement = Arrangement.Center, - modifier = Modifier.matchParentSize() + modifier = Modifier.matchParentSize().offset(y = -(donutSize * 0.03f)) ) { BladdyRiveView(urgency = urgency, size = bladdySize) Spacer(modifier = Modifier.height(4.dp)) @@ -960,8 +960,8 @@ fun PiezoMonitoringView(appState: AppState) { ) ) { Column(horizontalAlignment = Alignment.CenterHorizontally) { - Text("Void /", fontSize = 12.sp, fontWeight = FontWeight.SemiBold, color = MlPrimary) - Text("Catheterize", fontSize = 12.sp, fontWeight = FontWeight.SemiBold, color = MlPrimary) + Text("Void /", fontSize = 13.sp, fontWeight = FontWeight.SemiBold, color = MlPrimary) + Text("Catheterization", fontSize = 13.sp, fontWeight = FontWeight.SemiBold, color = MlPrimary) } } @@ -979,9 +979,9 @@ fun PiezoMonitoringView(appState: AppState) { ) ) { if (isAutoMeasuring) { - Text("Stop", fontSize = 13.sp, fontWeight = FontWeight.SemiBold, color = Color.White) + Text("Stop", fontSize = 14.sp, fontWeight = FontWeight.SemiBold, color = Color.White) } else { - Text("Auto", fontSize = 13.sp, fontWeight = FontWeight.SemiBold, color = Color.White) + Text("Automatic", fontSize = 14.sp, fontWeight = FontWeight.SemiBold, color = Color.White) } } @@ -1032,7 +1032,7 @@ fun PiezoMonitoringView(appState: AppState) { if (isSpotInProgress) { CircularProgressIndicator(color = Color.White, modifier = Modifier.size(18.dp), strokeWidth = 2.dp) } else { - Text("Spot", fontSize = 13.sp, fontWeight = FontWeight.SemiBold, color = Color.White) + Text("Spot", fontSize = 14.sp, fontWeight = FontWeight.SemiBold, color = Color.White) } } } @@ -1098,7 +1098,7 @@ fun PiezoMonitoringView(appState: AppState) { Column(modifier = Modifier.padding(16.dp), verticalArrangement = Arrangement.spacedBy(6.dp)) { // Max Volume Row(verticalAlignment = Alignment.CenterVertically) { - Text("Max Volume", fontSize = 14.sp, fontWeight = FontWeight.SemiBold) + Text("Bladder Capacity", fontSize = 14.sp, fontWeight = FontWeight.SemiBold) Spacer(modifier = Modifier.weight(1f)) Text("${appState.piezoSettings.maxVolume} mL", fontSize = 14.sp, fontWeight = FontWeight.Bold, color = MlPrimary) } diff --git a/app/src/main/java/com/example/medilightv2android/ui/views/monitoring/PlacementGuideView.kt b/app/src/main/java/com/example/medilightv2android/ui/views/monitoring/PlacementGuideView.kt index 279398f..7d3900b 100644 --- a/app/src/main/java/com/example/medilightv2android/ui/views/monitoring/PlacementGuideView.kt +++ b/app/src/main/java/com/example/medilightv2android/ui/views/monitoring/PlacementGuideView.kt @@ -217,6 +217,34 @@ fun PlacementGuideView(appState: AppState) { } } + // ── 가이드 텍스트 (Step 아래, 몸 위) ── + val hintGreen = isGreenZone + val hintBg = if (hintGreen) Color(0xFF4CAF50).copy(alpha = 0.12f) else Color(0xFFFFF3E0) + val hintFg = if (hintGreen) Color(0xFF4CAF50) else Color(0xFFFF9800) + val dots = ".".repeat((scanCount % 3) + 1) + val displayHint = buildString { + val hint = directionHint.ifEmpty { " " } + append(hint) + if (hint.startsWith("Raise") || hint.startsWith("Lower") || hint.startsWith("Move") || + hint.startsWith("Fine-tune") || hint.startsWith("Checking") || hint.startsWith("Adjust")) { + append(dots) + } + if (appState.isDevMode && !lastCv.isNaN()) { + append(" (CV=${"%.3f".format(lastCv)})") + } + } + Text( + text = displayHint, + fontSize = 15.sp, + fontWeight = FontWeight.SemiBold, + color = hintFg, + textAlign = TextAlign.Center, + modifier = Modifier + .fillMaxWidth() + .background(hintBg, RoundedCornerShape(12.dp)) + .padding(12.dp) + ) + // ── 하복부 Canvas 실루엣 + 센서 + 방향 가이드 ── Box( modifier = Modifier @@ -382,35 +410,7 @@ fun PlacementGuideView(appState: AppState) { } - // ── 가이드 텍스트 (일러스트 아래, 항상 표시) ── - val hintGreen = isGreenZone - val hintBg = if (hintGreen) Color(0xFF4CAF50).copy(alpha = 0.12f) else Color(0xFFFFF3E0) - val hintFg = if (hintGreen) Color(0xFF4CAF50) else Color(0xFFFF9800) - // 방향 힌트에 점 순환 (. / .. / ...) — 업데이트 중임을 시각적으로 표시 - val dots = ".".repeat((scanCount % 3) + 1) - val displayHint = buildString { - val hint = directionHint.ifEmpty { " " } - append(hint) - // 방향 안내 중일 때만 점 추가 (Optimal, Place sensor 등은 제외) - if (hint.startsWith("Raise") || hint.startsWith("Lower") || hint.startsWith("Move") || - hint.startsWith("Fine-tune") || hint.startsWith("Checking")) { - append(dots) - } - if (appState.isDevMode && !lastCv.isNaN()) { - append(" (CV=${"%.3f".format(lastCv)})") - } - } - Text( - text = displayHint, - fontSize = 15.sp, - fontWeight = FontWeight.SemiBold, - color = hintFg, - textAlign = TextAlign.Center, - modifier = Modifier - .fillMaxWidth() - .background(hintBg, RoundedCornerShape(12.dp)) - .padding(12.dp) - ) + // (힌트 텍스트는 Step 아래, 몸 위에 배치됨) Spacer(modifier = Modifier.height(8.dp)) @@ -816,7 +816,7 @@ fun PlacementGuideView(appState: AppState) { isContinuousMode = false appState.placementComplete() }, - enabled = isLocked || detectedCount >= 4, + enabled = isLocked, // GREEN(Optimal)일 때만 활성 modifier = Modifier .fillMaxWidth() .height(52.dp), diff --git a/app/src/main/java/com/example/medilightv2android/ui/views/personalization/PiezoPersonalizationView.kt b/app/src/main/java/com/example/medilightv2android/ui/views/personalization/PiezoPersonalizationView.kt index 3ec11dd..488e75f 100644 --- a/app/src/main/java/com/example/medilightv2android/ui/views/personalization/PiezoPersonalizationView.kt +++ b/app/src/main/java/com/example/medilightv2android/ui/views/personalization/PiezoPersonalizationView.kt @@ -146,9 +146,9 @@ private fun SensorPositionStep(appState: AppState) { @Composable private fun MaxVolumeStep(appState: AppState) { Column(horizontalAlignment = Alignment.CenterHorizontally) { - Text("Maximum Volume", fontSize = 24.sp, fontWeight = FontWeight.Bold) + Text("Bladder Capacity", fontSize = 24.sp, fontWeight = FontWeight.Bold) Spacer(modifier = Modifier.height(8.dp)) - Text("Set your maximum bladder capacity", fontSize = 14.sp, color = MlSecondaryText) + Text("Set your maximum bladder capacity (mL)", fontSize = 14.sp, color = MlSecondaryText) Spacer(modifier = Modifier.height(24.dp)) Row(verticalAlignment = Alignment.Bottom) {