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

Commit 9233fe7b authored by Alina Zaidi's avatar Alina Zaidi Committed by Android (Google) Code Review
Browse files

Merge "[Dev option] Use DesktopModeStatus and ToggleOverride from wm/shell in...

Merge "[Dev option] Use DesktopModeStatus and ToggleOverride from wm/shell in Settings DesktopModePreferenceController" into main
parents 2e3d477a b456e845
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -86,6 +86,7 @@ android_library {
        "securebox",
        "android.os.flags-aconfig-java",
        "//frameworks/libs/systemui:com_android_systemui_shared_flags_lib",
        "WindowManager-Shell-shared-desktopMode",

        // Settings dependencies
        "FingerprintManagerInteractor",
+20 −37
Original line number Diff line number Diff line
@@ -18,20 +18,24 @@ package com.android.settings.development;

import static android.provider.Settings.Global.DEVELOPMENT_OVERRIDE_DESKTOP_MODE_FEATURES;

import static com.android.wm.shell.shared.desktopmode.DesktopModeFlags.convertToToggleOverrideWithFallback;
import static com.android.wm.shell.shared.desktopmode.DesktopModeFlags.ToggleOverride.OVERRIDE_OFF;
import static com.android.wm.shell.shared.desktopmode.DesktopModeFlags.ToggleOverride.OVERRIDE_ON;
import static com.android.wm.shell.shared.desktopmode.DesktopModeFlags.ToggleOverride.OVERRIDE_UNSET;

import android.content.Context;
import android.os.SystemProperties;
import android.provider.Settings;
import android.util.Log;

import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.annotation.VisibleForTesting;
import androidx.preference.Preference;
import androidx.preference.TwoStatePreference;

import com.android.settings.R;
import com.android.settings.core.PreferenceControllerMixin;
import com.android.settingslib.development.DeveloperOptionsPreferenceController;
import com.android.window.flags.Flags;
import com.android.wm.shell.shared.desktopmode.DesktopModeFlags.ToggleOverride;
import com.android.wm.shell.shared.desktopmode.DesktopModeStatus;

/**
 * Preference controller to control Desktop mode features
@@ -43,15 +47,6 @@ public class DesktopModePreferenceController extends DeveloperOptionsPreferenceC
    private static final String OVERRIDE_DESKTOP_MODE_FEATURES_KEY =
            "override_desktop_mode_features";

    private static final String TAG = "DesktopModePreferenceController";

    @VisibleForTesting
    static final int SETTING_VALUE_OFF = 0;
    @VisibleForTesting
    static final int SETTING_VALUE_ON = 1;
    @VisibleForTesting
    static final int SETTING_VALUE_UNSET = -1;

    @Nullable
    private final DevelopmentSettingsDashboardFragment mFragment;

@@ -63,7 +58,7 @@ public class DesktopModePreferenceController extends DeveloperOptionsPreferenceC

    @Override
    public boolean isAvailable() {
        return isDeviceEligibleForDesktopMode() && Flags.showDesktopWindowingDevOption();
        return DesktopModeStatus.canShowDesktopModeDevOption(mContext);
    }

    @Override
@@ -72,11 +67,11 @@ public class DesktopModePreferenceController extends DeveloperOptionsPreferenceC
    }

    @Override
    public boolean onPreferenceChange(Preference preference, Object newValue) {
    public boolean onPreferenceChange(@NonNull Preference preference, Object newValue) {
        final boolean isEnabled = (Boolean) newValue;
        Settings.Global.putInt(mContext.getContentResolver(),
                DEVELOPMENT_OVERRIDE_DESKTOP_MODE_FEATURES,
                isEnabled ? SETTING_VALUE_ON : SETTING_VALUE_OFF);
                isEnabled ? OVERRIDE_ON.getSetting() : OVERRIDE_OFF.getSetting());
        if (mFragment != null) {
            RebootConfirmationDialogFragment.show(
                    mFragment, R.string.reboot_dialog_override_desktop_mode, this);
@@ -87,18 +82,14 @@ public class DesktopModePreferenceController extends DeveloperOptionsPreferenceC
    @Override
    public void updateState(Preference preference) {
        // Use overridden state, if not present, then use default state
        final boolean shouldDevOptionBeEnabledByDefault = Flags.enableDesktopWindowingMode();
        final int mode = Settings.Global.getInt(mContext.getContentResolver(),
                DEVELOPMENT_OVERRIDE_DESKTOP_MODE_FEATURES,
                shouldDevOptionBeEnabledByDefault ? SETTING_VALUE_ON : SETTING_VALUE_OFF);
        final boolean shouldDevOptionBeEnabled = switch (mode) {
            case SETTING_VALUE_OFF -> false;
            case SETTING_VALUE_ON -> true;
            case SETTING_VALUE_UNSET -> shouldDevOptionBeEnabledByDefault;
            default -> {
                Log.w(TAG, "Invalid override for desktop mode: " + mode);
                yield shouldDevOptionBeEnabledByDefault;
            }
        final int overrideInt = Settings.Global.getInt(mContext.getContentResolver(),
                DEVELOPMENT_OVERRIDE_DESKTOP_MODE_FEATURES, OVERRIDE_UNSET.getSetting());
        final ToggleOverride toggleOverride = convertToToggleOverrideWithFallback(overrideInt,
                OVERRIDE_UNSET);
        final boolean shouldDevOptionBeEnabled = switch (toggleOverride) {
            case OVERRIDE_OFF -> false;
            case OVERRIDE_ON -> true;
            case OVERRIDE_UNSET -> DesktopModeStatus.shouldDevOptionBeEnabledByDefault();
        };
        ((TwoStatePreference) mPreference).setChecked(shouldDevOptionBeEnabled);
    }
@@ -107,14 +98,6 @@ public class DesktopModePreferenceController extends DeveloperOptionsPreferenceC
    protected void onDeveloperOptionsSwitchDisabled() {
        super.onDeveloperOptionsSwitchDisabled();
        Settings.Global.putInt(mContext.getContentResolver(),
                DEVELOPMENT_OVERRIDE_DESKTOP_MODE_FEATURES, SETTING_VALUE_UNSET);
    }

    private boolean isDeviceEligibleForDesktopMode() {
        boolean enforceDeviceRestrictions = SystemProperties.getBoolean(
                "persist.wm.debug.desktop_mode_enforce_device_restrictions", true);
        boolean isDesktopModeSupported = mContext.getResources().getBoolean(
                com.android.internal.R.bool.config_isDesktopModeSupported);
        return !enforceDeviceRestrictions || isDesktopModeSupported;
                DEVELOPMENT_OVERRIDE_DESKTOP_MODE_FEATURES, OVERRIDE_UNSET.getSetting());
    }
}
+10 −10
Original line number Diff line number Diff line
@@ -18,9 +18,9 @@ package com.android.settings.development;

import static android.provider.Settings.Global.DEVELOPMENT_OVERRIDE_DESKTOP_MODE_FEATURES;

import static com.android.settings.development.DesktopModePreferenceController.SETTING_VALUE_OFF;
import static com.android.settings.development.DesktopModePreferenceController.SETTING_VALUE_ON;
import static com.android.settings.development.DesktopModePreferenceController.SETTING_VALUE_UNSET;
import static com.android.wm.shell.shared.desktopmode.DesktopModeFlags.ToggleOverride.OVERRIDE_ON;
import static com.android.wm.shell.shared.desktopmode.DesktopModeFlags.ToggleOverride.OVERRIDE_OFF;
import static com.android.wm.shell.shared.desktopmode.DesktopModeFlags.ToggleOverride.OVERRIDE_UNSET;

import static com.google.common.truth.Truth.assertThat;

@@ -132,7 +132,7 @@ public class DesktopModePreferenceControllerTest {

        final int mode = Settings.Global.getInt(mContext.getContentResolver(),
                DEVELOPMENT_OVERRIDE_DESKTOP_MODE_FEATURES, -1 /* default */);
        assertThat(mode).isEqualTo(SETTING_VALUE_ON);
        assertThat(mode).isEqualTo(OVERRIDE_ON.getSetting());
        verify(mTransaction).add(any(RebootConfirmationDialogFragment.class), any());
    }

@@ -142,14 +142,14 @@ public class DesktopModePreferenceControllerTest {

        int mode = Settings.Global.getInt(mContext.getContentResolver(),
                DEVELOPMENT_OVERRIDE_DESKTOP_MODE_FEATURES, -1 /* default */);
        assertThat(mode).isEqualTo(SETTING_VALUE_OFF);
        assertThat(mode).isEqualTo(OVERRIDE_OFF.getSetting());
        verify(mTransaction).add(any(RebootConfirmationDialogFragment.class), any());
    }

    @Test
    public void updateState_overrideOn_checksPreference() {
        Settings.Global.putInt(mContext.getContentResolver(),
                DEVELOPMENT_OVERRIDE_DESKTOP_MODE_FEATURES, SETTING_VALUE_ON);
                DEVELOPMENT_OVERRIDE_DESKTOP_MODE_FEATURES, OVERRIDE_ON.getSetting());

        mController.updateState(mPreference);

@@ -159,7 +159,7 @@ public class DesktopModePreferenceControllerTest {
    @Test
    public void updateState_overrideOff_unchecksPreference() {
        Settings.Global.putInt(mContext.getContentResolver(),
                DEVELOPMENT_OVERRIDE_DESKTOP_MODE_FEATURES, SETTING_VALUE_OFF);
                DEVELOPMENT_OVERRIDE_DESKTOP_MODE_FEATURES, OVERRIDE_OFF.getSetting());

        mController.updateState(mPreference);

@@ -170,7 +170,7 @@ public class DesktopModePreferenceControllerTest {
    @EnableFlags(Flags.FLAG_ENABLE_DESKTOP_WINDOWING_MODE)
    public void updateState_overrideUnset_defaultDevOptionStatusOn_checksPreference() {
        Settings.Global.putInt(mContext.getContentResolver(),
                DEVELOPMENT_OVERRIDE_DESKTOP_MODE_FEATURES, SETTING_VALUE_UNSET);
                DEVELOPMENT_OVERRIDE_DESKTOP_MODE_FEATURES, OVERRIDE_UNSET.getSetting());

        mController.updateState(mPreference);

@@ -181,7 +181,7 @@ public class DesktopModePreferenceControllerTest {
    @DisableFlags(Flags.FLAG_ENABLE_DESKTOP_WINDOWING_MODE)
    public void updateState_overrideUnset_defaultDevOptionStatusOff_unchecksPreference() {
        Settings.Global.putInt(mContext.getContentResolver(),
                DEVELOPMENT_OVERRIDE_DESKTOP_MODE_FEATURES, SETTING_VALUE_UNSET);
                DEVELOPMENT_OVERRIDE_DESKTOP_MODE_FEATURES, OVERRIDE_UNSET.getSetting());

        mController.updateState(mPreference);

@@ -253,6 +253,6 @@ public class DesktopModePreferenceControllerTest {

        final int mode = Settings.Global.getInt(mContext.getContentResolver(),
                DEVELOPMENT_OVERRIDE_DESKTOP_MODE_FEATURES, -2 /* default */);
        assertThat(mode).isEqualTo(DesktopModePreferenceController.SETTING_VALUE_UNSET);
        assertThat(mode).isEqualTo(OVERRIDE_UNSET.getSetting());
    }
}