diff options
author | Marcos Marado <mmarado@cyngn.com> | 2016-10-19 15:00:58 +0100 |
---|---|---|
committer | Marcos Marado <mmarado@cyngn.com> | 2016-10-19 15:04:57 +0100 |
commit | 3edc2020494e5d8f4e952e240a179129ad9047e4 (patch) | |
tree | c1dde98e55c541e8cd44b560489fa0aebab07dbc | |
parent | 958482fbf6efa123fd4e1aa76946aacea4565c66 (diff) | |
download | android_packages_apps_DeskClock-3edc2020494e5d8f4e952e240a179129ad9047e4.tar.gz android_packages_apps_DeskClock-3edc2020494e5d8f4e952e240a179129ad9047e4.tar.bz2 android_packages_apps_DeskClock-3edc2020494e5d8f4e952e240a179129ad9047e4.zip |
AlarmStateManager: deal with missing alarms
getAlarm(alarmId) can return null, if an alarm with alarmId isn't
found.
fixAlarmInstances has to be able to deal with missing alarms, in order
to avoid NPEs.
Issue: BUGDUMP-7996259
Change-Id: Ia3e9824812efacd0dd620789505edc88f4b5eb62
-rw-r--r-- | src/com/android/deskclock/alarms/AlarmStateManager.java | 30 |
1 files changed, 17 insertions, 13 deletions
diff --git a/src/com/android/deskclock/alarms/AlarmStateManager.java b/src/com/android/deskclock/alarms/AlarmStateManager.java index e75cdcde0..f5d03f1ae 100644 --- a/src/com/android/deskclock/alarms/AlarmStateManager.java +++ b/src/com/android/deskclock/alarms/AlarmStateManager.java @@ -763,19 +763,23 @@ public final class AlarmStateManager extends BroadcastReceiver { final Calendar currentTime = getCurrentTime(); for (AlarmInstance instance : AlarmInstance.getInstances(contentResolver, null)) { final Alarm alarm = Alarm.getAlarm(contentResolver, instance.mAlarmId); - final Calendar priorAlarmTime = alarm.getPreviousAlarmTime(instance.getAlarmTime()); - final Calendar missedTTLTime = instance.getMissedTimeToLive(); - if (currentTime.before(priorAlarmTime) || currentTime.after(missedTTLTime)) { - final Calendar oldAlarmTime = instance.getAlarmTime(); - final Calendar newAlarmTime = alarm.getNextAlarmTime(currentTime); - final CharSequence oldTime = DateFormat.format("MM/dd/yyyy hh:mm a", oldAlarmTime); - final CharSequence newTime = DateFormat.format("MM/dd/yyyy hh:mm a", newAlarmTime); - LogUtils.i("A time change has caused an existing alarm scheduled to fire at %s to" + - " be replaced by a new alarm scheduled to fire at %s", oldTime, newTime); - - // The time change is so dramatic the AlarmInstance doesn't make any sense; - // remove it and schedule the new appropriate instance. - AlarmStateManager.setDismissState(context, instance); + if (alarm != null) { + final Calendar priorAlarmTime = alarm.getPreviousAlarmTime(instance.getAlarmTime()); + final Calendar missedTTLTime = instance.getMissedTimeToLive(); + if (currentTime.before(priorAlarmTime) || currentTime.after(missedTTLTime)) { + final Calendar oldAlarmTime = instance.getAlarmTime(); + final Calendar newAlarmTime = alarm.getNextAlarmTime(currentTime); + final CharSequence oldTime = DateFormat.format("MM/dd/yyyy hh:mm a", oldAlarmTime); + final CharSequence newTime = DateFormat.format("MM/dd/yyyy hh:mm a", newAlarmTime); + LogUtils.i("A time change has caused an existing alarm scheduled to fire at %s to" + + " be replaced by a new alarm scheduled to fire at %s", oldTime, newTime); + + // The time change is so dramatic the AlarmInstance doesn't make any sense; + // remove it and schedule the new appropriate instance. + AlarmStateManager.setDismissState(context, instance); + } else { + registerInstance(context, instance, false); + } } else { registerInstance(context, instance, false); } |