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

Commit b27b98cc authored by Tracy Zhou's avatar Tracy Zhou
Browse files

Fix the logic of canceling previous scheduled fade in animation.

animateBoundsImpl() gets called twice when swiping up to home in
portrait mode (one time for initial pip, one time for replacing it above
shelf), while it only gets called once in other scenarios. The current
implementation assumes that it gets called twice, so it doesn't
correctly handle those one standalone call scenarios.

Test: Manual
Test: atest PinnedStackTests
Fixes: 133507275
Change-Id: I3df26ac8ed2c85ff4f1a8c4410a9a8a8f0d70f28
parent 36e3da79
Loading
Loading
Loading
Loading
+7 −12
Original line number Diff line number Diff line
@@ -410,7 +410,7 @@ public class BoundsAnimationController {
        @VisibleForTesting
        boolean animatingToLargerSize() {
            // TODO: Fix this check for aspect ratio changes
            return (mFrom.width() * mFrom.height() <= mTo.width() * mTo.height());
            return (mFrom.width() * mFrom.height() < mTo.width() * mTo.height());
        }

        @Override
@@ -453,17 +453,11 @@ public class BoundsAnimationController {
            boolean moveFromFullscreen, boolean moveToFullscreen,
            @AnimationType int animationType) {
        final BoundsAnimator existing = mRunningAnimations.get(target);
        // animateBoundsImpl gets called twice for each animation. The second time we get the final
        // to rect that respects the shelf, which is when we want to resize. Our signal for fade in
        // comes in from how to enter into pip, but we also need to use the to and from rect to
        // decide which animation we want to run finally.
        boolean shouldResize = false;
        if (isRunningFadeInAnimation(target)) {
            shouldResize = true;
            if (from.contains(to)) {

        if (isRunningFadeInAnimation(target) && from.width() == to.width()
                && from.height() == to.height()) {
            animationType = FADE_IN;
        }
        }
        final boolean replacing = existing != null;
        @SchedulePipModeChangedState int prevSchedulePipModeChangedState =
                NO_PIP_MODE_CHANGED_CALLBACKS;
@@ -523,9 +517,10 @@ public class BoundsAnimationController {
            // Since we are replacing, we skip both animation start and end callbacks
            existing.cancel();
        }
        if (shouldResize) {
        if (animationType == FADE_IN) {
            target.setPinnedStackSize(to, null);
        }

        final BoundsAnimator animator = new BoundsAnimator(target, animationType, from, to,
                schedulePipModeChangedState, prevSchedulePipModeChangedState,
                moveFromFullscreen, moveToFullscreen, frozenTask);