From 9a6a81c9f4d72583f5a16c2fb1c9b9666801e43e Mon Sep 17 00:00:00 2001 From: jjangddu Date: Mon, 29 Jun 2026 11:59:43 +0900 Subject: [PATCH] =?UTF-8?q?fix(alignment):=20Skip=20=EB=B2=84=ED=8A=BC=20?= =?UTF-8?q?=EC=A4=91=EB=B3=B5=20=EC=A0=9C=EA=B1=B0=20+=20Box.BottomCenter?= =?UTF-8?q?=20=EA=B3=A0=EC=A0=95=20(V2=20=EB=93=B1=EC=97=90=EC=84=9C=20?= =?UTF-8?q?=EC=9E=98=EB=A6=AC=EB=8A=94=20=EB=AC=B8=EC=A0=9C=20fix)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 문제: - top bar 우측 Skip + 하단 scrollable Skip → 중복 - 일반 사용자/clinical 모드는 Column 이 scroll 비활성 (weight 레이아웃) → V2 같이 콘텐츠 많을 때 맨 아래 Skip 이 화면 밖으로 잘려 안 보임 수정: - top bar Skip 제거 (1개만 유지) - 하단 Skip 을 scrollable Column 밖, Box.align(BottomCenter) 으로 분리 → 콘텐츠 길이와 무관하게 항상 화면 하단에 노출 Co-Authored-By: Claude Opus 4.7 --- .../ui/views/monitoring/PlacementGuideView.kt | 56 +++++++------------ 1 file changed, 19 insertions(+), 37 deletions(-) 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 437945f..3991036 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 @@ -276,26 +276,6 @@ fun PlacementGuideView(appState: AppState) { Icon(Icons.Filled.CheckCircle, stringResource(R.string.placement_ready_desc), tint = Color(0xFF4CAF50), modifier = Modifier.size(24.dp)) Spacer(modifier = Modifier.width(4.dp)) } - // Skip — 항상 top bar 우측에 노출 (스크롤 안에 묻혀 안 보이던 문제 fix). - // clinical alignment: endMeasurement 저장 후 Clinical Home / 일반: placementComplete. - TextButton(onClick = { - isContinuousMode = false - val curSess = com.example.medilightv2android.services.ClinicalSessionStore.currentSession - if (curSess != null && curSess.mode == com.example.medilightv2android.models.SessionMode.ALIGNMENT) { - com.example.medilightv2android.services.ClinicalSessionStore.endMeasurement(context) - com.example.medilightv2android.services.ClinicalSessionStore.inClinicalFlow = true - appState.currentScreen = AppScreen.CLINICAL_HOME - } else { - appState.placementComplete() - } - }) { - Text( - text = stringResource(R.string.placement_skip), - fontSize = 16.sp, - fontWeight = FontWeight.SemiBold, - color = MlSecondaryText - ) - } if (appState.isDevMode) { IconButton(onClick = { showPlacementSettings = !showPlacementSettings }) { Icon(Icons.Default.Settings, stringResource(R.string.piezo_settings_desc), tint = if (showPlacementSettings) MlPrimary else MlSecondaryText) @@ -1270,12 +1250,14 @@ fun PlacementGuideView(appState: AppState) { ) } - // Skip button (태블릿: 15 → 20sp) - Spacer(modifier = Modifier.height(8.dp)) - TextButton(onClick = { + // 하단 작은 padding (Skip 이 화면 밖 — 아래 Box.BottomCenter 로 분리되어 항상 노출). + Spacer(modifier = Modifier.height(16.dp)) + } // end scrollable Column + + // Skip button — scrollable Column 밖, Box.BottomCenter 에 고정 → V2 등 콘텐츠가 길어도 항상 노출. + TextButton( + onClick = { isContinuousMode = false - // Clinical alignment session 진입 → 저장 후 Clinical Home 으로 - // Back / Complete / Skip 모두 endMeasurement → measurement.json + labdb 업로드. val curSess = com.example.medilightv2android.services.ClinicalSessionStore.currentSession if (curSess != null && curSess.mode == com.example.medilightv2android.models.SessionMode.ALIGNMENT) { com.example.medilightv2android.services.ClinicalSessionStore.endMeasurement(context) @@ -1284,18 +1266,18 @@ fun PlacementGuideView(appState: AppState) { } else { appState.placementComplete() } - }) { - Text( - text = stringResource(R.string.placement_skip), - fontSize = 20.sp, - fontWeight = FontWeight.SemiBold, - color = MlSecondaryText - ) - } - - // 하단 작은 padding 만 (Skip 이 화면 아래 가까이 오도록). - Spacer(modifier = Modifier.height(16.dp)) - } // end scrollable Column + }, + modifier = Modifier + .align(Alignment.BottomCenter) + .padding(bottom = 4.dp) + ) { + Text( + text = stringResource(R.string.placement_skip), + fontSize = 16.sp, + fontWeight = FontWeight.SemiBold, + color = MlSecondaryText + ) + } // Floating settings overlay (개발자 모드) if (appState.isDevMode && showPlacementSettings) {