From 859643837be07845789cf56728ab6805e15dac6a Mon Sep 17 00:00:00 2001 From: learntodroid <56079350+learntodroid@users.noreply.github.com> Date: Tue, 8 Sep 2020 19:25:07 +1000 Subject: [PATCH 1/3] fix for one time alarms to work when the device is dozed --- .../learntodroid/simplealarmclock/data/Alarm.java | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/app/src/main/java/com/learntodroid/simplealarmclock/data/Alarm.java b/app/src/main/java/com/learntodroid/simplealarmclock/data/Alarm.java index 5dcd8e0..24d0e2d 100644 --- a/app/src/main/java/com/learntodroid/simplealarmclock/data/Alarm.java +++ b/app/src/main/java/com/learntodroid/simplealarmclock/data/Alarm.java @@ -4,6 +4,7 @@ import android.app.PendingIntent; import android.content.Context; import android.content.Intent; +import android.os.Build; import android.util.Log; import android.widget.Toast; @@ -150,11 +151,14 @@ public void schedule(Context context) { } Toast.makeText(context, toastText, Toast.LENGTH_LONG).show(); - alarmManager.setExact( - AlarmManager.RTC_WAKEUP, - calendar.getTimeInMillis(), - alarmPendingIntent - ); + if (Build.VERSION.SDK_INT >= 23) { + alarmManager.setExactAndAllowWhileIdle(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), alarmPendingIntent); + } else if (Build.VERSION.SDK_INT >= 19) { + alarmManager.setExact(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), alarmPendingIntent); + } else { + alarmManager.set(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), alarmPendingIntent); + } + } else { String toastText = String.format("Recurring Alarm %s scheduled for %s at %02d:%02d", title, getRecurringDaysText(), hour, minute, alarmId); Toast.makeText(context, toastText, Toast.LENGTH_LONG).show(); From 2f5ca0a88f77cd3e972d0b731f817800a85278c3 Mon Sep 17 00:00:00 2001 From: learntodroid <56079350+learntodroid@users.noreply.github.com> Date: Tue, 8 Sep 2020 19:35:50 +1000 Subject: [PATCH 2/3] created a method for setting all alarms --- .../simplealarmclock/data/Alarm.java | 20 ++++++++++--------- 1 file changed, 11 insertions(+), 9 deletions(-) diff --git a/app/src/main/java/com/learntodroid/simplealarmclock/data/Alarm.java b/app/src/main/java/com/learntodroid/simplealarmclock/data/Alarm.java index 24d0e2d..5de8681 100644 --- a/app/src/main/java/com/learntodroid/simplealarmclock/data/Alarm.java +++ b/app/src/main/java/com/learntodroid/simplealarmclock/data/Alarm.java @@ -150,15 +150,7 @@ public void schedule(Context context) { e.printStackTrace(); } Toast.makeText(context, toastText, Toast.LENGTH_LONG).show(); - - if (Build.VERSION.SDK_INT >= 23) { - alarmManager.setExactAndAllowWhileIdle(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), alarmPendingIntent); - } else if (Build.VERSION.SDK_INT >= 19) { - alarmManager.setExact(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), alarmPendingIntent); - } else { - alarmManager.set(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), alarmPendingIntent); - } - + setAlarm(alarmManager, calendar.getTimeInMillis(), alarmPendingIntent); } else { String toastText = String.format("Recurring Alarm %s scheduled for %s at %02d:%02d", title, getRecurringDaysText(), hour, minute, alarmId); Toast.makeText(context, toastText, Toast.LENGTH_LONG).show(); @@ -175,6 +167,16 @@ public void schedule(Context context) { this.started = true; } + public void setAlarm(AlarmManager alarmManager, long alarmTime, PendingIntent alarmPendingIntent) { + if (Build.VERSION.SDK_INT >= 23) { + alarmManager.setExactAndAllowWhileIdle(AlarmManager.RTC_WAKEUP, alarmTime, alarmPendingIntent); + } else if (Build.VERSION.SDK_INT >= 19) { + alarmManager.setExact(AlarmManager.RTC_WAKEUP, alarmTime, alarmPendingIntent); + } else { + alarmManager.set(AlarmManager.RTC_WAKEUP, alarmTime, alarmPendingIntent); + } + } + public void cancelAlarm(Context context) { AlarmManager alarmManager = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE); Intent intent = new Intent(context, AlarmBroadcastReceiver.class); From 55dec53fbf9e5eef681e49d72af7f93565b30b66 Mon Sep 17 00:00:00 2001 From: learntodroid <56079350+learntodroid@users.noreply.github.com> Date: Tue, 8 Sep 2020 19:42:05 +1000 Subject: [PATCH 3/3] added todo --- .../java/com/learntodroid/simplealarmclock/data/Alarm.java | 3 +++ 1 file changed, 3 insertions(+) diff --git a/app/src/main/java/com/learntodroid/simplealarmclock/data/Alarm.java b/app/src/main/java/com/learntodroid/simplealarmclock/data/Alarm.java index 5de8681..2812ec8 100644 --- a/app/src/main/java/com/learntodroid/simplealarmclock/data/Alarm.java +++ b/app/src/main/java/com/learntodroid/simplealarmclock/data/Alarm.java @@ -155,6 +155,9 @@ public void schedule(Context context) { String toastText = String.format("Recurring Alarm %s scheduled for %s at %02d:%02d", title, getRecurringDaysText(), hour, minute, alarmId); Toast.makeText(context, toastText, Toast.LENGTH_LONG).show(); + // todo - code changes required to move away from setRepeating(...) as it does not fire + // when device is dozed, need to use set exact and reschedule the alarm daily after it + // fires, potential updates to AlarmService, AlarmBroadcastReceiver and RingActivity required final long RUN_DAILY = 24 * 60 * 60 * 1000; alarmManager.setRepeating( AlarmManager.RTC_WAKEUP,