Fix all RemoteInputView colors when isColorized changes.
* I made recent changes to isColorized logic which made this far wasier to test with the notify app.
* NotificationContentView wasn't updating the view enough, so that was fixed.
* Update the mBackgroundColor for non-colorized notifications, too, as this was causing the colorized color to be left around when removing colorization.
* Tint the cursor drawable instead of removing removint it, as this caused it to behave oddly when colorized, and to have the wrong color when removing colorization.
* Use codepaths that are as identical as possible across colorized/non-colorized to prevent more of these issues.
Bug: 182577304
Test: manual w/ notify app
Change-Id: I5190a37b4f41129a31102d40174d091a750d8f43
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/NotificationContentView.java b/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/NotificationContentView.java
index c3ccba4..a0b0b3d 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/NotificationContentView.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/NotificationContentView.java
@@ -873,14 +873,19 @@
}
public void setBackgroundTintColor(int color) {
+ boolean colorized = mNotificationEntry.getSbn().getNotification().isColorized();
if (mExpandedSmartReplyView != null) {
- boolean colorized = mNotificationEntry.getSbn().getNotification().isColorized();
mExpandedSmartReplyView.setBackgroundTintColor(color, colorized);
}
if (mHeadsUpSmartReplyView != null) {
- boolean colorized = mNotificationEntry.getSbn().getNotification().isColorized();
mHeadsUpSmartReplyView.setBackgroundTintColor(color, colorized);
}
+ if (mExpandedRemoteInput != null) {
+ mExpandedRemoteInput.setBackgroundTintColor(color, colorized);
+ }
+ if (mHeadsUpRemoteInput != null) {
+ mHeadsUpRemoteInput.setBackgroundTintColor(color, colorized);
+ }
}
public int getVisibleType() {
@@ -1243,8 +1248,7 @@
View actionContainerCandidate = view.findViewById(
com.android.internal.R.id.actions_container);
if (actionContainerCandidate instanceof FrameLayout) {
- RemoteInputView existing = (RemoteInputView)
- view.findViewWithTag(RemoteInputView.VIEW_TAG);
+ RemoteInputView existing = view.findViewWithTag(RemoteInputView.VIEW_TAG);
if (existing != null) {
existing.onNotificationUpdateOrReset();
@@ -1292,13 +1296,9 @@
}
}
if (existing != null) {
- if (entry.getSbn().getNotification().isColorized()) {
- existing.setBackgroundTintColor(
- entry.getSbn().getNotification().color, true);
- } else {
- existing.setBackgroundTintColor(
- entry.getRow().getCurrentBackgroundTint(), false);
- }
+ int backgroundColor = entry.getRow().getCurrentBackgroundTint();
+ boolean colorized = mNotificationEntry.getSbn().getNotification().isColorized();
+ existing.setBackgroundTintColor(backgroundColor, colorized);
}
return existing;
}
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/policy/RemoteInputView.java b/packages/SystemUI/src/com/android/systemui/statusbar/policy/RemoteInputView.java
index 5a78ea8..6843eb5 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/policy/RemoteInputView.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/policy/RemoteInputView.java
@@ -34,6 +34,7 @@
import android.content.res.ColorStateList;
import android.content.res.TypedArray;
import android.graphics.Color;
+import android.graphics.PorterDuff;
import android.graphics.Rect;
import android.graphics.drawable.ColorDrawable;
import android.graphics.drawable.Drawable;
@@ -157,52 +158,48 @@
/**
* The remote view needs to adapt to colorized notifications when set
* It overrides the background of itself as well as all of its childern
- * @param color colorized notification color
+ * @param backgroundColor colorized notification color
*/
- public void setBackgroundTintColor(int color, boolean colorized) {
- if (colorized == mColorized && color == mTint) return;
+ public void setBackgroundTintColor(final int backgroundColor, boolean colorized) {
+ if (colorized == mColorized && backgroundColor == mTint) return;
mColorized = colorized;
- mTint = color;
- final int[][] states = new int[][]{
- new int[]{com.android.internal.R.attr.state_enabled},
- new int[]{},
- };
- final int[] colors;
+ mTint = backgroundColor;
+ final int editBgColor;
+ final int accentColor;
+ final int textColor;
+ final int hintTextColor;
if (colorized) {
- final boolean dark = !ContrastColorUtil.isColorLight(color);
- final int finalColor = dark
- ? Color.WHITE
- : Color.BLACK;
- colors = new int[]{
- finalColor,
- finalColor & 0x4DFFFFFF // %30 opacity
- };
- mEditText.setUniformBackgroundTintColor(color);
- mEditText.setUniformForegroundColor(finalColor);
-
+ final boolean dark = !ContrastColorUtil.isColorLight(backgroundColor);
+ final int foregroundColor = dark ? Color.WHITE : Color.BLACK;
+ editBgColor = backgroundColor;
+ accentColor = foregroundColor;
+ textColor = foregroundColor;
+ hintTextColor = ColorUtils.setAlphaComponent(foregroundColor, 0x99);
} else {
- mEditText.setTextColor(mContext.getColor(R.color.remote_input_text));
- mEditText.setHintTextColor(mContext.getColorStateList(R.color.remote_input_hint));
- TypedArray ta = getContext().getTheme().obtainStyledAttributes(new int[]{
+ textColor = mContext.getColor(R.color.remote_input_text);
+ hintTextColor = mContext.getColor(R.color.remote_input_hint);
+ try (TypedArray ta = getContext().getTheme().obtainStyledAttributes(new int[]{
com.android.internal.R.attr.colorAccent,
com.android.internal.R.attr.colorBackgroundFloating,
- });
- int colorAccent = ta.getColor(0, 0);
- int colorBackgroundFloating = ta.getColor(1, 0);
- ta.recycle();
- mEditText.setTextBackgroundColors(colorAccent, colorBackgroundFloating);
- colors = new int[]{
- colorAccent,
- colorBackgroundFloating & 0x4DFFFFFF // %30 opacity
- };
+ })) {
+ accentColor = ta.getColor(0, textColor);
+ editBgColor = ta.getColor(1, backgroundColor);
+ }
}
- mEditText.setBackgroundColor(color);
- final ColorStateList tint = new ColorStateList(states, colors);
- mSendButton.setImageTintList(tint);
- mProgressBar.setProgressTintList(tint);
- mProgressBar.setIndeterminateTintList(tint);
- mProgressBar.setSecondaryProgressTintList(tint);
- setBackgroundColor(color);
+ mEditText.setAllColors(backgroundColor, editBgColor,
+ accentColor, textColor, hintTextColor);
+ final ColorStateList accentTint = new ColorStateList(new int[][]{
+ new int[]{com.android.internal.R.attr.state_enabled},
+ new int[]{},
+ }, new int[]{
+ accentColor,
+ accentColor & 0x4DFFFFFF // %30 opacity
+ });
+ mSendButton.setImageTintList(accentTint);
+ mProgressBar.setProgressTintList(accentTint);
+ mProgressBar.setIndeterminateTintList(accentTint);
+ mProgressBar.setSecondaryProgressTintList(accentTint);
+ setBackgroundColor(backgroundColor);
}
@Override
@@ -796,20 +793,6 @@
}
}
- protected void setUniformBackgroundTintColor(int color) {
- mBackgroundColor.setColor(color);
- mTextBackground.setColor(color);
- }
-
- protected void setUniformForegroundColor(int color) {
- int stroke = getContext().getResources()
- .getDimensionPixelSize(R.dimen.remote_input_view_text_stroke);
- mTextBackground.setStroke(stroke, color);
- setTextColor(color);
- setHintTextColor(ColorUtils.setAlphaComponent(color, 0x99));
- setTextCursorDrawable(null);
- }
-
@Override
public void getFocusedRect(Rect r) {
super.getFocusedRect(r);
@@ -938,11 +921,17 @@
return remainingItems;
}
- protected void setTextBackgroundColors(int strokeColor, int textBackground) {
- mTextBackground.setColor(textBackground);
+ protected void setAllColors(int backgroundColor, int editBackgroundColor,
+ int accentColor, int textColor, int hintTextColor) {
+ setBackgroundColor(backgroundColor);
+ mBackgroundColor.setColor(backgroundColor);
+ mTextBackground.setColor(editBackgroundColor);
int stroke = getContext().getResources()
.getDimensionPixelSize(R.dimen.remote_input_view_text_stroke);
- mTextBackground.setStroke(stroke, strokeColor);
+ mTextBackground.setStroke(stroke, accentColor);
+ setTextColor(textColor);
+ setHintTextColor(hintTextColor);
+ getTextCursorDrawable().setColorFilter(accentColor, PorterDuff.Mode.SRC_IN);
}
}
}