From 790fc19b35d42156da8d9e448e43632a58f7388a Mon Sep 17 00:00:00 2001 From: Martin Carpella Date: Thu, 25 Aug 2011 23:01:07 +0200 Subject: [PATCH 1/2] Added a getDateFor() overload which accepts a default value Before this fix, retrieving the value before the preferences page was opened at least once, the getDateFor() would return 1.1.1970 instead of the configured default value in the XML declaration. --- .../datepreference/DatePreference.java | 29 +++++++++++++++++++ 1 file changed, 29 insertions(+) diff --git a/DatePreference/src/org/bostonandroid/datepreference/DatePreference.java b/DatePreference/src/org/bostonandroid/datepreference/DatePreference.java index 14d1d6c..1469cc9 100644 --- a/DatePreference/src/org/bostonandroid/datepreference/DatePreference.java +++ b/DatePreference/src/org/bostonandroid/datepreference/DatePreference.java @@ -212,6 +212,35 @@ public void onClick(DialogInterface dialog, int which) { onDialogClosed(which == DialogInterface.BUTTON1); // OK? } + /** + * Produces the date the user has selected for the given preference, as a + * calendar. + * + * @param preferences + * the SharedPreferences to get the date from + * @param field + * the name of the preference to get the date from + * @param defaultDate + * the default date to use in case no preference is already saved + * @return a Calendar that the user has selected + */ + public static Calendar getDateFor(SharedPreferences preferences, String field, Date defaultDate) { + String defaultString = defaultDate != null ? formatter().format(defaultDate) : ""; + String persisted = preferences.getString(field, defaultString); + Date date; + if ("".equals(persisted)) { + if (defaultDate == null) { + return null; + } // if + date = defaultDate; + } else { + date = stringToDate(persisted); + } // if/else + Calendar cal = Calendar.getInstance(); + cal.setTime(date); + return cal; + } + /** * Produces the date the user has selected for the given preference, as a * calendar. From a7f4e8d8f1e18a645d2264da4bc601a51ad464fb Mon Sep 17 00:00:00 2001 From: Martin Carpella Date: Thu, 25 Aug 2011 23:23:04 +0200 Subject: [PATCH 2/2] Fixed ClassCastException on rotation of screen When the screen is rotated, it seems that a different state is handed to onRestoreInstanceState(). Using the defaultValue() in this case. --- .../src/org/bostonandroid/datepreference/DatePreference.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/DatePreference/src/org/bostonandroid/datepreference/DatePreference.java b/DatePreference/src/org/bostonandroid/datepreference/DatePreference.java index 1469cc9..d48e6d2 100644 --- a/DatePreference/src/org/bostonandroid/datepreference/DatePreference.java +++ b/DatePreference/src/org/bostonandroid/datepreference/DatePreference.java @@ -136,7 +136,7 @@ protected Parcelable onSaveInstanceState() { protected void onRestoreInstanceState(Parcelable state) { if (state == null || !state.getClass().equals(SavedState.class)) { super.onRestoreInstanceState(state); - setTheDate(((SavedState) state).dateValue); + setTheDate(defaultValue()); } else { SavedState s = (SavedState) state; super.onRestoreInstanceState(s.getSuperState());