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

Commit 88163599 authored by Jeff DeCew's avatar Jeff DeCew
Browse files

Add redundant tint to notification and footer button backgrounds.

This is required because Resources apparently isn't thread-safe, and can end up with an inconsistent cache, especially for drawables, for an extended period after a theme change.

Tracking the removal of this duplicate code with:
Bug: 282173943

Fixes: 282168337
Test: toggle night mode until the bug hits (detectable by logging in I4879dd28a8d88b3ee6fc1f09c9029eb653bfa460) then verify the notifications still look right.
Change-Id: Ie5e0d7144f4851bdb82f18ffdda2c910ee0790ef
parent d6a5b130
Loading
Loading
Loading
Loading
+2 −1
Original line number Diff line number Diff line
@@ -321,7 +321,8 @@ public abstract class ActivatableNotificationView extends ExpandableOutlineView
    protected void setBackgroundTintColor(int color) {
        if (color != mCurrentBackgroundTint) {
            mCurrentBackgroundTint = color;
            if (color == mNormalColor) {
            // TODO(282173943): re-enable this tinting optimization when Resources are thread-safe
            if (false && color == mNormalColor) {
                // We don't need to tint a normal notification
                color = 0;
            }
+17 −3
Original line number Diff line number Diff line
@@ -16,11 +16,15 @@

package com.android.systemui.statusbar.notification.row;

import static android.graphics.PorterDuff.Mode.SRC_ATOP;

import android.annotation.ColorInt;
import android.content.Context;
import android.content.res.ColorStateList;
import android.content.res.Configuration;
import android.content.res.Resources;
import android.graphics.ColorFilter;
import android.graphics.PorterDuffColorFilter;
import android.graphics.drawable.Drawable;
import android.util.AttributeSet;
import android.util.IndentingPrintWriter;
@@ -157,10 +161,20 @@ public class FooterView extends StackScrollerDecorView {
     */
    public void updateColors() {
        Resources.Theme theme = mContext.getTheme();
        int textColor = getResources().getColor(R.color.notif_pill_text, theme);
        mClearAllButton.setBackground(theme.getDrawable(R.drawable.notif_footer_btn_background));
        final @ColorInt int textColor = getResources().getColor(R.color.notif_pill_text, theme);
        final Drawable clearAllBg = theme.getDrawable(R.drawable.notif_footer_btn_background);
        final Drawable manageBg = theme.getDrawable(R.drawable.notif_footer_btn_background);
        // TODO(b/282173943): Remove redundant tinting once Resources are thread-safe
        final @ColorInt int buttonBgColor =
                Utils.getColorAttrDefaultColor(mContext, com.android.internal.R.attr.colorSurface);
        final ColorFilter bgColorFilter = new PorterDuffColorFilter(buttonBgColor, SRC_ATOP);
        if (buttonBgColor != 0) {
            clearAllBg.setColorFilter(bgColorFilter);
            manageBg.setColorFilter(bgColorFilter);
        }
        mClearAllButton.setBackground(clearAllBg);
        mClearAllButton.setTextColor(textColor);
        mManageButton.setBackground(theme.getDrawable(R.drawable.notif_footer_btn_background));
        mManageButton.setBackground(manageBg);
        mManageButton.setTextColor(textColor);
        final @ColorInt int labelTextColor =
                Utils.getColorAttrDefaultColor(mContext, android.R.attr.textColorPrimary);