Skip to content
Snippets Groups Projects
Commit a2ec5e83 authored by Jean Chalard's avatar Jean Chalard
Browse files

Reuse old preferences if possible.

This is an optimization. It also happens to work around what
seems to be a framework bug in JB MR1 / MR1.1.

Bug: 8771179
Change-Id: I62cc7acdc8656d75f8a50c068c4e9d8c6ceb74a0
parent b0aabbfb
No related branches found
No related tags found
No related merge requests found
...@@ -66,6 +66,8 @@ public final class DictionarySettingsFragment extends PreferenceFragment ...@@ -66,6 +66,8 @@ public final class DictionarySettingsFragment extends PreferenceFragment
private boolean mChangedSettings; private boolean mChangedSettings;
private DictionaryListInterfaceState mDictionaryListInterfaceState = private DictionaryListInterfaceState mDictionaryListInterfaceState =
new DictionaryListInterfaceState(); new DictionaryListInterfaceState();
private TreeMap<String, WordListPreference> mCurrentPreferenceMap =
new TreeMap<String, WordListPreference>(); // never null
private final BroadcastReceiver mConnectivityChangedReceiver = new BroadcastReceiver() { private final BroadcastReceiver mConnectivityChangedReceiver = new BroadcastReceiver() {
@Override @Override
...@@ -278,7 +280,7 @@ public final class DictionarySettingsFragment extends PreferenceFragment ...@@ -278,7 +280,7 @@ public final class DictionarySettingsFragment extends PreferenceFragment
return result; return result;
} else { } else {
final String systemLocaleString = Locale.getDefault().toString(); final String systemLocaleString = Locale.getDefault().toString();
final TreeMap<String, WordListPreference> prefList = final TreeMap<String, WordListPreference> prefMap =
new TreeMap<String, WordListPreference>(); new TreeMap<String, WordListPreference>();
final int idIndex = cursor.getColumnIndex(MetadataDbHelper.WORDLISTID_COLUMN); final int idIndex = cursor.getColumnIndex(MetadataDbHelper.WORDLISTID_COLUMN);
final int versionIndex = cursor.getColumnIndex(MetadataDbHelper.VERSION_COLUMN); final int versionIndex = cursor.getColumnIndex(MetadataDbHelper.VERSION_COLUMN);
...@@ -299,16 +301,31 @@ public final class DictionarySettingsFragment extends PreferenceFragment ...@@ -299,16 +301,31 @@ public final class DictionarySettingsFragment extends PreferenceFragment
// The key is sorted in lexicographic order, according to the match level, then // The key is sorted in lexicographic order, according to the match level, then
// the description. // the description.
final String key = matchLevelString + "." + description + "." + wordlistId; final String key = matchLevelString + "." + description + "." + wordlistId;
final WordListPreference existingPref = prefList.get(key); final WordListPreference existingPref = prefMap.get(key);
if (null == existingPref || hasPriority(status, existingPref.mStatus)) { if (null == existingPref || hasPriority(status, existingPref.mStatus)) {
final WordListPreference pref = new WordListPreference(activity, final WordListPreference oldPreference = mCurrentPreferenceMap.get(key);
mDictionaryListInterfaceState, mClientId, wordlistId, version, locale, final WordListPreference pref;
description, status, filesize); if (null != oldPreference
prefList.put(key, pref); && oldPreference.mVersion == version
&& oldPreference.mLocale.equals(locale)) {
// If the old preference has all the new attributes, reuse it. We test
// for version and locale because although attributes other than status
// need to be the same, others have been tested through the key of the
// map. Also, status may differ so we don't want to use #equals() here.
pref = oldPreference;
pref.mStatus = status;
} else {
// Otherwise, discard it and create a new one instead.
pref = new WordListPreference(activity, mDictionaryListInterfaceState,
mClientId, wordlistId, version, locale, description, status,
filesize);
}
prefMap.put(key, pref);
} }
} while (cursor.moveToNext()); } while (cursor.moveToNext());
cursor.close(); cursor.close();
return prefList.values(); mCurrentPreferenceMap = prefMap;
return prefMap.values();
} }
} }
......
...@@ -58,6 +58,8 @@ public final class WordListPreference extends Preference { ...@@ -58,6 +58,8 @@ public final class WordListPreference extends Preference {
// The metadata word list id and version of this word list. // The metadata word list id and version of this word list.
public final String mWordlistId; public final String mWordlistId;
public final int mVersion; public final int mVersion;
public final Locale mLocale;
public final String mDescription;
// The status // The status
public int mStatus; public int mStatus;
// The size of the dictionary file // The size of the dictionary file
...@@ -80,6 +82,8 @@ public final class WordListPreference extends Preference { ...@@ -80,6 +82,8 @@ public final class WordListPreference extends Preference {
mVersion = version; mVersion = version;
mWordlistId = wordlistId; mWordlistId = wordlistId;
mFilesize = filesize; mFilesize = filesize;
mLocale = locale;
mDescription = description;
setLayoutResource(R.layout.dictionary_line); setLayoutResource(R.layout.dictionary_line);
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment