diff --git a/quickstep/src/com/android/quickstep/AbsSwipeUpHandler.java b/quickstep/src/com/android/quickstep/AbsSwipeUpHandler.java index 63f1336cca..43db7c380c 100644 --- a/quickstep/src/com/android/quickstep/AbsSwipeUpHandler.java +++ b/quickstep/src/com/android/quickstep/AbsSwipeUpHandler.java @@ -1515,6 +1515,20 @@ 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(() -> { + mTaskSnapshot = mRecentsAnimationController.screenshotTask( + mGestureState.getRunningTaskId()); + }); + + // 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; @@ -2089,11 +2103,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 ba809514c8..9350c729ca 100644 --- a/quickstep/src/com/android/quickstep/SystemUiProxy.java +++ b/quickstep/src/com/android/quickstep/SystemUiProxy.java @@ -549,9 +549,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) {