Loading libs/WindowManager/Shell/src/com/android/wm/shell/desktopmode/DesktopTasksController.kt +48 −20 Original line number Diff line number Diff line Loading @@ -508,6 +508,8 @@ class DesktopTasksController( willExitDesktop = true, // No need to clean up the wallpaper / home when coming from a recents transition. skipWallpaperAndHomeOrdering = true, // This is a recents-finish, so taskbar animation on transit start does not apply. skipUpdatingExitDesktopListener = true, ) runOnTransitStart?.invoke(transition) } Loading Loading @@ -859,9 +861,12 @@ class DesktopTasksController( transition = enterDesktopTaskTransitionHandler.moveToDesktop(wct, transitionSource) invokeCallbackToOverview(transition, callback) } // Replaced by |IDesktopTaskListener#onActiveDeskChanged|. if (!desktopState.enableMultipleDesktops) { desktopModeEnterExitTransitionListener?.onEnterDesktopModeTransitionStarted( toDesktopAnimationDurationMs ) } runOnTransitStart?.invoke(transition) exitResult.asExit()?.runOnTransitionStart?.invoke(transition) return true Loading Loading @@ -904,9 +909,12 @@ class DesktopTasksController( transition = enterDesktopTaskTransitionHandler.moveToDesktop(wct, transitionSource) invokeCallbackToOverview(transition, callback) } // Replaced by |IDesktopTaskListener#onActiveDeskChanged|. if (!desktopState.enableMultipleDesktops) { desktopModeEnterExitTransitionListener?.onEnterDesktopModeTransitionStarted( toDesktopAnimationDurationMs ) } runOnTransitStart?.invoke(transition) exitResult.asExit()?.runOnTransitionStart?.invoke(transition) if (!DesktopExperienceFlags.ENABLE_MULTIPLE_DESKTOPS_BACKEND.isTrue) { Loading Loading @@ -984,9 +992,12 @@ class DesktopTasksController( reason = DesktopImmersiveController.ExitReason.TASK_LAUNCH, ) val transition = dragToDesktopTransitionHandler.finishDragToDesktopTransition(wct) // Replaced by |IDesktopTaskListener#onActiveDeskChanged|. if (!desktopState.enableMultipleDesktops) { desktopModeEnterExitTransitionListener?.onEnterDesktopModeTransitionStarted( DRAG_TO_DESKTOP_FINISH_ANIM_DURATION_MS.toInt() ) } if (transition != null) { runOnTransitStart?.invoke(transition) exitResult.asExit()?.runOnTransitionStart?.invoke(transition) Loading Loading @@ -1324,7 +1335,11 @@ class DesktopTasksController( !taskRepository.isOnlyVisibleNonClosingTask(task.taskId) // This callback is already invoked by |addMoveToFullscreenChanges| when this flag is // enabled. && !DesktopExperienceFlags.ENABLE_MULTIPLE_DESKTOPS_BACKEND.isTrue && !DesktopExperienceFlags.ENABLE_MULTIPLE_DESKTOPS_BACKEND.isTrue // Replaced by |IDesktopTaskListener#onActiveDeskChanged|. && !desktopState.enableMultipleDesktops ) { desktopModeEnterExitTransitionListener?.onExitDesktopModeTransitionStarted( FULLSCREEN_ANIMATION_DURATION, Loading Loading @@ -1496,10 +1511,13 @@ class DesktopTasksController( // Desk activation must be handled before app launch-related transactions. activateDeskWct.merge(launchTransaction, /* transfer= */ true) launchTransaction = activateDeskWct // Replaced by |IDesktopTaskListener#onActiveDeskChanged|. if (!desktopState.enableMultipleDesktops) { desktopModeEnterExitTransitionListener?.onEnterDesktopModeTransitionStarted( toDesktopAnimationDurationMs ) } } val t = if (remoteTransition == null) { logV("startLaunchTransition -- no remoteTransition -- wct = $launchTransaction") Loading Loading @@ -2338,12 +2356,19 @@ class DesktopTasksController( willExitDesktop: Boolean, shouldEndUpAtHome: Boolean = true, skipWallpaperAndHomeOrdering: Boolean = false, skipUpdatingExitDesktopListener: Boolean = false, ): RunOnTransitStart? { if (!willExitDesktop) return null if ( !skipUpdatingExitDesktopListener && // Replaced by |IDesktopTaskListener#onActiveDeskChanged|. !desktopState.enableMultipleDesktops ) { desktopModeEnterExitTransitionListener?.onExitDesktopModeTransitionStarted( FULLSCREEN_ANIMATION_DURATION, shouldEndUpAtHome, ) } if ( !skipWallpaperAndHomeOrdering || !DesktopExperienceFlags.ENABLE_MULTIPLE_DESKTOPS_BACKEND.isTrue Loading Loading @@ -3605,10 +3630,13 @@ class DesktopTasksController( handler?.setTransition(transition) runOnTransitStart?.invoke(transition) // Replaced by |IDesktopTaskListener#onActiveDeskChanged|. if (!desktopState.enableMultipleDesktops) { desktopModeEnterExitTransitionListener?.onEnterDesktopModeTransitionStarted( toDesktopAnimationDurationMs ) } } /** * TODO: b/393978539 - Deactivation should not happen in desktop-first devices when going home. Loading libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/desktopmode/DesktopPipTransitionControllerTest.kt +7 −15 Original line number Diff line number Diff line Loading @@ -40,10 +40,9 @@ import com.google.common.truth.Truth.assertThat import org.junit.Before import org.junit.Test import org.junit.runner.RunWith import org.mockito.ArgumentMatchers.anyBoolean import org.mockito.ArgumentMatchers.anyInt import org.mockito.ArgumentMatchers.eq import org.mockito.kotlin.any import org.mockito.kotlin.anyOrNull import org.mockito.kotlin.eq import org.mockito.kotlin.mock import org.mockito.kotlin.never import org.mockito.kotlin.verify Loading Loading @@ -83,9 +82,9 @@ class DesktopPipTransitionControllerTest(flags: FlagsParameterization) : ShellTe @Before fun setUp() { whenever(mockPipDesktopState.isDesktopWindowingPipEnabled()).thenReturn(true) whenever(mockDesktopUserRepositories.getProfile(anyInt())).thenReturn(mockDesktopRepository) whenever(mockDesktopRepository.isAnyDeskActive(anyInt())).thenReturn(true) whenever(mockDesktopRepository.getActiveDeskId(anyInt())).thenReturn(DESK_ID) whenever(mockDesktopUserRepositories.getProfile(any())).thenReturn(mockDesktopRepository) whenever(mockDesktopRepository.isAnyDeskActive(any())).thenReturn(true) whenever(mockDesktopRepository.getActiveDeskId(any())).thenReturn(DESK_ID) whenever(mockShellTaskOrganizer.getRunningTaskInfo(freeformParentTask.taskId)) .thenReturn(freeformParentTask) whenever(mockShellTaskOrganizer.getRunningTaskInfo(fullscreenParentTask.taskId)) Loading @@ -112,7 +111,7 @@ class DesktopPipTransitionControllerTest(flags: FlagsParameterization) : ShellTe @Test fun maybeUpdateParentInWct_nullParentInfo_noWctChanges() { val wct = WindowContainerTransaction() whenever(mockShellTaskOrganizer.getRunningTaskInfo(anyInt())).thenReturn(null) whenever(mockShellTaskOrganizer.getRunningTaskInfo(any())).thenReturn(null) controller.maybeUpdateParentInWct(wct, freeformParentTask.taskId) Loading Loading @@ -225,14 +224,7 @@ class DesktopPipTransitionControllerTest(flags: FlagsParameterization) : ShellTe ) } else { verify(mockDesktopTasksController, never()) .performDesktopExitCleanUp( any(), anyInt(), anyInt(), anyBoolean(), anyBoolean(), anyBoolean(), ) .performDesktopExitCleanUp(any(), anyOrNull(), any(), any(), any(), any(), any()) } } Loading libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/desktopmode/DesktopTasksControllerTest.kt +0 −19 Original line number Diff line number Diff line Loading @@ -9057,25 +9057,6 @@ class DesktopTasksControllerTest(flags: FlagsParameterization) : ShellTestCase() .addPendingTransition(DeskTransition.DeactivateDesk(transition, deskId)) } @Test @EnableFlags(Flags.FLAG_ENABLE_MULTIPLE_DESKTOPS_BACKEND) fun onRecentsInDesktopAnimationFinishing_deskStillActive_notReturningToDesk_notifiesDesktopExit() { val deskId = 0 taskRepository.setActiveDesk(DEFAULT_DISPLAY, deskId) val transition = Binder() val finishWct = WindowContainerTransaction() controller.onRecentsInDesktopAnimationFinishing( transition = transition, finishWct = finishWct, returnToApp = false, activeDeskIdOnRecentsStart = deskId, ) verify(desktopModeEnterExitTransitionListener) .onExitDesktopModeTransitionStarted(any(), any()) } @Test @EnableFlags(Flags.FLAG_ENABLE_MULTIPLE_DESKTOPS_BACKEND) fun onRecentsInDesktopAnimationFinishing_deskStillActive_notReturningToDesk_doesNotBringUpWallpaperOrHome() { Loading Loading
libs/WindowManager/Shell/src/com/android/wm/shell/desktopmode/DesktopTasksController.kt +48 −20 Original line number Diff line number Diff line Loading @@ -508,6 +508,8 @@ class DesktopTasksController( willExitDesktop = true, // No need to clean up the wallpaper / home when coming from a recents transition. skipWallpaperAndHomeOrdering = true, // This is a recents-finish, so taskbar animation on transit start does not apply. skipUpdatingExitDesktopListener = true, ) runOnTransitStart?.invoke(transition) } Loading Loading @@ -859,9 +861,12 @@ class DesktopTasksController( transition = enterDesktopTaskTransitionHandler.moveToDesktop(wct, transitionSource) invokeCallbackToOverview(transition, callback) } // Replaced by |IDesktopTaskListener#onActiveDeskChanged|. if (!desktopState.enableMultipleDesktops) { desktopModeEnterExitTransitionListener?.onEnterDesktopModeTransitionStarted( toDesktopAnimationDurationMs ) } runOnTransitStart?.invoke(transition) exitResult.asExit()?.runOnTransitionStart?.invoke(transition) return true Loading Loading @@ -904,9 +909,12 @@ class DesktopTasksController( transition = enterDesktopTaskTransitionHandler.moveToDesktop(wct, transitionSource) invokeCallbackToOverview(transition, callback) } // Replaced by |IDesktopTaskListener#onActiveDeskChanged|. if (!desktopState.enableMultipleDesktops) { desktopModeEnterExitTransitionListener?.onEnterDesktopModeTransitionStarted( toDesktopAnimationDurationMs ) } runOnTransitStart?.invoke(transition) exitResult.asExit()?.runOnTransitionStart?.invoke(transition) if (!DesktopExperienceFlags.ENABLE_MULTIPLE_DESKTOPS_BACKEND.isTrue) { Loading Loading @@ -984,9 +992,12 @@ class DesktopTasksController( reason = DesktopImmersiveController.ExitReason.TASK_LAUNCH, ) val transition = dragToDesktopTransitionHandler.finishDragToDesktopTransition(wct) // Replaced by |IDesktopTaskListener#onActiveDeskChanged|. if (!desktopState.enableMultipleDesktops) { desktopModeEnterExitTransitionListener?.onEnterDesktopModeTransitionStarted( DRAG_TO_DESKTOP_FINISH_ANIM_DURATION_MS.toInt() ) } if (transition != null) { runOnTransitStart?.invoke(transition) exitResult.asExit()?.runOnTransitionStart?.invoke(transition) Loading Loading @@ -1324,7 +1335,11 @@ class DesktopTasksController( !taskRepository.isOnlyVisibleNonClosingTask(task.taskId) // This callback is already invoked by |addMoveToFullscreenChanges| when this flag is // enabled. && !DesktopExperienceFlags.ENABLE_MULTIPLE_DESKTOPS_BACKEND.isTrue && !DesktopExperienceFlags.ENABLE_MULTIPLE_DESKTOPS_BACKEND.isTrue // Replaced by |IDesktopTaskListener#onActiveDeskChanged|. && !desktopState.enableMultipleDesktops ) { desktopModeEnterExitTransitionListener?.onExitDesktopModeTransitionStarted( FULLSCREEN_ANIMATION_DURATION, Loading Loading @@ -1496,10 +1511,13 @@ class DesktopTasksController( // Desk activation must be handled before app launch-related transactions. activateDeskWct.merge(launchTransaction, /* transfer= */ true) launchTransaction = activateDeskWct // Replaced by |IDesktopTaskListener#onActiveDeskChanged|. if (!desktopState.enableMultipleDesktops) { desktopModeEnterExitTransitionListener?.onEnterDesktopModeTransitionStarted( toDesktopAnimationDurationMs ) } } val t = if (remoteTransition == null) { logV("startLaunchTransition -- no remoteTransition -- wct = $launchTransaction") Loading Loading @@ -2338,12 +2356,19 @@ class DesktopTasksController( willExitDesktop: Boolean, shouldEndUpAtHome: Boolean = true, skipWallpaperAndHomeOrdering: Boolean = false, skipUpdatingExitDesktopListener: Boolean = false, ): RunOnTransitStart? { if (!willExitDesktop) return null if ( !skipUpdatingExitDesktopListener && // Replaced by |IDesktopTaskListener#onActiveDeskChanged|. !desktopState.enableMultipleDesktops ) { desktopModeEnterExitTransitionListener?.onExitDesktopModeTransitionStarted( FULLSCREEN_ANIMATION_DURATION, shouldEndUpAtHome, ) } if ( !skipWallpaperAndHomeOrdering || !DesktopExperienceFlags.ENABLE_MULTIPLE_DESKTOPS_BACKEND.isTrue Loading Loading @@ -3605,10 +3630,13 @@ class DesktopTasksController( handler?.setTransition(transition) runOnTransitStart?.invoke(transition) // Replaced by |IDesktopTaskListener#onActiveDeskChanged|. if (!desktopState.enableMultipleDesktops) { desktopModeEnterExitTransitionListener?.onEnterDesktopModeTransitionStarted( toDesktopAnimationDurationMs ) } } /** * TODO: b/393978539 - Deactivation should not happen in desktop-first devices when going home. Loading
libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/desktopmode/DesktopPipTransitionControllerTest.kt +7 −15 Original line number Diff line number Diff line Loading @@ -40,10 +40,9 @@ import com.google.common.truth.Truth.assertThat import org.junit.Before import org.junit.Test import org.junit.runner.RunWith import org.mockito.ArgumentMatchers.anyBoolean import org.mockito.ArgumentMatchers.anyInt import org.mockito.ArgumentMatchers.eq import org.mockito.kotlin.any import org.mockito.kotlin.anyOrNull import org.mockito.kotlin.eq import org.mockito.kotlin.mock import org.mockito.kotlin.never import org.mockito.kotlin.verify Loading Loading @@ -83,9 +82,9 @@ class DesktopPipTransitionControllerTest(flags: FlagsParameterization) : ShellTe @Before fun setUp() { whenever(mockPipDesktopState.isDesktopWindowingPipEnabled()).thenReturn(true) whenever(mockDesktopUserRepositories.getProfile(anyInt())).thenReturn(mockDesktopRepository) whenever(mockDesktopRepository.isAnyDeskActive(anyInt())).thenReturn(true) whenever(mockDesktopRepository.getActiveDeskId(anyInt())).thenReturn(DESK_ID) whenever(mockDesktopUserRepositories.getProfile(any())).thenReturn(mockDesktopRepository) whenever(mockDesktopRepository.isAnyDeskActive(any())).thenReturn(true) whenever(mockDesktopRepository.getActiveDeskId(any())).thenReturn(DESK_ID) whenever(mockShellTaskOrganizer.getRunningTaskInfo(freeformParentTask.taskId)) .thenReturn(freeformParentTask) whenever(mockShellTaskOrganizer.getRunningTaskInfo(fullscreenParentTask.taskId)) Loading @@ -112,7 +111,7 @@ class DesktopPipTransitionControllerTest(flags: FlagsParameterization) : ShellTe @Test fun maybeUpdateParentInWct_nullParentInfo_noWctChanges() { val wct = WindowContainerTransaction() whenever(mockShellTaskOrganizer.getRunningTaskInfo(anyInt())).thenReturn(null) whenever(mockShellTaskOrganizer.getRunningTaskInfo(any())).thenReturn(null) controller.maybeUpdateParentInWct(wct, freeformParentTask.taskId) Loading Loading @@ -225,14 +224,7 @@ class DesktopPipTransitionControllerTest(flags: FlagsParameterization) : ShellTe ) } else { verify(mockDesktopTasksController, never()) .performDesktopExitCleanUp( any(), anyInt(), anyInt(), anyBoolean(), anyBoolean(), anyBoolean(), ) .performDesktopExitCleanUp(any(), anyOrNull(), any(), any(), any(), any(), any()) } } Loading
libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/desktopmode/DesktopTasksControllerTest.kt +0 −19 Original line number Diff line number Diff line Loading @@ -9057,25 +9057,6 @@ class DesktopTasksControllerTest(flags: FlagsParameterization) : ShellTestCase() .addPendingTransition(DeskTransition.DeactivateDesk(transition, deskId)) } @Test @EnableFlags(Flags.FLAG_ENABLE_MULTIPLE_DESKTOPS_BACKEND) fun onRecentsInDesktopAnimationFinishing_deskStillActive_notReturningToDesk_notifiesDesktopExit() { val deskId = 0 taskRepository.setActiveDesk(DEFAULT_DISPLAY, deskId) val transition = Binder() val finishWct = WindowContainerTransaction() controller.onRecentsInDesktopAnimationFinishing( transition = transition, finishWct = finishWct, returnToApp = false, activeDeskIdOnRecentsStart = deskId, ) verify(desktopModeEnterExitTransitionListener) .onExitDesktopModeTransitionStarted(any(), any()) } @Test @EnableFlags(Flags.FLAG_ENABLE_MULTIPLE_DESKTOPS_BACKEND) fun onRecentsInDesktopAnimationFinishing_deskStillActive_notReturningToDesk_doesNotBringUpWallpaperOrHome() { Loading