Fix the regression of PiP position in fixed rotation

This also fixes issue with rotating on tablets where PiP might go out
of bounds.

What happens is sometimes the rotation of screen has not issued the
callback yet and onInsetsChanged gets called causing regression and
mixing up all calculations based on the configuration change that
is being applied too early. Basically ordering issue of callbacks.

Bug: 254869973
Test: manually, tried with logs statements that confirmed it works as expected
regardless of the order in which the events callbacks are received

Change-Id: Ie1ac5e94559643028229c7829b35905b175425d2
This commit is contained in:
Mateusz Cicheński
2022-11-29 06:35:32 +00:00
parent 9a47d7fad9
commit 8d917f9e7e

View File

@@ -612,12 +612,21 @@ public class PipController implements PipTransitionController.PipTransitionCallb
new DisplayInsetsController.OnInsetsChangedListener() {
@Override
public void insetsChanged(InsetsState insetsState) {
DisplayLayout pendingLayout =
mDisplayController.getDisplayLayout(mPipBoundsState.getDisplayId());
if (mIsInFixedRotation
|| pendingLayout.rotation()
!= mPipBoundsState.getDisplayLayout().rotation()) {
// bail out if there is a pending rotation or fixed rotation change
return;
}
int oldMaxMovementBound = mPipBoundsState.getMovementBounds().bottom;
onDisplayChanged(
mDisplayController.getDisplayLayout(mPipBoundsState.getDisplayId()),
false /* saveRestoreSnapFraction */);
int newMaxMovementBound = mPipBoundsState.getMovementBounds().bottom;
if (!mEnablePipKeepClearAlgorithm) {
// offset PiP to adjust for bottom inset change
int pipTop = mPipBoundsState.getBounds().top;
int diff = newMaxMovementBound - oldMaxMovementBound;
if (diff < 0 && pipTop > newMaxMovementBound) {