From 934027a4307d5bc4896d662fd92c47c556e11cca Mon Sep 17 00:00:00 2001 From: Selim Cinek Date: Mon, 20 Mar 2017 17:44:48 +0000 Subject: [PATCH] Revert "NotificationWrappers: Factor out doze treatment" Bug: 36430936 This reverts commit edfb65bbc4eb0453c91355c9c2277fe5e96b135b. Change-Id: I85f67d2f703bdc1bb8f2bedc19eacb5320b3c1d3 --- .../NotificationCustomViewWrapper.java | 22 ++-- .../notification/NotificationDozeHelper.java | 80 ------------- .../NotificationHeaderViewWrapper.java | 126 ++++++++++++++++++--- .../notification/NotificationIconDozeHelper.java | 101 ----------------- .../NotificationTemplateViewWrapper.java | 35 +++--- .../notification/NotificationViewWrapper.java | 44 ++++--- 6 files changed, 175 insertions(+), 233 deletions(-) delete mode 100644 packages/SystemUI/src/com/android/systemui/statusbar/notification/NotificationDozeHelper.java delete mode 100644 packages/SystemUI/src/com/android/systemui/statusbar/notification/NotificationIconDozeHelper.java diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/NotificationCustomViewWrapper.java b/packages/SystemUI/src/com/android/systemui/statusbar/notification/NotificationCustomViewWrapper.java index bca4b43afc0c..3efa29f87450 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/NotificationCustomViewWrapper.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/NotificationCustomViewWrapper.java @@ -18,7 +18,7 @@ package com.android.systemui.statusbar.notification; import android.animation.Animator; import android.animation.AnimatorListenerAdapter; -import android.content.Context; +import android.animation.ValueAnimator; import android.graphics.ColorMatrixColorFilter; import android.graphics.Paint; import android.view.View; @@ -38,8 +38,8 @@ public class NotificationCustomViewWrapper extends NotificationViewWrapper { private boolean mIsLegacy; private int mLegacyColor; - protected NotificationCustomViewWrapper(Context ctx, View view, ExpandableNotificationRow row) { - super(ctx, view, row); + protected NotificationCustomViewWrapper(View view, ExpandableNotificationRow row) { + super(view, row); mInvertHelper = new ViewInvertHelper(view, NotificationPanelView.DOZE_ANIMATION_DURATION); mLegacyColor = row.getContext().getColor(R.color.notification_legacy_background_color); } @@ -67,11 +67,13 @@ public class NotificationCustomViewWrapper extends NotificationViewWrapper { } protected void fadeGrayscale(final boolean dark, long delay) { - getDozer().startIntensityAnimation(animation -> { - getDozer().updateGrayscaleMatrix((float) animation.getAnimatedValue()); - mGreyPaint.setColorFilter( - new ColorMatrixColorFilter(getDozer().getGrayscaleColorMatrix())); - mView.setLayerPaint(mGreyPaint); + startIntensityAnimation(new ValueAnimator.AnimatorUpdateListener() { + @Override + public void onAnimationUpdate(ValueAnimator animation) { + updateGrayscaleMatrix((float) animation.getAnimatedValue()); + mGreyPaint.setColorFilter(new ColorMatrixColorFilter(mGrayscaleColorMatrix)); + mView.setLayerPaint(mGreyPaint); + } }, dark, delay, new AnimatorListenerAdapter() { @Override public void onAnimationEnd(Animator animation) { @@ -84,9 +86,9 @@ public class NotificationCustomViewWrapper extends NotificationViewWrapper { protected void updateGrayscale(boolean dark) { if (dark) { - getDozer().updateGrayscaleMatrix(1f); + updateGrayscaleMatrix(1f); mGreyPaint.setColorFilter( - new ColorMatrixColorFilter(getDozer().getGrayscaleColorMatrix())); + new ColorMatrixColorFilter(mGrayscaleColorMatrix)); mView.setLayerPaint(mGreyPaint); } } diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/NotificationDozeHelper.java b/packages/SystemUI/src/com/android/systemui/statusbar/notification/NotificationDozeHelper.java deleted file mode 100644 index 09efec61aa4f..000000000000 --- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/NotificationDozeHelper.java +++ /dev/null @@ -1,80 +0,0 @@ -/* - * Copyright (C) 2017 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package com.android.systemui.statusbar.notification; - -import android.animation.Animator; -import android.animation.AnimatorListenerAdapter; -import android.animation.ValueAnimator; -import android.graphics.ColorMatrix; -import android.graphics.ColorMatrixColorFilter; -import android.widget.ImageView; - -import com.android.systemui.Interpolators; -import com.android.systemui.statusbar.phone.NotificationPanelView; - -public class NotificationDozeHelper { - private final ColorMatrix mGrayscaleColorMatrix = new ColorMatrix(); - - public void fadeGrayscale(final ImageView target, final boolean dark, long delay) { - startIntensityAnimation(new ValueAnimator.AnimatorUpdateListener() { - @Override - public void onAnimationUpdate(ValueAnimator animation) { - updateGrayscaleMatrix((float) animation.getAnimatedValue()); - target.setColorFilter(new ColorMatrixColorFilter(mGrayscaleColorMatrix)); - } - }, dark, delay, new AnimatorListenerAdapter() { - @Override - public void onAnimationEnd(Animator animation) { - if (!dark) { - target.setColorFilter(null); - } - } - }); - } - - public void updateGrayscale(ImageView target, boolean dark) { - if (dark) { - updateGrayscaleMatrix(1f); - target.setColorFilter(new ColorMatrixColorFilter(mGrayscaleColorMatrix)); - } else { - target.setColorFilter(null); - } - } - - public void startIntensityAnimation(ValueAnimator.AnimatorUpdateListener updateListener, - boolean dark, long delay, Animator.AnimatorListener listener) { - float startIntensity = dark ? 0f : 1f; - float endIntensity = dark ? 1f : 0f; - ValueAnimator animator = ValueAnimator.ofFloat(startIntensity, endIntensity); - animator.addUpdateListener(updateListener); - animator.setDuration(NotificationPanelView.DOZE_ANIMATION_DURATION); - animator.setInterpolator(Interpolators.LINEAR_OUT_SLOW_IN); - animator.setStartDelay(delay); - if (listener != null) { - animator.addListener(listener); - } - animator.start(); - } - - public void updateGrayscaleMatrix(float intensity) { - mGrayscaleColorMatrix.setSaturation(1 - intensity); - } - - public ColorMatrix getGrayscaleColorMatrix() { - return mGrayscaleColorMatrix; - } -} diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/NotificationHeaderViewWrapper.java b/packages/SystemUI/src/com/android/systemui/statusbar/notification/NotificationHeaderViewWrapper.java index 1ffc94480dab..38e4ec1a4d7f 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/NotificationHeaderViewWrapper.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/NotificationHeaderViewWrapper.java @@ -16,10 +16,17 @@ package com.android.systemui.statusbar.notification; +import android.animation.Animator; +import android.animation.AnimatorListenerAdapter; +import android.animation.ValueAnimator; import android.app.Notification; import android.content.Context; +import android.graphics.Color; import android.graphics.ColorFilter; +import android.graphics.ColorMatrixColorFilter; +import android.graphics.PorterDuff; import android.graphics.PorterDuffColorFilter; +import android.graphics.drawable.Drawable; import android.util.ArraySet; import android.view.NotificationHeaderView; import android.view.View; @@ -30,6 +37,7 @@ import android.widget.ImageView; import android.widget.TextView; import com.android.systemui.Interpolators; +import com.android.systemui.R; import com.android.systemui.ViewInvertHelper; import com.android.systemui.statusbar.ExpandableNotificationRow; import com.android.systemui.statusbar.TransformableView; @@ -47,6 +55,10 @@ public class NotificationHeaderViewWrapper extends NotificationViewWrapper { private static final Interpolator LOW_PRIORITY_HEADER_CLOSE = new PathInterpolator(0.4f, 0f, 0.7f, 1f); + private final PorterDuffColorFilter mIconColorFilter = new PorterDuffColorFilter( + 0, PorterDuff.Mode.SRC_ATOP); + private final int mIconDarkAlpha; + private final int mIconDarkColor = 0xffffffff; protected final ViewInvertHelper mInvertHelper; protected final ViewTransformationHelper mTransformationHelper; @@ -62,7 +74,8 @@ public class NotificationHeaderViewWrapper extends NotificationViewWrapper { private boolean mTransformLowPriorityTitle; protected NotificationHeaderViewWrapper(Context ctx, View view, ExpandableNotificationRow row) { - super(ctx, view, row); + super(view, row); + mIconDarkAlpha = ctx.getResources().getInteger(R.integer.doze_small_icon_alpha); mInvertHelper = new ViewInvertHelper(ctx, NotificationPanelView.DOZE_ANIMATION_DURATION); mTransformationHelper = new ViewTransformationHelper(); @@ -95,16 +108,6 @@ public class NotificationHeaderViewWrapper extends NotificationViewWrapper { updateInvertHelper(); } - @Override - protected NotificationDozeHelper createDozer(Context ctx) { - return new NotificationIconDozeHelper(ctx); - } - - @Override - protected NotificationIconDozeHelper getDozer() { - return (NotificationIconDozeHelper) super.getDozer(); - } - protected void resolveHeaderViews() { mIcon = (ImageView) mView.findViewById(com.android.internal.R.id.icon); mHeaderText = (TextView) mView.findViewById(com.android.internal.R.id.header_text); @@ -113,7 +116,6 @@ public class NotificationHeaderViewWrapper extends NotificationViewWrapper { mColor = resolveColor(mExpandButton); mNotificationHeader = (NotificationHeaderView) mView.findViewById( com.android.internal.R.id.notification_header); - getDozer().setColor(mColor); } private int resolveColor(ImageView icon) { @@ -221,8 +223,90 @@ public class NotificationHeaderViewWrapper extends NotificationViewWrapper { // It also may lead to bugs where the icon isn't correctly greyed out. boolean hadColorFilter = mNotificationHeader.getOriginalIconColor() != NotificationHeaderView.NO_COLOR; + if (fade) { + if (hadColorFilter) { + fadeIconColorFilter(mIcon, dark, delay); + fadeIconAlpha(mIcon, dark, delay); + } else { + fadeGrayscale(mIcon, dark, delay); + } + } else { + if (hadColorFilter) { + updateIconColorFilter(mIcon, dark); + updateIconAlpha(mIcon, dark); + } else { + updateGrayscale(mIcon, dark); + } + } + } + } + + private void fadeIconColorFilter(final ImageView target, boolean dark, long delay) { + startIntensityAnimation(new ValueAnimator.AnimatorUpdateListener() { + @Override + public void onAnimationUpdate(ValueAnimator animation) { + updateIconColorFilter(target, (Float) animation.getAnimatedValue()); + } + }, dark, delay, null /* listener */); + } + + private void fadeIconAlpha(final ImageView target, boolean dark, long delay) { + startIntensityAnimation(new ValueAnimator.AnimatorUpdateListener() { + @Override + public void onAnimationUpdate(ValueAnimator animation) { + float t = (float) animation.getAnimatedValue(); + target.setImageAlpha((int) (255 * (1f - t) + mIconDarkAlpha * t)); + } + }, dark, delay, null /* listener */); + } + + protected void fadeGrayscale(final ImageView target, final boolean dark, long delay) { + startIntensityAnimation(new ValueAnimator.AnimatorUpdateListener() { + @Override + public void onAnimationUpdate(ValueAnimator animation) { + updateGrayscaleMatrix((float) animation.getAnimatedValue()); + target.setColorFilter(new ColorMatrixColorFilter(mGrayscaleColorMatrix)); + } + }, dark, delay, new AnimatorListenerAdapter() { + @Override + public void onAnimationEnd(Animator animation) { + if (!dark) { + target.setColorFilter(null); + } + } + }); + } + + private void updateIconColorFilter(ImageView target, boolean dark) { + updateIconColorFilter(target, dark ? 1f : 0f); + } - getDozer().setImageDark(mIcon, dark, fade, delay, !hadColorFilter); + private void updateIconColorFilter(ImageView target, float intensity) { + int color = interpolateColor(mColor, mIconDarkColor, intensity); + mIconColorFilter.setColor(color); + Drawable iconDrawable = target.getDrawable(); + + // Also, the notification might have been modified during the animation, so background + // might be null here. + if (iconDrawable != null) { + Drawable d = iconDrawable.mutate(); + // DrawableContainer ignores the color filter if it's already set, so clear it first to + // get it set and invalidated properly. + d.setColorFilter(null); + d.setColorFilter(mIconColorFilter); + } + } + + private void updateIconAlpha(ImageView target, boolean dark) { + target.setImageAlpha(dark ? mIconDarkAlpha : 255); + } + + protected void updateGrayscale(ImageView target, boolean dark) { + if (dark) { + updateGrayscaleMatrix(1f); + target.setColorFilter(new ColorMatrixColorFilter(mGrayscaleColorMatrix)); + } else { + target.setColorFilter(null); } } @@ -232,6 +316,22 @@ public class NotificationHeaderViewWrapper extends NotificationViewWrapper { mNotificationHeader.setOnClickListener(expandable ? onClickListener : null); } + private static int interpolateColor(int source, int target, float t) { + int aSource = Color.alpha(source); + int rSource = Color.red(source); + int gSource = Color.green(source); + int bSource = Color.blue(source); + int aTarget = Color.alpha(target); + int rTarget = Color.red(target); + int gTarget = Color.green(target); + int bTarget = Color.blue(target); + return Color.argb( + (int) (aSource * (1f - t) + aTarget * t), + (int) (rSource * (1f - t) + rTarget * t), + (int) (gSource * (1f - t) + gTarget * t), + (int) (bSource * (1f - t) + bTarget * t)); + } + @Override public NotificationHeaderView getNotificationHeader() { return mNotificationHeader; diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/NotificationIconDozeHelper.java b/packages/SystemUI/src/com/android/systemui/statusbar/notification/NotificationIconDozeHelper.java deleted file mode 100644 index 9f79ef2491d9..000000000000 --- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/NotificationIconDozeHelper.java +++ /dev/null @@ -1,101 +0,0 @@ -/* - * Copyright (C) 2017 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package com.android.systemui.statusbar.notification; - -import android.content.Context; -import android.graphics.Color; -import android.graphics.PorterDuff; -import android.graphics.PorterDuffColorFilter; -import android.graphics.drawable.Drawable; -import android.widget.ImageView; - -import com.android.systemui.R; - -public class NotificationIconDozeHelper extends NotificationDozeHelper { - - private final int mImageDarkAlpha; - private final int mImageDarkColor = 0xffffffff; - private final PorterDuffColorFilter mImageColorFilter = new PorterDuffColorFilter( - 0, PorterDuff.Mode.SRC_ATOP); - - private int mColor = Color.BLACK; - - public NotificationIconDozeHelper(Context ctx) { - mImageDarkAlpha = ctx.getResources().getInteger(R.integer.doze_small_icon_alpha); - } - - public void setColor(int color) { - mColor = color; - } - - public void setImageDark(ImageView target, boolean dark, boolean fade, long delay, - boolean useGrayscale) { - if (fade) { - if (!useGrayscale) { - fadeImageColorFilter(target, dark, delay); - fadeImageAlpha(target, dark, delay); - } else { - fadeGrayscale(target, dark, delay); - } - } else { - if (!useGrayscale) { - updateImageColorFilter(target, dark); - updateImageAlpha(target, dark); - } else { - updateGrayscale(target, dark); - } - } - } - - private void fadeImageColorFilter(final ImageView target, boolean dark, long delay) { - startIntensityAnimation(animation -> { - updateImageColorFilter(target, (Float) animation.getAnimatedValue()); - }, dark, delay, null /* listener */); - } - - private void fadeImageAlpha(final ImageView target, boolean dark, long delay) { - startIntensityAnimation(animation -> { - float t = (float) animation.getAnimatedValue(); - target.setImageAlpha((int) (255 * (1f - t) + mImageDarkAlpha * t)); - }, dark, delay, null /* listener */); - } - - private void updateImageColorFilter(ImageView target, boolean dark) { - updateImageColorFilter(target, dark ? 1f : 0f); - } - - private void updateImageColorFilter(ImageView target, float intensity) { - int color = NotificationUtils.interpolateColors(mColor, mImageDarkColor, intensity); - mImageColorFilter.setColor(color); - Drawable imageDrawable = target.getDrawable(); - - // Also, the notification might have been modified during the animation, so background - // might be null here. - if (imageDrawable != null) { - Drawable d = imageDrawable.mutate(); - // DrawableContainer ignores the color filter if it's already set, so clear it first to - // get it set and invalidated properly. - d.setColorFilter(null); - d.setColorFilter(mImageColorFilter); - } - } - - private void updateImageAlpha(ImageView target, boolean dark) { - target.setImageAlpha(dark ? mImageDarkAlpha : 255); - } - -} diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/NotificationTemplateViewWrapper.java b/packages/SystemUI/src/com/android/systemui/statusbar/notification/NotificationTemplateViewWrapper.java index f0b6b2e89e9f..846d03ac74dd 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/NotificationTemplateViewWrapper.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/NotificationTemplateViewWrapper.java @@ -16,6 +16,7 @@ package com.android.systemui.statusbar.notification; +import android.animation.ValueAnimator; import android.content.Context; import android.graphics.Color; import android.service.notification.StatusBarNotification; @@ -45,8 +46,7 @@ public class NotificationTemplateViewWrapper extends NotificationHeaderViewWrapp private int mContentHeight; private int mMinHeightHint; - protected NotificationTemplateViewWrapper(Context ctx, View view, - ExpandableNotificationRow row) { + protected NotificationTemplateViewWrapper(Context ctx, View view, ExpandableNotificationRow row) { super(ctx, view, row); mTransformationHelper.setCustomTransformation( new ViewTransformationHelper.CustomTransformation() { @@ -154,20 +154,16 @@ public class NotificationTemplateViewWrapper extends NotificationHeaderViewWrapp // This also clears the existing types super.updateTransformedTypes(); if (mTitle != null) { - mTransformationHelper.addTransformedView(TransformableView.TRANSFORMING_VIEW_TITLE, - mTitle); + mTransformationHelper.addTransformedView(TransformableView.TRANSFORMING_VIEW_TITLE, mTitle); } if (mText != null) { - mTransformationHelper.addTransformedView(TransformableView.TRANSFORMING_VIEW_TEXT, - mText); + mTransformationHelper.addTransformedView(TransformableView.TRANSFORMING_VIEW_TEXT, mText); } if (mPicture != null) { - mTransformationHelper.addTransformedView(TransformableView.TRANSFORMING_VIEW_IMAGE, - mPicture); + mTransformationHelper.addTransformedView(TransformableView.TRANSFORMING_VIEW_IMAGE, mPicture); } if (mProgressBar != null) { - mTransformationHelper.addTransformedView(TransformableView.TRANSFORMING_VIEW_PROGRESS, - mProgressBar); + mTransformationHelper.addTransformedView(TransformableView.TRANSFORMING_VIEW_PROGRESS, mProgressBar); } } @@ -177,7 +173,7 @@ public class NotificationTemplateViewWrapper extends NotificationHeaderViewWrapp return; } super.setDark(dark, fade, delay); - setPictureDark(dark, fade, delay); + setPictureGrayscale(dark, fade, delay); setProgressBarDark(dark, fade, delay); } @@ -192,9 +188,12 @@ public class NotificationTemplateViewWrapper extends NotificationHeaderViewWrapp } private void fadeProgressDark(final ProgressBar target, final boolean dark, long delay) { - getDozer().startIntensityAnimation(animation -> { - float t = (float) animation.getAnimatedValue(); - updateProgressDark(target, t); + startIntensityAnimation(new ValueAnimator.AnimatorUpdateListener() { + @Override + public void onAnimationUpdate(ValueAnimator animation) { + float t = (float) animation.getAnimatedValue(); + updateProgressDark(target, t); + } }, dark, delay, null /* listener */); } @@ -208,9 +207,13 @@ public class NotificationTemplateViewWrapper extends NotificationHeaderViewWrapp updateProgressDark(target, dark ? 1f : 0f); } - private void setPictureDark(boolean dark, boolean fade, long delay) { + protected void setPictureGrayscale(boolean grayscale, boolean fade, long delay) { if (mPicture != null) { - getDozer().setImageDark(mPicture, dark, fade, delay, true /* useGrayscale */); + if (fade) { + fadeGrayscale(mPicture, grayscale, delay); + } else { + updateGrayscale(mPicture, grayscale); + } } } diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/NotificationViewWrapper.java b/packages/SystemUI/src/com/android/systemui/statusbar/notification/NotificationViewWrapper.java index c86616bc31ed..c85e8d853b0d 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/NotificationViewWrapper.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/NotificationViewWrapper.java @@ -16,17 +16,24 @@ package com.android.systemui.statusbar.notification; +import android.animation.Animator; +import android.animation.ValueAnimator; import android.content.Context; import android.graphics.Color; +import android.graphics.ColorMatrix; import android.graphics.drawable.ColorDrawable; import android.graphics.drawable.Drawable; +import android.service.notification.StatusBarNotification; import android.support.v4.graphics.ColorUtils; import android.view.NotificationHeaderView; import android.view.View; +import com.android.systemui.Interpolators; +import com.android.systemui.R; import com.android.systemui.statusbar.CrossFadeHelper; import com.android.systemui.statusbar.ExpandableNotificationRow; import com.android.systemui.statusbar.TransformableView; +import com.android.systemui.statusbar.phone.NotificationPanelView; /** * Wraps the actual notification content view; used to implement behaviors which are different for @@ -34,14 +41,14 @@ import com.android.systemui.statusbar.TransformableView; */ public abstract class NotificationViewWrapper implements TransformableView { + protected final ColorMatrix mGrayscaleColorMatrix = new ColorMatrix(); protected final View mView; protected final ExpandableNotificationRow mRow; - private final NotificationDozeHelper mDozer; - protected boolean mDark; private int mBackgroundColor = 0; protected boolean mShouldInvertDark; protected boolean mDarkInitialized = false; + private boolean mForcedInvisible; public static NotificationViewWrapper wrap(Context ctx, View v, ExpandableNotificationRow row) { if (v.getId() == com.android.internal.R.id.status_bar_latest_event_content) { @@ -58,22 +65,13 @@ public abstract class NotificationViewWrapper implements TransformableView { } else if (v instanceof NotificationHeaderView) { return new NotificationHeaderViewWrapper(ctx, v, row); } else { - return new NotificationCustomViewWrapper(ctx, v, row); + return new NotificationCustomViewWrapper(v, row); } } - protected NotificationViewWrapper(Context ctx, View view, ExpandableNotificationRow row) { + protected NotificationViewWrapper(View view, ExpandableNotificationRow row) { mView = view; mRow = row; - mDozer = createDozer(ctx); - } - - protected NotificationDozeHelper createDozer(Context ctx) { - return new NotificationIconDozeHelper(mView.getContext()); - } - - protected NotificationDozeHelper getDozer() { - return mDozer; } /** @@ -114,6 +112,26 @@ public abstract class NotificationViewWrapper implements TransformableView { || ColorUtils.calculateLuminance(backgroundColor) > 0.5; } + + protected void startIntensityAnimation(ValueAnimator.AnimatorUpdateListener updateListener, + boolean dark, long delay, Animator.AnimatorListener listener) { + float startIntensity = dark ? 0f : 1f; + float endIntensity = dark ? 1f : 0f; + ValueAnimator animator = ValueAnimator.ofFloat(startIntensity, endIntensity); + animator.addUpdateListener(updateListener); + animator.setDuration(NotificationPanelView.DOZE_ANIMATION_DURATION); + animator.setInterpolator(Interpolators.LINEAR_OUT_SLOW_IN); + animator.setStartDelay(delay); + if (listener != null) { + animator.addListener(listener); + } + animator.start(); + } + + protected void updateGrayscaleMatrix(float intensity) { + mGrayscaleColorMatrix.setSaturation(1 - intensity); + } + /** * Update the appearance of the expand button. * -- 2.11.0