summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJames Lemieux <jplemieux@google.com>2016-01-15 16:48:16 -0800
committerJames Lemieux <jplemieux@google.com>2016-01-19 11:36:04 -0800
commit41ad8d99d3531947b1f7016086cd0e296818b4bd (patch)
tree08fb01a7ac3df87fe762f9090c4b223603e57842
parentb76aa50f9e13e71e81b9d02cc3ebebaa73188d3e (diff)
downloadandroid_packages_apps_DeskClock-41ad8d99d3531947b1f7016086cd0e296818b4bd.tar.gz
android_packages_apps_DeskClock-41ad8d99d3531947b1f7016086cd0e296818b4bd.tar.bz2
android_packages_apps_DeskClock-41ad8d99d3531947b1f7016086cd0e296818b4bd.zip
Handle deleted timers gracefully
Bug: 26591272 Prior to dazzle, timers could inhabit a state of "DELETED" (value = 5). In dazzle and beyond there is no reason to preserve such a state, but it is possible for timers to exist in SharedPreferences in such a state, so it must be handled gracefully. Change-Id: I1754ef898dfff84c0a3e807c4bd0dd1473f87aad
-rw-r--r--src/com/android/deskclock/data/Timer.java2
-rw-r--r--src/com/android/deskclock/data/TimerDAO.java21
2 files changed, 14 insertions, 9 deletions
diff --git a/src/com/android/deskclock/data/Timer.java b/src/com/android/deskclock/data/Timer.java
index 6753a2b48..862e8e082 100644
--- a/src/com/android/deskclock/data/Timer.java
+++ b/src/com/android/deskclock/data/Timer.java
@@ -63,7 +63,7 @@ public final class Timer {
}
}
- throw new IllegalArgumentException("unable to locate state: " + value);
+ return null;
}
}
diff --git a/src/com/android/deskclock/data/TimerDAO.java b/src/com/android/deskclock/data/TimerDAO.java
index e4396752c..cf2d37d2b 100644
--- a/src/com/android/deskclock/data/TimerDAO.java
+++ b/src/com/android/deskclock/data/TimerDAO.java
@@ -83,14 +83,19 @@ final class TimerDAO {
final int id = Integer.parseInt(timerId);
final int stateValue = prefs.getInt(STATE + id, RESET.getValue());
final State state = State.fromValue(stateValue);
- final long length = prefs.getLong(LENGTH + id, Long.MIN_VALUE);
- final long totalLength = prefs.getLong(TOTAL_LENGTH + id, Long.MIN_VALUE);
- final long lastStartTime = prefs.getLong(LAST_START_TIME + id, Long.MIN_VALUE);
- final long remainingTime = prefs.getLong(REMAINING_TIME + id, totalLength);
- final String label = prefs.getString(LABEL + id, null);
- final boolean deleteAfterUse = prefs.getBoolean(DELETE_AFTER_USE + id, false);
- timers.add(new Timer(id, state, length, totalLength, lastStartTime, remainingTime,
- label, deleteAfterUse));
+
+ // Timer state may be null when migrating timers from prior releases which defined a
+ // "deleted" state. Such a state is no longer required.
+ if (state != null) {
+ final long length = prefs.getLong(LENGTH + id, Long.MIN_VALUE);
+ final long totalLength = prefs.getLong(TOTAL_LENGTH + id, Long.MIN_VALUE);
+ final long lastStartTime = prefs.getLong(LAST_START_TIME + id, Long.MIN_VALUE);
+ final long remainingTime = prefs.getLong(REMAINING_TIME + id, totalLength);
+ final String label = prefs.getString(LABEL + id, null);
+ final boolean deleteAfterUse = prefs.getBoolean(DELETE_AFTER_USE + id, false);
+ timers.add(new Timer(id, state, length, totalLength, lastStartTime, remainingTime,
+ label, deleteAfterUse));
+ }
}
return timers;