diff --git a/android/uhabits-core/src/main/java/org/isoron/uhabits/core/preferences/WidgetPreferences.java b/android/uhabits-core/src/main/java/org/isoron/uhabits/core/preferences/WidgetPreferences.java index ae2588105..018652d89 100644 --- a/android/uhabits-core/src/main/java/org/isoron/uhabits/core/preferences/WidgetPreferences.java +++ b/android/uhabits-core/src/main/java/org/isoron/uhabits/core/preferences/WidgetPreferences.java @@ -38,7 +38,17 @@ public class WidgetPreferences { } public long[] getHabitIdsFromWidgetId(int widgetId) { - long habitIds[] = storage.getLongArray(getHabitIdKey(widgetId)); + long habitIds[]; + String habitIdKey = getHabitIdKey(widgetId); + try { + habitIds = storage.getLongArray(habitIdKey); + } catch (ClassCastException e) { + // Up to Loop 1.7.11, this preference was not an array, but a single + // long. Trying to read the old preference causes a cast exception. + habitIds = new long[1]; + habitIds[0] = storage.getLong(habitIdKey, -1); + storage.putLongArray(habitIdKey, habitIds); + } if (habitIds.length == 0) throw new HabitNotFoundException(); return habitIds; }