From f3eacd35c0b8f676c50cc7307f40a9de6bc8e521 Mon Sep 17 00:00:00 2001 From: Adrian Roos Date: Fri, 14 Apr 2017 16:35:58 -0700 Subject: [PATCH] AOD: Fix icon color when updating on AOD Fixes a bug where notification shelf icons would become colorful when they update while in AOD. Change-Id: I6e1d98bc75a2119eb32b55a40a66a9b3bcee8737 Fixes: 37156783 Test: Turn off device, receive notification, receive update to that notification, trigger ambient display --- .../systemui/statusbar/StatusBarIconView.java | 14 ++++++++++---- .../notification/NotificationDozeHelper.java | 11 +++++++---- 2 files changed, 17 insertions(+), 8 deletions(-) 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);