summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorTony Wickham <twickham@google.com>2016-08-22 15:23:01 -0700
committerTony Wickham <twickham@google.com>2016-08-22 15:23:01 -0700
commitef0c537925369192cd84b0c4e3df29691c455d83 (patch)
tree928f050b52f23a4d5b9a40b325d2832c37960f4a /src
parentc9efe2ba9ce41d2b6b94346bd39d9684694c6d70 (diff)
downloadandroid_packages_apps_Trebuchet-ef0c537925369192cd84b0c4e3df29691c455d83.tar.gz
android_packages_apps_Trebuchet-ef0c537925369192cd84b0c4e3df29691c455d83.tar.bz2
android_packages_apps_Trebuchet-ef0c537925369192cd84b0c4e3df29691c455d83.zip
Cancel hotseat color animator before setting a new color.
There was a race condition that caused the new color to not be applied. For example, here's how the hotseat would become transparent: 1 Launcher is loaded for the first time; as such, there is not yet a color defined for the hotseat, so we start animating to the provided default (Color.TRANSPARENT). Meanwhile we start the color extraction. 2 When the color extraction finishes, we set the hotseat to the new color. However, if launcher is paused at the time (perhaps some retail mode content is showing), then we don't animate the change. 3 If 2 happens before the animation in 1 is complete, the color from 2 will be overriden by subsequent animation frames and thus the hotseat remains transparent until the wallpaper changes. Bug: 30956221 Change-Id: Iddf72379b0162f1b32883ad26ce267473e172849
Diffstat (limited to 'src')
-rw-r--r--src/com/android/launcher3/Hotseat.java20
1 files changed, 16 insertions, 4 deletions
diff --git a/src/com/android/launcher3/Hotseat.java b/src/com/android/launcher3/Hotseat.java
index 660565425..7c0ed10d0 100644
--- a/src/com/android/launcher3/Hotseat.java
+++ b/src/com/android/launcher3/Hotseat.java
@@ -16,6 +16,8 @@
package com.android.launcher3;
+import android.animation.Animator;
+import android.animation.AnimatorListenerAdapter;
import android.animation.ArgbEvaluator;
import android.animation.ValueAnimator;
import android.content.Context;
@@ -52,6 +54,7 @@ public class Hotseat extends FrameLayout
private int mBackgroundColor;
@ViewDebug.ExportedProperty(category = "launcher")
private ColorDrawable mBackground;
+ private ValueAnimator mBackgroundColorAnimator;
public Hotseat(Context context) {
this(context, null);
@@ -179,18 +182,27 @@ public class Hotseat extends FrameLayout
public void updateColor(ExtractedColors extractedColors, boolean animate) {
if (!mHasVerticalHotseat) {
int color = extractedColors.getColor(ExtractedColors.HOTSEAT_INDEX, Color.TRANSPARENT);
+ if (mBackgroundColorAnimator != null) {
+ mBackgroundColorAnimator.cancel();
+ }
if (!animate) {
setBackgroundColor(color);
} else {
- ValueAnimator animator = ValueAnimator.ofInt(mBackgroundColor, color);
- animator.setEvaluator(new ArgbEvaluator());
- animator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
+ mBackgroundColorAnimator = ValueAnimator.ofInt(mBackgroundColor, color);
+ mBackgroundColorAnimator.setEvaluator(new ArgbEvaluator());
+ mBackgroundColorAnimator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
@Override
public void onAnimationUpdate(ValueAnimator animation) {
mBackground.setColor((Integer) animation.getAnimatedValue());
}
});
- animator.start();
+ mBackgroundColorAnimator.addListener(new AnimatorListenerAdapter() {
+ @Override
+ public void onAnimationEnd(Animator animation) {
+ mBackgroundColorAnimator = null;
+ }
+ });
+ mBackgroundColorAnimator.start();
}
mBackgroundColor = color;
}