final Rect mContainingFrame = new Rect();
- private final Rect mParentFrame = new Rect();
+ final Rect mParentFrame = new Rect();
/** Whether the parent frame would have been different if there was no display cutout. */
private boolean mParentFrameWasClippedByDisplayCutout;
mContainingFrame.set(contentFrame);
}
}
+
+ final TaskStack stack = getStack();
+ if (inPinnedWindowingMode() && stack != null
+ && stack.lastAnimatingBoundsWasToFullscreen()) {
+ // PIP edge case: When going from pinned to fullscreen, we apply a
+ // tempInsetFrame for the full task - but we're still at the start of the animation.
+ // To prevent a jump if there's a letterbox, restrict to the parent frame.
+ mInsetFrame.intersectUnchecked(parentFrame);
+ mContainingFrame.intersectUnchecked(parentFrame);
+ }
+
mDisplayFrame.set(mContainingFrame);
layoutXDiff = !mInsetFrame.isEmpty() ? mInsetFrame.left - mContainingFrame.left : 0;
layoutYDiff = !mInsetFrame.isEmpty() ? mInsetFrame.top - mContainingFrame.top : 0;
mTmpSourceBounds.inset(mWin.mLastRelayoutContentInsets);
allowStretching = true;
}
+
+ // Make sure that what we're animating to and from is actually the right size in case
+ // the window cannot take up the full screen.
+ mTmpStackBounds.intersectUnchecked(w.mParentFrame);
+ mTmpSourceBounds.intersectUnchecked(w.mParentFrame);
+ mTmpAnimatingBounds.intersectUnchecked(w.mParentFrame);
+
if (!mTmpSourceBounds.isEmpty()) {
// Get the final target stack bounds, if we are not animating, this is just the
// current stack bounds