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

Commit 92df1f27 authored by Jorim Jaggi's avatar Jorim Jaggi
Browse files

Fix colored icons in doze mode

Also fixes the issue that small icons promoted to large icons were
not forced to be white, which lead to inconsistent treatment of the
icons.

Bug: 18537470

Change-Id: Ic35e082da12793f3f13c91740bfc345b336c3db4
parent a8800f7c
Loading
Loading
Loading
Loading
+8 −2
Original line number Diff line number Diff line
@@ -3055,6 +3055,11 @@ public class Notification implements Parcelable
         * Apply any necessary background to smallIcons being used in the largeIcon spot.
         */
        private void processSmallIconAsLarge(int largeIconId, RemoteViews contentView) {
            if (!isLegacy()) {
                contentView.setDrawableParameters(R.id.icon, false, -1,
                        0xFFFFFFFF,
                        PorterDuff.Mode.SRC_ATOP, -1);
            }
            if (!isLegacy() || mColorUtil.isGrayscaleIcon(mContext, largeIconId)) {
                applyLargeIconBackground(contentView);
            }
@@ -3102,11 +3107,12 @@ public class Notification implements Parcelable
         */
        private void processSmallRightIcon(int smallIconDrawableId,
                RemoteViews contentView) {
            if (!isLegacy() || mColorUtil.isGrayscaleIcon(mContext, smallIconDrawableId)) {
            if (!isLegacy()) {
                contentView.setDrawableParameters(R.id.right_icon, false, -1,
                        0xFFFFFFFF,
                        PorterDuff.Mode.SRC_ATOP, -1);

            }
            if (!isLegacy() || mColorUtil.isGrayscaleIcon(mContext, smallIconDrawableId)) {
                contentView.setInt(R.id.right_icon,
                        "setBackgroundResource",
                        R.drawable.notification_icon_legacy_bg);
+16 −3
Original line number Diff line number Diff line
@@ -53,6 +53,9 @@ public class NotificationTemplateViewWrapper extends NotificationViewWrapper {
    private ImageView mIcon;
    protected ImageView mPicture;

    /** Whether the icon needs to be forced grayscale when in dark mode. */
    private boolean mIconForceGraysaleWhenDark;

    protected NotificationTemplateViewWrapper(Context ctx, View view) {
        super(view);
        mIconDarkAlpha = ctx.getResources().getInteger(R.integer.doze_small_icon_alpha);
@@ -73,11 +76,15 @@ public class NotificationTemplateViewWrapper extends NotificationViewWrapper {
        mIcon = resolveIcon(largeIcon, rightIcon);
        mPicture = resolvePicture(largeIcon);
        mIconBackgroundColor = resolveBackgroundColor(mIcon);

        // If the icon already has a color filter, we assume that we already forced the icon to be
        // white when we created the notification.
        mIconForceGraysaleWhenDark = mIcon != null && mIcon.getDrawable().getColorFilter() != null;
    }

    private ImageView resolveIcon(ImageView largeIcon, ImageView rightIcon) {
        return largeIcon != null && largeIcon.getBackground() != null ? largeIcon
                : rightIcon != null && rightIcon.getBackground() != null ? rightIcon
                : rightIcon != null && rightIcon.getVisibility() == View.VISIBLE ? rightIcon
                : null;
    }

@@ -118,9 +125,15 @@ public class NotificationTemplateViewWrapper extends NotificationViewWrapper {
            if (fade) {
                fadeIconColorFilter(mIcon, dark, delay);
                fadeIconAlpha(mIcon, dark, delay);
                if (!mIconForceGraysaleWhenDark) {
                    fadeGrayscale(mIcon, dark, delay);
                }
            } else {
                updateIconColorFilter(mIcon, dark);
                updateIconAlpha(mIcon, dark);
                if (!mIconForceGraysaleWhenDark) {
                    updateGrayscale(mIcon, dark);
                }
            }
        }
        setPictureGrayscale(dark, fade, delay);
@@ -196,8 +209,8 @@ public class NotificationTemplateViewWrapper extends NotificationViewWrapper {
        mIconColorFilter.setColor(color);
        Drawable background = target.getBackground();

        // The notification might have been modified during the animation, so background might be
        // null here.
        // The background might be null for legacy notifications. Also, the notification might have
        // been modified during the animation, so background might be null here.
        if (background != null) {
            background.mutate().setColorFilter(mIconColorFilter);
        }