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

Commit d60dfb8f authored by Peter Kalauskas's avatar Peter Kalauskas
Browse files

Separate UserSettingsProxy from SettingsProxy

SettingsProxy now contains only settings-related methods that are NOT
'...ForUser()'. This is mainly to remove the dependency on UserTracker
from GlobalSettings, since global setting affect all users, and there is
no need to use the '...ForUser()' methods on it. UserSettingsProxy can
be used for secure and global settings, where per-user settings are
required.

Also:

 - Switch deprecated Settings.Secure.SECURE_FRP_MODE for
   Settings.Global.SECURE_FRP_MODE

 - Fix incorrect access of Settings.Secure.BUGREPORT_IN_POWER_MENU

Test: SystemUITests
Bug: 289353932
Change-Id: I114b737a0c2a2410fa378909fd073930d2266769
parent d4bf5dfd
Loading
Loading
Loading
Loading
+3 −3
Original line number Diff line number Diff line
@@ -83,7 +83,7 @@ import com.android.systemui.decor.RoundedCornerDecorProviderFactory;
import com.android.systemui.decor.RoundedCornerResDelegateImpl;
import com.android.systemui.decor.ScreenDecorCommand;
import com.android.systemui.log.ScreenDecorationsLogger;
import com.android.systemui.qs.SettingObserver;
import com.android.systemui.qs.UserSettingObserver;
import com.android.systemui.res.R;
import com.android.systemui.settings.DisplayTracker;
import com.android.systemui.settings.UserTracker;
@@ -163,7 +163,7 @@ public class ScreenDecorations implements CoreStartable, Dumpable {
    ScreenDecorHwcLayer mScreenDecorHwcLayer;
    private WindowManager mWindowManager;
    private int mRotation;
    private SettingObserver mColorInversionSetting;
    private UserSettingObserver mColorInversionSetting;
    @Nullable
    private DelayableExecutor mExecutor;
    private Handler mHandler;
@@ -684,7 +684,7 @@ public class ScreenDecorations implements CoreStartable, Dumpable {

            // Watch color inversion and invert the overlay as needed.
            if (mColorInversionSetting == null) {
                mColorInversionSetting = new SettingObserver(mSecureSettings, mHandler,
                mColorInversionSetting = new UserSettingObserver(mSecureSettings, mHandler,
                        Secure.ACCESSIBILITY_DISPLAY_INVERSION_ENABLED,
                        mUserTracker.getUserId()) {
                    @Override
+3 −2
Original line number Diff line number Diff line
@@ -22,7 +22,7 @@ import com.android.systemui.common.coroutine.ConflatedCallbackFlow.conflatedCall
import com.android.systemui.dagger.SysUISingleton
import com.android.systemui.dagger.qualifiers.Application
import com.android.systemui.dagger.qualifiers.Background
import com.android.systemui.qs.SettingObserver
import com.android.systemui.qs.UserSettingObserver
import com.android.systemui.user.data.repository.UserRepository
import com.android.systemui.util.settings.SecureSettings
import javax.inject.Inject
@@ -64,7 +64,8 @@ constructor(
            .flatMapLatest { userInfo ->
                conflatedCallbackFlow {
                        val observer =
                            object : SettingObserver(secureSettings, null, setting, userInfo.id) {
                            object :
                                UserSettingObserver(secureSettings, null, setting, userInfo.id) {
                                override fun handleValueChanged(
                                    value: Int,
                                    observedChange: Boolean
+7 −10
Original line number Diff line number Diff line
@@ -31,7 +31,6 @@ import android.content.Intent;
import android.content.IntentFilter;
import android.content.res.Resources;
import android.os.Bundle;
import android.os.UserHandle;
import android.util.Log;

import androidx.annotation.NonNull;
@@ -56,15 +55,15 @@ import javax.inject.Named;

/**
 * Concrete implementation of the a Flag manager that returns default values for debug builds
 *
 * <p>
 * Flags can be set (or unset) via the following adb command:
 *
 * <p>
 * adb shell cmd statusbar flag <id> <on|off|toggle|erase>
 *
 * <p>
 * Alternatively, you can change flags via a broadcast intent:
 *
 * <p>
 * adb shell am broadcast -a com.android.systemui.action.SET_FLAG --ei id <id> [--ez value <0|1>]
 *
 * <p>
 * To restore a flag back to its default, leave the `--ez value <0|1>` off of the command.
 */
@SysUISingleton
@@ -319,8 +318,7 @@ public class FeatureFlagsClassicDebug implements FeatureFlagsClassic {
            Log.w(TAG, "Failed to set flag " + name + " to " + value);
            return;
        }
        mGlobalSettings.putStringForUser(mFlagManager.nameToSettingsKey(name), data,
                UserHandle.USER_CURRENT);
        mGlobalSettings.putString(mFlagManager.nameToSettingsKey(name), data);
    }

    <T> void eraseFlag(Flag<T> flag) {
@@ -354,8 +352,7 @@ public class FeatureFlagsClassicDebug implements FeatureFlagsClassic {
    /** Works just like {@link #eraseFlag(String)} except that it doesn't restart SystemUI. */
    private void eraseInternal(String name) {
        // We can't actually "erase" things from settings, but we can set them to empty!
        mGlobalSettings.putStringForUser(mFlagManager.nameToSettingsKey(name), "",
                UserHandle.USER_CURRENT);
        mGlobalSettings.putString(mFlagManager.nameToSettingsKey(name), "");
        Log.i(TAG, "Erase name " + name);
    }

+2 −2
Original line number Diff line number Diff line
@@ -749,7 +749,7 @@ public class GlobalActionsDialogLite implements DialogInterface.OnDismissListene
    @VisibleForTesting
    boolean shouldDisplayBugReport(@Nullable UserInfo user) {
        return user != null && user.isAdmin()
                && mGlobalSettings.getIntForUser(Settings.Secure.BUGREPORT_IN_POWER_MENU, 0,
                && mSecureSettings.getIntForUser(Settings.Secure.BUGREPORT_IN_POWER_MENU, 0,
                user.id) != 0;
    }

@@ -1091,7 +1091,7 @@ public class GlobalActionsDialogLite implements DialogInterface.OnDismissListene

        @Override
        public boolean showBeforeProvisioning() {
            return Build.isDebuggable() && mGlobalSettings.getIntForUser(
            return Build.isDebuggable() && mSecureSettings.getIntForUser(
                    Settings.Secure.BUGREPORT_IN_POWER_MENU, 0, getCurrentUser().id) != 0
                    && getCurrentUser().isAdmin();
        }
+10 −29
Original line number Diff line number Diff line
@@ -20,15 +20,14 @@ import android.database.ContentObserver;
import android.os.Handler;

import com.android.systemui.statusbar.policy.Listenable;
import com.android.systemui.util.settings.GlobalSettings;
import com.android.systemui.util.settings.SecureSettings;
import com.android.systemui.util.settings.SettingsProxy;
import com.android.systemui.util.settings.SystemSettings;

/**
 * Helper for managing secure, global, and system settings through use of {@link SettingsProxy},
 * which is the common superclass of {@link SecureSettings}, {@link GlobalSettings}, and
 * {@link SystemSettings}.
 * Helper for managing global settings through use of {@link SettingsProxy}. This should
 * <em>not</em> be used for {@link SecureSettings} or {@link SystemSettings} since those must be
 * user-aware (instead, use {@link UserSettingObserver}).
 */
public abstract class SettingObserver extends ContentObserver implements Listenable {
    private final SettingsProxy mSettingsProxy;
@@ -36,23 +35,20 @@ public abstract class SettingObserver extends ContentObserver implements Listena
    private final int mDefaultValue;

    private boolean mListening;
    private int mUserId;
    private int mObservedValue;

    protected abstract void handleValueChanged(int value, boolean observedChange);

    public SettingObserver(SettingsProxy settingsProxy, Handler handler, String settingName,
            int userId) {
        this(settingsProxy, handler, settingName, userId, 0);
    public SettingObserver(SettingsProxy settingsProxy, Handler handler, String settingName) {
        this(settingsProxy, handler, settingName, 0);
    }

    public SettingObserver(SettingsProxy settingsProxy, Handler handler, String settingName,
            int userId, int defaultValue) {
            int defaultValue) {
        super(handler);
        mSettingsProxy = settingsProxy;
        mSettingName = settingName;
        mObservedValue = mDefaultValue = defaultValue;
        mUserId = userId;
    }

    public int getValue() {
@@ -65,11 +61,11 @@ public abstract class SettingObserver extends ContentObserver implements Listena
     * @param value The new value for the setting.
     */
    public void setValue(int value) {
        mSettingsProxy.putIntForUser(mSettingName, value, mUserId);
        mSettingsProxy.putInt(mSettingName, value);
    }

    private int getValueFromProvider() {
        return mSettingsProxy.getIntForUser(mSettingName, mDefaultValue, mUserId);
        return mSettingsProxy.getInt(mSettingName, mDefaultValue);
    }

    @Override
@@ -78,8 +74,8 @@ public abstract class SettingObserver extends ContentObserver implements Listena
        mListening = listening;
        if (listening) {
            mObservedValue = getValueFromProvider();
            mSettingsProxy.registerContentObserverForUser(
                    mSettingsProxy.getUriFor(mSettingName), false, this, mUserId);
            mSettingsProxy.registerContentObserver(
                    mSettingsProxy.getUriFor(mSettingName), false, this);
        } else {
            mSettingsProxy.unregisterContentObserver(this);
            mObservedValue = mDefaultValue;
@@ -94,21 +90,6 @@ public abstract class SettingObserver extends ContentObserver implements Listena
        handleValueChanged(value, changed);
    }

    /**
     * Set user handle for which to observe the setting.
     */
    public void setUserId(int userId) {
        mUserId = userId;
        if (mListening) {
            setListening(false);
            setListening(true);
        }
    }

    public int getCurrentUser() {
        return mUserId;
    }

    public String getKey() {
        return mSettingName;
    }
Loading