diff options
author | James Lemieux <jplemieux@google.com> | 2016-01-15 16:48:16 -0800 |
---|---|---|
committer | James Lemieux <jplemieux@google.com> | 2016-01-19 11:36:04 -0800 |
commit | 41ad8d99d3531947b1f7016086cd0e296818b4bd (patch) | |
tree | 08fb01a7ac3df87fe762f9090c4b223603e57842 | |
parent | b76aa50f9e13e71e81b9d02cc3ebebaa73188d3e (diff) | |
download | android_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.java | 2 | ||||
-rw-r--r-- | src/com/android/deskclock/data/TimerDAO.java | 21 |
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; |