From b27b98cc9f6d3c9c6fa2fc0e0121d767cb7ba1fc Mon Sep 17 00:00:00 2001 From: Tracy Zhou Date: Sun, 2 Jun 2019 22:57:39 -0700 Subject: [PATCH] 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 --- .../server/wm/BoundsAnimationController.java | 19 +++++++------------ 1 file changed, 7 insertions(+), 12 deletions(-) diff --git a/services/core/java/com/android/server/wm/BoundsAnimationController.java b/services/core/java/com/android/server/wm/BoundsAnimationController.java index b5e7067108238..5dc88b37e445d 100644 --- a/services/core/java/com/android/server/wm/BoundsAnimationController.java +++ b/services/core/java/com/android/server/wm/BoundsAnimationController.java @@ -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,16 +453,10 @@ 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)) { - animationType = FADE_IN; - } + + if (isRunningFadeInAnimation(target) && from.width() == to.width() + && from.height() == to.height()) { + animationType = FADE_IN; } final boolean replacing = existing != null; @SchedulePipModeChangedState int prevSchedulePipModeChangedState = @@ -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);