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

Commit d72cece7 authored by Svetoslav Ganov's avatar Svetoslav Ganov Committed by The Android Automerger
Browse files

Use the correct handler when persisting the settings state.

bug:28784358

Change-Id: Iba9d569bae67c7ba0c3ab0a486ae14efa84a7acf
parent 03526d6e
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");