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

Commit 95ad68a9 authored by Jacqueline Bronger's avatar Jacqueline Bronger
Browse files

Fade the TV PiP menu surfaces during enter/exit.

With the bounds entry animation the surfaces appeared before/after the
bounds animation, however with the change to the alpha entry animation
we want the menu surfaces to fade in/out together with the PiP.

This change works with both the shell transitions enabled and disabled.

Bug: 271098548
Bug: 228071323
Test: manual - do once with shell transitions enabled and disabled:
start a PiP -> PiP menu surfaces should fade in gradually with PiP
content, close PiP via close button -> menu surfaces should fade out

Change-Id: I51fcfe006a672e9c2a094f6657d1552a273c84cf
parent d881a679
Loading
Loading
Loading
Loading
+8 −5
Original line number Diff line number Diff line
@@ -250,7 +250,7 @@ public class PipAnimationController {
         * @return true if handled by the handler, false otherwise.
         */
        public boolean handlePipTransaction(SurfaceControl leash, SurfaceControl.Transaction tx,
                Rect destinationBounds) {
                Rect destinationBounds, float alpha) {
            return false;
        }
    }
@@ -351,9 +351,10 @@ public class PipAnimationController {
        }

        boolean handlePipTransaction(SurfaceControl leash, SurfaceControl.Transaction tx,
                Rect destinationBounds) {
                Rect destinationBounds, float alpha) {
            if (mPipTransactionHandler != null) {
                return mPipTransactionHandler.handlePipTransaction(leash, tx, destinationBounds);
                return mPipTransactionHandler.handlePipTransaction(
                        leash, tx, destinationBounds, alpha);
            }
            return false;
        }
@@ -498,8 +499,10 @@ public class PipAnimationController {
                    getSurfaceTransactionHelper().alpha(tx, leash, alpha)
                            .round(tx, leash, shouldApplyCornerRadius())
                            .shadow(tx, leash, shouldApplyShadowRadius());
                    if (!handlePipTransaction(leash, tx, destinationBounds, alpha)) {
                        tx.apply();
                    }
                }

                @Override
                void onStartTransaction(SurfaceControl leash, SurfaceControl.Transaction tx) {
@@ -613,7 +616,7 @@ public class PipAnimationController {
                                    .shadow(tx, leash, shouldApplyShadowRadius());
                        }
                    }
                    if (!handlePipTransaction(leash, tx, bounds)) {
                    if (!handlePipTransaction(leash, tx, bounds, /* alpha= */ 1f)) {
                        tx.apply();
                    }
                }
+9 −2
Original line number Diff line number Diff line
@@ -44,6 +44,13 @@ public interface PipMenuController {

    String MENU_WINDOW_TITLE = "PipMenuView";

    /**
     * Used with
     * {@link PipMenuController#movePipMenu(SurfaceControl, SurfaceControl.Transaction, Rect,
     * float)} to indicate that we don't want to affect the alpha value of the menu surfaces.
     */
    float ALPHA_NO_CHANGE = -1f;

    /**
     * Called when
     * {@link PipTaskOrganizer#onTaskAppeared(RunningTaskInfo, SurfaceControl)}
@@ -85,8 +92,8 @@ public interface PipMenuController {
     * need to synchronize the movements on the same frame as PiP.
     */
    default void movePipMenu(@Nullable SurfaceControl pipLeash,
            @Nullable SurfaceControl.Transaction t,
            Rect destinationBounds) {}
            @Nullable SurfaceControl.Transaction t, Rect destinationBounds, float alpha) {
    }

    /**
     * Update the PiP menu with the given bounds for re-layout purposes.
+10 −5
Original line number Diff line number Diff line
@@ -238,7 +238,7 @@ public class PipTaskOrganizer implements ShellTaskOrganizer.TaskListener,
        }, null);
    }

    private boolean shouldSyncPipTransactionWithMenu() {
    protected boolean shouldSyncPipTransactionWithMenu() {
        return mPipMenuController.isMenuVisible();
    }

@@ -266,9 +266,9 @@ public class PipTaskOrganizer implements ShellTaskOrganizer.TaskListener,
            new PipAnimationController.PipTransactionHandler() {
                @Override
                public boolean handlePipTransaction(SurfaceControl leash,
                        SurfaceControl.Transaction tx, Rect destinationBounds) {
                        SurfaceControl.Transaction tx, Rect destinationBounds, float alpha) {
                    if (shouldSyncPipTransactionWithMenu()) {
                        mPipMenuController.movePipMenu(leash, tx, destinationBounds);
                        mPipMenuController.movePipMenu(leash, tx, destinationBounds, alpha);
                        return true;
                    }
                    return false;
@@ -372,6 +372,10 @@ public class PipTaskOrganizer implements ShellTaskOrganizer.TaskListener,
        return mPipTransitionController;
    }

    PipAnimationController.PipTransactionHandler getPipTransactionHandler() {
        return mPipTransactionHandler;
    }

    public Rect getCurrentOrAnimatingBounds() {
        PipAnimationController.PipTransitionAnimator animator =
                mPipAnimationController.getCurrentAnimator();
@@ -1375,7 +1379,7 @@ public class PipTaskOrganizer implements ShellTaskOrganizer.TaskListener,
                .scale(tx, mLeash, startBounds, toBounds, degrees)
                .round(tx, mLeash, startBounds, toBounds);
        if (shouldSyncPipTransactionWithMenu()) {
            mPipMenuController.movePipMenu(mLeash, tx, toBounds);
            mPipMenuController.movePipMenu(mLeash, tx, toBounds, PipMenuController.ALPHA_NO_CHANGE);
        } else {
            tx.apply();
        }
@@ -1541,7 +1545,8 @@ public class PipTaskOrganizer implements ShellTaskOrganizer.TaskListener,
        if (!isInPip()) {
            return;
        }
        mPipMenuController.movePipMenu(null, null, destinationBounds);
        mPipMenuController.movePipMenu(null, null, destinationBounds,
                PipMenuController.ALPHA_NO_CHANGE);
        mPipMenuController.updateMenuBounds(destinationBounds);
    }

+3 −1
Original line number Diff line number Diff line
@@ -838,6 +838,7 @@ public class PipTransition extends PipTransitionController {
                    + mOneShotAnimationType);
        }
        animator.setTransitionDirection(TRANSITION_DIRECTION_TO_PIP)
                .setPipTransactionHandler(mPipOrganizer.getPipTransactionHandler())
                .setPipAnimationCallback(mPipAnimationCallback)
                .setDuration(mEnterExitAnimationDuration);
        if (rotationDelta != Surface.ROTATION_0 && mInFixedRotation) {
@@ -964,7 +965,8 @@ public class PipTransition extends PipTransitionController {
    }

    private void finishResizeForMenu(Rect destinationBounds) {
        mPipMenuController.movePipMenu(null, null, destinationBounds);
        mPipMenuController.movePipMenu(null, null, destinationBounds,
                PipMenuController.ALPHA_NO_CHANGE);
        mPipMenuController.updateMenuBounds(destinationBounds);
    }
}
+3 −2
Original line number Diff line number Diff line
@@ -298,7 +298,8 @@ public class PhonePipMenuController implements PipMenuController {
        }

        // Sync the menu bounds before showing it in case it is out of sync.
        movePipMenu(null /* pipLeash */, null /* transaction */, stackBounds);
        movePipMenu(null /* pipLeash */, null /* transaction */, stackBounds,
                PipMenuController.ALPHA_NO_CHANGE);
        updateMenuBounds(stackBounds);

        mPipMenuView.showMenu(menuState, stackBounds, allowMenuTimeout, willResizeMenu, withDelay,
@@ -311,7 +312,7 @@ public class PhonePipMenuController implements PipMenuController {
    @Override
    public void movePipMenu(@Nullable SurfaceControl pipLeash,
            @Nullable SurfaceControl.Transaction t,
            Rect destinationBounds) {
            Rect destinationBounds, float alpha) {
        if (destinationBounds.isEmpty()) {
            return;
        }
Loading