diff options
30 files changed, 190 insertions, 642 deletions
diff --git a/core/java/android/view/InsetsState.java b/core/java/android/view/InsetsState.java index 15a4715bd059..5c415165137e 100644 --- a/core/java/android/view/InsetsState.java +++ b/core/java/android/view/InsetsState.java @@ -146,7 +146,7 @@ public class InsetsState implements Parcelable { forceConsumingTypes |= type; } - if (ENABLE_CAPTION_COMPAT_INSET_FORCE_CONSUMPTION_ALWAYS.isEnabled() + if (ENABLE_CAPTION_COMPAT_INSET_FORCE_CONSUMPTION_ALWAYS.isTrue() && (flags & FLAG_FORCE_CONSUMING_OPAQUE_CAPTION_BAR) != 0) { forceConsumingOpaqueCaptionBar = true; } diff --git a/core/java/android/view/ViewRootImpl.java b/core/java/android/view/ViewRootImpl.java index 33e79059c7e5..d46e1f29597e 100644 --- a/core/java/android/view/ViewRootImpl.java +++ b/core/java/android/view/ViewRootImpl.java @@ -3214,10 +3214,10 @@ public final class ViewRootImpl implements ViewParent, typesToShow |= Type.navigationBars(); } if (captionIsHiddenByFlags && !captionWasHiddenByFlags - && ENABLE_CAPTION_COMPAT_INSET_FORCE_CONSUMPTION.isEnabled()) { + && ENABLE_CAPTION_COMPAT_INSET_FORCE_CONSUMPTION.isTrue()) { typesToHide |= Type.captionBar(); } else if (!captionIsHiddenByFlags && captionWasHiddenByFlags - && ENABLE_CAPTION_COMPAT_INSET_FORCE_CONSUMPTION.isEnabled()) { + && ENABLE_CAPTION_COMPAT_INSET_FORCE_CONSUMPTION.isTrue()) { typesToShow |= Type.captionBar(); } if (typesToHide != 0) { diff --git a/core/java/android/window/flags/DesktopModeFlags.java b/core/java/android/window/flags/DesktopModeFlags.java index 701b6be06e72..395a85345277 100644 --- a/core/java/android/window/flags/DesktopModeFlags.java +++ b/core/java/android/window/flags/DesktopModeFlags.java @@ -47,7 +47,23 @@ public enum DesktopModeFlags { ENABLE_CAPTION_COMPAT_INSET_FORCE_CONSUMPTION( Flags::enableCaptionCompatInsetForceConsumption, true), ENABLE_CAPTION_COMPAT_INSET_FORCE_CONSUMPTION_ALWAYS( - Flags::enableCaptionCompatInsetForceConsumptionAlways, true); + Flags::enableCaptionCompatInsetForceConsumptionAlways, true), + ENABLE_CASCADING_WINDOWS(Flags::enableCascadingWindows, true), + ENABLE_DESKTOP_WINDOWING_WALLPAPER_ACTIVITY( + Flags::enableDesktopWindowingWallpaperActivity, true), + ENABLE_DESKTOP_WINDOWING_MODALS_POLICY(Flags::enableDesktopWindowingModalsPolicy, true), + ENABLE_THEMED_APP_HEADERS(Flags::enableThemedAppHeaders, true), + ENABLE_DESKTOP_WINDOWING_QUICK_SWITCH(Flags::enableDesktopWindowingQuickSwitch, true), + ENABLE_APP_HEADER_WITH_TASK_DENSITY(Flags::enableAppHeaderWithTaskDensity, true), + ENABLE_TASK_STACK_OBSERVER_IN_SHELL(Flags::enableTaskStackObserverInShell, true), + ENABLE_DESKTOP_WINDOWING_SIZE_CONSTRAINTS(Flags::enableDesktopWindowingSizeConstraints, true), + DISABLE_NON_RESIZABLE_APP_SNAP_RESIZE(Flags::disableNonResizableAppSnapResizing, true), + ENABLE_WINDOWING_SCALED_RESIZING(Flags::enableWindowingScaledResizing, false), + ENABLE_DESKTOP_WINDOWING_TASK_LIMIT(Flags::enableDesktopWindowingTaskLimit, true), + ENABLE_DESKTOP_WINDOWING_BACK_NAVIGATION(Flags::enableDesktopWindowingBackNavigation, true), + ENABLE_WINDOWING_EDGE_DRAG_RESIZE(Flags::enableWindowingEdgeDragResize, true), + ENABLE_DESKTOP_WINDOWING_TASKBAR_RUNNING_APPS( + Flags::enableDesktopWindowingTaskbarRunningApps, true); private static final String TAG = "DesktopModeFlagsUtil"; // Function called to obtain aconfig flag value. @@ -68,7 +84,7 @@ public enum DesktopModeFlags { * Determines state of flag based on the actual flag and desktop mode developer option * overrides. */ - public boolean isEnabled() { + public boolean isTrue() { Application application = ActivityThread.currentApplication(); if (!Flags.showDesktopWindowingDevOption() || !mShouldOverrideByDevOption @@ -112,12 +128,13 @@ public enum DesktopModeFlags { } /** Override state of desktop mode developer option toggle. */ - private enum ToggleOverride { + public enum ToggleOverride { OVERRIDE_UNSET, OVERRIDE_OFF, OVERRIDE_ON; - int getSetting() { + /** Returns the integer representation of this {@code ToggleOverride}. */ + public int getSetting() { return switch (this) { case OVERRIDE_ON -> 1; case OVERRIDE_OFF -> 0; @@ -125,7 +142,8 @@ public enum DesktopModeFlags { }; } - static ToggleOverride fromSetting(int setting, @Nullable ToggleOverride fallback) { + /** Returns the {@code ToggleOverride} corresponding to a given integer setting. */ + public static ToggleOverride fromSetting(int setting, @Nullable ToggleOverride fallback) { return switch (setting) { case 1 -> OVERRIDE_ON; case 0 -> OVERRIDE_OFF; diff --git a/core/java/com/android/internal/policy/DecorView.java b/core/java/com/android/internal/policy/DecorView.java index 84dfc497dc84..6faea17f24b2 100644 --- a/core/java/com/android/internal/policy/DecorView.java +++ b/core/java/com/android/internal/policy/DecorView.java @@ -1219,14 +1219,14 @@ public class DecorView extends FrameLayout implements RootViewSurfaceTaker, Wind final boolean hideCaptionBar = fullscreen || (requestedVisibleTypes & WindowInsets.Type.captionBar()) == 0; final boolean consumingCaptionBar = - ENABLE_CAPTION_COMPAT_INSET_FORCE_CONSUMPTION.isEnabled() + ENABLE_CAPTION_COMPAT_INSET_FORCE_CONSUMPTION.isTrue() && ((mLastForceConsumingTypes & WindowInsets.Type.captionBar()) != 0 && hideCaptionBar); final boolean isOpaqueCaptionBar = customizableWindowHeaders() && (appearance & APPEARANCE_TRANSPARENT_CAPTION_BAR_BACKGROUND) == 0; final boolean consumingOpaqueCaptionBar = - ENABLE_CAPTION_COMPAT_INSET_FORCE_CONSUMPTION_ALWAYS.isEnabled() + ENABLE_CAPTION_COMPAT_INSET_FORCE_CONSUMPTION_ALWAYS.isTrue() && mLastForceConsumingOpaqueCaptionBar && isOpaqueCaptionBar; diff --git a/core/tests/coretests/src/android/window/flags/DesktopModeFlagsTest.java b/core/tests/coretests/src/android/window/flags/DesktopModeFlagsTest.java index dd406955785b..58834e6a4925 100644 --- a/core/tests/coretests/src/android/window/flags/DesktopModeFlagsTest.java +++ b/core/tests/coretests/src/android/window/flags/DesktopModeFlagsTest.java @@ -17,6 +17,10 @@ package android.window.flags; import static android.window.flags.DesktopModeFlags.ENABLE_DESKTOP_WINDOWING_MODE; +import static android.window.flags.DesktopModeFlags.ToggleOverride.OVERRIDE_OFF; +import static android.window.flags.DesktopModeFlags.ToggleOverride.OVERRIDE_ON; +import static android.window.flags.DesktopModeFlags.ToggleOverride.OVERRIDE_UNSET; +import static android.window.flags.DesktopModeFlags.ToggleOverride.fromSetting; import static com.android.window.flags.Flags.FLAG_ENABLE_DESKTOP_WINDOWING_MODE; import static com.android.window.flags.Flags.FLAG_ENABLE_WINDOWING_DYNAMIC_INITIAL_BOUNDS; @@ -72,143 +76,143 @@ public class DesktopModeFlagsTest { @Test @DisableFlags(FLAG_SHOW_DESKTOP_WINDOWING_DEV_OPTION) @EnableFlags(FLAG_ENABLE_DESKTOP_WINDOWING_MODE) - public void isEnabled_devOptionFlagDisabled_overrideOff_featureFlagOn_returnsTrue() { + public void isTrue_devOptionFlagDisabled_overrideOff_featureFlagOn_returnsTrue() { setOverride(OVERRIDE_OFF_SETTING); // In absence of dev options, follow flag - assertThat(ENABLE_DESKTOP_WINDOWING_MODE.isEnabled()).isTrue(); + assertThat(ENABLE_DESKTOP_WINDOWING_MODE.isTrue()).isTrue(); } @Test @DisableFlags({FLAG_SHOW_DESKTOP_WINDOWING_DEV_OPTION, FLAG_ENABLE_DESKTOP_WINDOWING_MODE}) - public void isEnabled_devOptionFlagDisabled_overrideOn_featureFlagOff_returnsFalse() { + public void isTrue_devOptionFlagDisabled_overrideOn_featureFlagOff_returnsFalse() { setOverride(OVERRIDE_ON_SETTING); - assertThat(ENABLE_DESKTOP_WINDOWING_MODE.isEnabled()).isFalse(); + assertThat(ENABLE_DESKTOP_WINDOWING_MODE.isTrue()).isFalse(); } @Test @EnableFlags({FLAG_SHOW_DESKTOP_WINDOWING_DEV_OPTION, FLAG_ENABLE_DESKTOP_WINDOWING_MODE}) - public void isEnabled_overrideUnset_featureFlagOn_returnsTrue() { + public void isTrue_overrideUnset_featureFlagOn_returnsTrue() { setOverride(OVERRIDE_UNSET_SETTING); // For overridableFlag, for unset overrides, follow flag - assertThat(ENABLE_DESKTOP_WINDOWING_MODE.isEnabled()).isTrue(); + assertThat(ENABLE_DESKTOP_WINDOWING_MODE.isTrue()).isTrue(); } @Test @EnableFlags(FLAG_SHOW_DESKTOP_WINDOWING_DEV_OPTION) @DisableFlags(FLAG_ENABLE_DESKTOP_WINDOWING_MODE) - public void isEnabled_overrideUnset_featureFlagOff_returnsFalse() { + public void isTrue_overrideUnset_featureFlagOff_returnsFalse() { setOverride(OVERRIDE_UNSET_SETTING); // For overridableFlag, for unset overrides, follow flag - assertThat(ENABLE_DESKTOP_WINDOWING_MODE.isEnabled()).isFalse(); + assertThat(ENABLE_DESKTOP_WINDOWING_MODE.isTrue()).isFalse(); } @Test @EnableFlags({FLAG_SHOW_DESKTOP_WINDOWING_DEV_OPTION, FLAG_ENABLE_DESKTOP_WINDOWING_MODE}) - public void isEnabled_noOverride_featureFlagOn_returnsTrue() { + public void isTrue_noOverride_featureFlagOn_returnsTrue() { setOverride(null); // For overridableFlag, in absence of overrides, follow flag - assertThat(ENABLE_DESKTOP_WINDOWING_MODE.isEnabled()).isTrue(); + assertThat(ENABLE_DESKTOP_WINDOWING_MODE.isTrue()).isTrue(); } @Test @EnableFlags(FLAG_SHOW_DESKTOP_WINDOWING_DEV_OPTION) @DisableFlags(FLAG_ENABLE_DESKTOP_WINDOWING_MODE) - public void isEnabled_noOverride_featureFlagOff_returnsFalse() { + public void isTrue_noOverride_featureFlagOff_returnsFalse() { setOverride(null); // For overridableFlag, in absence of overrides, follow flag - assertThat(ENABLE_DESKTOP_WINDOWING_MODE.isEnabled()).isFalse(); + assertThat(ENABLE_DESKTOP_WINDOWING_MODE.isTrue()).isFalse(); } @Test @EnableFlags({FLAG_SHOW_DESKTOP_WINDOWING_DEV_OPTION, FLAG_ENABLE_DESKTOP_WINDOWING_MODE}) - public void isEnabled_unrecognizableOverride_featureFlagOn_returnsTrue() { + public void isTrue_unrecognizableOverride_featureFlagOn_returnsTrue() { setOverride(-2); // For overridableFlag, for unrecognized overrides, follow flag - assertThat(ENABLE_DESKTOP_WINDOWING_MODE.isEnabled()).isTrue(); + assertThat(ENABLE_DESKTOP_WINDOWING_MODE.isTrue()).isTrue(); } @Test @EnableFlags(FLAG_SHOW_DESKTOP_WINDOWING_DEV_OPTION) @DisableFlags(FLAG_ENABLE_DESKTOP_WINDOWING_MODE) - public void isEnabled_unrecognizableOverride_featureFlagOff_returnsFalse() { + public void isTrue_unrecognizableOverride_featureFlagOff_returnsFalse() { setOverride(-2); // For overridableFlag, for unrecognizable overrides, follow flag - assertThat(ENABLE_DESKTOP_WINDOWING_MODE.isEnabled()).isFalse(); + assertThat(ENABLE_DESKTOP_WINDOWING_MODE.isTrue()).isFalse(); } @Test @EnableFlags({FLAG_SHOW_DESKTOP_WINDOWING_DEV_OPTION, FLAG_ENABLE_DESKTOP_WINDOWING_MODE}) - public void isEnabled_overrideOff_featureFlagOn_returnsFalse() { + public void isTrue_overrideOff_featureFlagOn_returnsFalse() { setOverride(OVERRIDE_OFF_SETTING); // For overridableFlag, follow override if they exist - assertThat(ENABLE_DESKTOP_WINDOWING_MODE.isEnabled()).isFalse(); + assertThat(ENABLE_DESKTOP_WINDOWING_MODE.isTrue()).isFalse(); } @Test @EnableFlags(FLAG_SHOW_DESKTOP_WINDOWING_DEV_OPTION) @DisableFlags(FLAG_ENABLE_DESKTOP_WINDOWING_MODE) - public void isEnabled_overrideOn_featureFlagOff_returnsTrue() { + public void isTrue_overrideOn_featureFlagOff_returnsTrue() { setOverride(OVERRIDE_ON_SETTING); // For overridableFlag, follow override if they exist - assertThat(ENABLE_DESKTOP_WINDOWING_MODE.isEnabled()).isTrue(); + assertThat(ENABLE_DESKTOP_WINDOWING_MODE.isTrue()).isTrue(); } @Test @EnableFlags({FLAG_SHOW_DESKTOP_WINDOWING_DEV_OPTION, FLAG_ENABLE_DESKTOP_WINDOWING_MODE}) - public void isEnabled_overrideOffThenOn_featureFlagOn_returnsFalseAndFalse() { + public void isTrue_overrideOffThenOn_featureFlagOn_returnsFalseAndFalse() { setOverride(OVERRIDE_OFF_SETTING); // For overridableFlag, follow override if they exist - assertThat(ENABLE_DESKTOP_WINDOWING_MODE.isEnabled()).isFalse(); + assertThat(ENABLE_DESKTOP_WINDOWING_MODE.isTrue()).isFalse(); setOverride(OVERRIDE_ON_SETTING); // Keep overrides constant through the process - assertThat(ENABLE_DESKTOP_WINDOWING_MODE.isEnabled()).isFalse(); + assertThat(ENABLE_DESKTOP_WINDOWING_MODE.isTrue()).isFalse(); } @Test @EnableFlags(FLAG_SHOW_DESKTOP_WINDOWING_DEV_OPTION) @DisableFlags(FLAG_ENABLE_DESKTOP_WINDOWING_MODE) - public void isEnabled_overrideOnThenOff_featureFlagOff_returnsTrueAndTrue() { + public void isTrue_overrideOnThenOff_featureFlagOff_returnsTrueAndTrue() { setOverride(OVERRIDE_ON_SETTING); // For overridableFlag, follow override if they exist - assertThat(ENABLE_DESKTOP_WINDOWING_MODE.isEnabled()).isTrue(); + assertThat(ENABLE_DESKTOP_WINDOWING_MODE.isTrue()).isTrue(); setOverride(OVERRIDE_OFF_SETTING); // Keep overrides constant through the process - assertThat(ENABLE_DESKTOP_WINDOWING_MODE.isEnabled()).isTrue(); + assertThat(ENABLE_DESKTOP_WINDOWING_MODE.isTrue()).isTrue(); } @Test @EnableFlags({FLAG_SHOW_DESKTOP_WINDOWING_DEV_OPTION, FLAG_ENABLE_DESKTOP_WINDOWING_MODE, FLAG_ENABLE_WINDOWING_DYNAMIC_INITIAL_BOUNDS}) - public void isEnabled_dwFlagOn_overrideUnset_featureFlagOn_returnsTrue() { + public void isTrue_dwFlagOn_overrideUnset_featureFlagOn_returnsTrue() { setOverride(OVERRIDE_UNSET_SETTING); // For unset overrides, follow flag - assertThat(DesktopModeFlags.ENABLE_WINDOWING_DYNAMIC_INITIAL_BOUNDS.isEnabled()).isTrue(); + assertThat(DesktopModeFlags.ENABLE_WINDOWING_DYNAMIC_INITIAL_BOUNDS.isTrue()).isTrue(); } @Test @EnableFlags({FLAG_SHOW_DESKTOP_WINDOWING_DEV_OPTION, FLAG_ENABLE_DESKTOP_WINDOWING_MODE}) @DisableFlags(FLAG_ENABLE_WINDOWING_DYNAMIC_INITIAL_BOUNDS) - public void isEnabled_dwFlagOn_overrideUnset_featureFlagOff_returnsFalse() { + public void isTrue_dwFlagOn_overrideUnset_featureFlagOff_returnsFalse() { setOverride(OVERRIDE_UNSET_SETTING); // For unset overrides, follow flag - assertThat(DesktopModeFlags.ENABLE_WINDOWING_DYNAMIC_INITIAL_BOUNDS.isEnabled()).isFalse(); + assertThat(DesktopModeFlags.ENABLE_WINDOWING_DYNAMIC_INITIAL_BOUNDS.isTrue()).isFalse(); } @Test @@ -217,21 +221,21 @@ public class DesktopModeFlagsTest { FLAG_ENABLE_DESKTOP_WINDOWING_MODE, FLAG_ENABLE_WINDOWING_DYNAMIC_INITIAL_BOUNDS }) - public void isEnabled_dwFlagOn_overrideOn_featureFlagOn_returnsTrue() { + public void isTrue_dwFlagOn_overrideOn_featureFlagOn_returnsTrue() { setOverride(OVERRIDE_ON_SETTING); // When toggle override matches its default state (dw flag), don't override flags - assertThat(DesktopModeFlags.ENABLE_WINDOWING_DYNAMIC_INITIAL_BOUNDS.isEnabled()).isTrue(); + assertThat(DesktopModeFlags.ENABLE_WINDOWING_DYNAMIC_INITIAL_BOUNDS.isTrue()).isTrue(); } @Test @EnableFlags({FLAG_SHOW_DESKTOP_WINDOWING_DEV_OPTION, FLAG_ENABLE_DESKTOP_WINDOWING_MODE}) @DisableFlags(FLAG_ENABLE_WINDOWING_DYNAMIC_INITIAL_BOUNDS) - public void isEnabled_dwFlagOn_overrideOn_featureFlagOff_returnsFalse() { + public void isTrue_dwFlagOn_overrideOn_featureFlagOff_returnsFalse() { setOverride(OVERRIDE_ON_SETTING); // When toggle override matches its default state (dw flag), don't override flags - assertThat(DesktopModeFlags.ENABLE_WINDOWING_DYNAMIC_INITIAL_BOUNDS.isEnabled()).isFalse(); + assertThat(DesktopModeFlags.ENABLE_WINDOWING_DYNAMIC_INITIAL_BOUNDS.isTrue()).isFalse(); } @Test @@ -240,21 +244,21 @@ public class DesktopModeFlagsTest { FLAG_ENABLE_DESKTOP_WINDOWING_MODE, FLAG_ENABLE_WINDOWING_DYNAMIC_INITIAL_BOUNDS }) - public void isEnabled_dwFlagOn_overrideOff_featureFlagOn_returnsTrue() { + public void isTrue_dwFlagOn_overrideOff_featureFlagOn_returnsTrue() { setOverride(OVERRIDE_OFF_SETTING); // Follow override if they exist, and is not equal to default toggle state (dw flag) - assertThat(DesktopModeFlags.ENABLE_WINDOWING_DYNAMIC_INITIAL_BOUNDS.isEnabled()).isTrue(); + assertThat(DesktopModeFlags.ENABLE_WINDOWING_DYNAMIC_INITIAL_BOUNDS.isTrue()).isTrue(); } @Test @EnableFlags({FLAG_SHOW_DESKTOP_WINDOWING_DEV_OPTION, FLAG_ENABLE_DESKTOP_WINDOWING_MODE}) @DisableFlags(FLAG_ENABLE_WINDOWING_DYNAMIC_INITIAL_BOUNDS) - public void isEnabled_dwFlagOn_overrideOff_featureFlagOff_returnsFalse() { + public void isTrue_dwFlagOn_overrideOff_featureFlagOff_returnsFalse() { setOverride(OVERRIDE_OFF_SETTING); // Follow override if they exist, and is not equal to default toggle state (dw flag) - assertThat(DesktopModeFlags.ENABLE_WINDOWING_DYNAMIC_INITIAL_BOUNDS.isEnabled()).isFalse(); + assertThat(DesktopModeFlags.ENABLE_WINDOWING_DYNAMIC_INITIAL_BOUNDS.isTrue()).isFalse(); } @Test @@ -263,11 +267,11 @@ public class DesktopModeFlagsTest { FLAG_ENABLE_WINDOWING_DYNAMIC_INITIAL_BOUNDS }) @DisableFlags(FLAG_ENABLE_DESKTOP_WINDOWING_MODE) - public void isEnabled_dwFlagOff_overrideUnset_featureFlagOn_returnsTrue() { + public void isTrue_dwFlagOff_overrideUnset_featureFlagOn_returnsTrue() { setOverride(OVERRIDE_UNSET_SETTING); // For unset overrides, follow flag - assertThat(DesktopModeFlags.ENABLE_WINDOWING_DYNAMIC_INITIAL_BOUNDS.isEnabled()).isTrue(); + assertThat(DesktopModeFlags.ENABLE_WINDOWING_DYNAMIC_INITIAL_BOUNDS.isTrue()).isTrue(); } @Test @@ -276,11 +280,11 @@ public class DesktopModeFlagsTest { FLAG_ENABLE_DESKTOP_WINDOWING_MODE, FLAG_ENABLE_WINDOWING_DYNAMIC_INITIAL_BOUNDS }) - public void isEnabled_dwFlagOff_overrideUnset_featureFlagOff_returnsFalse() { + public void isTrue_dwFlagOff_overrideUnset_featureFlagOff_returnsFalse() { setOverride(OVERRIDE_UNSET_SETTING); // For unset overrides, follow flag - assertThat(DesktopModeFlags.ENABLE_WINDOWING_DYNAMIC_INITIAL_BOUNDS.isEnabled()).isFalse(); + assertThat(DesktopModeFlags.ENABLE_WINDOWING_DYNAMIC_INITIAL_BOUNDS.isTrue()).isFalse(); } @Test @@ -289,11 +293,11 @@ public class DesktopModeFlagsTest { FLAG_ENABLE_WINDOWING_DYNAMIC_INITIAL_BOUNDS }) @DisableFlags(FLAG_ENABLE_DESKTOP_WINDOWING_MODE) - public void isEnabled_dwFlagOff_overrideOn_featureFlagOn_returnsTrue() { + public void isTrue_dwFlagOff_overrideOn_featureFlagOn_returnsTrue() { setOverride(OVERRIDE_ON_SETTING); // Follow override if they exist, and is not equal to default toggle state (dw flag) - assertThat(DesktopModeFlags.ENABLE_WINDOWING_DYNAMIC_INITIAL_BOUNDS.isEnabled()).isTrue(); + assertThat(DesktopModeFlags.ENABLE_WINDOWING_DYNAMIC_INITIAL_BOUNDS.isTrue()).isTrue(); } @Test @@ -302,11 +306,11 @@ public class DesktopModeFlagsTest { FLAG_ENABLE_DESKTOP_WINDOWING_MODE, FLAG_ENABLE_WINDOWING_DYNAMIC_INITIAL_BOUNDS }) - public void isEnabled_dwFlagOff_overrideOn_featureFlagOff_returnFalse() { + public void isTrue_dwFlagOff_overrideOn_featureFlagOff_returnFalse() { setOverride(OVERRIDE_ON_SETTING); // Follow override if they exist, and is not equal to default toggle state (dw flag) - assertThat(DesktopModeFlags.ENABLE_WINDOWING_DYNAMIC_INITIAL_BOUNDS.isEnabled()).isFalse(); + assertThat(DesktopModeFlags.ENABLE_WINDOWING_DYNAMIC_INITIAL_BOUNDS.isTrue()).isFalse(); } @Test @@ -315,11 +319,11 @@ public class DesktopModeFlagsTest { FLAG_ENABLE_WINDOWING_DYNAMIC_INITIAL_BOUNDS }) @DisableFlags(FLAG_ENABLE_DESKTOP_WINDOWING_MODE) - public void isEnabled_dwFlagOff_overrideOff_featureFlagOn_returnsTrue() { + public void isTrue_dwFlagOff_overrideOff_featureFlagOn_returnsTrue() { setOverride(OVERRIDE_OFF_SETTING); // When toggle override matches its default state (dw flag), don't override flags - assertThat(DesktopModeFlags.ENABLE_WINDOWING_DYNAMIC_INITIAL_BOUNDS.isEnabled()).isTrue(); + assertThat(DesktopModeFlags.ENABLE_WINDOWING_DYNAMIC_INITIAL_BOUNDS.isTrue()).isTrue(); } @Test @@ -328,11 +332,31 @@ public class DesktopModeFlagsTest { FLAG_ENABLE_DESKTOP_WINDOWING_MODE, FLAG_ENABLE_WINDOWING_DYNAMIC_INITIAL_BOUNDS }) - public void isEnabled_dwFlagOff_overrideOff_featureFlagOff_returnsFalse() { + public void isTrue_dwFlagOff_overrideOff_featureFlagOff_returnsFalse() { setOverride(OVERRIDE_OFF_SETTING); // When toggle override matches its default state (dw flag), don't override flags - assertThat(DesktopModeFlags.ENABLE_WINDOWING_DYNAMIC_INITIAL_BOUNDS.isEnabled()).isFalse(); + assertThat(DesktopModeFlags.ENABLE_WINDOWING_DYNAMIC_INITIAL_BOUNDS.isTrue()).isFalse(); + } + + @Test + public void fromSetting_validInt_returnsToggleOverride() { + assertThat(fromSetting(0, OVERRIDE_UNSET)).isEqualTo(OVERRIDE_OFF); + assertThat(fromSetting(1, OVERRIDE_UNSET)).isEqualTo(OVERRIDE_ON); + assertThat(fromSetting(-1, OVERRIDE_ON)).isEqualTo(OVERRIDE_UNSET); + } + + @Test + public void fromSetting_invalidInt_returnsFallback() { + assertThat(fromSetting(2, OVERRIDE_ON)).isEqualTo(OVERRIDE_ON); + assertThat(fromSetting(-2, OVERRIDE_UNSET)).isEqualTo(OVERRIDE_UNSET); + } + + @Test + public void getSetting_returnsToggleOverrideInteger() { + assertThat(OVERRIDE_OFF.getSetting()).isEqualTo(0); + assertThat(OVERRIDE_ON.getSetting()).isEqualTo(1); + assertThat(OVERRIDE_UNSET.getSetting()).isEqualTo(-1); } private void setOverride(Integer setting) { diff --git a/libs/WindowManager/Shell/shared/src/com/android/wm/shell/shared/desktopmode/DesktopModeFlags.kt b/libs/WindowManager/Shell/shared/src/com/android/wm/shell/shared/desktopmode/DesktopModeFlags.kt deleted file mode 100644 index b5d63bd6addc..000000000000 --- a/libs/WindowManager/Shell/shared/src/com/android/wm/shell/shared/desktopmode/DesktopModeFlags.kt +++ /dev/null @@ -1,143 +0,0 @@ -/* - * Copyright (C) 2024 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package com.android.wm.shell.shared.desktopmode - -import android.content.Context -import android.provider.Settings -import android.util.Log -import com.android.window.flags.Flags - -/* - * An enum to check desktop mode flags state. - * - * This enum provides a centralized way to control the behavior of flags related to desktop - * windowing features which are aiming for developer preview before their release. It allows - * developer option to override the default behavior of these flags. - * - * NOTE: Flags should only be added to this enum when they have received Product and UX - * alignment that the feature is ready for developer preview, otherwise just do a flag check. - */ -enum class DesktopModeFlags( - // Function called to obtain aconfig flag value. - private val flagFunction: () -> Boolean, - // Whether the flag state should be affected by developer option. - private val shouldOverrideByDevOption: Boolean -) { - // All desktop mode related flags will be added here - DESKTOP_WINDOWING_MODE(Flags::enableDesktopWindowingMode, true), - CASCADING_WINDOWS(Flags::enableCascadingWindows, true), - WALLPAPER_ACTIVITY(Flags::enableDesktopWindowingWallpaperActivity, true), - MODALS_POLICY(Flags::enableDesktopWindowingModalsPolicy, true), - THEMED_APP_HEADERS(Flags::enableThemedAppHeaders, true), - QUICK_SWITCH(Flags::enableDesktopWindowingQuickSwitch, true), - APP_HEADER_WITH_TASK_DENSITY(Flags::enableAppHeaderWithTaskDensity, true), - TASK_STACK_OBSERVER_IN_SHELL(Flags::enableTaskStackObserverInShell, true), - SIZE_CONSTRAINTS(Flags::enableDesktopWindowingSizeConstraints, true), - DISABLE_SNAP_RESIZE(Flags::disableNonResizableAppSnapResizing, true), - DYNAMIC_INITIAL_BOUNDS(Flags::enableWindowingDynamicInitialBounds, false), - SCALED_RESIZING(Flags::enableWindowingScaledResizing, false), - ENABLE_DESKTOP_WINDOWING_TASK_LIMIT(Flags::enableDesktopWindowingTaskLimit, true), - BACK_NAVIGATION(Flags::enableDesktopWindowingBackNavigation, true), - EDGE_DRAG_RESIZE(Flags::enableWindowingEdgeDragResize, true), - TASKBAR_RUNNING_APPS(Flags::enableDesktopWindowingTaskbarRunningApps, true); - - /** - * Determines state of flag based on the actual flag and desktop mode developer option - * overrides. - */ - fun isEnabled(context: Context): Boolean = - if (!Flags.showDesktopWindowingDevOption() || - !shouldOverrideByDevOption || - context.contentResolver == null) { - flagFunction() - } else { - val shouldToggleBeEnabledByDefault = - DesktopModeStatus.shouldDevOptionBeEnabledByDefault() - when (getToggleOverride(context)) { - ToggleOverride.OVERRIDE_UNSET -> flagFunction() - // When toggle override matches its default state, don't override flags. This helps - // users reset their feature overrides. - ToggleOverride.OVERRIDE_OFF -> - if (shouldToggleBeEnabledByDefault) false else flagFunction() - ToggleOverride.OVERRIDE_ON -> - if (shouldToggleBeEnabledByDefault) flagFunction() else true - } - } - - private fun getToggleOverride(context: Context): ToggleOverride { - val override = - cachedToggleOverride - ?: run { - val override = getToggleOverrideFromSystem(context) - // Cache toggle override the first time we encounter context. Override does not - // change with context, as context is just used to fetch Settings.Global - cachedToggleOverride = override - Log.d(TAG, "Toggle override initialized to: $override") - override - } - - return override - } - - private fun getToggleOverrideFromSystem(context: Context): ToggleOverride = - convertToToggleOverrideWithFallback( - Settings.Global.getInt( - context.contentResolver, - Settings.Global.DEVELOPMENT_OVERRIDE_DESKTOP_MODE_FEATURES, - ToggleOverride.OVERRIDE_UNSET.setting), - ToggleOverride.OVERRIDE_UNSET) - - /** - * Override state of desktop mode developer option toggle. - * - * @property setting The integer value that is associated with the developer option toggle - * override - */ - enum class ToggleOverride(val setting: Int) { - /** No override is set. */ - OVERRIDE_UNSET(-1), - /** Override to off. */ - OVERRIDE_OFF(0), - /** Override to on. */ - OVERRIDE_ON(1) - } - - companion object { - private const val TAG = "DesktopModeFlags" - - /** - * Local cache for toggle override, which is initialized once on its first access. It needs - * to be refreshed only on reboots as overridden state is expected to take effect on - * reboots. - */ - private var cachedToggleOverride: ToggleOverride? = null - - private val settingToToggleOverrideMap = ToggleOverride.entries.associateBy { it.setting } - - @JvmStatic - fun convertToToggleOverrideWithFallback( - overrideInt: Int, - fallbackOverride: ToggleOverride - ): ToggleOverride { - return settingToToggleOverrideMap[overrideInt] - ?: run { - Log.w(TAG, "Unknown toggleOverride int $overrideInt") - fallbackOverride - } - } - } -} diff --git a/libs/WindowManager/Shell/shared/src/com/android/wm/shell/shared/desktopmode/DesktopModeStatus.java b/libs/WindowManager/Shell/shared/src/com/android/wm/shell/shared/desktopmode/DesktopModeStatus.java index 83619efefd3b..647a555ad169 100644 --- a/libs/WindowManager/Shell/shared/src/com/android/wm/shell/shared/desktopmode/DesktopModeStatus.java +++ b/libs/WindowManager/Shell/shared/src/com/android/wm/shell/shared/desktopmode/DesktopModeStatus.java @@ -19,6 +19,7 @@ package com.android.wm.shell.shared.desktopmode; import android.annotation.NonNull; import android.content.Context; import android.os.SystemProperties; +import android.window.flags.DesktopModeFlags; import com.android.internal.R; import com.android.internal.annotations.VisibleForTesting; @@ -177,7 +178,7 @@ public class DesktopModeStatus { public static boolean canEnterDesktopMode(@NonNull Context context) { if (!isDeviceEligibleForDesktopMode(context)) return false; - return DesktopModeFlags.DESKTOP_WINDOWING_MODE.isEnabled(context); + return DesktopModeFlags.ENABLE_DESKTOP_WINDOWING_MODE.isTrue(); } /** diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/compatui/CompatUIWindowManager.java b/libs/WindowManager/Shell/src/com/android/wm/shell/compatui/CompatUIWindowManager.java index 17869e918d67..4d15605c756a 100644 --- a/libs/WindowManager/Shell/src/com/android/wm/shell/compatui/CompatUIWindowManager.java +++ b/libs/WindowManager/Shell/src/com/android/wm/shell/compatui/CompatUIWindowManager.java @@ -27,6 +27,7 @@ import android.graphics.Rect; import android.util.Pair; import android.view.LayoutInflater; import android.view.View; +import android.window.flags.DesktopModeFlags; import com.android.internal.annotations.VisibleForTesting; import com.android.window.flags.Flags; @@ -37,7 +38,6 @@ import com.android.wm.shell.common.SyncTransactionQueue; import com.android.wm.shell.compatui.CompatUIController.CompatUIHintsState; import com.android.wm.shell.compatui.api.CompatUIEvent; import com.android.wm.shell.compatui.impl.CompatUIEvents.SizeCompatRestartButtonAppeared; -import com.android.wm.shell.shared.desktopmode.DesktopModeFlags; import com.android.wm.shell.shared.desktopmode.DesktopModeStatus; import java.util.function.Consumer; @@ -83,7 +83,7 @@ class CompatUIWindowManager extends CompatUIWindowManagerAbstract { mCallback = callback; mHasSizeCompat = taskInfo.appCompatTaskInfo.isTopActivityInSizeCompat(); if (DesktopModeStatus.canEnterDesktopMode(context) - && DesktopModeFlags.DYNAMIC_INITIAL_BOUNDS.isEnabled(context)) { + && DesktopModeFlags.ENABLE_WINDOWING_DYNAMIC_INITIAL_BOUNDS.isTrue()) { // Don't show the SCM button for freeform tasks mHasSizeCompat &= !taskInfo.isFreeform(); } @@ -139,7 +139,7 @@ class CompatUIWindowManager extends CompatUIWindowManagerAbstract { final boolean prevHasSizeCompat = mHasSizeCompat; mHasSizeCompat = taskInfo.appCompatTaskInfo.isTopActivityInSizeCompat(); if (DesktopModeStatus.canEnterDesktopMode(mContext) - && DesktopModeFlags.DYNAMIC_INITIAL_BOUNDS.isEnabled(mContext)) { + && DesktopModeFlags.ENABLE_WINDOWING_DYNAMIC_INITIAL_BOUNDS.isTrue()) { // Don't show the SCM button for freeform tasks mHasSizeCompat &= !taskInfo.isFreeform(); } diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/dagger/WMShellBaseModule.java b/libs/WindowManager/Shell/src/com/android/wm/shell/dagger/WMShellBaseModule.java index 722fe1f59388..bec2ea58e106 100644 --- a/libs/WindowManager/Shell/src/com/android/wm/shell/dagger/WMShellBaseModule.java +++ b/libs/WindowManager/Shell/src/com/android/wm/shell/dagger/WMShellBaseModule.java @@ -1019,11 +1019,10 @@ public abstract class WMShellBaseModule { @WMSingleton @Provides static TaskStackTransitionObserver provideTaskStackTransitionObserver( - Context context, Lazy<Transitions> transitions, ShellInit shellInit ) { - return new TaskStackTransitionObserver(context, transitions, shellInit); + return new TaskStackTransitionObserver(transitions, shellInit); } // diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/dagger/WMShellModule.java b/libs/WindowManager/Shell/src/com/android/wm/shell/dagger/WMShellModule.java index 584f2721772a..80a9b675ebd8 100644 --- a/libs/WindowManager/Shell/src/com/android/wm/shell/dagger/WMShellModule.java +++ b/libs/WindowManager/Shell/src/com/android/wm/shell/dagger/WMShellModule.java @@ -16,7 +16,7 @@ package com.android.wm.shell.dagger; -import static com.android.wm.shell.shared.desktopmode.DesktopModeFlags.ENABLE_DESKTOP_WINDOWING_TASK_LIMIT; +import static android.window.flags.DesktopModeFlags.ENABLE_DESKTOP_WINDOWING_TASK_LIMIT; import android.annotation.NonNull; import android.annotation.Nullable; @@ -636,7 +636,7 @@ public abstract class WMShellModule { @ShellMainThread Handler handler) { int maxTaskLimit = DesktopModeStatus.getMaxTaskLimit(context); if (!DesktopModeStatus.canEnterDesktopMode(context) - || !ENABLE_DESKTOP_WINDOWING_TASK_LIMIT.isEnabled(context) + || !ENABLE_DESKTOP_WINDOWING_TASK_LIMIT.isTrue() || maxTaskLimit <= 0) { return Optional.empty(); } diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/desktopmode/DesktopTasksController.kt b/libs/WindowManager/Shell/src/com/android/wm/shell/desktopmode/DesktopTasksController.kt index b8ebbcdbfb9d..f3ae3ed45f41 100644 --- a/libs/WindowManager/Shell/src/com/android/wm/shell/desktopmode/DesktopTasksController.kt +++ b/libs/WindowManager/Shell/src/com/android/wm/shell/desktopmode/DesktopTasksController.kt @@ -84,8 +84,10 @@ import com.android.wm.shell.shared.TransitionUtil import com.android.wm.shell.shared.ShellSharedConstants import com.android.wm.shell.shared.annotations.ExternalThread import com.android.wm.shell.shared.annotations.ShellMainThread -import com.android.wm.shell.shared.desktopmode.DesktopModeFlags -import com.android.wm.shell.shared.desktopmode.DesktopModeFlags.WALLPAPER_ACTIVITY +import android.window.flags.DesktopModeFlags +import android.window.flags.DesktopModeFlags.DISABLE_NON_RESIZABLE_APP_SNAP_RESIZE +import android.window.flags.DesktopModeFlags.ENABLE_DESKTOP_WINDOWING_WALLPAPER_ACTIVITY +import android.window.flags.DesktopModeFlags.ENABLE_WINDOWING_DYNAMIC_INITIAL_BOUNDS import com.android.wm.shell.shared.desktopmode.DesktopModeStatus import com.android.wm.shell.shared.desktopmode.DesktopModeStatus.DESKTOP_DENSITY_OVERRIDE import com.android.wm.shell.shared.desktopmode.DesktopModeStatus.useDesktopOverrideDensity @@ -364,7 +366,7 @@ class DesktopTasksController( wct: WindowContainerTransaction = WindowContainerTransaction(), transitionSource: DesktopModeTransitionSource, ) { - if (DesktopModeFlags.MODALS_POLICY.isEnabled(context) + if (DesktopModeFlags.ENABLE_DESKTOP_WINDOWING_MODALS_POLICY.isTrue() && isTopActivityExemptFromDesktopWindowing(context, task)) { logW("Cannot enter desktop for taskId %d, ineligible top activity found", task.taskId) return @@ -642,7 +644,7 @@ class DesktopTasksController( if (taskBoundsBeforeMaximize != null) { destinationBounds.set(taskBoundsBeforeMaximize) } else { - if (DesktopModeFlags.DYNAMIC_INITIAL_BOUNDS.isEnabled(context)) { + if (ENABLE_WINDOWING_DYNAMIC_INITIAL_BOUNDS.isTrue()) { destinationBounds.set(calculateInitialBounds(displayLayout, taskInfo)) } else { destinationBounds.set(getDefaultDesktopTaskBounds(displayLayout)) @@ -796,7 +798,7 @@ class DesktopTasksController( dragStartBounds: Rect ) { releaseVisualIndicator() - if (!taskInfo.isResizeable && DesktopModeFlags.DISABLE_SNAP_RESIZE.isEnabled(context)) { + if (!taskInfo.isResizeable && DISABLE_NON_RESIZABLE_APP_SNAP_RESIZE.isTrue()) { interactionJankMonitor.begin( taskSurface, context, handler, CUJ_DESKTOP_MODE_SNAP_RESIZE, "drag_non_resizable" ) @@ -885,7 +887,8 @@ class DesktopTasksController( moveHomeTask(wct, toTop = true) // Currently, we only handle the desktop on the default display really. - if (displayId == DEFAULT_DISPLAY && WALLPAPER_ACTIVITY.isEnabled(context)) { + if (displayId == DEFAULT_DISPLAY + && ENABLE_DESKTOP_WINDOWING_WALLPAPER_ACTIVITY.isTrue()) { // Add translucent wallpaper activity to show the wallpaper underneath addWallpaperActivity(wct) } @@ -1084,11 +1087,11 @@ class DesktopTasksController( && taskRepository.isActiveTask(triggerTask.taskId)) private fun isIncompatibleTask(task: TaskInfo) = - DesktopModeFlags.MODALS_POLICY.isEnabled(context) + DesktopModeFlags.ENABLE_DESKTOP_WINDOWING_MODALS_POLICY.isTrue() && isTopActivityExemptFromDesktopWindowing(context, task) private fun shouldHandleTaskClosing(request: TransitionRequestInfo): Boolean { - return WALLPAPER_ACTIVITY.isEnabled(context) && + return ENABLE_DESKTOP_WINDOWING_WALLPAPER_ACTIVITY.isTrue() && TransitionUtil.isClosingType(request.type) && request.triggerTask != null } @@ -1210,7 +1213,7 @@ class DesktopTasksController( } // If task is already visible, it must have been handled already and added to desktop mode. // Cascade task only if it's not visible yet. - if (DesktopModeFlags.CASCADING_WINDOWS.isEnabled(context) + if (DesktopModeFlags.ENABLE_CASCADING_WINDOWS.isTrue() && !taskRepository.isVisibleTask(task.taskId)) { val displayLayout = displayController.getDisplayLayout(task.displayId) if (displayLayout != null) { @@ -1282,7 +1285,7 @@ class DesktopTasksController( } taskRepository.addClosingTask(task.displayId, task.taskId) // If a CLOSE or TO_BACK is triggered on a desktop task, remove the task. - if (DesktopModeFlags.BACK_NAVIGATION.isEnabled(context) && + if (DesktopModeFlags.ENABLE_DESKTOP_WINDOWING_BACK_NAVIGATION.isTrue() && taskRepository.isVisibleTask(task.taskId) ) { wct.removeTask(task.token) @@ -1311,13 +1314,13 @@ class DesktopTasksController( } else { WINDOWING_MODE_FREEFORM } - val initialBounds = if (DesktopModeFlags.DYNAMIC_INITIAL_BOUNDS.isEnabled(context)) { + val initialBounds = if (ENABLE_WINDOWING_DYNAMIC_INITIAL_BOUNDS.isTrue()) { calculateInitialBounds(displayLayout, taskInfo) } else { getDefaultDesktopTaskBounds(displayLayout) } - if (DesktopModeFlags.CASCADING_WINDOWS.isEnabled(context)) { + if (DesktopModeFlags.ENABLE_CASCADING_WINDOWS.isTrue()) { cascadeWindow(taskInfo, initialBounds, displayLayout) } diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/desktopmode/DesktopTasksLimiter.kt b/libs/WindowManager/Shell/src/com/android/wm/shell/desktopmode/DesktopTasksLimiter.kt index dae37f4926f5..d84349b1ce1f 100644 --- a/libs/WindowManager/Shell/src/com/android/wm/shell/desktopmode/DesktopTasksLimiter.kt +++ b/libs/WindowManager/Shell/src/com/android/wm/shell/desktopmode/DesktopTasksLimiter.kt @@ -38,7 +38,7 @@ import com.android.wm.shell.transition.Transitions.TransitionObserver * Limits the number of tasks shown in Desktop Mode. * * This class should only be used if - * [com.android.wm.shell.shared.desktopmode.DesktopModeFlags.ENABLE_DESKTOP_WINDOWING_TASK_LIMIT] + * [android.window.flags.DesktopModeFlags.ENABLE_DESKTOP_WINDOWING_TASK_LIMIT] * is enabled and [maxTasksLimit] is strictly greater than 0. */ class DesktopTasksLimiter ( diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/desktopmode/DesktopTasksTransitionObserver.kt b/libs/WindowManager/Shell/src/com/android/wm/shell/desktopmode/DesktopTasksTransitionObserver.kt index 74e53facf9c8..0841628853a3 100644 --- a/libs/WindowManager/Shell/src/com/android/wm/shell/desktopmode/DesktopTasksTransitionObserver.kt +++ b/libs/WindowManager/Shell/src/com/android/wm/shell/desktopmode/DesktopTasksTransitionObserver.kt @@ -25,7 +25,7 @@ import android.window.WindowContainerTransaction import com.android.internal.protolog.ProtoLog import com.android.wm.shell.ShellTaskOrganizer import com.android.wm.shell.protolog.ShellProtoLogGroup.WM_SHELL_DESKTOP_MODE -import com.android.wm.shell.shared.desktopmode.DesktopModeFlags.WALLPAPER_ACTIVITY +import android.window.flags.DesktopModeFlags.ENABLE_DESKTOP_WINDOWING_WALLPAPER_ACTIVITY import com.android.wm.shell.shared.desktopmode.DesktopModeStatus import com.android.wm.shell.sysui.ShellInit import com.android.wm.shell.transition.Transitions @@ -79,7 +79,7 @@ class DesktopTasksTransitionObserver( } private fun updateWallpaperToken(info: TransitionInfo) { - if (!WALLPAPER_ACTIVITY.isEnabled(context)) { + if (!ENABLE_DESKTOP_WINDOWING_WALLPAPER_ACTIVITY.isTrue()) { return } info.changes.forEach { change -> diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/recents/RecentTasksController.java b/libs/WindowManager/Shell/src/com/android/wm/shell/recents/RecentTasksController.java index a6e25a95e1eb..03ff1aac794c 100644 --- a/libs/WindowManager/Shell/src/com/android/wm/shell/recents/RecentTasksController.java +++ b/libs/WindowManager/Shell/src/com/android/wm/shell/recents/RecentTasksController.java @@ -38,6 +38,7 @@ import android.util.Slog; import android.util.SparseArray; import android.util.SparseIntArray; import android.window.WindowContainerToken; +import android.window.flags.DesktopModeFlags; import androidx.annotation.BinderThread; import androidx.annotation.NonNull; @@ -53,11 +54,9 @@ import com.android.wm.shell.common.TaskStackListenerCallback; import com.android.wm.shell.common.TaskStackListenerImpl; import com.android.wm.shell.desktopmode.DesktopModeTaskRepository; import com.android.wm.shell.protolog.ShellProtoLogGroup; -import com.android.wm.shell.recents.IRecentsAnimationRunner; import com.android.wm.shell.shared.GroupedRecentTaskInfo; import com.android.wm.shell.shared.annotations.ExternalThread; import com.android.wm.shell.shared.annotations.ShellMainThread; -import com.android.wm.shell.shared.desktopmode.DesktopModeFlags; import com.android.wm.shell.shared.desktopmode.DesktopModeStatus; import com.android.wm.shell.shared.split.SplitBounds; import com.android.wm.shell.sysui.ShellCommandHandler; @@ -356,7 +355,7 @@ public class RecentTasksController implements TaskStackListenerCallback, private void notifyTaskMovedToFront(ActivityManager.RunningTaskInfo taskInfo) { if (mListener == null - || !DesktopModeFlags.TASK_STACK_OBSERVER_IN_SHELL.isEnabled(mContext) + || !DesktopModeFlags.ENABLE_TASK_STACK_OBSERVER_IN_SHELL.isTrue() || taskInfo.realActivity == null) { return; } @@ -370,7 +369,7 @@ public class RecentTasksController implements TaskStackListenerCallback, private boolean shouldEnableRunningTasksForDesktopMode() { return mPcFeatureEnabled || (DesktopModeStatus.canEnterDesktopMode(mContext) - && DesktopModeFlags.TASKBAR_RUNNING_APPS.isEnabled(mContext)); + && DesktopModeFlags.ENABLE_DESKTOP_WINDOWING_TASKBAR_RUNNING_APPS.isTrue()); } @VisibleForTesting diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/recents/TaskStackTransitionObserver.kt b/libs/WindowManager/Shell/src/com/android/wm/shell/recents/TaskStackTransitionObserver.kt index 3a0bdb94e1a7..e5bfccf0682e 100644 --- a/libs/WindowManager/Shell/src/com/android/wm/shell/recents/TaskStackTransitionObserver.kt +++ b/libs/WindowManager/Shell/src/com/android/wm/shell/recents/TaskStackTransitionObserver.kt @@ -18,14 +18,13 @@ package com.android.wm.shell.recents import android.app.ActivityManager.RunningTaskInfo import android.app.WindowConfiguration.WINDOWING_MODE_FREEFORM -import android.content.Context import android.os.IBinder import android.util.ArrayMap import android.view.SurfaceControl import android.view.WindowManager import android.window.TransitionInfo import com.android.wm.shell.shared.TransitionUtil -import com.android.wm.shell.shared.desktopmode.DesktopModeFlags +import android.window.flags.DesktopModeFlags import com.android.wm.shell.sysui.ShellInit import com.android.wm.shell.transition.Transitions import dagger.Lazy @@ -38,7 +37,6 @@ import java.util.concurrent.Executor * TODO(346588978) Move split/pip signals here as well so that launcher don't need to handle it */ class TaskStackTransitionObserver( - private val context: Context, private val transitions: Lazy<Transitions>, shellInit: ShellInit ) : Transitions.TransitionObserver { @@ -64,7 +62,7 @@ class TaskStackTransitionObserver( startTransaction: SurfaceControl.Transaction, finishTransaction: SurfaceControl.Transaction ) { - if (DesktopModeFlags.TASK_STACK_OBSERVER_IN_SHELL.isEnabled(context)) { + if (DesktopModeFlags.ENABLE_TASK_STACK_OBSERVER_IN_SHELL.isTrue) { val taskInfoList = mutableListOf<RunningTaskInfo>() val transitionTypeList = mutableListOf<Int>() diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/windowdecor/CaptionWindowDecoration.java b/libs/WindowManager/Shell/src/com/android/wm/shell/windowdecor/CaptionWindowDecoration.java index 1539b5fb34e5..d0eba23f7d45 100644 --- a/libs/WindowManager/Shell/src/com/android/wm/shell/windowdecor/CaptionWindowDecoration.java +++ b/libs/WindowManager/Shell/src/com/android/wm/shell/windowdecor/CaptionWindowDecoration.java @@ -16,6 +16,8 @@ package com.android.wm.shell.windowdecor; +import static android.window.flags.DesktopModeFlags.ENABLE_WINDOWING_SCALED_RESIZING; + import static com.android.wm.shell.windowdecor.DragResizeWindowGeometry.getFineResizeCornerSize; import static com.android.wm.shell.windowdecor.DragResizeWindowGeometry.getLargeResizeCornerSize; import static com.android.wm.shell.windowdecor.DragResizeWindowGeometry.getResizeEdgeHandleSize; @@ -55,7 +57,6 @@ import com.android.wm.shell.common.DisplayLayout; import com.android.wm.shell.common.ShellExecutor; import com.android.wm.shell.common.SyncTransactionQueue; import com.android.wm.shell.shared.annotations.ShellBackgroundThread; -import com.android.wm.shell.shared.desktopmode.DesktopModeFlags; import com.android.wm.shell.windowdecor.extension.TaskInfoKt; import com.android.wm.shell.windowdecor.viewhost.WindowDecorViewHostSupplier; @@ -234,7 +235,7 @@ public class CaptionWindowDecoration extends WindowDecoration<WindowDecorLinearL boolean applyStartTransactionOnDraw, boolean setTaskCropAndPosition) { final boolean isFreeform = taskInfo.getWindowingMode() == WindowConfiguration.WINDOWING_MODE_FREEFORM; - final boolean isDragResizeable = DesktopModeFlags.SCALED_RESIZING.isEnabled(mContext) + final boolean isDragResizeable = ENABLE_WINDOWING_SCALED_RESIZING.isTrue() ? isFreeform : isFreeform && taskInfo.isResizeable; final WindowDecorLinearLayout oldRootView = mResult.mRootView; @@ -284,7 +285,7 @@ public class CaptionWindowDecoration extends WindowDecoration<WindowDecorLinearL final Resources res = mResult.mRootView.getResources(); mDragResizeListener.setGeometry(new DragResizeWindowGeometry(0 /* taskCornerRadius */, - new Size(mResult.mWidth, mResult.mHeight), getResizeEdgeHandleSize(mContext, res), + new Size(mResult.mWidth, mResult.mHeight), getResizeEdgeHandleSize(res), getResizeHandleEdgeInset(res), getFineResizeCornerSize(res), getLargeResizeCornerSize(res)), touchSlop); } diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/windowdecor/DesktopModeWindowDecorViewModel.java b/libs/WindowManager/Shell/src/com/android/wm/shell/windowdecor/DesktopModeWindowDecorViewModel.java index 75ea44d70fa4..c59d92912e80 100644 --- a/libs/WindowManager/Shell/src/com/android/wm/shell/windowdecor/DesktopModeWindowDecorViewModel.java +++ b/libs/WindowManager/Shell/src/com/android/wm/shell/windowdecor/DesktopModeWindowDecorViewModel.java @@ -84,6 +84,7 @@ import android.widget.Toast; import android.window.TaskSnapshot; import android.window.WindowContainerToken; import android.window.WindowContainerTransaction; +import android.window.flags.DesktopModeFlags; import androidx.annotation.Nullable; @@ -114,7 +115,6 @@ import com.android.wm.shell.desktopmode.WindowDecorCaptionHandleRepository; import com.android.wm.shell.freeform.FreeformTaskTransitionStarter; import com.android.wm.shell.shared.annotations.ShellBackgroundThread; import com.android.wm.shell.shared.annotations.ShellMainThread; -import com.android.wm.shell.shared.desktopmode.DesktopModeFlags; import com.android.wm.shell.shared.desktopmode.DesktopModeStatus; import com.android.wm.shell.shared.desktopmode.DesktopModeTransitionSource; import com.android.wm.shell.shared.split.SplitScreenConstants.SplitPosition; @@ -521,7 +521,7 @@ public class DesktopModeWindowDecorViewModel implements WindowDecorViewModel { } if (!decoration.mTaskInfo.isResizeable - && DesktopModeFlags.DISABLE_SNAP_RESIZE.isEnabled(mContext)) { + && DesktopModeFlags.DISABLE_NON_RESIZABLE_APP_SNAP_RESIZE.isTrue()) { Toast.makeText(mContext, R.string.desktop_mode_non_resizable_snap_text, Toast.LENGTH_SHORT).show(); } else { @@ -1373,7 +1373,7 @@ public class DesktopModeWindowDecorViewModel implements WindowDecorViewModel { && mSplitScreenController.isTaskRootOrStageRoot(taskInfo.taskId)) { return false; } - if (DesktopModeFlags.MODALS_POLICY.isEnabled(mContext) + if (DesktopModeFlags.ENABLE_DESKTOP_WINDOWING_MODALS_POLICY.isTrue() && isTopActivityExemptFromDesktopWindowing(mContext, taskInfo)) { return false; } @@ -1666,7 +1666,7 @@ public class DesktopModeWindowDecorViewModel implements WindowDecorViewModel { dragStartListener, transactionFactory); - if (DesktopModeFlags.SCALED_RESIZING.isEnabled(windowDecoration.mContext)) { + if (DesktopModeFlags.ENABLE_WINDOWING_SCALED_RESIZING.isTrue()) { return new FixedAspectRatioTaskPositionerDecorator(windowDecoration, taskPositioner); } diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/windowdecor/DesktopModeWindowDecoration.java b/libs/WindowManager/Shell/src/com/android/wm/shell/windowdecor/DesktopModeWindowDecoration.java index 6817f1df4873..bcad46339dc0 100644 --- a/libs/WindowManager/Shell/src/com/android/wm/shell/windowdecor/DesktopModeWindowDecoration.java +++ b/libs/WindowManager/Shell/src/com/android/wm/shell/windowdecor/DesktopModeWindowDecoration.java @@ -69,6 +69,7 @@ import android.view.WindowManager; import android.widget.ImageButton; import android.window.TaskSnapshot; import android.window.WindowContainerTransaction; +import android.window.flags.DesktopModeFlags; import com.android.internal.annotations.VisibleForTesting; import com.android.internal.policy.ScreenDecorationsUtils; @@ -89,7 +90,6 @@ import com.android.wm.shell.common.SyncTransactionQueue; import com.android.wm.shell.desktopmode.CaptionState; import com.android.wm.shell.desktopmode.WindowDecorCaptionHandleRepository; import com.android.wm.shell.shared.annotations.ShellBackgroundThread; -import com.android.wm.shell.shared.desktopmode.DesktopModeFlags; import com.android.wm.shell.shared.desktopmode.DesktopModeStatus; import com.android.wm.shell.shared.desktopmode.DesktopModeTransitionSource; import com.android.wm.shell.shared.desktopmode.ManageWindowsViewContainer; @@ -471,7 +471,7 @@ public class DesktopModeWindowDecoration extends WindowDecoration<WindowDecorLin } private void updateDragResizeListener(SurfaceControl oldDecorationSurface) { - if (!isDragResizable(mTaskInfo, mContext)) { + if (!isDragResizable(mTaskInfo)) { if (!mTaskInfo.positionInParent.equals(mPositionInParent)) { // We still want to track caption bar's exclusion region on a non-resizeable task. updateExclusionRegion(); @@ -505,16 +505,15 @@ public class DesktopModeWindowDecoration extends WindowDecoration<WindowDecorLin if (mDragResizeListener.setGeometry( new DragResizeWindowGeometry(mRelayoutParams.mCornerRadius, new Size(mResult.mWidth, mResult.mHeight), - getResizeEdgeHandleSize(mContext, res), getResizeHandleEdgeInset(res), + getResizeEdgeHandleSize(res), getResizeHandleEdgeInset(res), getFineResizeCornerSize(res), getLargeResizeCornerSize(res)), touchSlop) || !mTaskInfo.positionInParent.equals(mPositionInParent)) { updateExclusionRegion(); } } - private static boolean isDragResizable(ActivityManager.RunningTaskInfo taskInfo, - Context context) { - if (DesktopModeFlags.SCALED_RESIZING.isEnabled(context)) { + private static boolean isDragResizable(ActivityManager.RunningTaskInfo taskInfo) { + if (DesktopModeFlags.ENABLE_WINDOWING_SCALED_RESIZING.isTrue()) { return taskInfo.isFreeform(); } return taskInfo.isFreeform() && taskInfo.isResizeable; @@ -582,7 +581,7 @@ public class DesktopModeWindowDecoration extends WindowDecoration<WindowDecorLin } private void updateMaximizeMenu(SurfaceControl.Transaction startT) { - if (!isDragResizable(mTaskInfo, mContext) || !isMaximizeMenuActive()) { + if (!isDragResizable(mTaskInfo) || !isMaximizeMenuActive()) { return; } if (!mTaskInfo.isVisible()) { @@ -680,13 +679,13 @@ public class DesktopModeWindowDecoration extends WindowDecoration<WindowDecorLin // their custom content. relayoutParams.mInputFeatures |= WindowManager.LayoutParams.INPUT_FEATURE_SPY; } else { - if (ENABLE_CAPTION_COMPAT_INSET_FORCE_CONSUMPTION.isEnabled()) { + if (ENABLE_CAPTION_COMPAT_INSET_FORCE_CONSUMPTION.isTrue()) { // Force-consume the caption bar insets when the app tries to hide the caption. // This improves app compatibility of immersive apps. relayoutParams.mInsetSourceFlags |= FLAG_FORCE_CONSUMING; } } - if (ENABLE_CAPTION_COMPAT_INSET_FORCE_CONSUMPTION_ALWAYS.isEnabled()) { + if (ENABLE_CAPTION_COMPAT_INSET_FORCE_CONSUMPTION_ALWAYS.isTrue()) { // Always force-consume the caption bar insets for maximum app compatibility, // including non-immersive apps that just don't handle caption insets properly. relayoutParams.mInsetSourceFlags |= FLAG_FORCE_CONSUMING_OPAQUE_CAPTION_BAR; @@ -732,7 +731,7 @@ public class DesktopModeWindowDecoration extends WindowDecoration<WindowDecorLin // TODO(b/301119301): consider moving the config data needed for diffs to relayout params // instead of using a whole Configuration as a parameter. final Configuration windowDecorConfig = new Configuration(); - if (DesktopModeFlags.APP_HEADER_WITH_TASK_DENSITY.isEnabled(context) && isAppHeader) { + if (DesktopModeFlags.ENABLE_APP_HEADER_WITH_TASK_DENSITY.isTrue() && isAppHeader) { // Should match the density of the task. The task may have had its density overridden // to be different that SysUI's. windowDecorConfig.setTo(taskInfo.configuration); diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/windowdecor/DragPositioningCallbackUtility.java b/libs/WindowManager/Shell/src/com/android/wm/shell/windowdecor/DragPositioningCallbackUtility.java index cad34621c82a..38f9cfaca7ae 100644 --- a/libs/WindowManager/Shell/src/com/android/wm/shell/windowdecor/DragPositioningCallbackUtility.java +++ b/libs/WindowManager/Shell/src/com/android/wm/shell/windowdecor/DragPositioningCallbackUtility.java @@ -27,12 +27,12 @@ import android.graphics.PointF; import android.graphics.Rect; import android.util.DisplayMetrics; import android.view.SurfaceControl; +import android.window.flags.DesktopModeFlags; import androidx.annotation.NonNull; import com.android.wm.shell.R; import com.android.wm.shell.common.DisplayController; -import com.android.wm.shell.shared.desktopmode.DesktopModeFlags; import com.android.wm.shell.shared.desktopmode.DesktopModeStatus; /** @@ -145,7 +145,7 @@ public class DragPositioningCallbackUtility { // If the application is unresizeable and any bounds have been set back to their old // location or to a stable bound edge, reset all the bounds to maintain the applications // aspect ratio. - if (DesktopModeFlags.SCALED_RESIZING.isEnabled(windowDecoration.mDecorWindowContext) + if (DesktopModeFlags.ENABLE_WINDOWING_SCALED_RESIZING.isTrue() && !isAspectRatioMaintained && !windowDecoration.mTaskInfo.isResizeable) { repositionTaskBounds.top = oldTop; repositionTaskBounds.bottom = oldBottom; @@ -275,7 +275,7 @@ public class DragPositioningCallbackUtility { private static boolean isSizeConstraintForDesktopModeEnabled(Context context) { return DesktopModeStatus.canEnterDesktopMode(context) - && DesktopModeFlags.SIZE_CONSTRAINTS.isEnabled(context); + && DesktopModeFlags.ENABLE_DESKTOP_WINDOWING_SIZE_CONSTRAINTS.isTrue(); } interface DragStartListener { diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/windowdecor/DragResizeInputListener.java b/libs/WindowManager/Shell/src/com/android/wm/shell/windowdecor/DragResizeInputListener.java index b5ed32bbd4e9..4ff394e2b1a9 100644 --- a/libs/WindowManager/Shell/src/com/android/wm/shell/windowdecor/DragResizeInputListener.java +++ b/libs/WindowManager/Shell/src/com/android/wm/shell/windowdecor/DragResizeInputListener.java @@ -183,7 +183,7 @@ class DragResizeInputListener implements AutoCloseable { mTouchRegion.setEmpty(); // Apply the geometry to the touch region. - geometry.union(mContext, mTouchRegion); + geometry.union(mTouchRegion); mInputEventReceiver.setGeometry(geometry); mInputEventReceiver.setTouchRegion(mTouchRegion); @@ -358,7 +358,7 @@ class DragResizeInputListener implements AutoCloseable { */ @NonNull Region getCornersRegion() { Region region = new Region(); - mDragResizeWindowGeometry.union(mContext, region); + mDragResizeWindowGeometry.union(region); return region; } @@ -409,8 +409,8 @@ class DragResizeInputListener implements AutoCloseable { float y = e.getY(0); float rawX = e.getRawX(0); float rawY = e.getRawY(0); - final int ctrlType = mDragResizeWindowGeometry.calculateCtrlType(mContext, - isEventFromTouchscreen(e), isEdgeResizePermitted(mContext, e), x, + final int ctrlType = mDragResizeWindowGeometry.calculateCtrlType( + isEventFromTouchscreen(e), isEdgeResizePermitted(e), x, y); ProtoLog.d(WM_SHELL_DESKTOP_MODE, "%s: Handling action down, update ctrlType to %d", TAG, ctrlType); @@ -501,8 +501,8 @@ class DragResizeInputListener implements AutoCloseable { // Since we are handling cursor, we know that this is not a touchscreen event, and // that edge resizing should always be allowed. @DragPositioningCallback.CtrlType int ctrlType = - mDragResizeWindowGeometry.calculateCtrlType(mContext, /* isTouchscreen= */ - false, /* isEdgeResizePermitted= */ true, x, y); + mDragResizeWindowGeometry.calculateCtrlType(/* isTouchscreen= */ false, + /* isEdgeResizePermitted= */ true, x, y); int cursorType = PointerIcon.TYPE_DEFAULT; switch (ctrlType) { diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/windowdecor/DragResizeWindowGeometry.java b/libs/WindowManager/Shell/src/com/android/wm/shell/windowdecor/DragResizeWindowGeometry.java index 6dedf6da3ab7..d726f5083eb6 100644 --- a/libs/WindowManager/Shell/src/com/android/wm/shell/windowdecor/DragResizeWindowGeometry.java +++ b/libs/WindowManager/Shell/src/com/android/wm/shell/windowdecor/DragResizeWindowGeometry.java @@ -18,8 +18,8 @@ package com.android.wm.shell.windowdecor; import static android.view.InputDevice.SOURCE_MOUSE; import static android.view.InputDevice.SOURCE_TOUCHSCREEN; +import static android.window.flags.DesktopModeFlags.ENABLE_WINDOWING_EDGE_DRAG_RESIZE; -import static com.android.wm.shell.shared.desktopmode.DesktopModeFlags.EDGE_DRAG_RESIZE; import static com.android.wm.shell.windowdecor.DragPositioningCallback.CTRL_TYPE_BOTTOM; import static com.android.wm.shell.windowdecor.DragPositioningCallback.CTRL_TYPE_LEFT; import static com.android.wm.shell.windowdecor.DragPositioningCallback.CTRL_TYPE_RIGHT; @@ -76,8 +76,8 @@ final class DragResizeWindowGeometry { /** * Returns the resource value to use for the resize handle on the edge of the window. */ - static int getResizeEdgeHandleSize(@NonNull Context context, @NonNull Resources res) { - return EDGE_DRAG_RESIZE.isEnabled(context) + static int getResizeEdgeHandleSize(@NonNull Resources res) { + return ENABLE_WINDOWING_EDGE_DRAG_RESIZE.isTrue() ? res.getDimensionPixelSize(R.dimen.freeform_edge_handle_outset) : res.getDimensionPixelSize(R.dimen.freeform_resize_handle); } @@ -118,11 +118,11 @@ final class DragResizeWindowGeometry { * Returns the union of all regions that can be touched for drag resizing; the corners window * and window edges. */ - void union(@NonNull Context context, @NonNull Region region) { + void union(@NonNull Region region) { // Apply the edge resize regions. mTaskEdges.union(region); - if (EDGE_DRAG_RESIZE.isEnabled(context)) { + if (ENABLE_WINDOWING_EDGE_DRAG_RESIZE.isTrue()) { // Apply the corners as well for the larger corners, to ensure we capture all possible // touches. mLargeTaskCorners.union(region); @@ -140,7 +140,7 @@ final class DragResizeWindowGeometry { final float x = e.getX(0) + offset.x; final float y = e.getY(0) + offset.y; - if (EDGE_DRAG_RESIZE.isEnabled(context)) { + if (ENABLE_WINDOWING_EDGE_DRAG_RESIZE.isTrue()) { // First check if touch falls within a corner. // Large corner bounds are used for course input like touch, otherwise fine bounds. boolean result = isEventFromTouchscreen(e) @@ -148,7 +148,7 @@ final class DragResizeWindowGeometry { : isInCornerBounds(mFineTaskCorners, x, y); // Check if touch falls within the edge resize handle. Limit edge resizing to stylus and // mouse input. - if (!result && isEdgeResizePermitted(context, e)) { + if (!result && isEdgeResizePermitted(e)) { result = isInEdgeResizeBounds(x, y); } return result; @@ -164,8 +164,8 @@ final class DragResizeWindowGeometry { return (e.getSource() & SOURCE_TOUCHSCREEN) == SOURCE_TOUCHSCREEN; } - static boolean isEdgeResizePermitted(@NonNull Context context, @NonNull MotionEvent e) { - if (EDGE_DRAG_RESIZE.isEnabled(context)) { + static boolean isEdgeResizePermitted(@NonNull MotionEvent e) { + if (ENABLE_WINDOWING_EDGE_DRAG_RESIZE.isTrue()) { return e.getToolType(0) == MotionEvent.TOOL_TYPE_STYLUS || e.getToolType(0) == MotionEvent.TOOL_TYPE_MOUSE // Touchpad input @@ -193,9 +193,8 @@ final class DragResizeWindowGeometry { * resize region. */ @DragPositioningCallback.CtrlType - int calculateCtrlType(@NonNull Context context, boolean isTouchscreen, - boolean isEdgeResizePermitted, float x, float y) { - if (EDGE_DRAG_RESIZE.isEnabled(context)) { + int calculateCtrlType(boolean isTouchscreen, boolean isEdgeResizePermitted, float x, float y) { + if (ENABLE_WINDOWING_EDGE_DRAG_RESIZE.isTrue()) { // First check if touch falls within a corner. // Large corner bounds are used for course input like touch, otherwise fine bounds. int ctrlType = isTouchscreen diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/windowdecor/MaximizeButtonView.kt b/libs/WindowManager/Shell/src/com/android/wm/shell/windowdecor/MaximizeButtonView.kt index 4faed01e9e82..2d97dc06cf89 100644 --- a/libs/WindowManager/Shell/src/com/android/wm/shell/windowdecor/MaximizeButtonView.kt +++ b/libs/WindowManager/Shell/src/com/android/wm/shell/windowdecor/MaximizeButtonView.kt @@ -32,7 +32,7 @@ import androidx.core.animation.doOnEnd import androidx.core.animation.doOnStart import androidx.core.content.ContextCompat import com.android.wm.shell.R -import com.android.wm.shell.shared.desktopmode.DesktopModeFlags +import android.window.flags.DesktopModeFlags private const val OPEN_MAXIMIZE_MENU_DELAY_ON_HOVER_MS = 350 private const val MAX_DRAWABLE_ALPHA = 255 @@ -108,7 +108,7 @@ class MaximizeButtonView( baseForegroundColor: Int? = null, rippleDrawable: RippleDrawable? = null ) { - if (DesktopModeFlags.THEMED_APP_HEADERS.isEnabled(context)) { + if (DesktopModeFlags.ENABLE_THEMED_APP_HEADERS.isTrue()) { requireNotNull(iconForegroundColor) { "Icon foreground color must be non-null" } requireNotNull(baseForegroundColor) { "Base foreground color must be non-null" } requireNotNull(rippleDrawable) { "Ripple drawable must be non-null" } diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/windowdecor/viewholder/AppHeaderViewHolder.kt b/libs/WindowManager/Shell/src/com/android/wm/shell/windowdecor/viewholder/AppHeaderViewHolder.kt index 4a8cabca98cf..af6a819bb705 100644 --- a/libs/WindowManager/Shell/src/com/android/wm/shell/windowdecor/viewholder/AppHeaderViewHolder.kt +++ b/libs/WindowManager/Shell/src/com/android/wm/shell/windowdecor/viewholder/AppHeaderViewHolder.kt @@ -47,7 +47,7 @@ import com.android.internal.R.attr.materialColorSurfaceContainerLow import com.android.internal.R.attr.materialColorSurfaceDim import com.android.window.flags.Flags.enableMinimizeButton import com.android.wm.shell.R -import com.android.wm.shell.shared.desktopmode.DesktopModeFlags +import android.window.flags.DesktopModeFlags import com.android.wm.shell.windowdecor.MaximizeButtonView import com.android.wm.shell.windowdecor.common.DecorThemeUtil import com.android.wm.shell.windowdecor.common.OPACITY_100 @@ -157,7 +157,7 @@ class AppHeaderViewHolder( height: Int, isCaptionVisible: Boolean ) { - if (DesktopModeFlags.THEMED_APP_HEADERS.isEnabled(context)) { + if (DesktopModeFlags.ENABLE_THEMED_APP_HEADERS.isTrue()) { bindDataWithThemedHeaders(taskInfo) } else { bindDataLegacy(taskInfo) diff --git a/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/recents/TaskStackTransitionObserverTest.kt b/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/recents/TaskStackTransitionObserverTest.kt index bc9b44e59d89..0e5efa650cc4 100644 --- a/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/recents/TaskStackTransitionObserverTest.kt +++ b/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/recents/TaskStackTransitionObserverTest.kt @@ -18,7 +18,6 @@ package com.android.wm.shell.recents import android.app.ActivityManager import android.app.WindowConfiguration -import android.content.Context import android.os.IBinder import android.platform.test.annotations.EnableFlags import android.platform.test.flag.junit.SetFlagsRule @@ -60,7 +59,6 @@ class TaskStackTransitionObserverTest { @JvmField @Rule val setFlagsRule = SetFlagsRule() - @Mock private lateinit var context: Context @Mock private lateinit var shellInit: ShellInit @Mock lateinit var testExecutor: ShellExecutor @Mock private lateinit var transitionsLazy: Lazy<Transitions> @@ -74,7 +72,7 @@ class TaskStackTransitionObserverTest { MockitoAnnotations.initMocks(this) shellInit = Mockito.spy(ShellInit(testExecutor)) whenever(transitionsLazy.get()).thenReturn(transitions) - transitionObserver = TaskStackTransitionObserver(context, transitionsLazy, shellInit) + transitionObserver = TaskStackTransitionObserver(transitionsLazy, shellInit) if (Transitions.ENABLE_SHELL_TRANSITIONS) { val initRunnableCaptor = ArgumentCaptor.forClass(Runnable::class.java) verify(shellInit) diff --git a/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/shared/desktopmode/DesktopModeFlagsTest.kt b/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/shared/desktopmode/DesktopModeFlagsTest.kt deleted file mode 100644 index 571bdd4ea32f..000000000000 --- a/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/shared/desktopmode/DesktopModeFlagsTest.kt +++ /dev/null @@ -1,347 +0,0 @@ -/* - * Copyright (C) 2024 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package com.android.wm.shell.shared.desktopmode - -import android.platform.test.annotations.DisableFlags -import android.platform.test.annotations.EnableFlags -import android.platform.test.flag.junit.SetFlagsRule -import android.provider.Settings -import android.testing.AndroidTestingRunner -import androidx.test.filters.SmallTest -import com.android.window.flags.Flags.FLAG_ENABLE_DESKTOP_WINDOWING_MODE -import com.android.window.flags.Flags.FLAG_ENABLE_DESKTOP_WINDOWING_WALLPAPER_ACTIVITY -import com.android.window.flags.Flags.FLAG_SHOW_DESKTOP_WINDOWING_DEV_OPTION -import com.android.wm.shell.ShellTestCase -import com.android.wm.shell.shared.desktopmode.DesktopModeFlags.Companion.convertToToggleOverrideWithFallback -import com.android.wm.shell.shared.desktopmode.DesktopModeFlags.DESKTOP_WINDOWING_MODE -import com.android.wm.shell.shared.desktopmode.DesktopModeFlags.ToggleOverride.OVERRIDE_OFF -import com.android.wm.shell.shared.desktopmode.DesktopModeFlags.ToggleOverride.OVERRIDE_ON -import com.android.wm.shell.shared.desktopmode.DesktopModeFlags.ToggleOverride.OVERRIDE_UNSET -import com.android.wm.shell.shared.desktopmode.DesktopModeFlags.WALLPAPER_ACTIVITY -import com.google.common.truth.Truth.assertThat -import org.junit.After -import org.junit.Rule -import org.junit.Test -import org.junit.runner.RunWith - -/** - * Test class for [DesktopModeFlags] - * - * Usage: atest WMShellUnitTests:DesktopModeFlagsTest - */ -@SmallTest -@RunWith(AndroidTestingRunner::class) -class DesktopModeFlagsTest : ShellTestCase() { - - @JvmField @Rule val setFlagsRule = SetFlagsRule() - - @After - fun tearDown() { - resetToggleOverrideCache() - } - - // TODO(b/348193756): Add tests - // isEnabled_flagNotOverridable_overrideOff_featureFlagOn_returnsTrue and - // isEnabled_flagNotOverridable_overrideOn_featureFlagOff_returnsFalse after adding non - // overridable flags to DesktopModeFlags. - - @Test - @DisableFlags(FLAG_SHOW_DESKTOP_WINDOWING_DEV_OPTION) - @EnableFlags(FLAG_ENABLE_DESKTOP_WINDOWING_MODE) - fun isEnabled_devOptionFlagDisabled_overrideOff_featureFlagOn_returnsTrue() { - setOverride(OVERRIDE_OFF.setting) - - // In absence of dev options, follow flag - assertThat(DESKTOP_WINDOWING_MODE.isEnabled(mContext)).isTrue() - } - - @Test - @DisableFlags(FLAG_SHOW_DESKTOP_WINDOWING_DEV_OPTION, FLAG_ENABLE_DESKTOP_WINDOWING_MODE) - fun isEnabled_devOptionFlagDisabled_overrideOn_featureFlagOff_returnsFalse() { - setOverride(OVERRIDE_ON.setting) - - // In absence of dev options, follow flag - assertThat(DESKTOP_WINDOWING_MODE.isEnabled(mContext)).isFalse() - } - - @Test - @EnableFlags(FLAG_SHOW_DESKTOP_WINDOWING_DEV_OPTION, FLAG_ENABLE_DESKTOP_WINDOWING_MODE) - fun isEnabled_overrideUnset_featureFlagOn_returnsTrue() { - setOverride(OVERRIDE_UNSET.setting) - - // For overridableFlag, for unset overrides, follow flag - assertThat(DESKTOP_WINDOWING_MODE.isEnabled(mContext)).isTrue() - } - - @Test - @EnableFlags(FLAG_SHOW_DESKTOP_WINDOWING_DEV_OPTION) - @DisableFlags(FLAG_ENABLE_DESKTOP_WINDOWING_MODE) - fun isEnabled_overrideUnset_featureFlagOff_returnsFalse() { - setOverride(OVERRIDE_UNSET.setting) - - // For overridableFlag, for unset overrides, follow flag - assertThat(DESKTOP_WINDOWING_MODE.isEnabled(mContext)).isFalse() - } - - @Test - @EnableFlags(FLAG_SHOW_DESKTOP_WINDOWING_DEV_OPTION, FLAG_ENABLE_DESKTOP_WINDOWING_MODE) - fun isEnabled_noOverride_featureFlagOn_returnsTrue() { - setOverride(null) - - // For overridableFlag, in absence of overrides, follow flag - assertThat(DESKTOP_WINDOWING_MODE.isEnabled(mContext)).isTrue() - } - - @Test - @EnableFlags(FLAG_SHOW_DESKTOP_WINDOWING_DEV_OPTION) - @DisableFlags(FLAG_ENABLE_DESKTOP_WINDOWING_MODE) - fun isEnabled_noOverride_featureFlagOff_returnsFalse() { - setOverride(null) - - // For overridableFlag, in absence of overrides, follow flag - assertThat(DESKTOP_WINDOWING_MODE.isEnabled(mContext)).isFalse() - } - - @Test - @EnableFlags(FLAG_SHOW_DESKTOP_WINDOWING_DEV_OPTION, FLAG_ENABLE_DESKTOP_WINDOWING_MODE) - fun isEnabled_unrecognizableOverride_featureFlagOn_returnsTrue() { - setOverride(-2) - - // For overridableFlag, for recognizable overrides, follow flag - assertThat(DESKTOP_WINDOWING_MODE.isEnabled(mContext)).isTrue() - } - - @Test - @EnableFlags(FLAG_SHOW_DESKTOP_WINDOWING_DEV_OPTION) - @DisableFlags(FLAG_ENABLE_DESKTOP_WINDOWING_MODE) - fun isEnabled_unrecognizableOverride_featureFlagOff_returnsFalse() { - setOverride(-2) - - // For overridableFlag, for recognizable overrides, follow flag - assertThat(DESKTOP_WINDOWING_MODE.isEnabled(mContext)).isFalse() - } - - @Test - @EnableFlags(FLAG_SHOW_DESKTOP_WINDOWING_DEV_OPTION, FLAG_ENABLE_DESKTOP_WINDOWING_MODE) - fun isEnabled_overrideOff_featureFlagOn_returnsFalse() { - setOverride(OVERRIDE_OFF.setting) - - // For overridableFlag, follow override if they exist - assertThat(DESKTOP_WINDOWING_MODE.isEnabled(mContext)).isFalse() - } - - @Test - @EnableFlags(FLAG_SHOW_DESKTOP_WINDOWING_DEV_OPTION) - @DisableFlags(FLAG_ENABLE_DESKTOP_WINDOWING_MODE) - fun isEnabled_overrideOn_featureFlagOff_returnsTrue() { - setOverride(OVERRIDE_ON.setting) - - // For overridableFlag, follow override if they exist - assertThat(DESKTOP_WINDOWING_MODE.isEnabled(mContext)).isTrue() - } - - @Test - @EnableFlags(FLAG_SHOW_DESKTOP_WINDOWING_DEV_OPTION, FLAG_ENABLE_DESKTOP_WINDOWING_MODE) - fun isEnabled_overrideOffThenOn_featureFlagOn_returnsFalseAndFalse() { - setOverride(OVERRIDE_OFF.setting) - - // For overridableFlag, follow override if they exist - assertThat(DESKTOP_WINDOWING_MODE.isEnabled(mContext)).isFalse() - - setOverride(OVERRIDE_ON.setting) - - // Keep overrides constant through the process - assertThat(DESKTOP_WINDOWING_MODE.isEnabled(mContext)).isFalse() - } - - @Test - @EnableFlags(FLAG_SHOW_DESKTOP_WINDOWING_DEV_OPTION) - @DisableFlags(FLAG_ENABLE_DESKTOP_WINDOWING_MODE) - fun isEnabled_overrideOnThenOff_featureFlagOff_returnsTrueAndTrue() { - setOverride(OVERRIDE_ON.setting) - - // For overridableFlag, follow override if they exist - assertThat(DESKTOP_WINDOWING_MODE.isEnabled(mContext)).isTrue() - - setOverride(OVERRIDE_OFF.setting) - - // Keep overrides constant through the process - assertThat(DESKTOP_WINDOWING_MODE.isEnabled(mContext)).isTrue() - } - - @Test - @EnableFlags( - FLAG_SHOW_DESKTOP_WINDOWING_DEV_OPTION, - FLAG_ENABLE_DESKTOP_WINDOWING_MODE, - FLAG_ENABLE_DESKTOP_WINDOWING_WALLPAPER_ACTIVITY) - fun isEnabled_dwFlagEnabled_overrideUnset_featureFlagOn_returnsTrue() { - setOverride(OVERRIDE_UNSET.setting) - - // For unset overrides, follow flag - assertThat(WALLPAPER_ACTIVITY.isEnabled(mContext)).isTrue() - } - - @Test - @EnableFlags(FLAG_SHOW_DESKTOP_WINDOWING_DEV_OPTION, FLAG_ENABLE_DESKTOP_WINDOWING_MODE) - @DisableFlags(FLAG_ENABLE_DESKTOP_WINDOWING_WALLPAPER_ACTIVITY) - fun isEnabled_dwFlagEnabled_overrideUnset_featureFlagOff_returnsFalse() { - setOverride(OVERRIDE_UNSET.setting) - - // For unset overrides, follow flag - assertThat(WALLPAPER_ACTIVITY.isEnabled(mContext)).isFalse() - } - - @Test - @EnableFlags( - FLAG_SHOW_DESKTOP_WINDOWING_DEV_OPTION, - FLAG_ENABLE_DESKTOP_WINDOWING_MODE, - FLAG_ENABLE_DESKTOP_WINDOWING_WALLPAPER_ACTIVITY) - fun isEnabled_dwFlagEnabled_overrideOn_featureFlagOn_returnsTrue() { - setOverride(OVERRIDE_ON.setting) - - // When toggle override matches its default state (dw flag), don't override flags - assertThat(WALLPAPER_ACTIVITY.isEnabled(mContext)).isTrue() - } - - @Test - @EnableFlags(FLAG_SHOW_DESKTOP_WINDOWING_DEV_OPTION, FLAG_ENABLE_DESKTOP_WINDOWING_MODE) - @DisableFlags(FLAG_ENABLE_DESKTOP_WINDOWING_WALLPAPER_ACTIVITY) - fun isEnabled_dwFlagEnabled_overrideOn_featureFlagOff_returnFalse() { - setOverride(OVERRIDE_ON.setting) - - // When toggle override matches its default state (dw flag), don't override flags - assertThat(WALLPAPER_ACTIVITY.isEnabled(mContext)).isFalse() - } - - @Test - @EnableFlags( - FLAG_SHOW_DESKTOP_WINDOWING_DEV_OPTION, - FLAG_ENABLE_DESKTOP_WINDOWING_MODE, - FLAG_ENABLE_DESKTOP_WINDOWING_WALLPAPER_ACTIVITY) - fun isEnabled_dwFlagEnabled_overrideOff_featureFlagOn_returnsFalse() { - setOverride(OVERRIDE_OFF.setting) - - // Follow override if they exist, and is not equal to default toggle state (dw flag) - assertThat(WALLPAPER_ACTIVITY.isEnabled(mContext)).isFalse() - } - - @Test - @EnableFlags(FLAG_SHOW_DESKTOP_WINDOWING_DEV_OPTION, FLAG_ENABLE_DESKTOP_WINDOWING_MODE) - @DisableFlags(FLAG_ENABLE_DESKTOP_WINDOWING_WALLPAPER_ACTIVITY) - fun isEnabled_dwFlagEnabled_overrideOff_featureFlagOff_returnsFalse() { - setOverride(OVERRIDE_OFF.setting) - - // Follow override if they exist, and is not equal to default toggle state (dw flag) - assertThat(WALLPAPER_ACTIVITY.isEnabled(mContext)).isFalse() - } - - @Test - @EnableFlags( - FLAG_SHOW_DESKTOP_WINDOWING_DEV_OPTION, FLAG_ENABLE_DESKTOP_WINDOWING_WALLPAPER_ACTIVITY) - @DisableFlags(FLAG_ENABLE_DESKTOP_WINDOWING_MODE) - fun isEnabled_dwFlagDisabled_overrideUnset_featureFlagOn_returnsTrue() { - setOverride(OVERRIDE_UNSET.setting) - - // For unset overrides, follow flag - assertThat(WALLPAPER_ACTIVITY.isEnabled(mContext)).isTrue() - } - - @Test - @EnableFlags(FLAG_SHOW_DESKTOP_WINDOWING_DEV_OPTION) - @DisableFlags( - FLAG_ENABLE_DESKTOP_WINDOWING_MODE, FLAG_ENABLE_DESKTOP_WINDOWING_WALLPAPER_ACTIVITY) - fun isEnabled_dwFlagDisabled_overrideUnset_featureFlagOff_returnsFalse() { - setOverride(OVERRIDE_UNSET.setting) - - // For unset overrides, follow flag - assertThat(WALLPAPER_ACTIVITY.isEnabled(mContext)).isFalse() - } - - @Test - @EnableFlags( - FLAG_SHOW_DESKTOP_WINDOWING_DEV_OPTION, FLAG_ENABLE_DESKTOP_WINDOWING_WALLPAPER_ACTIVITY) - @DisableFlags(FLAG_ENABLE_DESKTOP_WINDOWING_MODE) - fun isEnabled_dwFlagDisabled_overrideOn_featureFlagOn_returnsTrue() { - setOverride(OVERRIDE_ON.setting) - - // Follow override if they exist, and is not equal to default toggle state (dw flag) - assertThat(WALLPAPER_ACTIVITY.isEnabled(mContext)).isTrue() - } - - @Test - @EnableFlags(FLAG_SHOW_DESKTOP_WINDOWING_DEV_OPTION) - @DisableFlags( - FLAG_ENABLE_DESKTOP_WINDOWING_MODE, FLAG_ENABLE_DESKTOP_WINDOWING_WALLPAPER_ACTIVITY) - fun isEnabled_dwFlagDisabled_overrideOn_featureFlagOff_returnTrue() { - setOverride(OVERRIDE_ON.setting) - - // Follow override if they exist, and is not equal to default toggle state (dw flag) - assertThat(WALLPAPER_ACTIVITY.isEnabled(mContext)).isTrue() - } - - @Test - @EnableFlags( - FLAG_SHOW_DESKTOP_WINDOWING_DEV_OPTION, FLAG_ENABLE_DESKTOP_WINDOWING_WALLPAPER_ACTIVITY) - @DisableFlags(FLAG_ENABLE_DESKTOP_WINDOWING_MODE) - fun isEnabled_dwFlagDisabled_overrideOff_featureFlagOn_returnsTrue() { - setOverride(OVERRIDE_OFF.setting) - - // When toggle override matches its default state (dw flag), don't override flags - assertThat(WALLPAPER_ACTIVITY.isEnabled(mContext)).isTrue() - } - - @Test - @EnableFlags(FLAG_SHOW_DESKTOP_WINDOWING_DEV_OPTION) - @DisableFlags( - FLAG_ENABLE_DESKTOP_WINDOWING_MODE, FLAG_ENABLE_DESKTOP_WINDOWING_WALLPAPER_ACTIVITY) - fun isEnabled_dwFlagDisabled_overrideOff_featureFlagOff_returnsFalse() { - setOverride(OVERRIDE_OFF.setting) - - // When toggle override matches its default state (dw flag), don't override flags - assertThat(WALLPAPER_ACTIVITY.isEnabled(mContext)).isFalse() - } - - @Test - fun convertToToggleOverrideWithFallback_validInt_returnsToggleOverride() { - assertThat(convertToToggleOverrideWithFallback(0, OVERRIDE_UNSET)).isEqualTo(OVERRIDE_OFF) - assertThat(convertToToggleOverrideWithFallback(1, OVERRIDE_UNSET)).isEqualTo(OVERRIDE_ON) - assertThat(convertToToggleOverrideWithFallback(-1, OVERRIDE_ON)).isEqualTo(OVERRIDE_UNSET) - } - - @Test - fun convertToToggleOverrideWithFallback_invalidInt_returnsFallback() { - assertThat(convertToToggleOverrideWithFallback(2, OVERRIDE_ON)).isEqualTo(OVERRIDE_ON) - assertThat(convertToToggleOverrideWithFallback(-2, OVERRIDE_UNSET)).isEqualTo(OVERRIDE_UNSET) - } - - private fun setOverride(setting: Int?) { - val contentResolver = mContext.contentResolver - val key = Settings.Global.DEVELOPMENT_OVERRIDE_DESKTOP_MODE_FEATURES - if (setting == null) { - Settings.Global.putString(contentResolver, key, null) - } else { - Settings.Global.putInt(contentResolver, key, setting) - } - } - - private fun resetToggleOverrideCache() { - val cachedToggleOverride = - DesktopModeFlags::class.java.getDeclaredField("cachedToggleOverride") - cachedToggleOverride.isAccessible = true - cachedToggleOverride.set(null, null) - } -} diff --git a/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/shared/desktopmode/OWNERS b/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/shared/desktopmode/OWNERS deleted file mode 100644 index 2fabd4a33586..000000000000 --- a/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/shared/desktopmode/OWNERS +++ /dev/null @@ -1 +0,0 @@ -file:/libs/WindowManager/Shell/src/com/android/wm/shell/desktopmode/OWNERS
\ No newline at end of file diff --git a/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/windowdecor/DragResizeWindowGeometryTests.java b/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/windowdecor/DragResizeWindowGeometryTests.java index 1691f077a030..57469bf8c6e2 100644 --- a/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/windowdecor/DragResizeWindowGeometryTests.java +++ b/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/windowdecor/DragResizeWindowGeometryTests.java @@ -128,7 +128,7 @@ public class DragResizeWindowGeometryTests extends ShellTestCase { @Test public void testRegionUnionContainsEdges() { Region region = new Region(); - GEOMETRY.union(mContext, region); + GEOMETRY.union(region); assertThat(region.isComplex()).isTrue(); // Region excludes task area. Note that coordinates start from top left. assertThat(region.contains(TASK_SIZE.getWidth() / 2, TASK_SIZE.getHeight() / 2)).isFalse(); @@ -168,7 +168,7 @@ public class DragResizeWindowGeometryTests extends ShellTestCase { @EnableFlags(Flags.FLAG_ENABLE_WINDOWING_EDGE_DRAG_RESIZE) public void testRegionUnion_edgeDragResizeEnabled_containsLargeCorners() { Region region = new Region(); - GEOMETRY.union(mContext, region); + GEOMETRY.union(region); final int cornerRadius = LARGE_CORNER_SIZE / 2; new TestPoints(mContext, TASK_SIZE, cornerRadius).validateRegion(region); @@ -182,7 +182,7 @@ public class DragResizeWindowGeometryTests extends ShellTestCase { @DisableFlags(Flags.FLAG_ENABLE_WINDOWING_EDGE_DRAG_RESIZE) public void testRegionUnion_edgeDragResizeDisabled_containsFineCorners() { Region region = new Region(); - GEOMETRY.union(mContext, region); + GEOMETRY.union(region); final int cornerRadius = FINE_CORNER_SIZE / 2; new TestPoints(mContext, TASK_SIZE, cornerRadius).validateRegion(region); @@ -215,7 +215,7 @@ public class DragResizeWindowGeometryTests extends ShellTestCase { CTRL_TYPE_BOTTOM); for (int i = 0; i < points.size(); i++) { - assertThat(GEOMETRY.calculateCtrlType(mContext, isTouchscreen, isEdgeResizePermitted, + assertThat(GEOMETRY.calculateCtrlType(isTouchscreen, isEdgeResizePermitted, points.get(i).x, points.get(i).y)).isEqualTo( isEdgeResizePermitted ? expectedCtrlType.get(i) : CTRL_TYPE_UNDEFINED); } @@ -366,17 +366,17 @@ public class DragResizeWindowGeometryTests extends ShellTestCase { public void validateCtrlTypeForInnerPoints(@NonNull DragResizeWindowGeometry geometry, boolean isTouchscreen, boolean isEdgeResizePermitted, boolean expectedWithinGeometry) { - assertThat(geometry.calculateCtrlType(mContext, isTouchscreen, isEdgeResizePermitted, + assertThat(geometry.calculateCtrlType(isTouchscreen, isEdgeResizePermitted, mTopLeftPoint.x, mTopLeftPoint.y)).isEqualTo( expectedWithinGeometry ? CTRL_TYPE_LEFT | CTRL_TYPE_TOP : CTRL_TYPE_UNDEFINED); - assertThat(geometry.calculateCtrlType(mContext, isTouchscreen, isEdgeResizePermitted, + assertThat(geometry.calculateCtrlType(isTouchscreen, isEdgeResizePermitted, mTopRightPoint.x, mTopRightPoint.y)).isEqualTo( expectedWithinGeometry ? CTRL_TYPE_RIGHT | CTRL_TYPE_TOP : CTRL_TYPE_UNDEFINED); - assertThat(geometry.calculateCtrlType(mContext, isTouchscreen, isEdgeResizePermitted, + assertThat(geometry.calculateCtrlType(isTouchscreen, isEdgeResizePermitted, mBottomLeftPoint.x, mBottomLeftPoint.y)).isEqualTo( expectedWithinGeometry ? CTRL_TYPE_LEFT | CTRL_TYPE_BOTTOM : CTRL_TYPE_UNDEFINED); - assertThat(geometry.calculateCtrlType(mContext, isTouchscreen, isEdgeResizePermitted, + assertThat(geometry.calculateCtrlType(isTouchscreen, isEdgeResizePermitted, mBottomRightPoint.x, mBottomRightPoint.y)).isEqualTo( expectedWithinGeometry ? CTRL_TYPE_RIGHT | CTRL_TYPE_BOTTOM : CTRL_TYPE_UNDEFINED); @@ -389,17 +389,17 @@ public class DragResizeWindowGeometryTests extends ShellTestCase { public void validateCtrlTypeForOutsidePoints(@NonNull DragResizeWindowGeometry geometry, boolean isTouchscreen, boolean isEdgeResizePermitted, boolean expectedWithinGeometry) { - assertThat(geometry.calculateCtrlType(mContext, isTouchscreen, isEdgeResizePermitted, + assertThat(geometry.calculateCtrlType(isTouchscreen, isEdgeResizePermitted, mTopLeftPointOutside.x, mTopLeftPointOutside.y)).isEqualTo( expectedWithinGeometry ? CTRL_TYPE_LEFT | CTRL_TYPE_TOP : CTRL_TYPE_UNDEFINED); - assertThat(geometry.calculateCtrlType(mContext, isTouchscreen, isEdgeResizePermitted, + assertThat(geometry.calculateCtrlType(isTouchscreen, isEdgeResizePermitted, mTopRightPointOutside.x, mTopRightPointOutside.y)).isEqualTo( expectedWithinGeometry ? CTRL_TYPE_RIGHT | CTRL_TYPE_TOP : CTRL_TYPE_UNDEFINED); - assertThat(geometry.calculateCtrlType(mContext, isTouchscreen, isEdgeResizePermitted, + assertThat(geometry.calculateCtrlType(isTouchscreen, isEdgeResizePermitted, mBottomLeftPointOutside.x, mBottomLeftPointOutside.y)).isEqualTo( expectedWithinGeometry ? CTRL_TYPE_LEFT | CTRL_TYPE_BOTTOM : CTRL_TYPE_UNDEFINED); - assertThat(geometry.calculateCtrlType(mContext, isTouchscreen, isEdgeResizePermitted, + assertThat(geometry.calculateCtrlType(isTouchscreen, isEdgeResizePermitted, mBottomRightPointOutside.x, mBottomRightPointOutside.y)).isEqualTo( expectedWithinGeometry ? CTRL_TYPE_RIGHT | CTRL_TYPE_BOTTOM : CTRL_TYPE_UNDEFINED); diff --git a/services/core/java/com/android/server/wm/DesktopModeBoundsCalculator.java b/services/core/java/com/android/server/wm/DesktopModeBoundsCalculator.java index 156d8a065b67..34b5f6a24d41 100644 --- a/services/core/java/com/android/server/wm/DesktopModeBoundsCalculator.java +++ b/services/core/java/com/android/server/wm/DesktopModeBoundsCalculator.java @@ -103,7 +103,7 @@ public final class DesktopModeBoundsCalculator { final TaskDisplayArea displayArea = task.getDisplayArea(); final Rect screenBounds = displayArea.getBounds(); final Size idealSize = calculateIdealSize(screenBounds, DESKTOP_MODE_INITIAL_BOUNDS_SCALE); - if (!DesktopModeFlags.ENABLE_WINDOWING_DYNAMIC_INITIAL_BOUNDS.isEnabled()) { + if (!DesktopModeFlags.ENABLE_WINDOWING_DYNAMIC_INITIAL_BOUNDS.isTrue()) { return centerInScreen(idealSize, screenBounds); } if (activity.mAppCompatController.getAppCompatAspectRatioOverrides() diff --git a/services/core/java/com/android/server/wm/DesktopModeHelper.java b/services/core/java/com/android/server/wm/DesktopModeHelper.java index da7631723185..b5ea0bdfc27a 100644 --- a/services/core/java/com/android/server/wm/DesktopModeHelper.java +++ b/services/core/java/com/android/server/wm/DesktopModeHelper.java @@ -36,7 +36,7 @@ public final class DesktopModeHelper { /** Whether desktop mode is enabled. */ static boolean isDesktopModeEnabled() { - return DesktopModeFlags.ENABLE_DESKTOP_WINDOWING_MODE.isEnabled(); + return DesktopModeFlags.ENABLE_DESKTOP_WINDOWING_MODE.isTrue(); } /** diff --git a/services/core/java/com/android/server/wm/WindowContainer.java b/services/core/java/com/android/server/wm/WindowContainer.java index 7c3f0f22608e..0a9cb1c38dab 100644 --- a/services/core/java/com/android/server/wm/WindowContainer.java +++ b/services/core/java/com/android/server/wm/WindowContainer.java @@ -457,7 +457,7 @@ class WindowContainer<E extends WindowContainer> extends ConfigurationContainer< source.setFrame(provider.getArbitraryRectangle()) .updateSideHint(getBounds()) .setBoundingRects(provider.getBoundingRects()); - if (ENABLE_CAPTION_COMPAT_INSET_FORCE_CONSUMPTION.isEnabled()) { + if (ENABLE_CAPTION_COMPAT_INSET_FORCE_CONSUMPTION.isTrue()) { source.setFlags(provider.getFlags()); } mLocalInsetsSources.put(id, source); |