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

Commit cf2c68c9 authored by Brad Fitzpatrick's avatar Brad Fitzpatrick Committed by Android Git Automerger
Browse files

am 11709ab0: Merge "Avoid unnecessary SharedPrefences disk writes." into gingerbread

Merge commit '11709ab0' into gingerbread-plus-aosp

* commit '11709ab0':
  Avoid unnecessary SharedPrefences disk writes.
parents 6d5bb884 11709ab0
Loading
Loading
Loading
Loading
+28 −6
Original line number Diff line number Diff line
@@ -2842,6 +2842,7 @@ class ContextImpl extends Context {
                boolean returnValue;

                boolean hasListeners;
                boolean changesMade = false;
                List<String> keysModified = null;
                Set<OnSharedPreferenceChangeListener> listeners = null;

@@ -2855,17 +2856,31 @@ class ContextImpl extends Context {

                    synchronized (this) {
                        if (mClear) {
                            if (!mMap.isEmpty()) {
                                changesMade = true;
                                mMap.clear();
                            }
                            mClear = false;
                        }

                        for (Entry<String, Object> e : mModified.entrySet()) {
                            String k = e.getKey();
                            Object v = e.getValue();
                            if (v == this) {
                            if (v == this) {  // magic value for a removal mutation
                                if (mMap.containsKey(k)) {
                                    mMap.remove(k);
                                    changesMade = true;
                                }
                            } else {
                                boolean isSame = false;
                                if (mMap.containsKey(k)) {
                                    Object existingValue = mMap.get(k);
                                    isSame = existingValue != null && existingValue.equals(v);
                                }
                                if (!isSame) {
                                    mMap.put(k, v);
                                    changesMade = true;
                                }
                            }

                            if (hasListeners) {
@@ -2876,7 +2891,7 @@ class ContextImpl extends Context {
                        mModified.clear();
                    }

                    returnValue = writeFileLocked();
                    returnValue = writeFileLocked(changesMade);
                }

                if (hasListeners) {
@@ -2921,9 +2936,16 @@ class ContextImpl extends Context {
            return str;
        }

        private boolean writeFileLocked() {
        private boolean writeFileLocked(boolean changesMade) {
            // Rename the current file so it may be used as a backup during the next read
            if (mFile.exists()) {
                if (!changesMade) {
                    // If the file already exists, but no changes were
                    // made to the underlying map, it's wasteful to
                    // re-write the file.  Return as if we wrote it
                    // out.
                    return true;
                }
                if (!mBackupFile.exists()) {
                    if (!mFile.renameTo(mBackupFile)) {
                        Log.e(TAG, "Couldn't rename file " + mFile