Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 2403a485 authored by Jorge Gil's avatar Jorge Gil
Browse files

[27/N] Desks: Add activation changes from startLaunchTransition

Fixes #startLaunchTransition to not only track the desk activation (via
DeskTransition.ActivateDesk as it previously did) but also run
addDeskActivationChanges() whenever the desk needs to be activated.

This fixes missing changes such as:
- home/wallpaper reordering
- bringing inactive tasks to front
- applying task-limit policy

Whenever we're entering desktop through this method.

Also implements "moveTaskToFront" adb command.

Flag: com.android.window.flags.enable_multiple_desktops_backend
Bug: 390692038
Bug: 393977224
Test: enter desktop, open 2 apps, move one to fullscreen, run the
"moveTaskToFront" command using the taskId of the task left in desktop -
verify the desktop was properly reactivated

Change-Id: I10e36a08e8edec37e48f31188d297ea3e968031e
parent 16b23c4f
Loading
Loading
Loading
Loading
+7 −2
Original line number Diff line number Diff line
@@ -17,6 +17,7 @@
package com.android.wm.shell.desktopmode

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 java.io.PrintWriter
@@ -183,8 +184,12 @@ class DesktopModeShellCommandHandler(private val controller: DesktopTasksControl
                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 {
+19 −23
Original line number Diff line number Diff line
@@ -1117,12 +1117,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)
@@ -1132,6 +1133,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) {
@@ -1165,24 +1178,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
    }
+29 −0
Original line number Diff line number Diff line
@@ -331,6 +331,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)
@@ -6567,6 +6577,25 @@ class DesktopTasksControllerTest(flags: FlagsParameterization) : ShellTestCase()
        assertThat(launchingTaskReorderIndex).isGreaterThan(wallpaperReorderIndex)
    }

    @Test
    @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,