Loading libs/WindowManager/Shell/src/com/android/wm/shell/desktopmode/DesktopDisplayModeController.kt +18 −6 Original line number Diff line number Diff line Loading @@ -143,7 +143,18 @@ class DesktopDisplayModeController( .getRunningTasks(displayId) .filter { it.activityType == ACTIVITY_TYPE_STANDARD } .forEach { // TODO: b/391965153 - Reconsider the logic under multi-desk window hierarchy if (DesktopExperienceFlags.ENABLE_MULTIPLE_DESKTOPS_BACKEND.isTrue) { // With multi-desks, display windowing mode doesn't affect the windowing // mode of freeform tasks but fullscreen tasks which are the direct children // of TDA. if (it.windowingMode == WINDOWING_MODE_FULLSCREEN) { if (targetDisplayWindowingMode == WINDOWING_MODE_FREEFORM) { wct.setWindowingMode(it.token, WINDOWING_MODE_FULLSCREEN) } else { wct.setWindowingMode(it.token, WINDOWING_MODE_UNDEFINED) } } } else { when (it.windowingMode) { currentDisplayWindowingMode -> { wct.setWindowingMode(it.token, currentDisplayWindowingMode) Loading @@ -153,6 +164,7 @@ class DesktopDisplayModeController( } } } } // The override windowing mode of DesktopWallpaper can be UNDEFINED on fullscreen-display // right after the first launch while its resolved windowing mode is FULLSCREEN. We here // it has the FULLSCREEN override windowing mode. Loading libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/desktopmode/DesktopDisplayModeControllerTest.kt +46 −2 Original line number Diff line number Diff line Loading @@ -56,6 +56,7 @@ import com.google.testing.junit.testparameterinjector.TestParameter import com.google.testing.junit.testparameterinjector.TestParameterInjector import com.google.testing.junit.testparameterinjector.TestParameterValuesProvider import org.junit.After import org.junit.Assert.assertNull import org.junit.Before import org.junit.Test import org.junit.runner.RunWith Loading Loading @@ -258,7 +259,8 @@ class DesktopDisplayModeControllerTest( @Test @EnableFlags(Flags.FLAG_ENABLE_DISPLAY_WINDOWING_MODE_SWITCHING) fun displayWindowingModeSwitch_existingTasksOnConnected() { @DisableFlags(Flags.FLAG_ENABLE_MULTIPLE_DESKTOPS_BACKEND) fun displayWindowingModeSwitch_existingTasksOnConnected_multidesk_disabled() { defaultTDA.configuration.windowConfiguration.windowingMode = WINDOWING_MODE_FULLSCREEN whenever(mockWindowManager.getWindowingMode(anyInt())).thenReturn(WINDOWING_MODE_FULLSCREEN) setExtendedMode(true) Loading @@ -275,7 +277,8 @@ class DesktopDisplayModeControllerTest( @Test @EnableFlags(Flags.FLAG_ENABLE_DISPLAY_WINDOWING_MODE_SWITCHING) fun displayWindowingModeSwitch_existingTasksOnDisconnected() { @DisableFlags(Flags.FLAG_ENABLE_MULTIPLE_DESKTOPS_BACKEND) fun displayWindowingModeSwitch_existingTasksOnDisconnected_multidesk_disabled() { defaultTDA.configuration.windowConfiguration.windowingMode = WINDOWING_MODE_FREEFORM whenever(mockWindowManager.getWindowingMode(anyInt())).thenAnswer { WINDOWING_MODE_FULLSCREEN Loading @@ -292,6 +295,46 @@ class DesktopDisplayModeControllerTest( .isEqualTo(WINDOWING_MODE_UNDEFINED) } @Test @EnableFlags( Flags.FLAG_ENABLE_DISPLAY_WINDOWING_MODE_SWITCHING, Flags.FLAG_ENABLE_MULTIPLE_DESKTOPS_BACKEND, ) fun displayWindowingModeSwitch_existingTasksOnConnected() { defaultTDA.configuration.windowConfiguration.windowingMode = WINDOWING_MODE_FULLSCREEN whenever(mockWindowManager.getWindowingMode(anyInt())).thenReturn(WINDOWING_MODE_FULLSCREEN) setExtendedMode(true) connectExternalDisplay() val arg = argumentCaptor<WindowContainerTransaction>() verify(transitions, times(1)).startTransition(eq(TRANSIT_CHANGE), arg.capture(), isNull()) assertNull(arg.firstValue.changes[freeformTask.token.asBinder()]) assertThat(arg.firstValue.changes[fullscreenTask.token.asBinder()]?.windowingMode) .isEqualTo(WINDOWING_MODE_FULLSCREEN) } @Test @EnableFlags( Flags.FLAG_ENABLE_DISPLAY_WINDOWING_MODE_SWITCHING, Flags.FLAG_ENABLE_MULTIPLE_DESKTOPS_BACKEND, ) fun displayWindowingModeSwitch_existingTasksOnDisconnected() { defaultTDA.configuration.windowConfiguration.windowingMode = WINDOWING_MODE_FREEFORM whenever(mockWindowManager.getWindowingMode(anyInt())).thenAnswer { WINDOWING_MODE_FULLSCREEN } setExtendedMode(true) disconnectExternalDisplay() val arg = argumentCaptor<WindowContainerTransaction>() verify(transitions, times(1)).startTransition(eq(TRANSIT_CHANGE), arg.capture(), isNull()) assertNull(arg.firstValue.changes[freeformTask.token.asBinder()]) assertThat(arg.firstValue.changes[fullscreenTask.token.asBinder()]?.windowingMode) .isEqualTo(WINDOWING_MODE_UNDEFINED) } @Test @EnableFlags(DisplayFlags.FLAG_ENABLE_DISPLAY_CONTENT_MODE_MANAGEMENT) fun externalDisplayWindowingMode() { Loading Loading @@ -364,6 +407,7 @@ class DesktopDisplayModeControllerTest( return FlagsParameterization.allCombinationsOf( Flags.FLAG_FORM_FACTOR_BASED_DESKTOP_FIRST_SWITCH, DisplayFlags.FLAG_ENABLE_DISPLAY_CONTENT_MODE_MANAGEMENT, Flags.FLAG_ENABLE_MULTIPLE_DESKTOPS_BACKEND, ) } } Loading Loading
libs/WindowManager/Shell/src/com/android/wm/shell/desktopmode/DesktopDisplayModeController.kt +18 −6 Original line number Diff line number Diff line Loading @@ -143,7 +143,18 @@ class DesktopDisplayModeController( .getRunningTasks(displayId) .filter { it.activityType == ACTIVITY_TYPE_STANDARD } .forEach { // TODO: b/391965153 - Reconsider the logic under multi-desk window hierarchy if (DesktopExperienceFlags.ENABLE_MULTIPLE_DESKTOPS_BACKEND.isTrue) { // With multi-desks, display windowing mode doesn't affect the windowing // mode of freeform tasks but fullscreen tasks which are the direct children // of TDA. if (it.windowingMode == WINDOWING_MODE_FULLSCREEN) { if (targetDisplayWindowingMode == WINDOWING_MODE_FREEFORM) { wct.setWindowingMode(it.token, WINDOWING_MODE_FULLSCREEN) } else { wct.setWindowingMode(it.token, WINDOWING_MODE_UNDEFINED) } } } else { when (it.windowingMode) { currentDisplayWindowingMode -> { wct.setWindowingMode(it.token, currentDisplayWindowingMode) Loading @@ -153,6 +164,7 @@ class DesktopDisplayModeController( } } } } // The override windowing mode of DesktopWallpaper can be UNDEFINED on fullscreen-display // right after the first launch while its resolved windowing mode is FULLSCREEN. We here // it has the FULLSCREEN override windowing mode. Loading
libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/desktopmode/DesktopDisplayModeControllerTest.kt +46 −2 Original line number Diff line number Diff line Loading @@ -56,6 +56,7 @@ import com.google.testing.junit.testparameterinjector.TestParameter import com.google.testing.junit.testparameterinjector.TestParameterInjector import com.google.testing.junit.testparameterinjector.TestParameterValuesProvider import org.junit.After import org.junit.Assert.assertNull import org.junit.Before import org.junit.Test import org.junit.runner.RunWith Loading Loading @@ -258,7 +259,8 @@ class DesktopDisplayModeControllerTest( @Test @EnableFlags(Flags.FLAG_ENABLE_DISPLAY_WINDOWING_MODE_SWITCHING) fun displayWindowingModeSwitch_existingTasksOnConnected() { @DisableFlags(Flags.FLAG_ENABLE_MULTIPLE_DESKTOPS_BACKEND) fun displayWindowingModeSwitch_existingTasksOnConnected_multidesk_disabled() { defaultTDA.configuration.windowConfiguration.windowingMode = WINDOWING_MODE_FULLSCREEN whenever(mockWindowManager.getWindowingMode(anyInt())).thenReturn(WINDOWING_MODE_FULLSCREEN) setExtendedMode(true) Loading @@ -275,7 +277,8 @@ class DesktopDisplayModeControllerTest( @Test @EnableFlags(Flags.FLAG_ENABLE_DISPLAY_WINDOWING_MODE_SWITCHING) fun displayWindowingModeSwitch_existingTasksOnDisconnected() { @DisableFlags(Flags.FLAG_ENABLE_MULTIPLE_DESKTOPS_BACKEND) fun displayWindowingModeSwitch_existingTasksOnDisconnected_multidesk_disabled() { defaultTDA.configuration.windowConfiguration.windowingMode = WINDOWING_MODE_FREEFORM whenever(mockWindowManager.getWindowingMode(anyInt())).thenAnswer { WINDOWING_MODE_FULLSCREEN Loading @@ -292,6 +295,46 @@ class DesktopDisplayModeControllerTest( .isEqualTo(WINDOWING_MODE_UNDEFINED) } @Test @EnableFlags( Flags.FLAG_ENABLE_DISPLAY_WINDOWING_MODE_SWITCHING, Flags.FLAG_ENABLE_MULTIPLE_DESKTOPS_BACKEND, ) fun displayWindowingModeSwitch_existingTasksOnConnected() { defaultTDA.configuration.windowConfiguration.windowingMode = WINDOWING_MODE_FULLSCREEN whenever(mockWindowManager.getWindowingMode(anyInt())).thenReturn(WINDOWING_MODE_FULLSCREEN) setExtendedMode(true) connectExternalDisplay() val arg = argumentCaptor<WindowContainerTransaction>() verify(transitions, times(1)).startTransition(eq(TRANSIT_CHANGE), arg.capture(), isNull()) assertNull(arg.firstValue.changes[freeformTask.token.asBinder()]) assertThat(arg.firstValue.changes[fullscreenTask.token.asBinder()]?.windowingMode) .isEqualTo(WINDOWING_MODE_FULLSCREEN) } @Test @EnableFlags( Flags.FLAG_ENABLE_DISPLAY_WINDOWING_MODE_SWITCHING, Flags.FLAG_ENABLE_MULTIPLE_DESKTOPS_BACKEND, ) fun displayWindowingModeSwitch_existingTasksOnDisconnected() { defaultTDA.configuration.windowConfiguration.windowingMode = WINDOWING_MODE_FREEFORM whenever(mockWindowManager.getWindowingMode(anyInt())).thenAnswer { WINDOWING_MODE_FULLSCREEN } setExtendedMode(true) disconnectExternalDisplay() val arg = argumentCaptor<WindowContainerTransaction>() verify(transitions, times(1)).startTransition(eq(TRANSIT_CHANGE), arg.capture(), isNull()) assertNull(arg.firstValue.changes[freeformTask.token.asBinder()]) assertThat(arg.firstValue.changes[fullscreenTask.token.asBinder()]?.windowingMode) .isEqualTo(WINDOWING_MODE_UNDEFINED) } @Test @EnableFlags(DisplayFlags.FLAG_ENABLE_DISPLAY_CONTENT_MODE_MANAGEMENT) fun externalDisplayWindowingMode() { Loading Loading @@ -364,6 +407,7 @@ class DesktopDisplayModeControllerTest( return FlagsParameterization.allCombinationsOf( Flags.FLAG_FORM_FACTOR_BASED_DESKTOP_FIRST_SWITCH, DisplayFlags.FLAG_ENABLE_DISPLAY_CONTENT_MODE_MANAGEMENT, Flags.FLAG_ENABLE_MULTIPLE_DESKTOPS_BACKEND, ) } } Loading