diff options
| author | 2017-11-29 19:11:46 +0000 | |
|---|---|---|
| committer | 2017-11-29 19:11:46 +0000 | |
| commit | 572f46a3ef0deccdd79ef083a7b2e338660be410 (patch) | |
| tree | 4e3c292622a206c48d018fe7cfdeb14549c6be9c | |
| parent | dc98d6e44b3e477ca6a97859a6be5fb610093161 (diff) | |
| parent | f78a51759be1af5fd715e808696c2479e1490d93 (diff) | |
Merge "Frameworks: Clean up SharedPreferencesImpl"
| -rw-r--r-- | core/java/android/app/SharedPreferencesImpl.java | 78 |
1 files changed, 48 insertions, 30 deletions
diff --git a/core/java/android/app/SharedPreferencesImpl.java b/core/java/android/app/SharedPreferencesImpl.java index aab7d77315f3..97187d6f63cc 100644 --- a/core/java/android/app/SharedPreferencesImpl.java +++ b/core/java/android/app/SharedPreferencesImpl.java @@ -34,8 +34,6 @@ import dalvik.system.BlockGuard; import libcore.io.IoUtils; -import com.google.android.collect.Maps; - import org.xmlpull.v1.XmlPullParserException; import java.io.BufferedInputStream; @@ -139,7 +137,7 @@ final class SharedPreferencesImpl implements SharedPreferences { Log.w(TAG, "Attempt to read preferences file " + mFile + " without permission"); } - Map map = null; + Map<String, Object> map = null; StructStat stat = null; try { stat = Os.stat(mFile.getPath()); @@ -148,7 +146,7 @@ final class SharedPreferencesImpl implements SharedPreferences { try { str = new BufferedInputStream( new FileInputStream(mFile), 16*1024); - map = XmlUtils.readMapXml(str); + map = (Map<String, Object>) XmlUtils.readMapXml(str); } catch (Exception e) { Log.w(TAG, "Cannot read " + mFile.getAbsolutePath(), e); } finally { @@ -214,12 +212,14 @@ final class SharedPreferencesImpl implements SharedPreferences { } } + @Override public void registerOnSharedPreferenceChangeListener(OnSharedPreferenceChangeListener listener) { synchronized(mLock) { mListeners.put(listener, CONTENT); } } + @Override public void unregisterOnSharedPreferenceChangeListener(OnSharedPreferenceChangeListener listener) { synchronized(mLock) { mListeners.remove(listener); @@ -241,6 +241,7 @@ final class SharedPreferencesImpl implements SharedPreferences { } } + @Override public Map<String, ?> getAll() { synchronized (mLock) { awaitLoadedLocked(); @@ -249,6 +250,7 @@ final class SharedPreferencesImpl implements SharedPreferences { } } + @Override @Nullable public String getString(String key, @Nullable String defValue) { synchronized (mLock) { @@ -258,6 +260,7 @@ final class SharedPreferencesImpl implements SharedPreferences { } } + @Override @Nullable public Set<String> getStringSet(String key, @Nullable Set<String> defValues) { synchronized (mLock) { @@ -267,6 +270,7 @@ final class SharedPreferencesImpl implements SharedPreferences { } } + @Override public int getInt(String key, int defValue) { synchronized (mLock) { awaitLoadedLocked(); @@ -274,6 +278,7 @@ final class SharedPreferencesImpl implements SharedPreferences { return v != null ? v : defValue; } } + @Override public long getLong(String key, long defValue) { synchronized (mLock) { awaitLoadedLocked(); @@ -281,6 +286,7 @@ final class SharedPreferencesImpl implements SharedPreferences { return v != null ? v : defValue; } } + @Override public float getFloat(String key, float defValue) { synchronized (mLock) { awaitLoadedLocked(); @@ -288,6 +294,7 @@ final class SharedPreferencesImpl implements SharedPreferences { return v != null ? v : defValue; } } + @Override public boolean getBoolean(String key, boolean defValue) { synchronized (mLock) { awaitLoadedLocked(); @@ -296,6 +303,7 @@ final class SharedPreferencesImpl implements SharedPreferences { } } + @Override public boolean contains(String key) { synchronized (mLock) { awaitLoadedLocked(); @@ -303,6 +311,7 @@ final class SharedPreferencesImpl implements SharedPreferences { } } + @Override public Editor edit() { // TODO: remove the need to call awaitLoadedLocked() when // requesting an editor. will require some work on the @@ -347,71 +356,81 @@ final class SharedPreferencesImpl implements SharedPreferences { } public final class EditorImpl implements Editor { - private final Object mLock = new Object(); + private final Object mEditorLock = new Object(); - @GuardedBy("mLock") - private final Map<String, Object> mModified = Maps.newHashMap(); + @GuardedBy("mEditorLock") + private final Map<String, Object> mModified = new HashMap<>(); - @GuardedBy("mLock") + @GuardedBy("mEditorLock") private boolean mClear = false; + @Override public Editor putString(String key, @Nullable String value) { - synchronized (mLock) { + synchronized (mEditorLock) { mModified.put(key, value); return this; } } + @Override public Editor putStringSet(String key, @Nullable Set<String> values) { - synchronized (mLock) { + synchronized (mEditorLock) { mModified.put(key, (values == null) ? null : new HashSet<String>(values)); return this; } } + @Override public Editor putInt(String key, int value) { - synchronized (mLock) { + synchronized (mEditorLock) { mModified.put(key, value); return this; } } + @Override public Editor putLong(String key, long value) { - synchronized (mLock) { + synchronized (mEditorLock) { mModified.put(key, value); return this; } } + @Override public Editor putFloat(String key, float value) { - synchronized (mLock) { + synchronized (mEditorLock) { mModified.put(key, value); return this; } } + @Override public Editor putBoolean(String key, boolean value) { - synchronized (mLock) { + synchronized (mEditorLock) { mModified.put(key, value); return this; } } + @Override public Editor remove(String key) { - synchronized (mLock) { + synchronized (mEditorLock) { mModified.put(key, this); return this; } } + @Override public Editor clear() { - synchronized (mLock) { + synchronized (mEditorLock) { mClear = true; return this; } } + @Override public void apply() { final long startTime = System.currentTimeMillis(); final MemoryCommitResult mcr = commitToMemory(); final Runnable awaitCommit = new Runnable() { + @Override public void run() { try { mcr.writtenToDiskLatch.await(); @@ -429,6 +448,7 @@ final class SharedPreferencesImpl implements SharedPreferences { QueuedWork.addFinisher(awaitCommit); Runnable postWriteRunnable = new Runnable() { + @Override public void run() { awaitCommit.run(); QueuedWork.removeFinisher(awaitCommit); @@ -471,13 +491,13 @@ final class SharedPreferencesImpl implements SharedPreferences { listeners = new HashSet<OnSharedPreferenceChangeListener>(mListeners.keySet()); } - synchronized (mLock) { + synchronized (mEditorLock) { boolean changesMade = false; if (mClear) { - if (!mMap.isEmpty()) { + if (!mapToWriteToDisk.isEmpty()) { changesMade = true; - mMap.clear(); + mapToWriteToDisk.clear(); } mClear = false; } @@ -489,18 +509,18 @@ final class SharedPreferencesImpl implements SharedPreferences { // setting a value to "null" for a given key is specified to be // equivalent to calling remove on that key. if (v == this || v == null) { - if (!mMap.containsKey(k)) { + if (!mapToWriteToDisk.containsKey(k)) { continue; } - mMap.remove(k); + mapToWriteToDisk.remove(k); } else { - if (mMap.containsKey(k)) { - Object existingValue = mMap.get(k); + if (mapToWriteToDisk.containsKey(k)) { + Object existingValue = mapToWriteToDisk.get(k); if (existingValue != null && existingValue.equals(v)) { continue; } } - mMap.put(k, v); + mapToWriteToDisk.put(k, v); } changesMade = true; @@ -522,6 +542,7 @@ final class SharedPreferencesImpl implements SharedPreferences { mapToWriteToDisk); } + @Override public boolean commit() { long startTime = 0; @@ -564,11 +585,7 @@ final class SharedPreferencesImpl implements SharedPreferences { } } else { // Run this function on the main thread. - ActivityThread.sMainThreadHandler.post(new Runnable() { - public void run() { - notifyListeners(mcr); - } - }); + ActivityThread.sMainThreadHandler.post(() -> notifyListeners(mcr)); } } } @@ -594,6 +611,7 @@ final class SharedPreferencesImpl implements SharedPreferences { final boolean isFromSyncCommit = (postWriteRunnable == null); final Runnable writeToDiskRunnable = new Runnable() { + @Override public void run() { synchronized (mWritingToDiskLock) { writeToFile(mcr, isFromSyncCommit); @@ -646,7 +664,7 @@ final class SharedPreferencesImpl implements SharedPreferences { return str; } - // Note: must hold mWritingToDiskLock + @GuardedBy("mWritingToDiskLock") private void writeToFile(MemoryCommitResult mcr, boolean isFromSyncCommit) { long startTime = 0; long existsTime = 0; |