Loading libs/WindowManager/Shell/src/com/android/wm/shell/desktopmode/DesktopTasksController.kt +12 −7 Original line number Diff line number Diff line Loading @@ -2797,7 +2797,7 @@ class DesktopTasksController( TransitionUtil.isOpeningType(request.type) && taskRepository.isActiveTask(triggerTask.taskId)) /** Returns whether a visible fullscreen task is being relaunched on the same display or not. */ /** Returns whether a fullscreen task is being relaunched on the same display or not. */ private fun isFullscreenRelaunch( triggerTask: RunningTaskInfo, @WindowManager.TransitionType requestType: Int, Loading @@ -2809,7 +2809,6 @@ class DesktopTasksController( return triggerTask.isFullscreen && TransitionUtil.isOpeningType(requestType) && existingTask.isFullscreen && existingTask.isVisible && existingTask.displayId == triggerTask.displayId } Loading Loading @@ -3246,21 +3245,27 @@ class DesktopTasksController( task: RunningTaskInfo, @WindowManager.TransitionType requestType: Int, ): Boolean { val isDesktopFirst = rootTaskDisplayAreaOrganizer.isDisplayDesktopFirst(task.displayId) if ( DesktopExperienceFlags.ENABLE_DESKTOP_FIRST_FULLSCREEN_REFOCUS_BUGFIX.isTrue && isDesktopFirst && isFullscreenRelaunch(task, requestType) ) { logV("shouldFullscreenTaskLaunchSwitchToDesktop: no switch as fullscreen relaunch") logV( "shouldFullscreenTaskLaunchSwitchToDesktop: no switch as fullscreen relaunch on" + " desktop-first display#%s", task.displayId, ) return false } val isAnyDeskActive = isAnyDeskActive(task.displayId) val forceEnterDesktop = forceEnterDesktop(task.displayId) logV( "shouldFullscreenTaskLaunchSwitchToDesktop, isAnyDeskActive=%s, forceEnterDesktop=%s", "shouldFullscreenTaskLaunchSwitchToDesktop, isAnyDeskActive=%s, isDesktopFirst=%s", isAnyDeskActive, forceEnterDesktop, isDesktopFirst, ) return isAnyDeskActive || forceEnterDesktop return isAnyDeskActive || isDesktopFirst } /** Loading libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/desktopmode/DesktopTasksControllerTest.kt +56 −2 Original line number Diff line number Diff line Loading @@ -6775,15 +6775,69 @@ class DesktopTasksControllerTest(flags: FlagsParameterization) : ShellTestCase() } @Test @EnableFlags(Flags.FLAG_ENABLE_DESKTOP_FIRST_FULLSCREEN_REFOCUS_BUGFIX) fun handleRequest_fullscreenTaskRelaunch_returnNull() { @EnableFlags( Flags.FLAG_ENABLE_DESKTOP_FIRST_FULLSCREEN_REFOCUS_BUGFIX, Flags.FLAG_ENABLE_MULTIPLE_DESKTOPS_BACKEND, ) fun handleRequest_fullscreenTaskRelaunch_desktopFirst_returnNull() { val tda = rootTaskDisplayAreaOrganizer.getDisplayAreaInfo(DEFAULT_DISPLAY)!! tda.configuration.windowConfiguration.windowingMode = WINDOWING_MODE_FREEFORM val task = setUpFullscreenTask() // Deactivate desk as fullscreen task is visible on top. taskRepository.getActiveDeskId(DEFAULT_DISPLAY)?.let { taskRepository.setDeskInactive(it) } val result = controller.handleRequest(Binder(), createTransition(task, type = TRANSIT_OPEN)) assertNull(result, "Should not handle request") } @Test @EnableFlags( Flags.FLAG_ENABLE_DESKTOP_FIRST_FULLSCREEN_REFOCUS_BUGFIX, Flags.FLAG_ENABLE_MULTIPLE_DESKTOPS_BACKEND, ) fun handleRequest_backgroundFullscreenTaskRelaunch_desktopFirst_returnNull() { val tda = rootTaskDisplayAreaOrganizer.getDisplayAreaInfo(DEFAULT_DISPLAY)!! tda.configuration.windowConfiguration.windowingMode = WINDOWING_MODE_FREEFORM val task = setUpFullscreenTask(visible = false) val result = controller.handleRequest(Binder(), createTransition(task, type = TRANSIT_OPEN)) assertNull(result, "Should not handle request") } @Test @EnableFlags( Flags.FLAG_ENABLE_DESKTOP_FIRST_FULLSCREEN_REFOCUS_BUGFIX, Flags.FLAG_ENABLE_MULTIPLE_DESKTOPS_BACKEND, ) fun handleRequest_fullscreenTaskRelaunch_touchFirst_returnNull() { val tda = rootTaskDisplayAreaOrganizer.getDisplayAreaInfo(DEFAULT_DISPLAY)!! tda.configuration.windowConfiguration.windowingMode = WINDOWING_MODE_FULLSCREEN val task = setUpFullscreenTask() // Deactivate desk as fullscreen task is visible on top. taskRepository.getActiveDeskId(DEFAULT_DISPLAY)?.let { taskRepository.setDeskInactive(it) } val result = controller.handleRequest(Binder(), createTransition(task, type = TRANSIT_OPEN)) assertNull(result, "Should not handle request") } @Test @EnableFlags( Flags.FLAG_ENABLE_DESKTOP_FIRST_FULLSCREEN_REFOCUS_BUGFIX, Flags.FLAG_ENABLE_MULTIPLE_DESKTOPS_BACKEND, ) fun handleRequest_backgroundFullscreenTaskRelaunch_touchFirst_moveToDesk() { val tda = rootTaskDisplayAreaOrganizer.getDisplayAreaInfo(DEFAULT_DISPLAY)!! tda.configuration.windowConfiguration.windowingMode = WINDOWING_MODE_FULLSCREEN val task = setUpFullscreenTask(visible = false) val result = controller.handleRequest(Binder(), createTransition(task, type = TRANSIT_OPEN)) verify(desksOrganizer).moveTaskToDesk(result!!, DEFAULT_DISPLAY, task) } @Test @EnableFlags(Flags.FLAG_ENABLE_DESKTOP_WINDOWING_MODALS_POLICY) fun moveFocusedTaskToDesktop_noDisplayActivity_doesNothing() { Loading Loading
libs/WindowManager/Shell/src/com/android/wm/shell/desktopmode/DesktopTasksController.kt +12 −7 Original line number Diff line number Diff line Loading @@ -2797,7 +2797,7 @@ class DesktopTasksController( TransitionUtil.isOpeningType(request.type) && taskRepository.isActiveTask(triggerTask.taskId)) /** Returns whether a visible fullscreen task is being relaunched on the same display or not. */ /** Returns whether a fullscreen task is being relaunched on the same display or not. */ private fun isFullscreenRelaunch( triggerTask: RunningTaskInfo, @WindowManager.TransitionType requestType: Int, Loading @@ -2809,7 +2809,6 @@ class DesktopTasksController( return triggerTask.isFullscreen && TransitionUtil.isOpeningType(requestType) && existingTask.isFullscreen && existingTask.isVisible && existingTask.displayId == triggerTask.displayId } Loading Loading @@ -3246,21 +3245,27 @@ class DesktopTasksController( task: RunningTaskInfo, @WindowManager.TransitionType requestType: Int, ): Boolean { val isDesktopFirst = rootTaskDisplayAreaOrganizer.isDisplayDesktopFirst(task.displayId) if ( DesktopExperienceFlags.ENABLE_DESKTOP_FIRST_FULLSCREEN_REFOCUS_BUGFIX.isTrue && isDesktopFirst && isFullscreenRelaunch(task, requestType) ) { logV("shouldFullscreenTaskLaunchSwitchToDesktop: no switch as fullscreen relaunch") logV( "shouldFullscreenTaskLaunchSwitchToDesktop: no switch as fullscreen relaunch on" + " desktop-first display#%s", task.displayId, ) return false } val isAnyDeskActive = isAnyDeskActive(task.displayId) val forceEnterDesktop = forceEnterDesktop(task.displayId) logV( "shouldFullscreenTaskLaunchSwitchToDesktop, isAnyDeskActive=%s, forceEnterDesktop=%s", "shouldFullscreenTaskLaunchSwitchToDesktop, isAnyDeskActive=%s, isDesktopFirst=%s", isAnyDeskActive, forceEnterDesktop, isDesktopFirst, ) return isAnyDeskActive || forceEnterDesktop return isAnyDeskActive || isDesktopFirst } /** Loading
libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/desktopmode/DesktopTasksControllerTest.kt +56 −2 Original line number Diff line number Diff line Loading @@ -6775,15 +6775,69 @@ class DesktopTasksControllerTest(flags: FlagsParameterization) : ShellTestCase() } @Test @EnableFlags(Flags.FLAG_ENABLE_DESKTOP_FIRST_FULLSCREEN_REFOCUS_BUGFIX) fun handleRequest_fullscreenTaskRelaunch_returnNull() { @EnableFlags( Flags.FLAG_ENABLE_DESKTOP_FIRST_FULLSCREEN_REFOCUS_BUGFIX, Flags.FLAG_ENABLE_MULTIPLE_DESKTOPS_BACKEND, ) fun handleRequest_fullscreenTaskRelaunch_desktopFirst_returnNull() { val tda = rootTaskDisplayAreaOrganizer.getDisplayAreaInfo(DEFAULT_DISPLAY)!! tda.configuration.windowConfiguration.windowingMode = WINDOWING_MODE_FREEFORM val task = setUpFullscreenTask() // Deactivate desk as fullscreen task is visible on top. taskRepository.getActiveDeskId(DEFAULT_DISPLAY)?.let { taskRepository.setDeskInactive(it) } val result = controller.handleRequest(Binder(), createTransition(task, type = TRANSIT_OPEN)) assertNull(result, "Should not handle request") } @Test @EnableFlags( Flags.FLAG_ENABLE_DESKTOP_FIRST_FULLSCREEN_REFOCUS_BUGFIX, Flags.FLAG_ENABLE_MULTIPLE_DESKTOPS_BACKEND, ) fun handleRequest_backgroundFullscreenTaskRelaunch_desktopFirst_returnNull() { val tda = rootTaskDisplayAreaOrganizer.getDisplayAreaInfo(DEFAULT_DISPLAY)!! tda.configuration.windowConfiguration.windowingMode = WINDOWING_MODE_FREEFORM val task = setUpFullscreenTask(visible = false) val result = controller.handleRequest(Binder(), createTransition(task, type = TRANSIT_OPEN)) assertNull(result, "Should not handle request") } @Test @EnableFlags( Flags.FLAG_ENABLE_DESKTOP_FIRST_FULLSCREEN_REFOCUS_BUGFIX, Flags.FLAG_ENABLE_MULTIPLE_DESKTOPS_BACKEND, ) fun handleRequest_fullscreenTaskRelaunch_touchFirst_returnNull() { val tda = rootTaskDisplayAreaOrganizer.getDisplayAreaInfo(DEFAULT_DISPLAY)!! tda.configuration.windowConfiguration.windowingMode = WINDOWING_MODE_FULLSCREEN val task = setUpFullscreenTask() // Deactivate desk as fullscreen task is visible on top. taskRepository.getActiveDeskId(DEFAULT_DISPLAY)?.let { taskRepository.setDeskInactive(it) } val result = controller.handleRequest(Binder(), createTransition(task, type = TRANSIT_OPEN)) assertNull(result, "Should not handle request") } @Test @EnableFlags( Flags.FLAG_ENABLE_DESKTOP_FIRST_FULLSCREEN_REFOCUS_BUGFIX, Flags.FLAG_ENABLE_MULTIPLE_DESKTOPS_BACKEND, ) fun handleRequest_backgroundFullscreenTaskRelaunch_touchFirst_moveToDesk() { val tda = rootTaskDisplayAreaOrganizer.getDisplayAreaInfo(DEFAULT_DISPLAY)!! tda.configuration.windowConfiguration.windowingMode = WINDOWING_MODE_FULLSCREEN val task = setUpFullscreenTask(visible = false) val result = controller.handleRequest(Binder(), createTransition(task, type = TRANSIT_OPEN)) verify(desksOrganizer).moveTaskToDesk(result!!, DEFAULT_DISPLAY, task) } @Test @EnableFlags(Flags.FLAG_ENABLE_DESKTOP_WINDOWING_MODALS_POLICY) fun moveFocusedTaskToDesktop_noDisplayActivity_doesNothing() { Loading