SK_28 나이트모드 v1.20.05 변경 요약
결론
v1.20.05의 SK_28 수정은 기존 분기를 유지하면서 명령 2곳만 정리한 것이다.
- 예약 대기 상태에서 일반 ON을 요청하면
Ghost(true)를 먼저 보내고 기존 예약 종료 시각까지TimeMode(true)를 실행한다. - 예약 상태에서 상시 ON으로 전환할 때는 이미
Ghost=true이므로TimeMode(false)만 실행한다.
서버 통신 가능 여부에 따른 Cloud/Local 진입 조건과 그 밖의 상태 분기는 변경하지 않았다.
요청 시나리오별 최종 동작
| 번호 | Function token | 현재 상태 (Ghost, TimeMode, Active) |
TTS | 최종 명령 |
|---|---|---|---|---|
| [1] 일반 ON | <sk_28>(enable=0,type=-1) |
(true, true, false) |
나이트 모드를 지금 켰어요. 기존에 지정하신 시간까지 동작합니다. | Ghost(true) → TimeMode(true, 현재 시각, 기존 endTime) |
| [2-1] 시간 설정 ON | <sk_28>(enable=0,type=0) |
(true, false, true) |
인터넷이 연결되어 있지 않아 22:00~06:00 시간지정 나이트모드를 설정합니다. | Ghost(true) → TimeMode(true, 22_00, 06_00) |
| [2-2] 시간 설정 ON | <sk_28>(enable=0,type=0) |
(true, false, false) |
[2-1]과 동일 | Ghost(true) → TimeMode(true, 22_00, 06_00) |
| [3] 상시 ON | <sk_28>(enable=0,type=1) |
(true, true, active 무관) |
시간 예약을 해제하고 나이트 모드가 항상 켜지도록 변경했어요. | TimeMode(false)만 실행 |
실제로 바뀐 부분
[1] 변경 전: TimeMode(true, 현재 시각, 기존 endTime)
[1] 변경 후: Ghost(true) → TimeMode(true, 현재 시각, 기존 endTime)
[3] 변경 전: TimeMode(false) → Ghost(true)
[3] 변경 후: TimeMode(false)
[2-1]과 [2-2]는 기존부터 요구 순서대로 구현돼 있었다. 코드 변경 없이 테스트 기대값만 실제 계약에 맞게 정리했다.
변경하지 않은 기존 분기
| 상황 | 기존 동작 유지 |
|---|---|
| 완전 OFF에서 일반 ON | Ghost(true)만 실행 |
| 상시 나이트모드가 이미 동작 중 | 중복 안내, setter 없음 |
| 예약 나이트모드가 이미 동작 중인데 일반 ON | 기존 종료 시각 자동 OFF 안내, setter 없음 |
| 일반 OFF | Ghost(false)만 실행하며 TimeMode 예약값은 유지 |
| 서버 통신 가능 + 시간 설정 ON | 기존 Cloud NightModeAgent 진입 조건 유지 |
코드·검증 기준
| 항목 | 결과 |
|---|---|
| 기능 커밋 | ce363802 · fix SK_28 나이트모드 command sequence |
| 릴리즈 기준 | c615ac96 · tag v1.20.05 |
| Resolver unit test | 20/20 PASS |
assembleDebugAndroidTest |
PASS |
| Release APK | versionName=1.20.05, versionCode=124, platform 인증서 확인 |
| 최종 실기기 발화 검증 | 별도 수행 필요 |
실제 구현은 기존 NightModeDecisionResolver의 상태 분기와 명령 목록을 최소 수정한
것이다.