From fe2a16818963ed048414622e8a1e1450ddf0d5dd Mon Sep 17 00:00:00 2001 From: Ats Jenk Date: Fri, 17 Jun 2022 14:32:59 -0700 Subject: [PATCH] Developer tile for toggling desktop mode Create a developer tile for toggling desktop windowing mode. Relies on desktop windowing prototype flag, captions in shell flag and freeform to be enabled. Bug: 241944030 Test: manually verified tile is available in developer tiles Change-Id: I0e5904ac896405ac166590972a83872cdbabb5a4 --- AndroidManifest.xml | 14 ++++ res/drawable/tile_icon_desktop_mode.xml | 25 +++++++ .../development/qstile/DevelopmentTiles.java | 73 +++++++++++++++++++ 3 files changed, 112 insertions(+) create mode 100644 res/drawable/tile_icon_desktop_mode.xml diff --git a/AndroidManifest.xml b/AndroidManifest.xml index c8c33a8b5be..7c44a8ffded 100644 --- a/AndroidManifest.xml +++ b/AndroidManifest.xml @@ -4054,6 +4054,20 @@ android:value="true"/> + + + + + + + + + + diff --git a/src/com/android/settings/development/qstile/DevelopmentTiles.java b/src/com/android/settings/development/qstile/DevelopmentTiles.java index 0483aea861f..343ed24e0a1 100644 --- a/src/com/android/settings/development/qstile/DevelopmentTiles.java +++ b/src/com/android/settings/development/qstile/DevelopmentTiles.java @@ -476,4 +476,77 @@ public abstract class DevelopmentTiles extends TileService { Settings.System.SHOW_TOUCHES, isEnabled ? SETTING_VALUE_ON : SETTING_VALUE_OFF); } } + + /** + * Tile to enable desktop mode + */ + public static class DesktopMode extends DevelopmentTiles { + + private static final int SETTING_VALUE_ON = 1; + private static final int SETTING_VALUE_OFF = 0; + private Context mContext; + + @Override + public void onCreate() { + super.onCreate(); + mContext = getApplicationContext(); + } + + @Override + protected boolean isEnabled() { + return Settings.System.getInt(mContext.getContentResolver(), + Settings.System.DESKTOP_MODE, SETTING_VALUE_OFF) == SETTING_VALUE_ON; + } + + private boolean isDesktopModeFlagEnabled() { + return SystemProperties.getBoolean("persist.wm.debug.desktop_mode", false); + } + + private boolean isFreeformFlagEnabled() { + return Settings.Global.getInt(mContext.getContentResolver(), + Settings.Global.DEVELOPMENT_ENABLE_FREEFORM_WINDOWS_SUPPORT, SETTING_VALUE_OFF) + == SETTING_VALUE_ON; + } + + private boolean isCaptionOnShellEnabled() { + return SystemProperties.getBoolean("persist.wm.debug.caption_on_shell", false); + } + + @Override + protected void setIsEnabled(boolean isEnabled) { + if (isEnabled) { + // Check that all required features are enabled + if (!isDesktopModeFlagEnabled()) { + closeShade(); + showMessage( + "Enable 'Desktop Windowing Proto 1' from the Flag Flipper app"); + return; + } + if (!isCaptionOnShellEnabled()) { + closeShade(); + showMessage("Enable 'Captions in Shell' from the Flag Flipper app"); + return; + } + if (!isFreeformFlagEnabled()) { + closeShade(); + showMessage( + "Enable freeform windows from developer settings"); + return; + } + } + + Settings.System.putInt(mContext.getContentResolver(), + Settings.System.DESKTOP_MODE, + isEnabled ? SETTING_VALUE_ON : SETTING_VALUE_OFF); + closeShade(); + } + + private void closeShade() { + sendBroadcast(new Intent(Intent.ACTION_CLOSE_SYSTEM_DIALOGS)); + } + + private void showMessage(String message) { + Toast.makeText(mContext, message, Toast.LENGTH_LONG).show(); + } + } }