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

Commit 9205749c authored by Svetoslav Ganov's avatar Svetoslav Ganov
Browse files

Use the correct handler when persisting the settings state.

bug:28784358

Change-Id: Iba9d569bae67c7ba0c3ab0a486ae14efa84a7acf
parent 252a6b12
Loading
Loading
Loading
Loading
+1 −5
Original line number Diff line number Diff line
@@ -203,9 +203,6 @@ public class SettingsProvider extends ContentProvider {
    @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;

@@ -254,7 +251,6 @@ public class SettingsProvider extends ContentProvider {
            mHandlerThread = new HandlerThread(LOG_TAG,
                    Process.THREAD_PRIORITY_BACKGROUND);
            mHandlerThread.start();
            mBackgroundHandler = new Handler(mHandlerThread.getLooper());
            mSettingsRegistry = new SettingsRegistry();
        }
        registerBroadcastReceivers();
@@ -1680,7 +1676,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, mBackgroundHandler);
                        maxBytesPerPackage, mHandlerThread.getLooper());
                mSettingsStates.put(key, settingsState);
            }
        }
+5 −5
Original line number Diff line number Diff line
@@ -17,6 +17,7 @@
package com.android.providers.settings;

import android.os.Handler;
import android.os.Looper;
import android.os.Message;
import android.os.SystemClock;
import android.provider.Settings;
@@ -27,7 +28,6 @@ import android.util.Base64;
import android.util.Slog;
import android.util.Xml;
import com.android.internal.annotations.GuardedBy;
import com.android.internal.os.BackgroundThread;
import libcore.io.IoUtils;
import libcore.util.Objects;
import org.xmlpull.v1.XmlPullParser;
@@ -135,14 +135,14 @@ final class SettingsState {
    private long mNextId;

    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
        // 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;
        mHandler = new MyHandler(looper);
        if (maxBytesPerAppPackage == MAX_BYTES_PER_APP_PACKAGE_LIMITED) {
            mMaxBytesPerAppPackage = maxBytesPerAppPackage;
            mPackageToMemoryUsage = new ArrayMap<>();
@@ -548,8 +548,8 @@ final class SettingsState {
    private final class MyHandler extends Handler {
        public static final int MSG_PERSIST_SETTINGS = 1;

        public MyHandler() {
            super(BackgroundThread.getHandler().getLooper());
        public MyHandler(Looper looper) {
            super(looper);
        }

        @Override
+4 −3
Original line number Diff line number Diff line
@@ -16,6 +16,7 @@
package com.android.providers.settings;

import android.os.Handler;
import android.os.Looper;
import android.test.AndroidTestCase;
import android.util.Xml;

@@ -127,7 +128,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, new Handler());
                SettingsState.MAX_BYTES_PER_APP_PACKAGE_UNLIMITED, Looper.getMainLooper());
        ssWriter.setVersionLocked(SettingsState.SETTINGS_VERSOIN_NEW_ENCODING);

        ssWriter.insertSettingLocked("k1", "\u0000", "package");
@@ -139,7 +140,7 @@ public class SettingsStateTest extends AndroidTestCase {
        }

        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) {
            assertEquals("\u0000", ssReader.getSettingLocked("k1").getValue());
            assertEquals("abc", ssReader.getSettingLocked("k2").getValue());
@@ -166,7 +167,7 @@ public class SettingsStateTest extends AndroidTestCase {
        os.close();

        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) {
            SettingsState.Setting s;
            s = ss.getSettingLocked("k0");