Loading libs/WindowManager/Shell/src/com/android/wm/shell/desktopmode/DesktopTaskChangeListener.kt +16 −4 Original line number Diff line number Diff line Loading @@ -91,6 +91,10 @@ class DesktopTaskChangeListener( } override fun onTaskChanging(taskInfo: RunningTaskInfo) { val desktopRepository: DesktopRepository = desktopUserRepositories.getProfile(taskInfo.userId) val isFreeformTask = taskInfo.isFreeform val isActiveTask = desktopRepository.isActiveTask(taskInfo.taskId) if ( !desktopState.isDesktopModeSupportedOnDisplay(taskInfo.displayId) && DesktopExperienceFlags.ENABLE_MULTIPLE_DESKTOPS_BACKEND.isTrue Loading @@ -100,12 +104,20 @@ class DesktopTaskChangeListener( taskInfo.taskId, taskInfo.displayId, ) if ( DesktopExperienceFlags.MOVE_TO_NEXT_DISPLAY_SHORTCUT_WITH_PROJECTED_MODE.isTrue && !isFreeformTask && isActiveTask ) { logD( "Removing previous desktop task moved to non-desktop display", taskInfo.taskId, taskInfo.displayId, ) removeTask(desktopRepository, taskInfo.taskId, isClosingTask = false) } return } val desktopRepository: DesktopRepository = desktopUserRepositories.getProfile(taskInfo.userId) val isFreeformTask = taskInfo.isFreeform val isActiveTask = desktopRepository.isActiveTask(taskInfo.taskId) logD( "onTaskChanging for taskId=%d, displayId=%d userId=%s currentUserId=%d " + "parentTaskId=%d isFreeform=%b isActive=%b", Loading libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/desktopmode/DesktopTaskChangeListenerTest.kt +17 −0 Original line number Diff line number Diff line Loading @@ -28,6 +28,7 @@ import androidx.test.filters.SmallTest import com.android.server.am.Flags.FLAG_PERCEPTIBLE_TASKS import com.android.window.flags.Flags.FLAG_ENABLE_DESKTOP_WINDOWING_BACK_NAVIGATION import com.android.window.flags.Flags.FLAG_ENABLE_MULTIPLE_DESKTOPS_BACKEND import com.android.window.flags.Flags.FLAG_MOVE_TO_NEXT_DISPLAY_SHORTCUT_WITH_PROJECTED_MODE import com.android.wm.shell.MockToken import com.android.wm.shell.ShellTestCase import com.android.wm.shell.TestRunningTaskInfoBuilder Loading Loading @@ -269,6 +270,22 @@ class DesktopTaskChangeListenerTest : ShellTestCase() { ) } @Test @EnableFlags( FLAG_ENABLE_MULTIPLE_DESKTOPS_BACKEND, FLAG_MOVE_TO_NEXT_DISPLAY_SHORTCUT_WITH_PROJECTED_MODE, ) fun onTaskChanging_taskMovedToUnsupportedDisplay_removesTaskFromRepo() { val task = createFullscreenTask() whenever(desktopUserRepositories.current.isActiveTask(task.taskId)).thenReturn(true) // Task is no longer freeform as it moved to a display that does not support it. task.displayId = UNSUPPORTED_DISPLAY_ID desktopTaskChangeListener.onTaskChanging(task) verify(desktopUserRepositories.current).removeTask(task.taskId) } @Test fun onTaskMovingToFront_fullscreenTask_activeTaskInDesktopRepo_removesTaskFromRepo() { val task = createFullscreenTask().apply { isVisible = true } Loading Loading
libs/WindowManager/Shell/src/com/android/wm/shell/desktopmode/DesktopTaskChangeListener.kt +16 −4 Original line number Diff line number Diff line Loading @@ -91,6 +91,10 @@ class DesktopTaskChangeListener( } override fun onTaskChanging(taskInfo: RunningTaskInfo) { val desktopRepository: DesktopRepository = desktopUserRepositories.getProfile(taskInfo.userId) val isFreeformTask = taskInfo.isFreeform val isActiveTask = desktopRepository.isActiveTask(taskInfo.taskId) if ( !desktopState.isDesktopModeSupportedOnDisplay(taskInfo.displayId) && DesktopExperienceFlags.ENABLE_MULTIPLE_DESKTOPS_BACKEND.isTrue Loading @@ -100,12 +104,20 @@ class DesktopTaskChangeListener( taskInfo.taskId, taskInfo.displayId, ) if ( DesktopExperienceFlags.MOVE_TO_NEXT_DISPLAY_SHORTCUT_WITH_PROJECTED_MODE.isTrue && !isFreeformTask && isActiveTask ) { logD( "Removing previous desktop task moved to non-desktop display", taskInfo.taskId, taskInfo.displayId, ) removeTask(desktopRepository, taskInfo.taskId, isClosingTask = false) } return } val desktopRepository: DesktopRepository = desktopUserRepositories.getProfile(taskInfo.userId) val isFreeformTask = taskInfo.isFreeform val isActiveTask = desktopRepository.isActiveTask(taskInfo.taskId) logD( "onTaskChanging for taskId=%d, displayId=%d userId=%s currentUserId=%d " + "parentTaskId=%d isFreeform=%b isActive=%b", Loading
libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/desktopmode/DesktopTaskChangeListenerTest.kt +17 −0 Original line number Diff line number Diff line Loading @@ -28,6 +28,7 @@ import androidx.test.filters.SmallTest import com.android.server.am.Flags.FLAG_PERCEPTIBLE_TASKS import com.android.window.flags.Flags.FLAG_ENABLE_DESKTOP_WINDOWING_BACK_NAVIGATION import com.android.window.flags.Flags.FLAG_ENABLE_MULTIPLE_DESKTOPS_BACKEND import com.android.window.flags.Flags.FLAG_MOVE_TO_NEXT_DISPLAY_SHORTCUT_WITH_PROJECTED_MODE import com.android.wm.shell.MockToken import com.android.wm.shell.ShellTestCase import com.android.wm.shell.TestRunningTaskInfoBuilder Loading Loading @@ -269,6 +270,22 @@ class DesktopTaskChangeListenerTest : ShellTestCase() { ) } @Test @EnableFlags( FLAG_ENABLE_MULTIPLE_DESKTOPS_BACKEND, FLAG_MOVE_TO_NEXT_DISPLAY_SHORTCUT_WITH_PROJECTED_MODE, ) fun onTaskChanging_taskMovedToUnsupportedDisplay_removesTaskFromRepo() { val task = createFullscreenTask() whenever(desktopUserRepositories.current.isActiveTask(task.taskId)).thenReturn(true) // Task is no longer freeform as it moved to a display that does not support it. task.displayId = UNSUPPORTED_DISPLAY_ID desktopTaskChangeListener.onTaskChanging(task) verify(desktopUserRepositories.current).removeTask(task.taskId) } @Test fun onTaskMovingToFront_fullscreenTask_activeTaskInDesktopRepo_removesTaskFromRepo() { val task = createFullscreenTask().apply { isVisible = true } Loading