diff --git a/packages/SystemUI/res/values/ids.xml b/packages/SystemUI/res/values/ids.xml index 24d662b477f38..cd8ffa8c33b6b 100644 --- a/packages/SystemUI/res/values/ids.xml +++ b/packages/SystemUI/res/values/ids.xml @@ -61,6 +61,7 @@ + diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/StatusBarIconView.java b/packages/SystemUI/src/com/android/systemui/statusbar/StatusBarIconView.java index 4fc18ad3ea54f..0b941c24be69e 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/StatusBarIconView.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/StatusBarIconView.java @@ -806,7 +806,7 @@ public class StatusBarIconView extends AnimatedImageView implements StatusIconDi updateDecorColor(); updateIconColor(); updateAllowAnimation(); - }, dark, fade, delay); + }, dark, fade, delay, this); } private void updateAllowAnimation() { diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/HybridGroupManager.java b/packages/SystemUI/src/com/android/systemui/statusbar/notification/HybridGroupManager.java index a09650867aa1c..ec94df1e3e82f 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/HybridGroupManager.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/HybridGroupManager.java @@ -166,7 +166,7 @@ public class HybridGroupManager { mDozer.setIntensityDark((f)->{ mDarkAmount = f; updateOverFlowNumberColor(view); - }, dark, fade, delay); + }, dark, fade, delay, view); view.setTextSize(TypedValue.COMPLEX_UNIT_PX, dark ? mOverflowNumberSizeDark : mOverflowNumberSize); int paddingEnd = dark ? mOverflowNumberPaddingDark : mOverflowNumberPadding; diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/NotificationDozeHelper.java b/packages/SystemUI/src/com/android/systemui/statusbar/notification/NotificationDozeHelper.java index 0b3b3cb671e50..fb362c5e506f1 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/NotificationDozeHelper.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/NotificationDozeHelper.java @@ -21,14 +21,17 @@ import android.animation.AnimatorListenerAdapter; import android.animation.ValueAnimator; import android.graphics.ColorMatrix; import android.graphics.ColorMatrixColorFilter; +import android.view.View; import android.widget.ImageView; import com.android.systemui.Interpolators; +import com.android.systemui.R; import com.android.systemui.statusbar.phone.NotificationPanelView; import java.util.function.Consumer; public class NotificationDozeHelper { + private static final int DOZE_ANIMATOR_TAG = R.id.doze_intensity_tag; private final ColorMatrix mGrayscaleColorMatrix = new ColorMatrix(); public void fadeGrayscale(final ImageView target, final boolean dark, long delay) { @@ -76,11 +79,26 @@ public class NotificationDozeHelper { } public void setIntensityDark(Consumer listener, boolean dark, - boolean animate, long delay) { + boolean animate, long delay, View view) { if (animate) { startIntensityAnimation(a -> listener.accept((Float) a.getAnimatedValue()), dark, delay, - null /* listener */); + new AnimatorListenerAdapter() { + + @Override + public void onAnimationEnd(Animator animation) { + view.setTag(DOZE_ANIMATOR_TAG, null); + } + + @Override + public void onAnimationStart(Animator animation) { + view.setTag(DOZE_ANIMATOR_TAG, animation); + } + } /* listener */); } else { + Animator animator = (Animator) view.getTag(DOZE_ANIMATOR_TAG); + if (animator != null) { + animator.cancel(); + } listener.accept(dark ? 1f : 0f); } }