summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMarcos Marado <mmarado@cyngn.com>2016-10-19 15:00:58 +0100
committerAdrian DC <radian.dc@gmail.com>2016-12-03 22:29:59 +0100
commit82081ef442012e0ab6caad1ae1a7d48f65d7d3f6 (patch)
treeaca540386fafa1ec0bda6e6c8c9a62ee513101fb
parentfe75969c43fe3edcb0582081ee40f76de63f70b7 (diff)
downloadandroid_packages_apps_DeskClock-stable/cm-13.0-ZNH5Y.tar.gz
android_packages_apps_DeskClock-stable/cm-13.0-ZNH5Y.tar.bz2
android_packages_apps_DeskClock-stable/cm-13.0-ZNH5Y.zip
AlarmStateManager: deal with missing alarmsstable/cm-13.0-ZNH5Y
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. RM-290 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);
}