summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMarcos Marado <mmarado@cyngn.com>2016-10-19 15:00:58 +0100
committerMarcos Marado <mmarado@cyngn.com>2016-10-19 15:04:57 +0100
commit3edc2020494e5d8f4e952e240a179129ad9047e4 (patch)
treec1dde98e55c541e8cd44b560489fa0aebab07dbc
parent958482fbf6efa123fd4e1aa76946aacea4565c66 (diff)
downloadandroid_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.java30
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);
}