diff options
author | Tony <twickham@google.com> | 2018-08-17 13:47:39 -0700 |
---|---|---|
committer | Tony <twickham@google.com> | 2018-08-17 13:47:39 -0700 |
commit | 4043b05cdef4e713b57f76e532539ead7e7c2ba6 (patch) | |
tree | d252d571c3e639365599553b6e32e36f7695fa14 /src/com/android/launcher3/BubbleTextView.java | |
parent | 9e26e26f0057b5c19248238ff869aba2930b7f56 (diff) | |
download | android_packages_apps_Trebuchet-4043b05cdef4e713b57f76e532539ead7e7c2ba6.tar.gz android_packages_apps_Trebuchet-4043b05cdef4e713b57f76e532539ead7e7c2ba6.tar.bz2 android_packages_apps_Trebuchet-4043b05cdef4e713b57f76e532539ead7e7c2ba6.zip |
Cancel badge scale anim when setting new badge scale
Otherwise it's possible the badge scale animation will override the
non-animated set value, which could mean a badge continues to show
even though it shouldn't:
- Animate badge scale to 1
- Before animation finishes, set badge scale to 0
- Badge scale ends at 1, since animation wasn't cancelled, so we
continue to show it indefinitely
Also exported some properties in case a similar issue arises.
Bug: 111791593
Change-Id: Ia1a417239b909886adf9351e9bdc06a3b22d8b73
Diffstat (limited to 'src/com/android/launcher3/BubbleTextView.java')
-rw-r--r-- | src/com/android/launcher3/BubbleTextView.java | 29 |
1 files changed, 27 insertions, 2 deletions
diff --git a/src/com/android/launcher3/BubbleTextView.java b/src/com/android/launcher3/BubbleTextView.java index 01e3a10b0..230ea4fea 100644 --- a/src/com/android/launcher3/BubbleTextView.java +++ b/src/com/android/launcher3/BubbleTextView.java @@ -16,6 +16,8 @@ package com.android.launcher3; +import android.animation.Animator; +import android.animation.AnimatorListenerAdapter; import android.animation.ObjectAnimator; import android.content.Context; import android.content.res.ColorStateList; @@ -112,10 +114,13 @@ public class BubbleTextView extends TextView implements ItemInfoUpdateReceiver, @ViewDebug.ExportedProperty(category = "launcher") private float mTextAlpha = 1; + @ViewDebug.ExportedProperty(category = "launcher") private BadgeInfo mBadgeInfo; private BadgeRenderer mBadgeRenderer; private int mBadgeColor; + @ViewDebug.ExportedProperty(category = "launcher") private float mBadgeScale; + private Animator mBadgeScaleAnim; private boolean mForceHideBadge; private Point mTempSpaceForBadgeOffset = new Point(); private Rect mTempIconBounds = new Rect(); @@ -188,10 +193,29 @@ public class BubbleTextView extends TextView implements ItemInfoUpdateReceiver, public void reset() { mBadgeInfo = null; mBadgeColor = Color.TRANSPARENT; + cancelBadgeScaleAnim(); mBadgeScale = 0f; mForceHideBadge = false; } + private void cancelBadgeScaleAnim() { + if (mBadgeScaleAnim != null) { + mBadgeScaleAnim.cancel(); + } + } + + private void animateBadgeScale(float... badgeScales) { + cancelBadgeScaleAnim(); + mBadgeScaleAnim = ObjectAnimator.ofFloat(this, BADGE_SCALE_PROPERTY, badgeScales); + mBadgeScaleAnim.addListener(new AnimatorListenerAdapter() { + @Override + public void onAnimationEnd(Animator animation) { + mBadgeScaleAnim = null; + } + }); + mBadgeScaleAnim.start(); + } + public void applyFromShortcutInfo(ShortcutInfo info) { applyFromShortcutInfo(info, false); } @@ -378,7 +402,7 @@ public class BubbleTextView extends TextView implements ItemInfoUpdateReceiver, if (forceHideBadge) { invalidate(); } else if (hasBadge()) { - ObjectAnimator.ofFloat(this, BADGE_SCALE_PROPERTY, 0, 1).start(); + animateBadgeScale(0, 1); } } @@ -524,8 +548,9 @@ public class BubbleTextView extends TextView implements ItemInfoUpdateReceiver, if (wasBadged || isBadged) { // Animate when a badge is first added or when it is removed. if (animate && (wasBadged ^ isBadged) && isShown()) { - ObjectAnimator.ofFloat(this, BADGE_SCALE_PROPERTY, newBadgeScale).start(); + animateBadgeScale(newBadgeScale); } else { + cancelBadgeScaleAnim(); mBadgeScale = newBadgeScale; invalidate(); } |