Loading core/java/android/window/DesktopModeFlags.java +0 −6 Original line number Diff line number Diff line Loading @@ -16,8 +16,6 @@ package android.window; import static com.android.server.display.feature.flags.Flags.enableDisplayContentModeManagement; import android.annotation.Nullable; import android.app.ActivityThread; import android.app.Application; Loading Loading @@ -215,10 +213,6 @@ public enum DesktopModeFlags { boolean shouldOverrideByDevOption) { if (!shouldOverrideByDevOption) return flagFunction.getAsBoolean(); if (Flags.showDesktopExperienceDevOption()) { // If the feature is enabled, just return the flag's value. if (enableDisplayContentModeManagement()) { return flagFunction.getAsBoolean(); } return switch (getToggleOverride()) { case OVERRIDE_UNSET, OVERRIDE_OFF -> flagFunction.getAsBoolean(); case OVERRIDE_ON -> true; Loading core/tests/coretests/src/android/window/DesktopModeFlagsTest.java +0 −2 Original line number Diff line number Diff line Loading @@ -22,7 +22,6 @@ import static android.window.DesktopModeFlags.ToggleOverride.OVERRIDE_ON; import static android.window.DesktopModeFlags.ToggleOverride.OVERRIDE_UNSET; import static android.window.DesktopModeFlags.ToggleOverride.fromSetting; import static com.android.server.display.feature.flags.Flags.FLAG_ENABLE_DISPLAY_CONTENT_MODE_MANAGEMENT; import static com.android.window.flags.Flags.FLAG_ENABLE_DESKTOP_WINDOWING_MODE; import static com.android.window.flags.Flags.FLAG_SHOW_DESKTOP_EXPERIENCE_DEV_OPTION; import static com.android.window.flags.Flags.FLAG_SHOW_DESKTOP_WINDOWING_DEV_OPTION; Loading Loading @@ -68,7 +67,6 @@ import java.util.List; @SmallTest @Presubmit @RunWith(ParameterizedAndroidJunit4.class) @DisableFlags(FLAG_ENABLE_DISPLAY_CONTENT_MODE_MANAGEMENT) public class DesktopModeFlagsTest { @Parameters(name = "{0}") Loading libs/WindowManager/Shell/shared/src/com/android/wm/shell/shared/desktopmode/DesktopModeStatus.java +8 −2 Original line number Diff line number Diff line Loading @@ -17,6 +17,7 @@ package com.android.wm.shell.shared.desktopmode; import static android.hardware.display.DisplayManager.DISPLAY_CATEGORY_ALL_INCLUDING_DISABLED; import static android.window.DesktopExperienceFlags.ENABLE_PROJECTED_DISPLAY_DESKTOP_MODE; import static com.android.server.display.feature.flags.Flags.enableDisplayContentModeManagement; import static com.android.wm.shell.shared.bubbles.BubbleAnythingFlagHelper.enableBubbleToFullscreen; Loading Loading @@ -206,10 +207,15 @@ public class DesktopModeStatus { if (!enforceDeviceRestrictions()) { return true; } // If projected display is enabled, #canInternalDisplayHostDesktops is no longer a // requirement. final boolean desktopModeSupported = ENABLE_PROJECTED_DISPLAY_DESKTOP_MODE.isTrue() ? isDesktopModeSupported(context) : (isDesktopModeSupported(context) && canInternalDisplayHostDesktops(context)); final boolean desktopModeSupportedByDevOptions = Flags.enableDesktopModeThroughDevOption() && isDesktopModeDevOptionSupported(context); return isDesktopModeSupported(context) || desktopModeSupportedByDevOptions; return desktopModeSupported || desktopModeSupportedByDevOptions; } /** Loading libs/WindowManager/Shell/shared/src/com/android/wm/shell/shared/desktopmode/DesktopStateImpl.kt +21 −2 Original line number Diff line number Diff line Loading @@ -27,6 +27,7 @@ import android.window.DesktopExperienceFlags import android.window.DesktopModeFlags import com.android.internal.R import com.android.internal.annotations.VisibleForTesting import com.android.server.display.feature.flags.Flags.enableDisplayContentModeManagement import com.android.window.flags.Flags import com.android.wm.shell.shared.bubbles.BubbleAnythingFlagHelper Loading Loading @@ -84,9 +85,18 @@ class DesktopStateImpl(context: Context) : DesktopState { override val isDeviceEligibleForDesktopMode: Boolean get() { if (!enforceDeviceRestrictions) return true // If projected display is enabled, [canInternalDisplayHostDesktops] is no longer a // requirement. val desktopModeSupported = if (DesktopExperienceFlags.ENABLE_PROJECTED_DISPLAY_DESKTOP_MODE.isTrue) { isDesktopModeSupported } else { isDesktopModeSupported && canInternalDisplayHostDesktops } val desktopModeSupportedByDevOptions = Flags.enableDesktopModeThroughDevOption() && isDesktopModeDevOptionSupported return isDesktopModeSupported || desktopModeSupportedByDevOptions return desktopModeSupported || desktopModeSupportedByDevOptions } override val enableMultipleDesktops: Boolean = Loading @@ -101,9 +111,18 @@ class DesktopStateImpl(context: Context) : DesktopState { if (!canEnterDesktopMode) return false if (!enforceDeviceRestrictions) return true if (display.type == Display.TYPE_INTERNAL) return canInternalDisplayHostDesktops // TODO (b/395014779): Change this to use WM API if ( (display.type == Display.TYPE_EXTERNAL || display.type == Display.TYPE_OVERLAY) && enableDisplayContentModeManagement() ) { return windowManager?.isEligibleForDesktopMode(display.displayId) ?: false } return false } override fun isProjectedMode(): Boolean { if (!DesktopExperienceFlags.ENABLE_PROJECTED_DISPLAY_DESKTOP_MODE.isTrue) { return false Loading libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/shared/desktopmode/DesktopModeStatusTest.kt +14 −29 Original line number Diff line number Diff line Loading @@ -22,7 +22,6 @@ import android.platform.test.annotations.DisableFlags import android.platform.test.annotations.EnableFlags import android.platform.test.annotations.Presubmit import android.platform.test.flag.junit.SetFlagsRule import android.window.DesktopExperienceFlags import android.window.DesktopModeFlags import androidx.test.filters.SmallTest import com.android.internal.R Loading Loading @@ -58,6 +57,7 @@ class DesktopModeStatusTest : ShellTestCase() { doReturn(false).whenever(mockResources).getBoolean( eq(R.bool.config_isDesktopModeDevOptionSupported) ) setDeviceEligibleForDesktopMode(false) doReturn(context.contentResolver).whenever(mockContext).contentResolver resetDesktopModeFlagsCache() resetEnforceDeviceRestriction() Loading Loading @@ -140,10 +140,8 @@ class DesktopModeStatusTest : ShellTestCase() { assertThat(DesktopModeStatus.canEnterDesktopMode(mockContext)).isTrue() } @EnableFlags( Flags.FLAG_ENABLE_DESKTOP_WINDOWING_MODE, Flags.FLAG_ENABLE_DESKTOP_MODE_THROUGH_DEV_OPTION ) @DisableFlags(Flags.FLAG_ENABLE_DESKTOP_MODE_THROUGH_DEV_OPTION) @EnableFlags(Flags.FLAG_ENABLE_DESKTOP_WINDOWING_MODE) @Test fun canEnterDesktopMode_DWFlagEnabled_deviceNotEligible_forceUsingDevOption_returnsTrue() { doReturn(true).whenever(mockResources).getBoolean( Loading Loading @@ -172,12 +170,12 @@ class DesktopModeStatusTest : ShellTestCase() { @DisableFlags(Flags.FLAG_ENABLE_PROJECTED_DISPLAY_DESKTOP_MODE) @Test fun isDeviceEligibleForDesktopMode_configDEModeOnAndIntDispHostsDesktopOff_returnsTrue() { fun isDeviceEligibleForDesktopMode_configDEModeOnAndIntDispHostsDesktopOff_returnsFalse() { doReturn(true).whenever(mockResources).getBoolean(eq(R.bool.config_isDesktopModeSupported)) doReturn(false).whenever(mockResources) .getBoolean(eq(R.bool.config_canInternalDisplayHostDesktops)) assertThat(DesktopModeStatus.isDeviceEligibleForDesktopMode(mockContext)).isTrue() assertThat(DesktopModeStatus.isDeviceEligibleForDesktopMode(mockContext)).isFalse() } @EnableFlags(Flags.FLAG_ENABLE_PROJECTED_DISPLAY_DESKTOP_MODE) Loading Loading @@ -249,36 +247,23 @@ class DesktopModeStatusTest : ShellTestCase() { } private fun resetDesktopModeFlagsCache() { // Toggle override cache for DesktopModeFlags val cachedToggleOverride1 = val cachedToggleOverride = DesktopModeFlags::class.java.getDeclaredField("sCachedToggleOverride") cachedToggleOverride1.isAccessible = true cachedToggleOverride1.set(null, DesktopModeFlags.ToggleOverride.OVERRIDE_OFF) // Toggle override cache for DesktopExperienceFlags val cachedToggleOverride2 = DesktopExperienceFlags::class.java.getDeclaredField("sCachedToggleOverride") cachedToggleOverride2.isAccessible = true cachedToggleOverride2.set(null, false) cachedToggleOverride.isAccessible = true cachedToggleOverride.set(null, null) } private fun setFlagOverride(override: DesktopModeFlags.ToggleOverride) { // Toggle override cache for DesktopModeFlags can be on/off/unset val cachedToggleOverride1 = val cachedToggleOverride = DesktopModeFlags::class.java.getDeclaredField("sCachedToggleOverride") cachedToggleOverride1.isAccessible = true cachedToggleOverride1.set(null, override) // Toggle override cache for DesktopExperienceFlags can be true or false val cachedToggleOverride2 = DesktopExperienceFlags::class.java.getDeclaredField("sCachedToggleOverride") cachedToggleOverride2.isAccessible = true cachedToggleOverride2.set(null, override == DesktopModeFlags.ToggleOverride.OVERRIDE_ON) cachedToggleOverride.isAccessible = true cachedToggleOverride.set(null, override) } private fun setDeviceEligibleForDesktopMode(eligible: Boolean) { doReturn(eligible).whenever(mockResources) .getBoolean(eq(R.bool.config_isDesktopModeSupported)) val deviceRestrictions = DesktopModeStatus::class.java.getDeclaredField("ENFORCE_DEVICE_RESTRICTIONS") deviceRestrictions.isAccessible = true deviceRestrictions.setBoolean(/* obj= */ null, /* z= */ !eligible) } private fun setIsVeiledResizeEnabled(enabled: Boolean) { Loading Loading
core/java/android/window/DesktopModeFlags.java +0 −6 Original line number Diff line number Diff line Loading @@ -16,8 +16,6 @@ package android.window; import static com.android.server.display.feature.flags.Flags.enableDisplayContentModeManagement; import android.annotation.Nullable; import android.app.ActivityThread; import android.app.Application; Loading Loading @@ -215,10 +213,6 @@ public enum DesktopModeFlags { boolean shouldOverrideByDevOption) { if (!shouldOverrideByDevOption) return flagFunction.getAsBoolean(); if (Flags.showDesktopExperienceDevOption()) { // If the feature is enabled, just return the flag's value. if (enableDisplayContentModeManagement()) { return flagFunction.getAsBoolean(); } return switch (getToggleOverride()) { case OVERRIDE_UNSET, OVERRIDE_OFF -> flagFunction.getAsBoolean(); case OVERRIDE_ON -> true; Loading
core/tests/coretests/src/android/window/DesktopModeFlagsTest.java +0 −2 Original line number Diff line number Diff line Loading @@ -22,7 +22,6 @@ import static android.window.DesktopModeFlags.ToggleOverride.OVERRIDE_ON; import static android.window.DesktopModeFlags.ToggleOverride.OVERRIDE_UNSET; import static android.window.DesktopModeFlags.ToggleOverride.fromSetting; import static com.android.server.display.feature.flags.Flags.FLAG_ENABLE_DISPLAY_CONTENT_MODE_MANAGEMENT; import static com.android.window.flags.Flags.FLAG_ENABLE_DESKTOP_WINDOWING_MODE; import static com.android.window.flags.Flags.FLAG_SHOW_DESKTOP_EXPERIENCE_DEV_OPTION; import static com.android.window.flags.Flags.FLAG_SHOW_DESKTOP_WINDOWING_DEV_OPTION; Loading Loading @@ -68,7 +67,6 @@ import java.util.List; @SmallTest @Presubmit @RunWith(ParameterizedAndroidJunit4.class) @DisableFlags(FLAG_ENABLE_DISPLAY_CONTENT_MODE_MANAGEMENT) public class DesktopModeFlagsTest { @Parameters(name = "{0}") Loading
libs/WindowManager/Shell/shared/src/com/android/wm/shell/shared/desktopmode/DesktopModeStatus.java +8 −2 Original line number Diff line number Diff line Loading @@ -17,6 +17,7 @@ package com.android.wm.shell.shared.desktopmode; import static android.hardware.display.DisplayManager.DISPLAY_CATEGORY_ALL_INCLUDING_DISABLED; import static android.window.DesktopExperienceFlags.ENABLE_PROJECTED_DISPLAY_DESKTOP_MODE; import static com.android.server.display.feature.flags.Flags.enableDisplayContentModeManagement; import static com.android.wm.shell.shared.bubbles.BubbleAnythingFlagHelper.enableBubbleToFullscreen; Loading Loading @@ -206,10 +207,15 @@ public class DesktopModeStatus { if (!enforceDeviceRestrictions()) { return true; } // If projected display is enabled, #canInternalDisplayHostDesktops is no longer a // requirement. final boolean desktopModeSupported = ENABLE_PROJECTED_DISPLAY_DESKTOP_MODE.isTrue() ? isDesktopModeSupported(context) : (isDesktopModeSupported(context) && canInternalDisplayHostDesktops(context)); final boolean desktopModeSupportedByDevOptions = Flags.enableDesktopModeThroughDevOption() && isDesktopModeDevOptionSupported(context); return isDesktopModeSupported(context) || desktopModeSupportedByDevOptions; return desktopModeSupported || desktopModeSupportedByDevOptions; } /** Loading
libs/WindowManager/Shell/shared/src/com/android/wm/shell/shared/desktopmode/DesktopStateImpl.kt +21 −2 Original line number Diff line number Diff line Loading @@ -27,6 +27,7 @@ import android.window.DesktopExperienceFlags import android.window.DesktopModeFlags import com.android.internal.R import com.android.internal.annotations.VisibleForTesting import com.android.server.display.feature.flags.Flags.enableDisplayContentModeManagement import com.android.window.flags.Flags import com.android.wm.shell.shared.bubbles.BubbleAnythingFlagHelper Loading Loading @@ -84,9 +85,18 @@ class DesktopStateImpl(context: Context) : DesktopState { override val isDeviceEligibleForDesktopMode: Boolean get() { if (!enforceDeviceRestrictions) return true // If projected display is enabled, [canInternalDisplayHostDesktops] is no longer a // requirement. val desktopModeSupported = if (DesktopExperienceFlags.ENABLE_PROJECTED_DISPLAY_DESKTOP_MODE.isTrue) { isDesktopModeSupported } else { isDesktopModeSupported && canInternalDisplayHostDesktops } val desktopModeSupportedByDevOptions = Flags.enableDesktopModeThroughDevOption() && isDesktopModeDevOptionSupported return isDesktopModeSupported || desktopModeSupportedByDevOptions return desktopModeSupported || desktopModeSupportedByDevOptions } override val enableMultipleDesktops: Boolean = Loading @@ -101,9 +111,18 @@ class DesktopStateImpl(context: Context) : DesktopState { if (!canEnterDesktopMode) return false if (!enforceDeviceRestrictions) return true if (display.type == Display.TYPE_INTERNAL) return canInternalDisplayHostDesktops // TODO (b/395014779): Change this to use WM API if ( (display.type == Display.TYPE_EXTERNAL || display.type == Display.TYPE_OVERLAY) && enableDisplayContentModeManagement() ) { return windowManager?.isEligibleForDesktopMode(display.displayId) ?: false } return false } override fun isProjectedMode(): Boolean { if (!DesktopExperienceFlags.ENABLE_PROJECTED_DISPLAY_DESKTOP_MODE.isTrue) { return false Loading
libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/shared/desktopmode/DesktopModeStatusTest.kt +14 −29 Original line number Diff line number Diff line Loading @@ -22,7 +22,6 @@ import android.platform.test.annotations.DisableFlags import android.platform.test.annotations.EnableFlags import android.platform.test.annotations.Presubmit import android.platform.test.flag.junit.SetFlagsRule import android.window.DesktopExperienceFlags import android.window.DesktopModeFlags import androidx.test.filters.SmallTest import com.android.internal.R Loading Loading @@ -58,6 +57,7 @@ class DesktopModeStatusTest : ShellTestCase() { doReturn(false).whenever(mockResources).getBoolean( eq(R.bool.config_isDesktopModeDevOptionSupported) ) setDeviceEligibleForDesktopMode(false) doReturn(context.contentResolver).whenever(mockContext).contentResolver resetDesktopModeFlagsCache() resetEnforceDeviceRestriction() Loading Loading @@ -140,10 +140,8 @@ class DesktopModeStatusTest : ShellTestCase() { assertThat(DesktopModeStatus.canEnterDesktopMode(mockContext)).isTrue() } @EnableFlags( Flags.FLAG_ENABLE_DESKTOP_WINDOWING_MODE, Flags.FLAG_ENABLE_DESKTOP_MODE_THROUGH_DEV_OPTION ) @DisableFlags(Flags.FLAG_ENABLE_DESKTOP_MODE_THROUGH_DEV_OPTION) @EnableFlags(Flags.FLAG_ENABLE_DESKTOP_WINDOWING_MODE) @Test fun canEnterDesktopMode_DWFlagEnabled_deviceNotEligible_forceUsingDevOption_returnsTrue() { doReturn(true).whenever(mockResources).getBoolean( Loading Loading @@ -172,12 +170,12 @@ class DesktopModeStatusTest : ShellTestCase() { @DisableFlags(Flags.FLAG_ENABLE_PROJECTED_DISPLAY_DESKTOP_MODE) @Test fun isDeviceEligibleForDesktopMode_configDEModeOnAndIntDispHostsDesktopOff_returnsTrue() { fun isDeviceEligibleForDesktopMode_configDEModeOnAndIntDispHostsDesktopOff_returnsFalse() { doReturn(true).whenever(mockResources).getBoolean(eq(R.bool.config_isDesktopModeSupported)) doReturn(false).whenever(mockResources) .getBoolean(eq(R.bool.config_canInternalDisplayHostDesktops)) assertThat(DesktopModeStatus.isDeviceEligibleForDesktopMode(mockContext)).isTrue() assertThat(DesktopModeStatus.isDeviceEligibleForDesktopMode(mockContext)).isFalse() } @EnableFlags(Flags.FLAG_ENABLE_PROJECTED_DISPLAY_DESKTOP_MODE) Loading Loading @@ -249,36 +247,23 @@ class DesktopModeStatusTest : ShellTestCase() { } private fun resetDesktopModeFlagsCache() { // Toggle override cache for DesktopModeFlags val cachedToggleOverride1 = val cachedToggleOverride = DesktopModeFlags::class.java.getDeclaredField("sCachedToggleOverride") cachedToggleOverride1.isAccessible = true cachedToggleOverride1.set(null, DesktopModeFlags.ToggleOverride.OVERRIDE_OFF) // Toggle override cache for DesktopExperienceFlags val cachedToggleOverride2 = DesktopExperienceFlags::class.java.getDeclaredField("sCachedToggleOverride") cachedToggleOverride2.isAccessible = true cachedToggleOverride2.set(null, false) cachedToggleOverride.isAccessible = true cachedToggleOverride.set(null, null) } private fun setFlagOverride(override: DesktopModeFlags.ToggleOverride) { // Toggle override cache for DesktopModeFlags can be on/off/unset val cachedToggleOverride1 = val cachedToggleOverride = DesktopModeFlags::class.java.getDeclaredField("sCachedToggleOverride") cachedToggleOverride1.isAccessible = true cachedToggleOverride1.set(null, override) // Toggle override cache for DesktopExperienceFlags can be true or false val cachedToggleOverride2 = DesktopExperienceFlags::class.java.getDeclaredField("sCachedToggleOverride") cachedToggleOverride2.isAccessible = true cachedToggleOverride2.set(null, override == DesktopModeFlags.ToggleOverride.OVERRIDE_ON) cachedToggleOverride.isAccessible = true cachedToggleOverride.set(null, override) } private fun setDeviceEligibleForDesktopMode(eligible: Boolean) { doReturn(eligible).whenever(mockResources) .getBoolean(eq(R.bool.config_isDesktopModeSupported)) val deviceRestrictions = DesktopModeStatus::class.java.getDeclaredField("ENFORCE_DEVICE_RESTRICTIONS") deviceRestrictions.isAccessible = true deviceRestrictions.setBoolean(/* obj= */ null, /* z= */ !eligible) } private fun setIsVeiledResizeEnabled(enabled: Boolean) { Loading