fix(alignment): 0/6 walls 시 즉시 팝업 강제 (rising-edge 놓치는 케이스)

증상 (사용자 보고 2026-08-05):
  6채널 다 안 잡히는데 "센서 분리됨" 팝업이 안 뜸.

원인:
  DetachmentDetection 은 mean·std AND rule (threshold 30) — EMI/노이즈로 std ≥ 30 이면
  isDetached=false 반환 → rising-edge 트리거 (line 882) 가 발화 안 됨. 화면상 6채널이
  전부 미검출이어도 팝업이 안 뜨는 gap.

수정:
  0/6 walls sanity check 에서 showDetachAlert = true 를 직접 세팅.
  prevDetached=true 도 같이 세팅해 재부착 시 auto-dismiss 정상 동작.

이전 fix (982df04) 는 waitingForStart 복귀까지만 처리했음. Start 재클릭 시 팝업이
뜨긴 했지만 사용자 입장에선 여전히 "안 뜬다" 로 느껴졌음.

feature/cloud-mvp d4dac71 과 대칭 (cloud-mvp 는 팝업 UI 자체를 새로 추가).
This commit is contained in:
2026-08-05 17:47:53 +09:00
parent 982df04ca7
commit 99bb904f13
@@ -934,14 +934,16 @@ fun PlacementGuideView(appState: AppState) {
directionHint = context.getString(R.string.placement_check_attachment)
directionIcon = ""
placementScore = 0
// 2026-08-05: 사용자가 Start 눌렀는데 0/6 감지 시 · Start 화면 복귀.
// 그렇지 않으면 "아무것도 안 됨" 처럼 느껴짐 (button 사라진 채 hint 만 반복).
// prevDetached=true 로 세팅해 Start 재클릭 시 즉시 팝업 발생 (line ~1229 가드).
// 2026-08-05: Start 후 0/6 감지 시 · Start 화면 복귀 + 즉시 팝업.
// DetachmentDetection 은 EMI/노이즈로 std ≥ 30 이면 false 를 반환할 수
// 있어 rising-edge 팝업이 안 뜨는 케이스가 있음. 0/6 은 그 자체로 부착
// 실패 신호 → 즉시 팝업 강제.
if (!waitingForStart) {
isContinuousMode = false
waitingForStart = true
prevDetached = true
bleManager.debugLogger.warn("ALIGN_V2 sanity: 0/6 walls · Start 후 부착 실패 · waitingForStart 복귀")
prevDetached = true // 재부착 시 dismiss 정상 동작
showDetachAlert = true // 즉시 팝업 (재클릭 대기 없이)
bleManager.debugLogger.warn("ALIGN_V2 sanity: 0/6 walls · Start 후 부착 실패 · waitingForStart 복귀 + 팝업")
} else {
bleManager.debugLogger.info("ALIGN_V2 sanity: 0/6 walls · override to attachment check")
}