diff options
| author | 2017-04-04 16:44:29 -0700 | |
|---|---|---|
| committer | 2017-04-05 11:24:34 -0700 | |
| commit | 456e005a6dea27a0d29e6a1975c68a9fa71d80a6 (patch) | |
| tree | 14623e55ad7c693f8b6f6662dfd0e40ca663b083 | |
| parent | 7bcf6d378f1bf1294ccd4c9beeb11bfd9b39816d (diff) | |
Revert "Revert "AOD: Use color filter to invert icons for AOD""
This reverts commit 30d9bad7673eaa518cc43444259f71af9b34e5ec.
Change-Id: I3a6dd476cb90074d012a05bb291eeaf441fe20d3
Merged-In: I3a6dd476cb90074d012a05bb291eeaf441fe20d3
4 files changed, 56 insertions, 13 deletions
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/NotificationShelf.java b/packages/SystemUI/src/com/android/systemui/statusbar/NotificationShelf.java index 8ba4eb57f079..24cf794ddc4a 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/NotificationShelf.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/NotificationShelf.java @@ -23,7 +23,6 @@ import android.util.AttributeSet; import android.view.View; import android.view.ViewGroup; -import com.android.internal.widget.CachingIconView; import com.android.systemui.Interpolators; import com.android.systemui.R; import com.android.systemui.ViewInvertHelper; @@ -127,12 +126,7 @@ public class NotificationShelf extends ActivatableNotificationView implements super.setDark(dark, fade, delay); if (mDark == dark) return; mDark = dark; - if (fade) { - mViewInvertHelper.fade(dark, delay); - } else { - mViewInvertHelper.update(dark); - } - mShelfIcons.setAmbient(dark); + mShelfIcons.setDark(dark, fade, delay); updateInteractiveness(); } diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/StatusBarIconView.java b/packages/SystemUI/src/com/android/systemui/statusbar/StatusBarIconView.java index 110170194294..ffc4e8d2f018 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/StatusBarIconView.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/StatusBarIconView.java @@ -27,6 +27,7 @@ import android.content.res.ColorStateList; import android.content.res.Configuration; import android.content.res.Resources; import android.graphics.Canvas; +import android.graphics.Color; import android.graphics.Paint; import android.graphics.Rect; import android.graphics.drawable.Drawable; @@ -46,6 +47,7 @@ import android.view.animation.Interpolator; import com.android.internal.statusbar.StatusBarIcon; import com.android.systemui.Interpolators; import com.android.systemui.R; +import com.android.systemui.statusbar.notification.NotificationIconDozeHelper; import com.android.systemui.statusbar.notification.NotificationUtils; import java.text.NumberFormat; @@ -99,7 +101,6 @@ public class StatusBarIconView extends AnimatedImageView { private int mDensity; private float mIconScale = 1.0f; private final Paint mDotPaint = new Paint(); - private boolean mDotVisible; private float mDotRadius; private int mStaticDotRadius; private int mVisibleState = STATE_ICON; @@ -110,6 +111,8 @@ public class StatusBarIconView extends AnimatedImageView { private OnVisibilityChangedListener mOnVisibilityChangedListener; private int mDrawableColor; private int mIconColor; + private int mDecorColor; + private float mDarkAmount; private ValueAnimator mColorAnimator; private int mCurrentSetColor = NO_COLOR; private int mAnimationStartColor = NO_COLOR; @@ -119,6 +122,7 @@ public class StatusBarIconView extends AnimatedImageView { animation.getAnimatedFraction()); setColorInternal(newColor); }; + private final NotificationIconDozeHelper mDozer; public StatusBarIconView(Context context, String slot, Notification notification) { this(context, slot, notification, false); @@ -127,6 +131,7 @@ public class StatusBarIconView extends AnimatedImageView { public StatusBarIconView(Context context, String slot, Notification notification, boolean blocked) { super(context); + mDozer = new NotificationIconDozeHelper(context); mBlocked = blocked; mSlot = slot; mNumberPain = new Paint(); @@ -190,6 +195,7 @@ public class StatusBarIconView extends AnimatedImageView { public StatusBarIconView(Context context, AttributeSet attrs) { super(context, attrs); + mDozer = new NotificationIconDozeHelper(context); mBlocked = false; mAlwaysScaleIcon = true; updateIconScale(); @@ -466,7 +472,19 @@ public class StatusBarIconView extends AnimatedImageView { * to the drawable. */ public void setDecorColor(int iconTint) { - mDotPaint.setColor(iconTint); + mDecorColor = iconTint; + updateDecorColor(); + } + + private void updateDecorColor() { + int color = NotificationUtils.interpolateColors(mDecorColor, Color.WHITE, mDarkAmount); + if (mDotPaint.getColor() != color) { + mDotPaint.setColor(color); + + if (mDotAppearAmount != 0) { + invalidate(); + } + } } /** @@ -477,6 +495,7 @@ public class StatusBarIconView extends AnimatedImageView { mDrawableColor = color; setColorInternal(color); mIconColor = color; + mDozer.setColor(color); } private void setColorInternal(int color) { @@ -649,6 +668,14 @@ public class StatusBarIconView extends AnimatedImageView { mOnVisibilityChangedListener = listener; } + public void setDark(boolean dark, boolean fade, long delay) { + mDozer.setImageDark(this, dark, fade, delay, mIconColor != NO_COLOR); + mDozer.setIntensityDark(f -> { + mDarkAmount = f; + updateDecorColor(); + }, dark, fade, delay); + } + public interface OnVisibilityChangedListener { void onVisibilityChanged(int newVisibility); } 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 09efec61aa4f..d592c5f5b7f3 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/NotificationDozeHelper.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/NotificationDozeHelper.java @@ -26,6 +26,8 @@ import android.widget.ImageView; import com.android.systemui.Interpolators; import com.android.systemui.statusbar.phone.NotificationPanelView; +import java.util.function.Consumer; + public class NotificationDozeHelper { private final ColorMatrix mGrayscaleColorMatrix = new ColorMatrix(); @@ -70,6 +72,16 @@ public class NotificationDozeHelper { animator.start(); } + public void setIntensityDark(Consumer<Float> listener, boolean dark, + boolean animate, long delay) { + if (animate) { + startIntensityAnimation(a -> listener.accept((Float) a.getAnimatedValue()), dark, delay, + null /* listener */); + } else { + listener.accept(dark ? 1f : 0f); + } + } + public void updateGrayscaleMatrix(float intensity) { mGrayscaleColorMatrix.setSaturation(1 - intensity); } diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/NotificationIconContainer.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/NotificationIconContainer.java index 3706dc8242b9..dee15d8163a6 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/NotificationIconContainer.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/NotificationIconContainer.java @@ -95,7 +95,7 @@ public class NotificationIconContainer extends AlphaOptimizedFrameLayout { private int mActualLayoutWidth = NO_VALUE; private float mActualPaddingEnd = NO_VALUE; private float mActualPaddingStart = NO_VALUE; - private boolean mCentered; + private boolean mDark; private boolean mChangingViewPositions; private int mAddAnimationStartIndex = -1; private int mCannedAnimationStartIndex = -1; @@ -183,6 +183,9 @@ public class NotificationIconContainer extends AlphaOptimizedFrameLayout { mAddAnimationStartIndex = Math.min(mAddAnimationStartIndex, childIndex); } } + if (mDark && child instanceof StatusBarIconView) { + ((StatusBarIconView) child).setDark(mDark, false, 0); + } } @Override @@ -312,7 +315,8 @@ public class NotificationIconContainer extends AlphaOptimizedFrameLayout { numDots++; } } - if (mCentered && translationX < getLayoutEnd()) { + boolean center = mDark; + if (center && translationX < getLayoutEnd()) { float delta = (getLayoutEnd() - translationX) / 2; for (int i = 0; i < childCount; i++) { View view = getChildAt(i); @@ -390,9 +394,15 @@ public class NotificationIconContainer extends AlphaOptimizedFrameLayout { mChangingViewPositions = changingViewPositions; } - public void setAmbient(boolean ambient) { - mCentered = ambient; + public void setDark(boolean dark, boolean fade, long delay) { + mDark = dark; mDisallowNextAnimation = true; + for (int i = 0; i < getChildCount(); i++) { + View view = getChildAt(i); + if (view instanceof StatusBarIconView) { + ((StatusBarIconView) view).setDark(dark, fade, delay); + } + } } public IconState getIconState(StatusBarIconView icon) { |