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

Commit 06f9bb38 authored by Riddle Hsu's avatar Riddle Hsu
Browse files

Centralize assignment of pip enter animation type

In PipTransition, the places to check enter animation type
may have different orders with different scenarios.

Assume swiping a fullscreen landscape app which can enter PiP
to portrait home:

Api request on foreground:
  augmentRequest -> startEnterAnimation -> handleRotateDisplay
Api request on going to background:
  startEnterAnimation -> handleRotateDisplay

Swipe to home:
 Auto-pip:
  augmentRequest -> handleRotateDisplay -> startEnterAnimation
 No auto-pip:
  handleRotateDisplay -> startEnterAnimation

To reduce the complexity of animation type management, assign
the type at entry of entering pip: PipTaskOrganizer#onTaskAppeared
Then PipTransition only needs to read it.

Note that for swiping auto-pip, the type is always ignored
because the animation is done by recents animation.

Bug: 276438425
Test: Swipe a landscape app into pip in portrait without auto-pip.
      The PiP should fade in after the swipe animation.

Change-Id: I98e459fb9913d713cd3b8d44dbb691af61862c56
parent 9338d0cc
Loading
Loading
Loading
Loading
+4 −3
Original line number Diff line number Diff line
@@ -712,15 +712,16 @@ public class PipTaskOrganizer implements ShellTaskOrganizer.TaskListener,
            return;
        }

        final int animationType = shouldAlwaysFadeIn()
                ? ANIM_TYPE_ALPHA
                : mPipAnimationController.takeOneShotEnterAnimationType();
        if (Transitions.ENABLE_SHELL_TRANSITIONS) {
            mPipTransitionController.setEnterAnimationType(animationType);
            // For Shell transition, we will animate the window in PipTransition#startAnimation
            // instead of #onTaskAppeared.
            return;
        }

        final int animationType = shouldAlwaysFadeIn()
                ? ANIM_TYPE_ALPHA
                : mPipAnimationController.takeOneShotEnterAnimationType();
        if (mWaitForFixedRotation) {
            onTaskAppearedWithFixedRotation(animationType);
            return;
+5 −5
Original line number Diff line number Diff line
@@ -274,9 +274,6 @@ public class PipTransition extends PipTransitionController {
        if (!requestHasPipEnter(request)) {
            throw new IllegalStateException("Called PiP augmentRequest when request has no PiP");
        }
        mEnterAnimationType = mPipOrganizer.shouldAlwaysFadeIn()
                ? ANIM_TYPE_ALPHA
                : mPipAnimationController.takeOneShotEnterAnimationType();
        if (mEnterAnimationType == ANIM_TYPE_ALPHA) {
            mRequestedEnterTransition = transition;
            mRequestedEnterTask = request.getTriggerTask().token;
@@ -665,6 +662,11 @@ public class PipTransition extends PipTransitionController {
        return false;
    }

    @Override
    public void setEnterAnimationType(@PipAnimationController.AnimationType int type) {
        mEnterAnimationType = type;
    }

    private void startEnterAnimation(@NonNull TransitionInfo info,
            @NonNull SurfaceControl.Transaction startTransaction,
            @NonNull SurfaceControl.Transaction finishTransaction,
@@ -786,8 +788,6 @@ public class PipTransition extends PipTransitionController {

        final int enterAnimationType = mEnterAnimationType;
        if (enterAnimationType == ANIM_TYPE_ALPHA) {
            // Restore to default type.
            mEnterAnimationType = ANIM_TYPE_BOUNDS;
            startTransaction.setAlpha(leash, 0f);
        }
        startTransaction.apply();
+4 −0
Original line number Diff line number Diff line
@@ -225,6 +225,10 @@ public abstract class PipTransitionController implements Transitions.TransitionH
        throw new IllegalStateException("Request isn't entering PiP");
    }

    /** Sets the type of animation when a PiP task appears. */
    public void setEnterAnimationType(@PipAnimationController.AnimationType int type) {
    }

    /** Play a transition animation for entering PiP on a specific PiP change. */
    public void startEnterAnimation(@NonNull final TransitionInfo.Change pipChange,
            @NonNull final SurfaceControl.Transaction startTransaction,