From ddcb95f0e7ef8018f3c7a61ebe5091588a918341 Mon Sep 17 00:00:00 2001 From: Martin Hibdon Date: Mon, 7 Apr 2014 13:30:58 -0700 Subject: [PATCH] Save and restore sync interval values and strings b/13624066 Change-Id: I14c243a7f7ae71e5d6fbdedda328dc01bb2eae85 --- .../setup/AccountSettingsFragment.java | 24 +++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/src/com/android/email/activity/setup/AccountSettingsFragment.java b/src/com/android/email/activity/setup/AccountSettingsFragment.java index 59c76a48f..38e80a9ef 100644 --- a/src/com/android/email/activity/setup/AccountSettingsFragment.java +++ b/src/com/android/email/activity/setup/AccountSettingsFragment.java @@ -105,6 +105,9 @@ public class AccountSettingsFragment extends PreferenceFragment private static final String PREFERENCE_SYSTEM_FOLDERS_TRASH = "system_folders_trash"; private static final String PREFERENCE_SYSTEM_FOLDERS_SENT = "system_folders_sent"; + private static final String EXTRA_SYNC_INTERVALS = "extra_sync_intervals"; + private static final String EXTRA_SYNC_INTERVAL_STRINGS = "extra_sync_interval_strings"; + // Request code to start different activities. private static final int RINGTONE_REQUEST_CODE = 0; @@ -197,6 +200,27 @@ public class AccountSettingsFragment extends PreferenceFragment if (b != null) { mAccountId = b.getLong(BUNDLE_KEY_ACCOUNT_ID, -1); } + if (savedInstanceState != null) { + // We won't know what the correct set of sync interval values and strings are until + // our loader completes. The problem is, that if the sync frequency chooser is + // displayed when the screen rotates, it reinitializes it to the defaults, and doesn't + // correct it after the loader finishes again. See b/13624066 + // To work around this, we'll save the current set of sync interval values and strings, + // in onSavedInstanceState, and restore them here. + final CharSequence [] syncIntervalStrings = + savedInstanceState.getCharSequenceArray(EXTRA_SYNC_INTERVAL_STRINGS); + final CharSequence [] syncIntervals = + savedInstanceState.getCharSequenceArray(EXTRA_SYNC_INTERVALS); + mCheckFrequency = (ListPreference) findPreference(PREFERENCE_FREQUENCY); + mCheckFrequency.setEntries(syncIntervalStrings); + mCheckFrequency.setEntryValues(syncIntervals); + } + } + + public void onSaveInstanceState(Bundle outstate) { + super.onSaveInstanceState(outstate); + outstate.putCharSequenceArray(EXTRA_SYNC_INTERVAL_STRINGS, mCheckFrequency.getEntries()); + outstate.putCharSequenceArray(EXTRA_SYNC_INTERVALS, mCheckFrequency.getEntryValues()); } @Override