Loading packages/SettingsProvider/src/com/android/providers/settings/SettingsProvider.java +12 −1 Original line number Diff line number Diff line Loading @@ -46,6 +46,7 @@ import android.os.Debug; import android.os.DropBoxManager; import android.os.Environment; import android.os.Handler; import android.os.HandlerThread; import android.os.Looper; import android.os.Message; import android.os.ParcelFileDescriptor; Loading Loading @@ -199,6 +200,12 @@ public class SettingsProvider extends ContentProvider { @GuardedBy("mLock") private SettingsRegistry mSettingsRegistry; @GuardedBy("mLock") private HandlerThread mHandlerThread; @GuardedBy("mLock") private Handler mBackgroundHandler; // We have to call in the user manager with no lock held, private volatile UserManager mUserManager; Loading Loading @@ -244,6 +251,10 @@ public class SettingsProvider extends ContentProvider { synchronized (mLock) { mUserManager = UserManager.get(getContext()); mPackageManager = AppGlobals.getPackageManager(); mHandlerThread = new HandlerThread(LOG_TAG, Process.THREAD_PRIORITY_BACKGROUND); mHandlerThread.start(); mBackgroundHandler = new Handler(mHandlerThread.getLooper()); mSettingsRegistry = new SettingsRegistry(); } registerBroadcastReceivers(); Loading Loading @@ -1669,7 +1680,7 @@ public class SettingsProvider extends ContentProvider { if (mSettingsStates.get(key) == null) { final int maxBytesPerPackage = getMaxBytesPerPackageForType(getTypeFromKey(key)); SettingsState settingsState = new SettingsState(mLock, getSettingsFile(key), key, maxBytesPerPackage); maxBytesPerPackage, mBackgroundHandler); mSettingsStates.put(key, settingsState); } } Loading packages/SettingsProvider/src/com/android/providers/settings/SettingsState.java +4 −2 Original line number Diff line number Diff line Loading @@ -95,7 +95,7 @@ final class SettingsState { private final Object mLock; private final Handler mHandler = new MyHandler(); private final Handler mHandler; @GuardedBy("mLock") private final ArrayMap<String, Setting> mSettings = new ArrayMap<>(); Loading Loading @@ -134,13 +134,15 @@ final class SettingsState { @GuardedBy("mLock") private long mNextId; public SettingsState(Object lock, File file, int key, int maxBytesPerAppPackage) { public SettingsState(Object lock, File file, int key, int maxBytesPerAppPackage, Handler handler) { // It is important that we use the same lock as the settings provider // to ensure multiple mutations on this state are atomicaly persisted // as the async persistence should be blocked while we make changes. mLock = lock; mStatePersistFile = file; mKey = key; mHandler = handler; if (maxBytesPerAppPackage == MAX_BYTES_PER_APP_PACKAGE_LIMITED) { mMaxBytesPerAppPackage = maxBytesPerAppPackage; mPackageToMemoryUsage = new ArrayMap<>(); Loading packages/SettingsProvider/test/src/com/android/providers/settings/SettingsStateTest.java +4 −3 Original line number Diff line number Diff line Loading @@ -15,6 +15,7 @@ */ package com.android.providers.settings; import android.os.Handler; import android.test.AndroidTestCase; import android.util.Xml; Loading Loading @@ -126,7 +127,7 @@ public class SettingsStateTest extends AndroidTestCase { final Object lock = new Object(); final SettingsState ssWriter = new SettingsState(lock, file, 1, SettingsState.MAX_BYTES_PER_APP_PACKAGE_UNLIMITED); SettingsState.MAX_BYTES_PER_APP_PACKAGE_UNLIMITED, new Handler()); ssWriter.setVersionLocked(SettingsState.SETTINGS_VERSOIN_NEW_ENCODING); ssWriter.insertSettingLocked("k1", "\u0000", "package"); Loading @@ -138,7 +139,7 @@ public class SettingsStateTest extends AndroidTestCase { } final SettingsState ssReader = new SettingsState(lock, file, 1, SettingsState.MAX_BYTES_PER_APP_PACKAGE_UNLIMITED); SettingsState.MAX_BYTES_PER_APP_PACKAGE_UNLIMITED, new Handler()); synchronized (lock) { assertEquals("\u0000", ssReader.getSettingLocked("k1").getValue()); assertEquals("abc", ssReader.getSettingLocked("k2").getValue()); Loading @@ -165,7 +166,7 @@ public class SettingsStateTest extends AndroidTestCase { os.close(); final SettingsState ss = new SettingsState(lock, file, 1, SettingsState.MAX_BYTES_PER_APP_PACKAGE_UNLIMITED); SettingsState.MAX_BYTES_PER_APP_PACKAGE_UNLIMITED, new Handler()); synchronized (lock) { SettingsState.Setting s; s = ss.getSettingLocked("k0"); Loading Loading
packages/SettingsProvider/src/com/android/providers/settings/SettingsProvider.java +12 −1 Original line number Diff line number Diff line Loading @@ -46,6 +46,7 @@ import android.os.Debug; import android.os.DropBoxManager; import android.os.Environment; import android.os.Handler; import android.os.HandlerThread; import android.os.Looper; import android.os.Message; import android.os.ParcelFileDescriptor; Loading Loading @@ -199,6 +200,12 @@ public class SettingsProvider extends ContentProvider { @GuardedBy("mLock") private SettingsRegistry mSettingsRegistry; @GuardedBy("mLock") private HandlerThread mHandlerThread; @GuardedBy("mLock") private Handler mBackgroundHandler; // We have to call in the user manager with no lock held, private volatile UserManager mUserManager; Loading Loading @@ -244,6 +251,10 @@ public class SettingsProvider extends ContentProvider { synchronized (mLock) { mUserManager = UserManager.get(getContext()); mPackageManager = AppGlobals.getPackageManager(); mHandlerThread = new HandlerThread(LOG_TAG, Process.THREAD_PRIORITY_BACKGROUND); mHandlerThread.start(); mBackgroundHandler = new Handler(mHandlerThread.getLooper()); mSettingsRegistry = new SettingsRegistry(); } registerBroadcastReceivers(); Loading Loading @@ -1669,7 +1680,7 @@ public class SettingsProvider extends ContentProvider { if (mSettingsStates.get(key) == null) { final int maxBytesPerPackage = getMaxBytesPerPackageForType(getTypeFromKey(key)); SettingsState settingsState = new SettingsState(mLock, getSettingsFile(key), key, maxBytesPerPackage); maxBytesPerPackage, mBackgroundHandler); mSettingsStates.put(key, settingsState); } } Loading
packages/SettingsProvider/src/com/android/providers/settings/SettingsState.java +4 −2 Original line number Diff line number Diff line Loading @@ -95,7 +95,7 @@ final class SettingsState { private final Object mLock; private final Handler mHandler = new MyHandler(); private final Handler mHandler; @GuardedBy("mLock") private final ArrayMap<String, Setting> mSettings = new ArrayMap<>(); Loading Loading @@ -134,13 +134,15 @@ final class SettingsState { @GuardedBy("mLock") private long mNextId; public SettingsState(Object lock, File file, int key, int maxBytesPerAppPackage) { public SettingsState(Object lock, File file, int key, int maxBytesPerAppPackage, Handler handler) { // It is important that we use the same lock as the settings provider // to ensure multiple mutations on this state are atomicaly persisted // as the async persistence should be blocked while we make changes. mLock = lock; mStatePersistFile = file; mKey = key; mHandler = handler; if (maxBytesPerAppPackage == MAX_BYTES_PER_APP_PACKAGE_LIMITED) { mMaxBytesPerAppPackage = maxBytesPerAppPackage; mPackageToMemoryUsage = new ArrayMap<>(); Loading
packages/SettingsProvider/test/src/com/android/providers/settings/SettingsStateTest.java +4 −3 Original line number Diff line number Diff line Loading @@ -15,6 +15,7 @@ */ package com.android.providers.settings; import android.os.Handler; import android.test.AndroidTestCase; import android.util.Xml; Loading Loading @@ -126,7 +127,7 @@ public class SettingsStateTest extends AndroidTestCase { final Object lock = new Object(); final SettingsState ssWriter = new SettingsState(lock, file, 1, SettingsState.MAX_BYTES_PER_APP_PACKAGE_UNLIMITED); SettingsState.MAX_BYTES_PER_APP_PACKAGE_UNLIMITED, new Handler()); ssWriter.setVersionLocked(SettingsState.SETTINGS_VERSOIN_NEW_ENCODING); ssWriter.insertSettingLocked("k1", "\u0000", "package"); Loading @@ -138,7 +139,7 @@ public class SettingsStateTest extends AndroidTestCase { } final SettingsState ssReader = new SettingsState(lock, file, 1, SettingsState.MAX_BYTES_PER_APP_PACKAGE_UNLIMITED); SettingsState.MAX_BYTES_PER_APP_PACKAGE_UNLIMITED, new Handler()); synchronized (lock) { assertEquals("\u0000", ssReader.getSettingLocked("k1").getValue()); assertEquals("abc", ssReader.getSettingLocked("k2").getValue()); Loading @@ -165,7 +166,7 @@ public class SettingsStateTest extends AndroidTestCase { os.close(); final SettingsState ss = new SettingsState(lock, file, 1, SettingsState.MAX_BYTES_PER_APP_PACKAGE_UNLIMITED); SettingsState.MAX_BYTES_PER_APP_PACKAGE_UNLIMITED, new Handler()); synchronized (lock) { SettingsState.Setting s; s = ss.getSettingLocked("k0"); Loading