refactor: 알람 시스템 단순화 - 기본 알람 제거, ID 체계 개선
- 기본 알람(legacy) 로직 완전 제거 - 알람 ID 체계 단순화: alarmDbId * 100 + dayOffset - 예약 범위 축소: 오늘/내일만 예약 (복잡한 30일/365일 예약 제거) - AlarmSyncManager 단순화: 즉시 반영 로직 - AlarmReceiver 강화: 삭제된 알람 필터링 개선 - suspend 함수로 변경하여 비동기 처리 개선 Fixes: 삭제된 알람이 울리는 문제 해결 Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-opencode) Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
This commit is contained in:
@@ -9,12 +9,15 @@ import androidx.work.PeriodicWorkRequestBuilder
|
||||
import androidx.work.WorkManager
|
||||
import java.util.concurrent.TimeUnit
|
||||
|
||||
/**
|
||||
* 부팅 완료 시 알람 복구 리시버
|
||||
*/
|
||||
class BootReceiver : BroadcastReceiver() {
|
||||
override fun onReceive(context: Context, intent: Intent?) {
|
||||
if (intent?.action == Intent.ACTION_BOOT_COMPLETED) {
|
||||
android.util.Log.d("ShiftAlarm", "[부팅] 기기 부팅 감지, 알람 복구 시작")
|
||||
|
||||
// 1) 즉시 1회 실행 → 당일 알람을 바로 복구
|
||||
// 즉시 1회 실행 → 당일 알람 복구
|
||||
val immediateWork = OneTimeWorkRequestBuilder<AlarmWorker>().build()
|
||||
WorkManager.getInstance(context).enqueueUniqueWork(
|
||||
"BootAlarmRestore",
|
||||
@@ -22,16 +25,25 @@ class BootReceiver : BroadcastReceiver() {
|
||||
immediateWork
|
||||
)
|
||||
|
||||
// 2) 24시간 주기 반복 워커 등록
|
||||
// 24시간 주기 반복 워커 등록 (자정에 실행)
|
||||
val periodicWork = PeriodicWorkRequestBuilder<AlarmWorker>(24, TimeUnit.HOURS)
|
||||
.setInitialDelay(calculateDelayToMidnight(), TimeUnit.MILLISECONDS)
|
||||
.build()
|
||||
|
||||
WorkManager.getInstance(context).enqueueUniquePeriodicWork(
|
||||
"DailyShiftCheck",
|
||||
androidx.work.ExistingPeriodicWorkPolicy.KEEP,
|
||||
ExistingPeriodicWorkPolicy.KEEP,
|
||||
periodicWork
|
||||
)
|
||||
|
||||
android.util.Log.d("ShiftAlarm", "[부팅] 알람 복구 워커 등록 완료")
|
||||
}
|
||||
}
|
||||
|
||||
private fun calculateDelayToMidnight(): Long {
|
||||
val seoulZone = java.time.ZoneId.of("Asia/Seoul")
|
||||
val now = java.time.LocalDateTime.now(seoulZone)
|
||||
val midnight = now.plusDays(1).withHour(0).withMinute(5).withSecond(0) // 00:05에 실행
|
||||
return java.time.Duration.between(now, midnight).toMillis()
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user