아래는 “한 번 울릴 때(자동 종료까지) 5분/10분 → 15분/20분 옵션을 추가”하기 위해, 나중에 개발할 때 손대야 하는 지점을 현재 구조 기준으로 정리한 것입니다.
(중요: 이 변경은 ‘1분 후 다시 울림’(스누즈 딜레이) 과는 무관하고, “한 번 울렸을 때 최대 몇 분 울릴지” 만 늘리는 개선입니다.)
변경해야 할 곳 요약
- 설정 UI: AlarmEditActivity 화면에서 5/10을 고르는 UI에 15/20을 추가
- 저장 모델: AlarmItem.snoozeMinutes(또는 동일 의미의 필드)에 15/20이 저장되도록
- 울림 서비스 자동 종료 시간: WeekdayAlarmService에서 stopHandler.postDelayed(...)가 snoozeMinutes를 분 단위로 반영하도록
타이머(AlarmService)는 현재 코드상 자동 종료가 5분 고정이라면, “타이머도 15/20을 원할 때”는 AlarmService도 별도 개선 대상입니다.
지금 질문은 “알람 메뉴(요일 알람)”의 5/10을 늘리는 쪽으로 이해하고, 그 기준으로 씁니다.
1) AlarmEdit UI에 15분/20분 옵션 추가
(A) 레이아웃이 RadioButton/Chip 형태인 경우(가장 흔함)
파일:
- app/src/main/res/layout/activity_alarm_edit.xml (또는 비슷한 이름)
현재 5분/10분 버튼이 이런 식이면:
<RadioButton
android:id="@+id/radio_5"
android:text="5분"
android:tag="5"/>
<RadioButton
android:id="@+id/radio_10"
android:text="10분"
android:tag="10"/>
아래 2개를 그대로 추가합니다.
<RadioButton
android:id="@+id/radio_15"
android:text="15분"
android:tag="15"/>
<RadioButton
android:id="@+id/radio_20"
android:text="20분"
android:tag="20"/>
(B) values/arrays.xml로 옵션을 관리하는 경우
파일:
- app/src/main/res/values/arrays.xml (또는 strings.xml)
예를 들어 이런 배열이 있으면:
<string-array name="snooze_minutes_options">
<item>5</item>
<item>10</item>
</string-array>
여기에 추가:
<string-array name="snooze_minutes_options">
<item>5</item>
<item>10</item>
<item>15</item>
<item>20</item>
</string-array>
2) AlarmEditActivity에서 “선택값 저장” 로직에 15/20 허용
파일(거의 확실):
- app/src/main/java/.../alarmclock/AlarmEditActivity.kt
현재 코드가 5/10만 분기하는 형태면(예시):
val snoozeMinutes = when (checkedId) {
R.id.radio_5 -> 5
R.id.radio_10 -> 10
else -> 5
}
이걸 아래처럼 확장:
val snoozeMinutes = when (checkedId) {
R.id.radio_5 -> 5
R.id.radio_10 -> 10
R.id.radio_15 -> 15
R.id.radio_20 -> 20
else -> 5
}
또는 tag를 쓰는 구조라면(권장, 버튼 늘어도 코드가 단순):
val checked = findViewById<RadioButton>(radioGroup.checkedRadioButtonId)
val snoozeMinutes = (checked.tag as String).toInt() // 5/10/15/20
그리고 저장할 때:
item.snoozeMinutes = snoozeMinutes
AlarmStore(this).save(item)
3) WeekdayAlarmService 자동 종료 시간을 snoozeMinutes에 맞추기
파일:
- app/src/main/java/com/krdonon/timer/alarm/WeekdayAlarmService.kt
여기에서 “자동 종료”가 보통 이런 형태일 겁니다.
stopHandler.postDelayed({ stopAlarm() }, 5 * 60 * 1000L)
이게 고정이면, 반드시 아래처럼 “snoozeMinutes 반영”으로 바꿔야 합니다.
val ringMs = (snoozeMinutes.coerceAtLeast(1)) * 60_000L
stopHandler.postDelayed({ stopAlarm() }, ringMs)
이미 snoozeMinutes를 쓰고 있다면, 여기 수정은 필요 없습니다.
다만 15/20이 들어왔을 때도 제대로 동작하도록 coerceAtLeast(1) 같은 방어는 유지하는 게 좋습니다.
4) (선택) 유효성/기본값 제한이 있으면 같이 수정
프로젝트에 이런 코드가 있으면 같이 바꿔야 합니다.
A) 5/10만 허용하는 validation
예시:
if (item.snoozeMinutes != 5 && item.snoozeMinutes != 10) item.snoozeMinutes = 5
→ 아래처럼 허용 범위를 넓히거나:
val allowed = setOf(5, 10, 15, 20)
if (item.snoozeMinutes !in allowed) item.snoozeMinutes = 5
B) 기본값이 5로 박혀있는 곳
- AlarmItem 생성 시 default
- AlarmStore에서 null이면 5로 넣는 곳
이건 그대로 둬도 무방합니다(기본값은 계속 5).
5) “타이머(AlarmService)”도 15/20을 원할 때
지금 올려주셨던 AlarmService는 자동 종료가 5분 고정입니다:
stopHandler.postDelayed({ stopAlarm() }, 5 * 60 * 1000L)
타이머도 15/20 선택을 넣으려면:
- 타이머 설정값(분)을 별도 저장(Preferences or Timer 모델)
- AlarmService.start()에 extra로 “ringDurationMinutes” 전달
- 위 postDelayed를 extra 값으로 대체
하지만 질문하신 “알람 메뉴의 5/10에 15/20 추가”만이라면, 우선은 WeekdayAlarmService 쪽만 건드리면 됩니다.
나중에 작업할 때 빠르게 찾는 키워드
코드에서 이 문자열로 검색하면 수정 지점이 바로 나옵니다.
- snoozeMinutes
- 5 * 60 * 1000
- "5분"
- "10분"
- IMPORTANCE_LOW (이건 기록 알림 관련, 옵션 추가와는 무관)
원하시면, 지금 “현재 프로젝트 최신본 zip”을 한 번만 올려주시면 제가 실제 파일 기준으로 정확한 파일명/라인 기준으로 “여기 추가/여기 수정”을 딱 맞춰서 체크리스트로 다시 써드릴 수 있습니다.
좋습니다. 질문하신 3/4/5번을 “현재 구조 기준”으로 정확히 풀어서 설명드리겠습니다. (핵심은 **‘선택값 저장’**과 **‘그 값을 실제로 사용하는 곳’**이 다를 수 있다는 점입니다.)
3번이 뭔가요?
제가 말한 3번(WeekdayAlarmService 자동 종료 시간 반영) 은 이런 뜻입니다.
- 알람이 울리기 시작하면(1회 울림 시작),
- 사용자가 아무 것도 안 해도 “너무 오래 울리지 않게” 몇 분 후 자동으로 꺼지게(stop) 해놓은 코드가 있습니다.
- 그 “자동으로 꺼지는 시간”을 5분/10분/15분/20분 선택값에 맞춰 주는 부분이 3번입니다.
즉, “한 번 울릴 때 오래 울리는 시간(최대 울림 시간)” 을 결정하는 핵심이 3번입니다.
2번 코드만 수정하면 충분하냐?
아니요. 2번은 ‘저장’, 3번은 ‘사용’ 입니다.
- 2번만 하면: “15/20이 저장은 됨”
- 3번이 고정 5분이면: “저장은 20분인데 실제는 5분만 울리고 꺼짐”
그래서 “15/20을 추가하고 실제로 15/20분 울리게” 하려면,
- 3번이 고정값(5분)이라면 반드시 수정해야 합니다.
- 반대로, WeekdayAlarmService가 이미 snoozeMinutes로 자동 종료 시간을 계산하고 있다면 수정할 필요 없습니다.
4번은 “그런 코드가 있으면” 수정해야 한다는 뜻 맞나요?
맞습니다.
4번은 프로젝트 어딘가에 이런 식의 제한(검증) 코드가 있을 때만 해당됩니다.
예:
- “5나 10만 허용, 그 외는 5로 강제” 같은 코드
- 혹은 “10보다 크면 10으로 강제” 같은 코드
이런 제한이 있으면 15/20이 저장되거나 로딩될 때 자동으로 5나 10으로 바뀌어 버립니다.
따라서 4번은:
- 그런 제한 코드가 실제로 존재하면 수정해야 하고
- 없으면 신경 안 써도 됩니다.
5) “현재 코드는 10분 선택이 있는데 10분이 안 된다는 말인가요?”
아니요. “10분이 안 된다”는 뜻이 아닙니다.
다만 여기서 중요한 구분이 있습니다.
(A) 요일 알람(AlarmAgain/WeekdayAlarmService)에서의 10분
- 10분은 보통 “한 번 울릴 때 최대 10분 울리고 자동 종료” 로 쓰이도록 만들어져 있습니다.
- 지금 3회 스누즈가 정상 동작하는 상태라면, 10분도 같은 방식으로 동작할 가능성이 높습니다.
(B) 타이머(AlarmService)에서의 “자동 종료 시간”
사용자님이 전에 올려주신 AlarmService 코드를 보면, 타이머 쪽은 자동 종료가 5분 고정입니다.
// 자동 종료(5분)
stopHandler.postDelayed({ stopAlarm() }, 5 * 60 * 1000L)
즉,
- “10분 선택”이 요일 알람 설정이라면 타이머에는 영향이 없습니다.
- “타이머도 10분 동안 울리게” 하고 싶다면, AlarmService도 별도 개선이 필요합니다(지금은 5분 고정).
정리하면:
- 요일 알람의 10분은 정상 동작 가능
- 타이머의 자동 종료 시간은 현재 5분 고정 (이건 ‘10분 선택이 안 된다’가 아니라 ‘타이머는 아직 선택값을 안 쓰고 있다’는 의미)
한 줄 결론
- 15/20을 “선택지로 추가”만 하면(2번) 저장은 되지만,
- 실제로 15/20분 울리게 하려면 WeekdayAlarmService(3번)가 그 값을 자동 종료 시간에 반영하는지 반드시 확인해야 합니다.
- 4번은 “그런 제한 코드가 있을 때만” 수정.
- “10분 선택이 안 된다”가 아니라, 타이머 쪽 자동 종료는 현재 5분 고정이고, 요일 알람 쪽은 설계에 따라 다릅니다.
원하시면, 제가 가장 빠르게 확답드릴 수 있게 WeekdayAlarmService.kt의 ‘자동 종료 postDelayed’ 부분 10줄만 붙여주세요.
그 코드만 보면 “3번을 꼭 수정해야 하는지(고정 5분인지 / snoozeMinutes 반영 중인지)”를 즉시 판정해드릴 수 있습니다.
'앱개발' 카테고리의 다른 글
| 가로 본능 구현 하기 너무 어렵다 내일 타이머 스톱워치2 (1) | 2026.01.06 |
|---|---|
| 나의 기본 앱 바탕 색상 xml (0) | 2026.01.05 |
| JP2ForAndroid aar 문제. 메모장 pdf. 앱 관련 txt 앱 16k 문제 (0) | 2025.12.29 |
| 이 App Bundle 아티팩트 유형은 네이티브 코드를 포함하며 아직 디버그 기호가 업로드되지 않았습니다. 비정상 종료 및 ANR을 더 쉽게 분석하고 디버그할 수 있도록 기호 파일을 업로드하는 것이 좋습니다. 실패노트 앱 마무리 업로드 (0) | 2025.12.25 |
| Android Studio Android 메뉴 안보이는 경우 임시 방편으로 고치기 안드로이드 폴더 error (2) | 2025.12.16 |
