diff options
| author | 2024-09-25 15:58:36 -0700 | |
|---|---|---|
| committer | 2024-10-01 23:42:51 +0000 | |
| commit | 92eb4fa3573e6f4cd6c22df2963a9e36e5bffa5c (patch) | |
| tree | 7cc4d6e4ff46fe4fba3293e49533a9f88ec4c04d | |
| parent | f9c546be4f63466a1dd71ff5e207aff5df142367 (diff) | |
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
3 files changed, 11 insertions, 8 deletions
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 125805c14321..d5a5fa264997 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 @@ -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 ) } diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/desktopmode/DragToDesktopTransitionHandler.kt b/libs/WindowManager/Shell/src/com/android/wm/shell/desktopmode/DragToDesktopTransitionHandler.kt index 2bc01b2f310e..8e264b2410f7 100644 --- a/libs/WindowManager/Shell/src/com/android/wm/shell/desktopmode/DragToDesktopTransitionHandler.kt +++ b/libs/WindowManager/Shell/src/com/android/wm/shell/desktopmode/DragToDesktopTransitionHandler.kt @@ -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 ) diff --git a/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/desktopmode/DragToDesktopTransitionHandlerTest.kt b/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/desktopmode/DragToDesktopTransitionHandlerTest.kt index d9387d2f08dd..230f7e6912ee 100644 --- a/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/desktopmode/DragToDesktopTransitionHandlerTest.kt +++ b/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/desktopmode/DragToDesktopTransitionHandlerTest.kt @@ -581,7 +581,7 @@ class DragToDesktopTransitionHandlerTest : ShellTestCase() { ) ) .thenReturn(token) - handler.startDragToDesktopTransition(task.taskId, dragAnimator) + handler.startDragToDesktopTransition(task, dragAnimator) return token } |