Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit a5de62db authored by Riddle Hsu's avatar Riddle Hsu Committed by Android (Google) Code Review
Browse files

Merge "Reduce flickering when exiting PiP to fullscreen" into udc-dev

parents cf6e3b1f 6f700c0a
Loading
Loading
Loading
Loading
+1 −2
Original line number Diff line number Diff line
@@ -534,8 +534,7 @@ public class PipTaskOrganizer implements ShellTaskOrganizer.TaskListener,
            return;
        }

        final Rect displayBounds = mPipBoundsState.getDisplayBounds();
        final Rect destinationBounds = new Rect(displayBounds);
        final Rect destinationBounds = new Rect(getExitDestinationBounds());
        final int direction = syncWithSplitScreenBounds(destinationBounds, requestEnterSplit)
                ? TRANSITION_DIRECTION_LEAVE_PIP_TO_SPLIT_SCREEN
                : TRANSITION_DIRECTION_LEAVE_PIP;
+10 −11
Original line number Diff line number Diff line
@@ -351,7 +351,7 @@ public class PipTransition extends PipTransitionController {
        if (taskInfo != null) {
            startExpandAnimation(taskInfo, mPipOrganizer.getSurfaceControl(),
                    mPipBoundsState.getBounds(), mPipBoundsState.getBounds(),
                    new Rect(mExitDestinationBounds), Surface.ROTATION_0);
                    new Rect(mExitDestinationBounds), Surface.ROTATION_0, null /* startT */);
        }
        mExitDestinationBounds.setEmpty();
        mCurrentPipTaskToken = null;
@@ -604,14 +604,8 @@ public class PipTransition extends PipTransitionController {
            }
        }

        // Set the initial frame as scaling the end to the start.
        final Rect destinationBounds = new Rect(pipChange.getEndAbsBounds());
        destinationBounds.offset(-offset.x, -offset.y);
        startTransaction.setWindowCrop(pipLeash, destinationBounds.width(),
                destinationBounds.height());
        mSurfaceTransactionHelper.scale(startTransaction, pipLeash, destinationBounds,
                currentBounds);
        startTransaction.apply();

        // Check if it is fixed rotation.
        final int rotationDelta;
@@ -641,7 +635,7 @@ public class PipTransition extends PipTransitionController {
            rotationDelta = Surface.ROTATION_0;
        }
        startExpandAnimation(taskInfo, pipLeash, currentBounds, currentBounds, destinationBounds,
                rotationDelta);
                rotationDelta, startTransaction);
    }

    private void startExpandAndRotationAnimation(@NonNull TransitionInfo info,
@@ -697,7 +691,7 @@ public class PipTransition extends PipTransitionController {

    private void startExpandAnimation(final TaskInfo taskInfo, final SurfaceControl leash,
            final Rect baseBounds, final Rect startBounds, final Rect endBounds,
            final int rotationDelta) {
            final int rotationDelta, @Nullable SurfaceControl.Transaction startTransaction) {
        final Rect sourceHintRect = PipBoundsAlgorithm.getValidSourceHintRect(
                taskInfo.pictureInPictureParams, endBounds);
        final PipAnimationController.PipTransitionAnimator animator =
@@ -705,9 +699,14 @@ public class PipTransition extends PipTransitionController {
                        endBounds, sourceHintRect, TRANSITION_DIRECTION_LEAVE_PIP,
                        0 /* startingAngle */, rotationDelta);
        animator.setTransitionDirection(TRANSITION_DIRECTION_LEAVE_PIP)
                .setPipAnimationCallback(mPipAnimationCallback)
                .setDuration(mEnterExitAnimationDuration);
        if (startTransaction != null) {
            animator.setPipTransactionHandler(mTransactionConsumer).applySurfaceControlTransaction(
                    leash, startTransaction, PipAnimationController.FRACTION_START);
            startTransaction.apply();
        }
        animator.setPipAnimationCallback(mPipAnimationCallback)
                .setPipTransactionHandler(mPipOrganizer.getPipTransactionHandler())
                .setDuration(mEnterExitAnimationDuration)
                .start();
    }