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

Commit a45bcc33 authored by Ikram Gabiyev's avatar Ikram Gabiyev
Browse files

Preserve the leash reference in PipTaskOrganizer

Make sure to not lose the reference to updated leash
upon user manually entering PiP with another PiP window
present.

Also remove the leash of the previous PiP window.

This will also avoid calling onExitPipFinished() twice,
since it is already being called through onTaskVanished()
in the case of overriding an existing PiP.

Bug: 285231679
Test: manually reproduce the steps in the bug
Change-Id: I581759a5ae121779e7151007be133f0f5c6f9ee5
parent cec1c35e
Loading
Loading
Loading
Loading
+9 −16
Original line number Diff line number Diff line
@@ -1014,25 +1014,18 @@ public class PipTransition extends PipTransitionController {
    private void resetPrevPip(@NonNull TransitionInfo.Change prevPipTaskChange,
            @NonNull SurfaceControl.Transaction startTransaction) {
        final SurfaceControl leash = prevPipTaskChange.getLeash();
        final Rect bounds = prevPipTaskChange.getEndAbsBounds();
        final Point offset = prevPipTaskChange.getEndRelOffset();
        bounds.offset(-offset.x, -offset.y);
        startTransaction.remove(leash);

        startTransaction.setWindowCrop(leash, null);
        startTransaction.setMatrix(leash, 1, 0, 0, 1);
        startTransaction.setCornerRadius(leash, 0);
        startTransaction.setPosition(leash, bounds.left, bounds.top);

        if (mHasFadeOut && prevPipTaskChange.getTaskInfo().isVisible()) {
            if (mPipAnimationController.getCurrentAnimator() != null) {
                mPipAnimationController.getCurrentAnimator().cancel();
            }
            startTransaction.setAlpha(leash, 1);
        }
        mHasFadeOut = false;
        mCurrentPipTaskToken = null;

        // clean-up the state in PipTaskOrganizer if the PipTaskOrganizer#onTaskAppeared() hasn't
        // been called yet with its leash reference now pointing to a new SurfaceControl not
        // matching the leash of the pip we are removing.
        if (mPipOrganizer.getSurfaceControl() == leash) {
            mPipOrganizer.onExitPipFinished(prevPipTaskChange.getTaskInfo());
        }
    }

    @Override
    public boolean syncPipSurfaceState(@NonNull TransitionInfo info,