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

Commit c7c13621 authored by Riddle Hsu's avatar Riddle Hsu Committed by Automerger Merge Worker
Browse files

Merge "Reduce flickering when exiting PiP to fullscreen" into udc-dev am: a5de62db am: a0ac912b

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


        final Rect displayBounds = mPipBoundsState.getDisplayBounds();
        final Rect destinationBounds = new Rect(getExitDestinationBounds());
        final Rect destinationBounds = new Rect(displayBounds);
        final int direction = syncWithSplitScreenBounds(destinationBounds, requestEnterSplit)
        final int direction = syncWithSplitScreenBounds(destinationBounds, requestEnterSplit)
                ? TRANSITION_DIRECTION_LEAVE_PIP_TO_SPLIT_SCREEN
                ? TRANSITION_DIRECTION_LEAVE_PIP_TO_SPLIT_SCREEN
                : TRANSITION_DIRECTION_LEAVE_PIP;
                : TRANSITION_DIRECTION_LEAVE_PIP;
+10 −11
Original line number Original line Diff line number Diff line
@@ -351,7 +351,7 @@ public class PipTransition extends PipTransitionController {
        if (taskInfo != null) {
        if (taskInfo != null) {
            startExpandAnimation(taskInfo, mPipOrganizer.getSurfaceControl(),
            startExpandAnimation(taskInfo, mPipOrganizer.getSurfaceControl(),
                    mPipBoundsState.getBounds(), mPipBoundsState.getBounds(),
                    mPipBoundsState.getBounds(), mPipBoundsState.getBounds(),
                    new Rect(mExitDestinationBounds), Surface.ROTATION_0);
                    new Rect(mExitDestinationBounds), Surface.ROTATION_0, null /* startT */);
        }
        }
        mExitDestinationBounds.setEmpty();
        mExitDestinationBounds.setEmpty();
        mCurrentPipTaskToken = null;
        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());
        final Rect destinationBounds = new Rect(pipChange.getEndAbsBounds());
        destinationBounds.offset(-offset.x, -offset.y);
        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.
        // Check if it is fixed rotation.
        final int rotationDelta;
        final int rotationDelta;
@@ -641,7 +635,7 @@ public class PipTransition extends PipTransitionController {
            rotationDelta = Surface.ROTATION_0;
            rotationDelta = Surface.ROTATION_0;
        }
        }
        startExpandAnimation(taskInfo, pipLeash, currentBounds, currentBounds, destinationBounds,
        startExpandAnimation(taskInfo, pipLeash, currentBounds, currentBounds, destinationBounds,
                rotationDelta);
                rotationDelta, startTransaction);
    }
    }


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


    private void startExpandAnimation(final TaskInfo taskInfo, final SurfaceControl leash,
    private void startExpandAnimation(final TaskInfo taskInfo, final SurfaceControl leash,
            final Rect baseBounds, final Rect startBounds, final Rect endBounds,
            final Rect baseBounds, final Rect startBounds, final Rect endBounds,
            final int rotationDelta) {
            final int rotationDelta, @Nullable SurfaceControl.Transaction startTransaction) {
        final Rect sourceHintRect = PipBoundsAlgorithm.getValidSourceHintRect(
        final Rect sourceHintRect = PipBoundsAlgorithm.getValidSourceHintRect(
                taskInfo.pictureInPictureParams, endBounds);
                taskInfo.pictureInPictureParams, endBounds);
        final PipAnimationController.PipTransitionAnimator animator =
        final PipAnimationController.PipTransitionAnimator animator =
@@ -705,9 +699,14 @@ public class PipTransition extends PipTransitionController {
                        endBounds, sourceHintRect, TRANSITION_DIRECTION_LEAVE_PIP,
                        endBounds, sourceHintRect, TRANSITION_DIRECTION_LEAVE_PIP,
                        0 /* startingAngle */, rotationDelta);
                        0 /* startingAngle */, rotationDelta);
        animator.setTransitionDirection(TRANSITION_DIRECTION_LEAVE_PIP)
        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())
                .setPipTransactionHandler(mPipOrganizer.getPipTransactionHandler())
                .setDuration(mEnterExitAnimationDuration)
                .start();
                .start();
    }
    }