Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 2564bd09 authored by Jean Chalard's avatar Jean Chalard Committed by Android (Google) Code Review
Browse files

Merge "Reuse old preferences if possible."

parents ba35426f a2ec5e83
Loading
Loading
Loading
Loading
+24 −7
Original line number Diff line number Diff line
@@ -66,6 +66,8 @@ public final class DictionarySettingsFragment extends PreferenceFragment
    private boolean mChangedSettings;
    private DictionaryListInterfaceState mDictionaryListInterfaceState =
            new DictionaryListInterfaceState();
    private TreeMap<String, WordListPreference> mCurrentPreferenceMap =
            new TreeMap<String, WordListPreference>(); // never null

    private final BroadcastReceiver mConnectivityChangedReceiver = new BroadcastReceiver() {
            @Override
@@ -278,7 +280,7 @@ public final class DictionarySettingsFragment extends PreferenceFragment
            return result;
        } else {
            final String systemLocaleString = Locale.getDefault().toString();
            final TreeMap<String, WordListPreference> prefList =
            final TreeMap<String, WordListPreference> prefMap =
                    new TreeMap<String, WordListPreference>();
            final int idIndex = cursor.getColumnIndex(MetadataDbHelper.WORDLISTID_COLUMN);
            final int versionIndex = cursor.getColumnIndex(MetadataDbHelper.VERSION_COLUMN);
@@ -299,16 +301,31 @@ public final class DictionarySettingsFragment extends PreferenceFragment
                // The key is sorted in lexicographic order, according to the match level, then
                // the description.
                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)) {
                    final WordListPreference pref = new WordListPreference(activity,
                            mDictionaryListInterfaceState, mClientId, wordlistId, version, locale,
                            description, status, filesize);
                    prefList.put(key, pref);
                    final WordListPreference oldPreference = mCurrentPreferenceMap.get(key);
                    final WordListPreference pref;
                    if (null != oldPreference
                            && 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());
            cursor.close();
            return prefList.values();
            mCurrentPreferenceMap = prefMap;
            return prefMap.values();
        }
    }

+4 −0
Original line number Diff line number Diff line
@@ -58,6 +58,8 @@ public final class WordListPreference extends Preference {
    // The metadata word list id and version of this word list.
    public final String mWordlistId;
    public final int mVersion;
    public final Locale mLocale;
    public final String mDescription;
    // The status
    public int mStatus;
    // The size of the dictionary file
@@ -80,6 +82,8 @@ public final class WordListPreference extends Preference {
        mVersion = version;
        mWordlistId = wordlistId;
        mFilesize = filesize;
        mLocale = locale;
        mDescription = description;

        setLayoutResource(R.layout.dictionary_line);