diff --git a/quickstep/src/com/android/quickstep/AbsSwipeUpHandler.java b/quickstep/src/com/android/quickstep/AbsSwipeUpHandler.java index 6ab3bbe778..95672f3ccb 100644 --- a/quickstep/src/com/android/quickstep/AbsSwipeUpHandler.java +++ b/quickstep/src/com/android/quickstep/AbsSwipeUpHandler.java @@ -1530,6 +1530,21 @@ public abstract class AbsSwipeUpHandler, if (mSwipePipToHomeReleaseCheck != null) { mSwipePipToHomeReleaseCheck.setCanRelease(false); } + + // grab a screenshot before the PipContentOverlay gets parented on top of the task + UI_HELPER_EXECUTOR.execute(() -> { + final int taskId = mGestureState.getRunningTaskId(); + mTaskSnapshotCache.put(taskId, + mRecentsAnimationController.screenshotTask(taskId)); + }); + + // let SystemUi reparent the overlay leash as soon as possible + SystemUiProxy.INSTANCE.get(mContext).stopSwipePipToHome( + mSwipePipToHomeAnimator.getTaskId(), + mSwipePipToHomeAnimator.getComponentName(), + mSwipePipToHomeAnimator.getDestinationBounds(), + mSwipePipToHomeAnimator.getContentOverlay()); + windowAnim = mSwipePipToHomeAnimators; } else { mSwipePipToHomeAnimator = null; @@ -2108,11 +2123,6 @@ public abstract class AbsSwipeUpHandler, */ private void maybeFinishSwipePipToHome() { if (mIsSwipingPipToHome && mSwipePipToHomeAnimators[0] != null) { - SystemUiProxy.INSTANCE.get(mContext).stopSwipePipToHome( - mSwipePipToHomeAnimator.getTaskId(), - mSwipePipToHomeAnimator.getComponentName(), - mSwipePipToHomeAnimator.getDestinationBounds(), - mSwipePipToHomeAnimator.getContentOverlay()); mRecentsAnimationController.setFinishTaskTransaction( mSwipePipToHomeAnimator.getTaskId(), mSwipePipToHomeAnimator.getFinishTransaction(), diff --git a/quickstep/src/com/android/quickstep/SystemUiProxy.java b/quickstep/src/com/android/quickstep/SystemUiProxy.java index d40558c585..dd6499bebf 100644 --- a/quickstep/src/com/android/quickstep/SystemUiProxy.java +++ b/quickstep/src/com/android/quickstep/SystemUiProxy.java @@ -563,9 +563,9 @@ public class SystemUiProxy implements ISystemUiProxy { } /** - * Notifies WM Shell that launcher has finished all the animation for swipe to home. WM Shell - * can choose to fade out the overlay when entering PIP is finished, and WM Shell should be - * responsible for cleaning up the overlay. + * Notifies WM Shell that launcher has finished the preparation of the animation for swipe to + * home. WM Shell can choose to fade out the overlay when entering PIP is finished, and WM Shell + * should be responsible for cleaning up the overlay. */ public void stopSwipePipToHome(int taskId, ComponentName componentName, Rect destinationBounds, SurfaceControl overlay) {