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
This commit is contained in:
Jeff DeCew
2023-05-12 12:47:12 -04:00
parent d6a5b13008
commit 881635995c
2 changed files with 19 additions and 4 deletions

View File

@@ -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;
}

View File

@@ -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);