Loading core/java/android/app/ContextImpl.java +28 −6 Original line number Diff line number Diff line Loading @@ -2842,6 +2842,7 @@ class ContextImpl extends Context { boolean returnValue; boolean hasListeners; boolean changesMade = false; List<String> keysModified = null; Set<OnSharedPreferenceChangeListener> listeners = null; Loading @@ -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) { Loading @@ -2876,7 +2891,7 @@ class ContextImpl extends Context { mModified.clear(); } returnValue = writeFileLocked(); returnValue = writeFileLocked(changesMade); } if (hasListeners) { Loading Loading @@ -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 Loading Loading
core/java/android/app/ContextImpl.java +28 −6 Original line number Diff line number Diff line Loading @@ -2842,6 +2842,7 @@ class ContextImpl extends Context { boolean returnValue; boolean hasListeners; boolean changesMade = false; List<String> keysModified = null; Set<OnSharedPreferenceChangeListener> listeners = null; Loading @@ -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) { Loading @@ -2876,7 +2891,7 @@ class ContextImpl extends Context { mModified.clear(); } returnValue = writeFileLocked(); returnValue = writeFileLocked(changesMade); } if (hasListeners) { Loading Loading @@ -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 Loading