diff --git a/core/alarm/src/main/java/com/yapp/alarm/AndroidAlarmScheduler.kt b/core/alarm/src/main/java/com/yapp/alarm/AndroidAlarmScheduler.kt index 2691e78b..49c4581a 100644 --- a/core/alarm/src/main/java/com/yapp/alarm/AndroidAlarmScheduler.kt +++ b/core/alarm/src/main/java/com/yapp/alarm/AndroidAlarmScheduler.kt @@ -2,6 +2,7 @@ package com.yapp.alarm import android.app.AlarmManager import android.app.Application +import android.util.Log import com.yapp.alarm.pendingIntent.schedule.createAlarmReceiverPendingIntentForSchedule import com.yapp.alarm.pendingIntent.schedule.createAlarmReceiverPendingIntentForUnSchedule import com.yapp.domain.model.Alarm @@ -16,6 +17,15 @@ class AndroidAlarmScheduler @Inject constructor( private val alarmTimeCalculator: AlarmTimeCalculator, ) : AlarmScheduler { + private fun logSchedule(tag: String, alarm: Alarm, triggerMillis: Long, extra: String = "") { + Log.d("ScheduleTrace", "scheduleAlarm Called", Throwable()) + Log.d( + "AlarmSchedule", + "[$tag] id=${alarm.id}, repeatDays=${alarm.repeatDays}, " + + "time=${java.time.Instant.ofEpochMilli(triggerMillis)} $extra", + ) + } + override fun scheduleAlarm(alarm: Alarm) { val selectedDays = alarm.repeatDays.toAlarmDays() @@ -31,7 +41,7 @@ class AndroidAlarmScheduler @Inject constructor( private fun setRepeatingAlarm(day: AlarmDay, alarm: Alarm) { val triggerMillis = alarmTimeCalculator.calculateNextRepeatingTimeMillis(alarm, day) val pendingIntent = createAlarmReceiverPendingIntentForSchedule(app, alarm, day) - + logSchedule("REPEAT", alarm, triggerMillis, "day=$day") alarmManager.setExactAndAllowWhileIdle( AlarmManager.RTC_WAKEUP, triggerMillis, @@ -42,7 +52,7 @@ class AndroidAlarmScheduler @Inject constructor( private fun setNonRepeatingAlarm(alarm: Alarm) { val triggerMillis = alarmTimeCalculator.calculateNonRepeatingTimeMillis(alarm) val pendingIntent = createAlarmReceiverPendingIntentForSchedule(app, alarm) - + logSchedule("NON_REPEAT", alarm, triggerMillis) alarmManager.setExactAndAllowWhileIdle( AlarmManager.RTC_WAKEUP, triggerMillis, @@ -53,7 +63,7 @@ class AndroidAlarmScheduler @Inject constructor( fun rescheduleUpcomingWeeklyAlarm(alarm: Alarm, day: AlarmDay) { val triggerMillis = alarmTimeCalculator.calculateNextWeeklyRescheduledTimeMillis(alarm, day) val pendingIntent = createAlarmReceiverPendingIntentForSchedule(app, alarm, day) - + logSchedule("RESCHEDULE_WEEKLY", alarm, triggerMillis, "day=$day") alarmManager.setExactAndAllowWhileIdle( AlarmManager.RTC_WAKEUP, triggerMillis, diff --git a/core/alarm/src/main/java/com/yapp/alarm/receivers/RescheduleAlarmReceiver.kt b/core/alarm/src/main/java/com/yapp/alarm/receivers/RescheduleAlarmReceiver.kt index 9d21144d..b42e9fab 100644 --- a/core/alarm/src/main/java/com/yapp/alarm/receivers/RescheduleAlarmReceiver.kt +++ b/core/alarm/src/main/java/com/yapp/alarm/receivers/RescheduleAlarmReceiver.kt @@ -8,6 +8,7 @@ import com.yapp.domain.usecase.AlarmUseCase import dagger.hilt.android.AndroidEntryPoint import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.Dispatchers +import kotlinx.coroutines.flow.first import kotlinx.coroutines.launch import javax.inject.Inject @@ -31,11 +32,10 @@ class RescheduleAlarmReceiver : BroadcastReceiver() { private fun rescheduleAlarm() { CoroutineScope(Dispatchers.IO).launch { - alarmUseCase.getAllAlarms().collect { alarms -> - alarms.forEach { alarm -> - androidAlarmScheduler.scheduleAlarm(alarm) - } - } + val alarms = alarmUseCase.getAllAlarms().first() + alarms + .filter { it.isAlarmActive } + .forEach { alarm -> androidAlarmScheduler.scheduleAlarm(alarm) } } } }