Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 456e005a authored by Adrian Roos's avatar Adrian Roos
Browse files

Revert "Revert "AOD: Use color filter to invert icons for AOD""

This reverts commit 30d9bad7.

Change-Id: I3a6dd476cb90074d012a05bb291eeaf441fe20d3
Merged-In: I3a6dd476cb90074d012a05bb291eeaf441fe20d3
parent 7bcf6d37
Loading
Loading
Loading
Loading
+1 −7
Original line number Diff line number Diff line
@@ -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();
    }

+29 −2
Original line number Diff line number Diff line
@@ -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);
    }
+12 −0
Original line number Diff line number Diff line
@@ -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);
    }
+14 −4
Original line number Diff line number Diff line
@@ -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) {