diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/StatusBarIconView.java b/packages/SystemUI/src/com/android/systemui/statusbar/StatusBarIconView.java index 92bfae9e3f5c1..ec15d10ac351e 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/StatusBarIconView.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/StatusBarIconView.java @@ -499,12 +499,18 @@ public class StatusBarIconView extends AnimatedImageView { } private void setColorInternal(int color) { - if (color != NO_COLOR) { - setImageTintList(ColorStateList.valueOf(color)); + mCurrentSetColor = color; + updateIconColor(); + } + + private void updateIconColor() { + if (mCurrentSetColor != NO_COLOR) { + setImageTintList(ColorStateList.valueOf(NotificationUtils.interpolateColors( + mCurrentSetColor, Color.WHITE, mDarkAmount))); } else { setImageTintList(null); + mDozer.updateGrayscale(this, mDarkAmount); } - mCurrentSetColor = color; } public void setIconColor(int iconColor, boolean animate) { @@ -669,10 +675,10 @@ public class StatusBarIconView extends AnimatedImageView { } public void setDark(boolean dark, boolean fade, long delay) { - mDozer.setImageDark(this, dark, fade, delay, mIconColor == NO_COLOR); mDozer.setIntensityDark(f -> { mDarkAmount = f; updateDecorColor(); + updateIconColor(); }, dark, fade, delay); } 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 d592c5f5b7f37..0b3b3cb671e50 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/NotificationDozeHelper.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/NotificationDozeHelper.java @@ -35,8 +35,7 @@ public class NotificationDozeHelper { startIntensityAnimation(new ValueAnimator.AnimatorUpdateListener() { @Override public void onAnimationUpdate(ValueAnimator animation) { - updateGrayscaleMatrix((float) animation.getAnimatedValue()); - target.setColorFilter(new ColorMatrixColorFilter(mGrayscaleColorMatrix)); + updateGrayscale(target, (float) animation.getAnimatedValue()); } }, dark, delay, new AnimatorListenerAdapter() { @Override @@ -49,8 +48,12 @@ public class NotificationDozeHelper { } public void updateGrayscale(ImageView target, boolean dark) { - if (dark) { - updateGrayscaleMatrix(1f); + updateGrayscale(target, dark ? 1 : 0); + } + + public void updateGrayscale(ImageView target, float darkAmount) { + if (darkAmount > 0) { + updateGrayscaleMatrix(darkAmount); target.setColorFilter(new ColorMatrixColorFilter(mGrayscaleColorMatrix)); } else { target.setColorFilter(null);