Reparent PiP to split screen on exit
When exiting PiP from a different orientation, reparent the PiP task to
split screen as we do in finishResize and orientation does not change.
Video: http://rcll/aaaaaabFQoRHlzixHdtY/dBQuk6juYvCIiO4zc9aHFP
Bug: 159617346
Test: manual, see video
Change-Id: Iafe1abb61d35cabdc46c172ae80f7e0886307ab7
diff --git a/packages/SystemUI/src/com/android/systemui/pip/PipTaskOrganizer.java b/packages/SystemUI/src/com/android/systemui/pip/PipTaskOrganizer.java
index d924346..e2feb71 100644
--- a/packages/SystemUI/src/com/android/systemui/pip/PipTaskOrganizer.java
+++ b/packages/SystemUI/src/com/android/systemui/pip/PipTaskOrganizer.java
@@ -273,8 +273,7 @@
sendOnPipTransitionStarted(direction);
// Don't bother doing an animation if the display rotation differs or if it's in
// a non-supported windowing mode
- wct.setWindowingMode(mToken, WINDOWING_MODE_UNDEFINED);
- wct.setActivityWindowingMode(mToken, WINDOWING_MODE_UNDEFINED);
+ applyWindowingModeChangeOnExit(wct, direction);
WindowOrganizer.applyTransaction(wct);
// Send finished callback though animation is ignored.
sendOnPipTransitionFinished(direction);
@@ -303,6 +302,16 @@
mExitingPip = true;
}
+ private void applyWindowingModeChangeOnExit(WindowContainerTransaction wct, int direction) {
+ // 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 */);
+ }
+ }
+
/**
* Removes PiP immediately.
*/
@@ -745,13 +754,7 @@
// on the task to ensure that the task "matches" the parent's bounds.
taskBounds = (direction == TRANSITION_DIRECTION_TO_FULLSCREEN)
? null : destinationBounds;
- // 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 */);
- }
+ applyWindowingModeChangeOnExit(wct, direction);
} else {
// Just a resize in PIP
taskBounds = destinationBounds;