UI: 회의 피드백 묶음 1 — Placement 가독성 + Voiding 표현/표시 + catheter 간격

회의 피드백 5건:

#6 PlacementGuide(Sensor Alignment) 글자 가독성
  - Step 1/3 indicator: 14sp MlPrimary → 22sp 검정
  - "Sensor Alignment" 타이틀: 28sp Bold → 36sp ExtraBold (이미 검정)
  - 노란/초록 hint 박스 글자: 20sp hintFg(노랑/초록) → 26sp Bold 검정
    (박스 배경 색은 의미 유지 — 노랑=조정 필요, 초록=Green zone)

#7 Start Alignment 버튼 텍스트: White → Black

#8 도넛차트 Voiding 버튼: "Voiding" → "Voiding / Catheterization"
   (12sp · TextAlign.Center · maxLines=2로 줄바꿈 허용)

#9 도넛차트 mL 표시: Voiding 직후 displayMaxVolumeMl=0 + estimatedVolume=0
   상태에서 "0 mL" 대신 "— mL" 표시 — 측정값이 없음을 명확히

#10 catheter "left" 간격: 2dp → 6dp (숫자와 텍스트 사이 여유)

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
2026-06-08 17:52:43 +09:00
parent 35887802fd
commit e7076ed2a0
2 changed files with 17 additions and 14 deletions
@@ -35,6 +35,7 @@ import androidx.compose.ui.graphics.Path
import androidx.compose.ui.graphics.PathEffect import androidx.compose.ui.graphics.PathEffect
import androidx.compose.ui.graphics.drawscope.Stroke import androidx.compose.ui.graphics.drawscope.Stroke
import androidx.compose.ui.platform.LocalConfiguration import androidx.compose.ui.platform.LocalConfiguration
import androidx.compose.ui.text.style.TextAlign
import androidx.compose.ui.platform.LocalContext import androidx.compose.ui.platform.LocalContext
import androidx.compose.ui.text.font.FontFamily import androidx.compose.ui.text.font.FontFamily
import androidx.compose.ui.text.font.FontWeight import androidx.compose.ui.text.font.FontWeight
@@ -903,7 +904,7 @@ fun PiezoMonitoringView(appState: AppState) {
Icon(Icons.Default.LocalHospital, "Catheter", tint = MlPrimary, modifier = Modifier.size(16.dp)) Icon(Icons.Default.LocalHospital, "Catheter", tint = MlPrimary, modifier = Modifier.size(16.dp))
Spacer(modifier = Modifier.width(4.dp)) Spacer(modifier = Modifier.width(4.dp))
Text("$cathCount", fontSize = (13 * fontScale).sp, fontWeight = FontWeight.Bold, color = MlPrimary) Text("$cathCount", fontSize = (13 * fontScale).sp, fontWeight = FontWeight.Bold, color = MlPrimary)
Spacer(modifier = Modifier.width(2.dp)) Spacer(modifier = Modifier.width(6.dp))
Text("left", fontSize = (10 * fontScale).sp, fontWeight = FontWeight.SemiBold, Text("left", fontSize = (10 * fontScale).sp, fontWeight = FontWeight.SemiBold,
color = MlPrimary.copy(alpha = 0.7f)) color = MlPrimary.copy(alpha = 0.7f))
} }
@@ -1078,7 +1079,10 @@ fun PiezoMonitoringView(appState: AppState) {
} }
Spacer(modifier = Modifier.height(4.dp)) Spacer(modifier = Modifier.height(4.dp))
Text( Text(
if (displayMaxVolumeMl > 0) "${"%.0f".format(displayMaxVolumeMl)} mL" else "${appState.estimatedVolume} mL", // Voiding 직후엔 displayMaxVolumeMl=0이고 estimatedVolume도 0 → "0 mL"가 의미 없음 → "— mL"로
if (displayMaxVolumeMl > 0) "${"%.0f".format(displayMaxVolumeMl)} mL"
else if (appState.estimatedVolume > 0) "${appState.estimatedVolume} mL"
else "— mL",
fontSize = volFontSize, fontSize = volFontSize,
fontWeight = if (useScrollLayout) FontWeight.Bold else FontWeight.ExtraBold, fontWeight = if (useScrollLayout) FontWeight.Bold else FontWeight.ExtraBold,
color = urgency.accentColor, color = urgency.accentColor,
@@ -1137,8 +1141,9 @@ fun PiezoMonitoringView(appState: AppState) {
disabledContainerColor = Color.Gray.copy(alpha = 0.3f) disabledContainerColor = Color.Gray.copy(alpha = 0.3f)
) )
) { ) {
Text("Voiding", fontSize = (14 * fontScale).sp, Text("Voiding / Catheterization", fontSize = (12 * fontScale).sp,
fontWeight = FontWeight.SemiBold, color = Color.White) fontWeight = FontWeight.SemiBold, color = Color.White,
textAlign = TextAlign.Center, maxLines = 2)
} }
// Auto (Spot 진행 중 봉인) // Auto (Spot 진행 중 봉인)
@@ -213,7 +213,7 @@ fun PlacementGuideView(appState: AppState) {
} }
Text( Text(
text = "Step ${currentStepIdx + 1}/3", text = "Step ${currentStepIdx + 1}/3",
fontSize = 14.sp, fontWeight = FontWeight.Bold, color = MlPrimary fontSize = 22.sp, fontWeight = FontWeight.Bold, color = Color.Black
) )
// 3-dot indicator: 완료(○ → ●), 현재(큰 ●), 미완료(○) // 3-dot indicator: 완료(○ → ●), 현재(큰 ●), 미완료(○)
Row(horizontalArrangement = Arrangement.spacedBy(6.dp), Row(horizontalArrangement = Arrangement.spacedBy(6.dp),
@@ -272,8 +272,8 @@ fun PlacementGuideView(appState: AppState) {
// 타이틀 — 28sp Bold (Hint와의 강조 균형. 이전 38sp ExtraBold는 화면을 압도) // 타이틀 — 28sp Bold (Hint와의 강조 균형. 이전 38sp ExtraBold는 화면을 압도)
Text( Text(
text = "Sensor Alignment", text = "Sensor Alignment",
fontSize = 28.sp, fontSize = 36.sp,
fontWeight = FontWeight.Bold, fontWeight = FontWeight.ExtraBold,
color = Color.Black, color = Color.Black,
textAlign = TextAlign.Center, textAlign = TextAlign.Center,
modifier = Modifier.fillMaxWidth().padding(vertical = 4.dp) modifier = Modifier.fillMaxWidth().padding(vertical = 4.dp)
@@ -308,14 +308,12 @@ fun PlacementGuideView(appState: AppState) {
append(rawHint) append(rawHint)
} }
} }
// Hint 톤다운 — 28sp+큰 박스+빨강 강조 3중 중첩이었음. // 회의 피드백: hint 글자는 검정으로 통일 + 키우기. 박스 배경 색은 의미 유지(노랑=조정 필요/초록=Green).
// 폰트 28→20sp, padding 18→12dp, 박스 alpha 살짝 ↓.
// "pubic bone" 빨강 강조는 유지 (의도된 1점 강조).
Text( Text(
text = displayHint, text = displayHint,
fontSize = 20.sp, fontSize = 26.sp,
fontWeight = FontWeight.SemiBold, fontWeight = FontWeight.Bold,
color = hintFg, color = Color.Black,
textAlign = TextAlign.Center, textAlign = TextAlign.Center,
modifier = Modifier modifier = Modifier
.fillMaxWidth() .fillMaxWidth()
@@ -924,7 +922,7 @@ fun PlacementGuideView(appState: AppState) {
shape = RoundedCornerShape(18.dp), shape = RoundedCornerShape(18.dp),
colors = ButtonDefaults.buttonColors(containerColor = Color(0xFFFF9800)) colors = ButtonDefaults.buttonColors(containerColor = Color(0xFFFF9800))
) { ) {
Text("Start Alignment", fontSize = 28.sp, fontWeight = FontWeight.Bold, color = Color.White) Text("Start Alignment", fontSize = 28.sp, fontWeight = FontWeight.Bold, color = Color.Black)
} }
} }