Loading packages/SettingsProvider/src/com/android/providers/settings/SettingsProvider.java +1 −5 Original line number Original line Diff line number Diff line Loading @@ -203,9 +203,6 @@ public class SettingsProvider extends ContentProvider { @GuardedBy("mLock") @GuardedBy("mLock") private HandlerThread mHandlerThread; private HandlerThread mHandlerThread; @GuardedBy("mLock") private Handler mBackgroundHandler; // We have to call in the user manager with no lock held, // We have to call in the user manager with no lock held, private volatile UserManager mUserManager; private volatile UserManager mUserManager; Loading Loading @@ -254,7 +251,6 @@ public class SettingsProvider extends ContentProvider { mHandlerThread = new HandlerThread(LOG_TAG, mHandlerThread = new HandlerThread(LOG_TAG, Process.THREAD_PRIORITY_BACKGROUND); Process.THREAD_PRIORITY_BACKGROUND); mHandlerThread.start(); mHandlerThread.start(); mBackgroundHandler = new Handler(mHandlerThread.getLooper()); mSettingsRegistry = new SettingsRegistry(); mSettingsRegistry = new SettingsRegistry(); } } registerBroadcastReceivers(); registerBroadcastReceivers(); Loading Loading @@ -1680,7 +1676,7 @@ public class SettingsProvider extends ContentProvider { if (mSettingsStates.get(key) == null) { if (mSettingsStates.get(key) == null) { final int maxBytesPerPackage = getMaxBytesPerPackageForType(getTypeFromKey(key)); final int maxBytesPerPackage = getMaxBytesPerPackageForType(getTypeFromKey(key)); SettingsState settingsState = new SettingsState(mLock, getSettingsFile(key), key, SettingsState settingsState = new SettingsState(mLock, getSettingsFile(key), key, maxBytesPerPackage, mBackgroundHandler); maxBytesPerPackage, mHandlerThread.getLooper()); mSettingsStates.put(key, settingsState); mSettingsStates.put(key, settingsState); } } } } Loading packages/SettingsProvider/src/com/android/providers/settings/SettingsState.java +5 −5 Original line number Original line Diff line number Diff line Loading @@ -17,6 +17,7 @@ package com.android.providers.settings; package com.android.providers.settings; import android.os.Handler; import android.os.Handler; import android.os.Looper; import android.os.Message; import android.os.Message; import android.os.SystemClock; import android.os.SystemClock; import android.provider.Settings; import android.provider.Settings; Loading @@ -27,7 +28,6 @@ import android.util.Base64; import android.util.Slog; import android.util.Slog; import android.util.Xml; import android.util.Xml; import com.android.internal.annotations.GuardedBy; import com.android.internal.annotations.GuardedBy; import com.android.internal.os.BackgroundThread; import libcore.io.IoUtils; import libcore.io.IoUtils; import libcore.util.Objects; import libcore.util.Objects; import org.xmlpull.v1.XmlPullParser; import org.xmlpull.v1.XmlPullParser; Loading Loading @@ -135,14 +135,14 @@ final class SettingsState { private long mNextId; 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) { Looper looper) { // It is important that we use the same lock as the settings provider // It is important that we use the same lock as the settings provider // to ensure multiple mutations on this state are atomicaly persisted // to ensure multiple mutations on this state are atomicaly persisted // as the async persistence should be blocked while we make changes. // as the async persistence should be blocked while we make changes. mLock = lock; mLock = lock; mStatePersistFile = file; mStatePersistFile = file; mKey = key; mKey = key; mHandler = handler; mHandler = new MyHandler(looper); if (maxBytesPerAppPackage == MAX_BYTES_PER_APP_PACKAGE_LIMITED) { if (maxBytesPerAppPackage == MAX_BYTES_PER_APP_PACKAGE_LIMITED) { mMaxBytesPerAppPackage = maxBytesPerAppPackage; mMaxBytesPerAppPackage = maxBytesPerAppPackage; mPackageToMemoryUsage = new ArrayMap<>(); mPackageToMemoryUsage = new ArrayMap<>(); Loading Loading @@ -548,8 +548,8 @@ final class SettingsState { private final class MyHandler extends Handler { private final class MyHandler extends Handler { public static final int MSG_PERSIST_SETTINGS = 1; public static final int MSG_PERSIST_SETTINGS = 1; public MyHandler() { public MyHandler(Looper looper) { super(BackgroundThread.getHandler().getLooper()); super(looper); } } @Override @Override Loading packages/SettingsProvider/test/src/com/android/providers/settings/SettingsStateTest.java +4 −3 Original line number Original line Diff line number Diff line Loading @@ -16,6 +16,7 @@ package com.android.providers.settings; package com.android.providers.settings; import android.os.Handler; import android.os.Handler; import android.os.Looper; import android.test.AndroidTestCase; import android.test.AndroidTestCase; import android.util.Xml; import android.util.Xml; Loading Loading @@ -127,7 +128,7 @@ public class SettingsStateTest extends AndroidTestCase { final Object lock = new Object(); final Object lock = new Object(); final SettingsState ssWriter = new SettingsState(lock, file, 1, final SettingsState ssWriter = new SettingsState(lock, file, 1, SettingsState.MAX_BYTES_PER_APP_PACKAGE_UNLIMITED, new Handler()); SettingsState.MAX_BYTES_PER_APP_PACKAGE_UNLIMITED, Looper.getMainLooper()); ssWriter.setVersionLocked(SettingsState.SETTINGS_VERSOIN_NEW_ENCODING); ssWriter.setVersionLocked(SettingsState.SETTINGS_VERSOIN_NEW_ENCODING); ssWriter.insertSettingLocked("k1", "\u0000", "package"); ssWriter.insertSettingLocked("k1", "\u0000", "package"); Loading @@ -139,7 +140,7 @@ public class SettingsStateTest extends AndroidTestCase { } } final SettingsState ssReader = new SettingsState(lock, file, 1, final SettingsState ssReader = new SettingsState(lock, file, 1, SettingsState.MAX_BYTES_PER_APP_PACKAGE_UNLIMITED, new Handler()); SettingsState.MAX_BYTES_PER_APP_PACKAGE_UNLIMITED, Looper.getMainLooper()); synchronized (lock) { synchronized (lock) { assertEquals("\u0000", ssReader.getSettingLocked("k1").getValue()); assertEquals("\u0000", ssReader.getSettingLocked("k1").getValue()); assertEquals("abc", ssReader.getSettingLocked("k2").getValue()); assertEquals("abc", ssReader.getSettingLocked("k2").getValue()); Loading @@ -166,7 +167,7 @@ public class SettingsStateTest extends AndroidTestCase { os.close(); os.close(); final SettingsState ss = new SettingsState(lock, file, 1, final SettingsState ss = new SettingsState(lock, file, 1, SettingsState.MAX_BYTES_PER_APP_PACKAGE_UNLIMITED, new Handler()); SettingsState.MAX_BYTES_PER_APP_PACKAGE_UNLIMITED, Looper.getMainLooper()); synchronized (lock) { synchronized (lock) { SettingsState.Setting s; SettingsState.Setting s; s = ss.getSettingLocked("k0"); s = ss.getSettingLocked("k0"); Loading Loading
packages/SettingsProvider/src/com/android/providers/settings/SettingsProvider.java +1 −5 Original line number Original line Diff line number Diff line Loading @@ -203,9 +203,6 @@ public class SettingsProvider extends ContentProvider { @GuardedBy("mLock") @GuardedBy("mLock") private HandlerThread mHandlerThread; private HandlerThread mHandlerThread; @GuardedBy("mLock") private Handler mBackgroundHandler; // We have to call in the user manager with no lock held, // We have to call in the user manager with no lock held, private volatile UserManager mUserManager; private volatile UserManager mUserManager; Loading Loading @@ -254,7 +251,6 @@ public class SettingsProvider extends ContentProvider { mHandlerThread = new HandlerThread(LOG_TAG, mHandlerThread = new HandlerThread(LOG_TAG, Process.THREAD_PRIORITY_BACKGROUND); Process.THREAD_PRIORITY_BACKGROUND); mHandlerThread.start(); mHandlerThread.start(); mBackgroundHandler = new Handler(mHandlerThread.getLooper()); mSettingsRegistry = new SettingsRegistry(); mSettingsRegistry = new SettingsRegistry(); } } registerBroadcastReceivers(); registerBroadcastReceivers(); Loading Loading @@ -1680,7 +1676,7 @@ public class SettingsProvider extends ContentProvider { if (mSettingsStates.get(key) == null) { if (mSettingsStates.get(key) == null) { final int maxBytesPerPackage = getMaxBytesPerPackageForType(getTypeFromKey(key)); final int maxBytesPerPackage = getMaxBytesPerPackageForType(getTypeFromKey(key)); SettingsState settingsState = new SettingsState(mLock, getSettingsFile(key), key, SettingsState settingsState = new SettingsState(mLock, getSettingsFile(key), key, maxBytesPerPackage, mBackgroundHandler); maxBytesPerPackage, mHandlerThread.getLooper()); mSettingsStates.put(key, settingsState); mSettingsStates.put(key, settingsState); } } } } Loading
packages/SettingsProvider/src/com/android/providers/settings/SettingsState.java +5 −5 Original line number Original line Diff line number Diff line Loading @@ -17,6 +17,7 @@ package com.android.providers.settings; package com.android.providers.settings; import android.os.Handler; import android.os.Handler; import android.os.Looper; import android.os.Message; import android.os.Message; import android.os.SystemClock; import android.os.SystemClock; import android.provider.Settings; import android.provider.Settings; Loading @@ -27,7 +28,6 @@ import android.util.Base64; import android.util.Slog; import android.util.Slog; import android.util.Xml; import android.util.Xml; import com.android.internal.annotations.GuardedBy; import com.android.internal.annotations.GuardedBy; import com.android.internal.os.BackgroundThread; import libcore.io.IoUtils; import libcore.io.IoUtils; import libcore.util.Objects; import libcore.util.Objects; import org.xmlpull.v1.XmlPullParser; import org.xmlpull.v1.XmlPullParser; Loading Loading @@ -135,14 +135,14 @@ final class SettingsState { private long mNextId; 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) { Looper looper) { // It is important that we use the same lock as the settings provider // It is important that we use the same lock as the settings provider // to ensure multiple mutations on this state are atomicaly persisted // to ensure multiple mutations on this state are atomicaly persisted // as the async persistence should be blocked while we make changes. // as the async persistence should be blocked while we make changes. mLock = lock; mLock = lock; mStatePersistFile = file; mStatePersistFile = file; mKey = key; mKey = key; mHandler = handler; mHandler = new MyHandler(looper); if (maxBytesPerAppPackage == MAX_BYTES_PER_APP_PACKAGE_LIMITED) { if (maxBytesPerAppPackage == MAX_BYTES_PER_APP_PACKAGE_LIMITED) { mMaxBytesPerAppPackage = maxBytesPerAppPackage; mMaxBytesPerAppPackage = maxBytesPerAppPackage; mPackageToMemoryUsage = new ArrayMap<>(); mPackageToMemoryUsage = new ArrayMap<>(); Loading Loading @@ -548,8 +548,8 @@ final class SettingsState { private final class MyHandler extends Handler { private final class MyHandler extends Handler { public static final int MSG_PERSIST_SETTINGS = 1; public static final int MSG_PERSIST_SETTINGS = 1; public MyHandler() { public MyHandler(Looper looper) { super(BackgroundThread.getHandler().getLooper()); super(looper); } } @Override @Override Loading
packages/SettingsProvider/test/src/com/android/providers/settings/SettingsStateTest.java +4 −3 Original line number Original line Diff line number Diff line Loading @@ -16,6 +16,7 @@ package com.android.providers.settings; package com.android.providers.settings; import android.os.Handler; import android.os.Handler; import android.os.Looper; import android.test.AndroidTestCase; import android.test.AndroidTestCase; import android.util.Xml; import android.util.Xml; Loading Loading @@ -127,7 +128,7 @@ public class SettingsStateTest extends AndroidTestCase { final Object lock = new Object(); final Object lock = new Object(); final SettingsState ssWriter = new SettingsState(lock, file, 1, final SettingsState ssWriter = new SettingsState(lock, file, 1, SettingsState.MAX_BYTES_PER_APP_PACKAGE_UNLIMITED, new Handler()); SettingsState.MAX_BYTES_PER_APP_PACKAGE_UNLIMITED, Looper.getMainLooper()); ssWriter.setVersionLocked(SettingsState.SETTINGS_VERSOIN_NEW_ENCODING); ssWriter.setVersionLocked(SettingsState.SETTINGS_VERSOIN_NEW_ENCODING); ssWriter.insertSettingLocked("k1", "\u0000", "package"); ssWriter.insertSettingLocked("k1", "\u0000", "package"); Loading @@ -139,7 +140,7 @@ public class SettingsStateTest extends AndroidTestCase { } } final SettingsState ssReader = new SettingsState(lock, file, 1, final SettingsState ssReader = new SettingsState(lock, file, 1, SettingsState.MAX_BYTES_PER_APP_PACKAGE_UNLIMITED, new Handler()); SettingsState.MAX_BYTES_PER_APP_PACKAGE_UNLIMITED, Looper.getMainLooper()); synchronized (lock) { synchronized (lock) { assertEquals("\u0000", ssReader.getSettingLocked("k1").getValue()); assertEquals("\u0000", ssReader.getSettingLocked("k1").getValue()); assertEquals("abc", ssReader.getSettingLocked("k2").getValue()); assertEquals("abc", ssReader.getSettingLocked("k2").getValue()); Loading @@ -166,7 +167,7 @@ public class SettingsStateTest extends AndroidTestCase { os.close(); os.close(); final SettingsState ss = new SettingsState(lock, file, 1, final SettingsState ss = new SettingsState(lock, file, 1, SettingsState.MAX_BYTES_PER_APP_PACKAGE_UNLIMITED, new Handler()); SettingsState.MAX_BYTES_PER_APP_PACKAGE_UNLIMITED, Looper.getMainLooper()); synchronized (lock) { synchronized (lock) { SettingsState.Setting s; SettingsState.Setting s; s = ss.getSettingLocked("k0"); s = ss.getSettingLocked("k0"); Loading