diff options
author | d34d <clark@cyngn.com> | 2015-07-13 10:32:34 -0700 |
---|---|---|
committer | Clark Scheff <clark@cyngn.com> | 2015-07-27 13:29:52 -0700 |
commit | 769b85e153e76c030d051e07a7ae3c550fea0f8a (patch) | |
tree | 266d119dd29e3f8f91c9a516c2afaf1c9814abaf | |
parent | 20dd2b3e74f2fa914e33111c8c90584a67476727 (diff) | |
download | android_packages_apps_DeskClock-769b85e153e76c030d051e07a7ae3c550fea0f8a.tar.gz android_packages_apps_DeskClock-769b85e153e76c030d051e07a7ae3c550fea0f8a.tar.bz2 android_packages_apps_DeskClock-769b85e153e76c030d051e07a7ae3c550fea0f8a.zip |
Fix rescheduling of alarms that are snoozed
When AlarmInitReceiver recieves android.intent.action.TIME_SET, a
call is made to AlarmStateManager.fixAlarmInstances() which will
update all alarm instances based on the newly set time. This updates
the AlarmInstance based on the Alarm time and not the current time
for the given AlarmInstance. This causes snoozed alarms to be
scheduled the next time the Alarm is suppose to fire off, if the
alarm a repeating alarm. This patch fixes this behavior by passing
in a Calendar instance based on the AlarmInstance's time.
Steps to repro:
1) Set an alarm for 1 minute from current time
2) Snooze alarm when it goes off
3) Go to Settings -> Date & Time and set the time to 2 minutes ahead
4) The snoozed alarm should be rescheduled to the next day the alarm
would fire.
Change-Id: Id7e2d5c7b5d2b9d3b92eb51a2e14d70639d56761
(cherry picked from commit d815eef9d102140ff3b0320ea89a4d5cf6e3d9cf)
Issue-Id: CYNGNOS-420
-rwxr-xr-x | src/com/android/deskclock/alarms/AlarmStateManager.java | 3 | ||||
-rw-r--r-- | src/com/android/deskclock/provider/Alarm.java | 4 |
2 files changed, 6 insertions, 1 deletions
diff --git a/src/com/android/deskclock/alarms/AlarmStateManager.java b/src/com/android/deskclock/alarms/AlarmStateManager.java index 2e5df28f3..128916367 100755 --- a/src/com/android/deskclock/alarms/AlarmStateManager.java +++ b/src/com/android/deskclock/alarms/AlarmStateManager.java @@ -682,7 +682,8 @@ public final class AlarmStateManager extends BroadcastReceiver { ContentResolver contentResolver = context.getContentResolver(); for (AlarmInstance instance : AlarmInstance.getInstances(contentResolver, null)) { final Alarm alarm = Alarm.getAlarm(contentResolver, instance.mAlarmId); - instance.setAlarmTime(alarm.getNextAlarmTime(Calendar.getInstance())); + instance.setAlarmTime(alarm.getNextAlarmTime(Calendar.getInstance(), + instance.mHour, instance.mMinute)); AlarmInstance.updateInstance(contentResolver, instance); AlarmStateManager.registerInstance(context, instance, false); } diff --git a/src/com/android/deskclock/provider/Alarm.java b/src/com/android/deskclock/provider/Alarm.java index b43271f97..ada636076 100644 --- a/src/com/android/deskclock/provider/Alarm.java +++ b/src/com/android/deskclock/provider/Alarm.java @@ -337,6 +337,10 @@ public final class Alarm implements Parcelable, ClockContract.AlarmsColumns { } public Calendar getNextAlarmTime(Calendar currentTime) { + return getNextAlarmTime(currentTime, hour, minutes); + } + + public Calendar getNextAlarmTime(Calendar currentTime, int hour, int minutes) { Calendar nextInstanceTime = Calendar.getInstance(); nextInstanceTime.set(Calendar.YEAR, currentTime.get(Calendar.YEAR)); nextInstanceTime.set(Calendar.MONTH, currentTime.get(Calendar.MONTH)); |