feat(align): V2 GREEN 진입 후 5초 hold — 순간 flick 으로 즉시 풀림 방지

V1 은 이미 greenHoldMs=7000 로 hold 로직 있으나 V2 (v2Aligner) 는
매 프레임마다 finalStop 을 재판정하고 false 되는 순간 즉시 unlock 되어
"측정 시작" 버튼이 disable 되는 UX 문제. 사용자가 GREEN 뜬 순간
버튼 누를 시간이 부족.

수정: V2 쪽에도 5초 hold 추가. 진입 후 5초 이내에는 finalStop 이
false 로 바뀌어도 isLocked=true, LED mode 6 (GREEN) 유지.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
This commit is contained in:
2026-07-07 09:36:36 +09:00
parent 49aab7b175
commit 159116dd94
@@ -960,11 +960,22 @@ fun PlacementGuideView(appState: AppState) {
st.action == com.medithings.vesiscan.managers.AlignAction.STOP -> 60 // CH3_STABILIZE 유지 중
else -> 40
}
// 2026-07-07: GREEN 진입 후 5초 hold — 순간 flick 으로 GREEN 이 즉시
// 풀려 "측정 시작" 버튼이 disable 되는 UX 문제 방지. V1 은 이미
// greenHoldMs=7000 로 동일 로직 있으나 V2 만 빠져 있었음.
val v2GreenHoldMs = 5000L
val nowMs = System.currentTimeMillis()
val v2GreenHeld = isLocked && (nowMs - greenLockedAtMs < v2GreenHoldMs)
if (finalStop) {
if (!isLocked) greenLockedAtMs = System.currentTimeMillis()
if (!isLocked) greenLockedAtMs = nowMs
isLocked = true
placementPhase = PlacementPhase.GREEN
if (lastLedMode != 6) { bleManager.sendLedMode(6); lastLedMode = 6 }
} else if (v2GreenHeld) {
// Hold 중 — isLocked / GREEN LED 유지, 단 hint 는 갱신 위에서 이미 반영.
// placementScore 만 GREEN 표시 유지.
placementScore = 100
placementPhase = PlacementPhase.GREEN
} else {
isLocked = false
if (lastLedMode != 5) { bleManager.sendLedMode(5); lastLedMode = 5 }