summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--core/java/android/app/Notification.java1
-rw-r--r--core/java/com/android/internal/widget/NotificationRowIconView.java50
2 files changed, 50 insertions, 1 deletions
diff --git a/core/java/android/app/Notification.java b/core/java/android/app/Notification.java
index a1fa4047f839..a1c4267072c0 100644
--- a/core/java/android/app/Notification.java
+++ b/core/java/android/app/Notification.java
@@ -6222,6 +6222,7 @@ public class Notification implements Parcelable
if (appIconRes != 0) {
mN.mAppIcon = Icon.createWithResource(mContext, appIconRes);
contentView.setImageViewIcon(R.id.icon, mN.mAppIcon);
+ contentView.setBoolean(R.id.icon, "setShouldShowAppIcon", true);
usingAppIcon = true;
} else {
Log.w(TAG, "bindSmallIcon: could not get the app icon");
diff --git a/core/java/com/android/internal/widget/NotificationRowIconView.java b/core/java/com/android/internal/widget/NotificationRowIconView.java
index 58bddaecd3e7..f5f04a7d50d1 100644
--- a/core/java/com/android/internal/widget/NotificationRowIconView.java
+++ b/core/java/com/android/internal/widget/NotificationRowIconView.java
@@ -22,7 +22,12 @@ import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.BitmapShader;
import android.graphics.Canvas;
+import android.graphics.Color;
+import android.graphics.ColorFilter;
import android.graphics.Paint;
+import android.graphics.PorterDuff;
+import android.graphics.PorterDuffColorFilter;
+import android.graphics.Rect;
import android.graphics.drawable.BitmapDrawable;
import android.graphics.drawable.Drawable;
import android.graphics.drawable.Icon;
@@ -36,6 +41,13 @@ import android.widget.RemoteViews;
@RemoteViews.RemoteView
public class NotificationRowIconView extends CachingIconView {
private boolean mApplyCircularCrop = false;
+ private boolean mShouldShowAppIcon = false;
+
+ // Padding and background set on the view prior to being changed by setShouldShowAppIcon(true),
+ // to be restored if shouldShowAppIcon becomes false again.
+ private Rect mOriginalPadding = null;
+ private Drawable mOriginalBackground = null;
+
public NotificationRowIconView(Context context) {
super(context);
@@ -59,7 +71,7 @@ public class NotificationRowIconView extends CachingIconView {
@Override
protected void onFinishInflate() {
// If showing the app icon, we don't need background or padding.
- if (Flags.notificationsUseAppIcon() || Flags.notificationsUseAppIconInRow()) {
+ if (Flags.notificationsUseAppIcon()) {
setPadding(0, 0, 0, 0);
setBackground(null);
}
@@ -67,6 +79,42 @@ public class NotificationRowIconView extends CachingIconView {
super.onFinishInflate();
}
+ /** Whether the icon represents the app icon (instead of the small icon). */
+ @RemotableViewMethod
+ public void setShouldShowAppIcon(boolean shouldShowAppIcon) {
+ if (Flags.notificationsUseAppIconInRow()) {
+ if (mShouldShowAppIcon == shouldShowAppIcon) {
+ return; // no change
+ }
+
+ mShouldShowAppIcon = shouldShowAppIcon;
+ if (mShouldShowAppIcon) {
+ if (mOriginalPadding == null && mOriginalBackground == null) {
+ mOriginalPadding = new Rect(getPaddingLeft(), getPaddingTop(),
+ getPaddingRight(), getPaddingBottom());
+ mOriginalBackground = getBackground();
+ }
+
+ setPadding(0, 0, 0, 0);
+
+ // Make the background white in case the icon itself doesn't have one.
+ int white = Color.rgb(255, 255, 255);
+ ColorFilter colorFilter = new PorterDuffColorFilter(white,
+ PorterDuff.Mode.SRC_ATOP);
+ getBackground().mutate().setColorFilter(colorFilter);
+ } else {
+ // Restore original padding and background if needed
+ if (mOriginalPadding != null) {
+ setPadding(mOriginalPadding.left, mOriginalPadding.top, mOriginalPadding.right,
+ mOriginalPadding.bottom);
+ mOriginalPadding = null;
+ }
+ setBackground(mOriginalBackground);
+ mOriginalBackground = null;
+ }
+ }
+ }
+
@Nullable
@Override
Drawable loadSizeRestrictedIcon(@Nullable Icon icon) {