diff options
3 files changed, 55 insertions, 25 deletions
diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/desktopmode/DesktopModeShellCommandHandler.kt b/libs/WindowManager/Shell/src/com/android/wm/shell/desktopmode/DesktopModeShellCommandHandler.kt index aa507728739e..e3a71a1ad9a5 100644 --- a/libs/WindowManager/Shell/src/com/android/wm/shell/desktopmode/DesktopModeShellCommandHandler.kt +++ b/libs/WindowManager/Shell/src/com/android/wm/shell/desktopmode/DesktopModeShellCommandHandler.kt @@ -18,6 +18,7 @@ package com.android.wm.shell.desktopmode import android.app.ActivityTaskManager.INVALID_TASK_ID import android.window.DesktopExperienceFlags +import com.android.wm.shell.desktopmode.DesktopModeEventLogger.Companion.UnminimizeReason import com.android.wm.shell.shared.desktopmode.DesktopModeTransitionSource.UNKNOWN import com.android.wm.shell.sysui.ShellCommandHandler import com.android.wm.shell.transition.FocusTransitionObserver @@ -188,8 +189,12 @@ class DesktopModeShellCommandHandler( pw.println("Error: task id should be an integer") return false } - pw.println("Not implemented.") - return false + controller.moveTaskToFront( + /* taskId= */ taskId, + /* remoteTransition= */ null, + /* unminimizeReason= */ UnminimizeReason.UNKNOWN, + ) + return true } private fun runMoveTaskOutOfDesk(args: Array<String>, pw: PrintWriter): Boolean { diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/desktopmode/DesktopTasksController.kt b/libs/WindowManager/Shell/src/com/android/wm/shell/desktopmode/DesktopTasksController.kt index b47dfe2064cd..7e6325019ab1 100644 --- a/libs/WindowManager/Shell/src/com/android/wm/shell/desktopmode/DesktopTasksController.kt +++ b/libs/WindowManager/Shell/src/com/android/wm/shell/desktopmode/DesktopTasksController.kt @@ -1121,12 +1121,13 @@ class DesktopTasksController( excludeTaskId = launchingTaskId, reason = DesktopImmersiveController.ExitReason.TASK_LAUNCH, ) - var deskIdToActivate: Int? = null - if ( - DesktopExperienceFlags.ENABLE_DISPLAY_WINDOWING_MODE_SWITCHING.isTrue && + var activationRunOnTransitStart: RunOnTransitStart? = null + val shouldActivateDesk = + (DesktopExperienceFlags.ENABLE_DISPLAY_WINDOWING_MODE_SWITCHING.isTrue || + DesktopExperienceFlags.ENABLE_MULTIPLE_DESKTOPS_BACKEND.isTrue) && !isDesktopModeShowing(displayId) - ) { - deskIdToActivate = + if (shouldActivateDesk) { + val deskIdToActivate = checkNotNull( launchingTaskId?.let { taskRepository.getDeskIdForTask(it) } ?: getDefaultDeskId(displayId) @@ -1136,6 +1137,18 @@ class DesktopTasksController( // Desk activation must be handled before app launch-related transactions. activateDeskWct.merge(launchTransaction, /* transfer= */ true) launchTransaction = activateDeskWct + activationRunOnTransitStart = { transition -> + desksTransitionObserver.addPendingTransition( + DeskTransition.ActivateDesk( + token = transition, + displayId = displayId, + deskId = deskIdToActivate, + ) + ) + } + desktopModeEnterExitTransitionListener?.onEnterDesktopModeTransitionStarted( + FREEFORM_ANIMATION_DURATION + ) } val t = if (remoteTransition == null) { @@ -1169,24 +1182,7 @@ class DesktopTasksController( if (launchingTaskId != null && taskRepository.isMinimizedTask(launchingTaskId)) { addPendingUnminimizeTransition(t, displayId, launchingTaskId, unminimizeReason) } - if ( - DesktopExperienceFlags.ENABLE_MULTIPLE_DESKTOPS_BACKEND.isTrue && - deskIdToActivate != null - ) { - if (DesktopExperienceFlags.ENABLE_DISPLAY_WINDOWING_MODE_SWITCHING.isTrue) { - desksTransitionObserver.addPendingTransition( - DeskTransition.ActivateDesk( - token = t, - displayId = displayId, - deskId = deskIdToActivate, - ) - ) - } - - desktopModeEnterExitTransitionListener?.onEnterDesktopModeTransitionStarted( - FREEFORM_ANIMATION_DURATION - ) - } + activationRunOnTransitStart?.invoke(t) exitImmersiveResult.asExit()?.runOnTransitionStart?.invoke(t) return t } diff --git a/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/desktopmode/DesktopTasksControllerTest.kt b/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/desktopmode/DesktopTasksControllerTest.kt index d5c84bafbd81..b0785df3542e 100644 --- a/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/desktopmode/DesktopTasksControllerTest.kt +++ b/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/desktopmode/DesktopTasksControllerTest.kt @@ -334,6 +334,16 @@ class DesktopTasksControllerTest(flags: FlagsParameterization) : ShellTestCase() whenever(enterDesktopTransitionHandler.moveToDesktop(any(), any())).thenAnswer { Binder() } whenever(exitDesktopTransitionHandler.startTransition(any(), any(), any(), any())) .thenReturn(Binder()) + whenever( + desktopMixedTransitionHandler.startLaunchTransition( + any(), + any(), + anyOrNull(), + anyOrNull(), + anyOrNull(), + ) + ) + .thenReturn(Binder()) whenever(displayController.getDisplayLayout(anyInt())).thenReturn(displayLayout) whenever(displayController.getDisplayContext(anyInt())).thenReturn(mockDisplayContext) whenever(displayController.getDisplay(anyInt())).thenReturn(display) @@ -6576,6 +6586,25 @@ class DesktopTasksControllerTest(flags: FlagsParameterization) : ShellTestCase() @EnableFlags( Flags.FLAG_ENABLE_DESKTOP_WINDOWING_WALLPAPER_ACTIVITY, Flags.FLAG_ENABLE_DESKTOP_WALLPAPER_ACTIVITY_FOR_SYSTEM_USER, + Flags.FLAG_ENABLE_MULTIPLE_DESKTOPS_BACKEND, + ) + fun startLaunchTransition_desktopNotShowing_updatesDesktopEnterExitListener() { + setUpFreeformTask(displayId = DEFAULT_DISPLAY, deskId = 0) + taskRepository.setDeskInactive(deskId = 0) + + controller.startLaunchTransition( + transitionType = TRANSIT_OPEN, + wct = WindowContainerTransaction(), + launchingTaskId = null, + ) + + verify(desktopModeEnterExitTransitionListener).onEnterDesktopModeTransitionStarted(any()) + } + + @Test + @EnableFlags( + Flags.FLAG_ENABLE_DESKTOP_WINDOWING_WALLPAPER_ACTIVITY, + Flags.FLAG_ENABLE_DESKTOP_WALLPAPER_ACTIVITY_FOR_SYSTEM_USER, ) fun startLaunchTransition_desktopShowing_doesNotReorderWallpaper() { val wct = WindowContainerTransaction() |