From b98ddb45833f8767cbd012775c9176b637f464dd Mon Sep 17 00:00:00 2001 From: Lucas Dupin Date: Tue, 29 May 2018 17:26:35 -0700 Subject: [PATCH] Cancel dark animation when new one arrives Not doing so causes weird artifacts when power button is pressed multiple times in a row and StackScroller would have the wrong state if unlocked with fingerprint while animation is still running. Test: lock from lock screen, fp before animation ends Test: press power multiple times on lock screen, look at smooth animation Change-Id: I381bf367533983595cd22ff080f51465f6c0f750 Fixes: 79747888 --- .../stack/NotificationStackScrollLayout.java | 26 ++++++++++++++----- 1 file changed, 20 insertions(+), 6 deletions(-) diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/stack/NotificationStackScrollLayout.java b/packages/SystemUI/src/com/android/systemui/statusbar/stack/NotificationStackScrollLayout.java index 7410069b09fac..804fd4161500c 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/stack/NotificationStackScrollLayout.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/stack/NotificationStackScrollLayout.java @@ -388,6 +388,7 @@ public class NotificationStackScrollLayout extends ViewGroup return object.getDarkAmount(); } }; + private ObjectAnimator mDarkAmountAnimator; private boolean mUsingLightTheme; private boolean mQsExpanded; private boolean mForwardScrollable; @@ -3401,7 +3402,7 @@ public class NotificationStackScrollLayout extends ViewGroup .animateY(mShelf)); ev.darkAnimationOriginIndex = mDarkAnimationOriginIndex; mAnimationEvents.add(ev); - startBackgroundFade(); + startDarkAmountAnimation(); } mDarkNeedsAnimation = false; } @@ -3979,6 +3980,9 @@ public class NotificationStackScrollLayout extends ViewGroup mDarkAnimationOriginIndex = findDarkAnimationOriginIndex(touchWakeUpScreenLocation); mNeedsAnimation = true; } else { + if (mDarkAmountAnimator != null) { + mDarkAmountAnimator.cancel(); + } setDarkAmount(dark ? 1f : 0f); updateBackground(); } @@ -4023,12 +4027,22 @@ public class NotificationStackScrollLayout extends ViewGroup return mDarkAmount; } - private void startBackgroundFade() { - ObjectAnimator fadeAnimator = ObjectAnimator.ofFloat(this, DARK_AMOUNT, mDarkAmount, + private void startDarkAmountAnimation() { + ObjectAnimator darkAnimator = ObjectAnimator.ofFloat(this, DARK_AMOUNT, mDarkAmount, mAmbientState.isDark() ? 1f : 0); - fadeAnimator.setDuration(StackStateAnimator.ANIMATION_DURATION_WAKEUP); - fadeAnimator.setInterpolator(Interpolators.ALPHA_IN); - fadeAnimator.start(); + darkAnimator.setDuration(StackStateAnimator.ANIMATION_DURATION_WAKEUP); + darkAnimator.setInterpolator(Interpolators.ALPHA_IN); + darkAnimator.addListener(new AnimatorListenerAdapter() { + @Override + public void onAnimationEnd(Animator animation) { + mDarkAmountAnimator = null; + } + }); + if (mDarkAmountAnimator != null) { + mDarkAmountAnimator.cancel(); + } + mDarkAmountAnimator = darkAnimator; + mDarkAmountAnimator.start(); } private int findDarkAnimationOriginIndex(@Nullable PointF screenLocation) {