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

Commit 92eb4fa3 authored by mattsziklay's avatar mattsziklay Committed by Matt Sziklay
Browse files

Prevent pip launch during drag to desktop.

The launch of the home intent used at the start of drag to desktop
results in the dragged app attempting to invoke pip if the task is
dragged to split and if pip is applicable. These simultaneous
transitions leave the app in a broken state.

This CL avoids this by explicitly preventing pip in the first
WindowContainerTransaction of drag to desktop.

Fix: 356297301
Test: Manual, play a video in Youtube and drag to split while playing
Flag: EXEMPT bugfix
Change-Id: I56ae52d96fbeaf123e519372ba663f424b5981a3
parent f9c546be
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -407,7 +407,7 @@ class DesktopTasksController(
        interactionJankMonitor.begin(taskSurface, context, handler,
            CUJ_DESKTOP_MODE_ENTER_APP_HANDLE_DRAG_HOLD)
        dragToDesktopTransitionHandler.startDragToDesktopTransition(
            taskInfo.taskId,
            taskInfo,
            dragToDesktopValueAnimator
        )
    }
+9 −6
Original line number Diff line number Diff line
@@ -109,8 +109,8 @@ sealed class DragToDesktopTransitionHandler(
     * after one of the "end" or "cancel" transitions is merged into this transition.
     */
    fun startDragToDesktopTransition(
        taskId: Int,
        dragToDesktopAnimator: MoveToDesktopAnimator,
        taskInfo: RunningTaskInfo,
        dragToDesktopAnimator: MoveToDesktopAnimator
    ) {
        if (inProgress) {
            ProtoLog.v(
@@ -137,23 +137,26 @@ sealed class DragToDesktopTransitionHandler(
            )
        val wct = WindowContainerTransaction()
        wct.sendPendingIntent(pendingIntent, launchHomeIntent, Bundle())
        // The home launch done above will result in an attempt to move the task to pip if
        // applicable, resulting in a broken state. Prevent that here.
        wct.setDoNotPip(taskInfo.token)
        val startTransitionToken =
            transitions.startTransition(TRANSIT_DESKTOP_MODE_START_DRAG_TO_DESKTOP, wct, this)

        transitionState =
            if (isSplitTask(taskId)) {
            if (isSplitTask(taskInfo.taskId)) {
                val otherTask =
                    getOtherSplitTask(taskId)
                    getOtherSplitTask(taskInfo.taskId)
                        ?: throw IllegalStateException("Expected split task to have a counterpart.")
                TransitionState.FromSplit(
                    draggedTaskId = taskId,
                    draggedTaskId = taskInfo.taskId,
                    dragAnimator = dragToDesktopAnimator,
                    startTransitionToken = startTransitionToken,
                    otherSplitTask = otherTask
                )
            } else {
                TransitionState.FromFullscreen(
                    draggedTaskId = taskId,
                    draggedTaskId = taskInfo.taskId,
                    dragAnimator = dragToDesktopAnimator,
                    startTransitionToken = startTransitionToken
                )
+1 −1
Original line number Diff line number Diff line
@@ -581,7 +581,7 @@ class DragToDesktopTransitionHandlerTest : ShellTestCase() {
                )
            )
            .thenReturn(token)
        handler.startDragToDesktopTransition(task.taskId, dragAnimator)
        handler.startDragToDesktopTransition(task, dragAnimator)
        return token
    }