diff --git a/Android.bp b/Android.bp index d6a54f27456..0fd4cb09389 100644 --- a/Android.bp +++ b/Android.bp @@ -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", diff --git a/src/com/android/settings/development/DesktopModePreferenceController.java b/src/com/android/settings/development/DesktopModePreferenceController.java index a9a4b0731e7..3f8ddabb9ba 100644 --- a/src/com/android/settings/development/DesktopModePreferenceController.java +++ b/src/com/android/settings/development/DesktopModePreferenceController.java @@ -18,20 +18,24 @@ package com.android.settings.development; import static android.provider.Settings.Global.DEVELOPMENT_OVERRIDE_DESKTOP_MODE_FEATURES; -import android.content.Context; -import android.os.SystemProperties; -import android.provider.Settings; -import android.util.Log; +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.provider.Settings; + +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()); } } diff --git a/tests/robotests/src/com/android/settings/development/DesktopModePreferenceControllerTest.java b/tests/robotests/src/com/android/settings/development/DesktopModePreferenceControllerTest.java index c74512a502a..0fd4d8546fa 100644 --- a/tests/robotests/src/com/android/settings/development/DesktopModePreferenceControllerTest.java +++ b/tests/robotests/src/com/android/settings/development/DesktopModePreferenceControllerTest.java @@ -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()); } }