diff --git a/packages/SystemUI/src/com/android/systemui/pip/PipTaskOrganizer.java b/packages/SystemUI/src/com/android/systemui/pip/PipTaskOrganizer.java index b93e07e65c737..e151aa94d85ac 100644 --- a/packages/SystemUI/src/com/android/systemui/pip/PipTaskOrganizer.java +++ b/packages/SystemUI/src/com/android/systemui/pip/PipTaskOrganizer.java @@ -738,9 +738,9 @@ public class PipTaskOrganizer extends TaskOrganizer implements // on the task to ensure that the task "matches" the parent's bounds. taskBounds = (direction == TRANSITION_DIRECTION_TO_FULLSCREEN) ? null : destinationBounds; - // As for the final windowing mode, simply reset it to undefined and reset the activity - // mode set prior to the animation running - wct.setWindowingMode(mToken, WINDOWING_MODE_UNDEFINED); + // Reset the final windowing mode. + wct.setWindowingMode(mToken, getOutPipWindowingMode()); + // Simply reset the activity mode set prior to the animation running. wct.setActivityWindowingMode(mToken, WINDOWING_MODE_UNDEFINED); if (mSplitDivider != null && direction == TRANSITION_DIRECTION_TO_SPLIT_SCREEN) { wct.reparent(mToken, mSplitDivider.getSecondaryRoot(), true /* onTop */); @@ -752,9 +752,30 @@ public class PipTaskOrganizer extends TaskOrganizer implements wct.setBounds(mToken, taskBounds); wct.setBoundsChangeTransaction(mToken, tx); + applyFinishBoundsResize(wct, direction); + } + + /** + * Applies the window container transaction to finish a bounds resize. + * + * Called by {@link #finishResize(SurfaceControl.Transaction, Rect, int, int)}} once it has + * finished preparing the transaction. It allows subclasses to modify the transaction before + * applying it. + */ + public void applyFinishBoundsResize(@NonNull WindowContainerTransaction wct, + @PipAnimationController.TransitionDirection int direction) { WindowOrganizer.applyTransaction(wct); } + /** + * The windowing mode to restore to when resizing out of PIP direction. Defaults to undefined + * and can be overridden to restore to an alternate windowing mode. + */ + public int getOutPipWindowingMode() { + // By default, simply reset the windowing mode to undefined. + return WINDOWING_MODE_UNDEFINED; + } + private void animateResizePip(Rect currentBounds, Rect destinationBounds, @PipAnimationController.TransitionDirection int direction, int durationMs) { if (Looper.myLooper() != mUpdateHandler.getLooper()) {