diff options
author | 2014-10-09 12:21:56 -0700 | |
---|---|---|
committer | 2014-10-10 10:49:32 -0700 | |
commit | 1e10d29bc8975ea45ca5e3bdf1936aa418161bcb (patch) | |
tree | 5335837308f4be45cab40477313534fde9001323 /java/src/com/android/inputmethod/latin/accounts/AccountsChangedReceiver.java | |
parent | 6e565332df385d67d58543879f9d81263e667c06 (diff) | |
download | latinime-1e10d29bc8975ea45ca5e3bdf1936aa418161bcb.tar.gz latinime-1e10d29bc8975ea45ca5e3bdf1936aa418161bcb.tar.xz latinime-1e10d29bc8975ea45ca5e3bdf1936aa418161bcb.zip |
Don't restore device specific preferences
There are two categories of preferences:
1. That are part of the default shared preference
They were all getting backed up and restored.
Added a blacklist to not restore some of these.
e.g. current account
2. That are in a non-default shared preference file.
These are not getting backed up currently, but added a specific
local preference file for all such preferences.
Bug: 17288591
Change-Id: I2f748be971a2337543e5014434aa39313fd1e1d8
Diffstat (limited to 'java/src/com/android/inputmethod/latin/accounts/AccountsChangedReceiver.java')
-rw-r--r-- | java/src/com/android/inputmethod/latin/accounts/AccountsChangedReceiver.java | 47 |
1 files changed, 28 insertions, 19 deletions
diff --git a/java/src/com/android/inputmethod/latin/accounts/AccountsChangedReceiver.java b/java/src/com/android/inputmethod/latin/accounts/AccountsChangedReceiver.java index 9445ce4c3..00bcecf52 100644 --- a/java/src/com/android/inputmethod/latin/accounts/AccountsChangedReceiver.java +++ b/java/src/com/android/inputmethod/latin/accounts/AccountsChangedReceiver.java @@ -26,7 +26,7 @@ import android.text.TextUtils; import android.util.Log; import com.android.inputmethod.annotations.UsedForTesting; -import com.android.inputmethod.latin.settings.Settings; +import com.android.inputmethod.latin.settings.LocalSettingsConstants; /** * {@link BroadcastReceiver} for {@link AccountManager#LOGIN_ACCOUNTS_CHANGED_ACTION}. @@ -41,25 +41,14 @@ public class AccountsChangedReceiver extends BroadcastReceiver { return; } + // Ideally the account preference could live in a different preferences file + // that wasn't being backed up and restored, however the preference fragments + // currently only deal with the default shared preferences which is why + // separating this out into a different file is not trivial currently. final SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context); - final String currentAccount = prefs.getString(Settings.PREF_ACCOUNT_NAME, null); - if (currentAccount != null) { - final String[] accounts = getAccountsForLogin(context); - boolean accountFound = false; - for (String account : accounts) { - if (TextUtils.equals(currentAccount, account)) { - accountFound = true; - break; - } - } - // The current account was not found in the list of accounts, remove it. - if (!accountFound) { - Log.i(TAG, "The current account was removed from the system: " + currentAccount); - prefs.edit() - .remove(Settings.PREF_ACCOUNT_NAME) - .apply(); - } - } + final String currentAccount = prefs.getString( + LocalSettingsConstants.PREF_ACCOUNT_NAME, null); + removeUnknownAccountFromPreference(prefs, getAccountsForLogin(context), currentAccount); } /** @@ -69,4 +58,24 @@ public class AccountsChangedReceiver extends BroadcastReceiver { protected String[] getAccountsForLogin(Context context) { return LoginAccountUtils.getAccountsForLogin(context); } + + /** + * Removes the currentAccount from preferences if it's not found + * in the list of current accounts. + */ + private static void removeUnknownAccountFromPreference(final SharedPreferences prefs, + final String[] accounts, final String currentAccount) { + if (currentAccount == null) { + return; + } + for (final String account : accounts) { + if (TextUtils.equals(currentAccount, account)) { + return; + } + } + Log.i(TAG, "The current account was removed from the system: " + currentAccount); + prefs.edit() + .remove(LocalSettingsConstants.PREF_ACCOUNT_NAME) + .apply(); + } } |