Chromium Code Reviews| Index: chrome/android/java/src/org/chromium/chrome/browser/notifications/NotificationBuilderBase.java |
| diff --git a/chrome/android/java/src/org/chromium/chrome/browser/notifications/NotificationBuilderBase.java b/chrome/android/java/src/org/chromium/chrome/browser/notifications/NotificationBuilderBase.java |
| index 08ef5fb47bd1fc05f5ea60dc671ced168090cdcb..13c01bbbbffdbf6bb60d0968f04c24fa756062d7 100644 |
| --- a/chrome/android/java/src/org/chromium/chrome/browser/notifications/NotificationBuilderBase.java |
| +++ b/chrome/android/java/src/org/chromium/chrome/browser/notifications/NotificationBuilderBase.java |
| @@ -4,10 +4,12 @@ |
| package org.chromium.chrome.browser.notifications; |
| +import android.annotation.TargetApi; |
| import android.app.Notification; |
| import android.app.PendingIntent; |
| import android.graphics.Bitmap; |
| -import android.support.v4.app.NotificationCompat.Action; |
| +import android.graphics.drawable.Icon; |
| +import android.os.Build; |
| import org.chromium.base.VisibleForTesting; |
| @@ -21,6 +23,25 @@ |
| * Abstract base class for building a notification. Stores all given arguments for later use. |
| */ |
| public abstract class NotificationBuilderBase { |
| + protected static class Action { |
| + public int iconId; |
| + public Bitmap iconBitmap; |
| + public CharSequence title; |
| + public PendingIntent intent; |
| + |
| + Action(int iconId, CharSequence title, PendingIntent intent) { |
| + this.iconId = iconId; |
| + this.title = title; |
| + this.intent = intent; |
| + } |
| + |
| + Action(Bitmap iconBitmap, CharSequence title, PendingIntent intent) { |
| + this.iconBitmap = iconBitmap; |
| + this.title = title; |
| + this.intent = intent; |
| + } |
| + } |
| + |
| /** |
| * Maximum length of CharSequence inputs to prevent excessive memory consumption. At current |
| * screen sizes we display about 500 characters at most, so this is a pretty generous limit, and |
| @@ -33,7 +54,7 @@ |
| * The maximum number of action buttons. One is for the settings button, and two more slots are |
| * for developer provided buttons. |
| */ |
| - private static final int MAX_ACTION_BUTTONS = 3; |
| + private static final int MAX_ACTION_BUTTONS = 2; |
|
Peter Beverloo
2016/02/10 12:29:37
This is because addSettingsAction() will be called
Michael van Ouwerkerk
2016/02/10 17:18:12
Done. This slipped when I moved the settings butto
|
| protected CharSequence mTitle; |
| protected CharSequence mBody; |
| @@ -134,6 +155,20 @@ public NotificationBuilderBase addAction( |
| } |
| /** |
| + * Adds an action to the notification. Actions are typically displayed as a button adjacent to |
| + * the notification content. |
| + */ |
| + public NotificationBuilderBase addAction(@Nullable Bitmap iconBitmap, |
| + @Nullable CharSequence title, @Nullable PendingIntent intent) { |
| + if (mActions.size() == MAX_ACTION_BUTTONS) { |
| + throw new IllegalStateException( |
| + "Cannot add more than " + MAX_ACTION_BUTTONS + " actions."); |
| + } |
| + mActions.add(new Action(iconBitmap, limitLength(title), intent)); |
| + return this; |
| + } |
| + |
| + /** |
| * Adds an action to the notification for opening the settings screen. |
| */ |
| public NotificationBuilderBase addSettingsAction( |
| @@ -183,4 +218,20 @@ private static CharSequence limitLength(@Nullable CharSequence input) { |
| } |
| return input; |
| } |
| + |
| + /** |
| + * Adds an action to {@code builder} using a {@code Bitmap} if possible, and otherwise a |
| + * resource id if it is set. |
| + */ |
| + @SuppressWarnings("deprecation") // For addAction(int, CharSequence, PendingIntent) |
| + @TargetApi(Build.VERSION_CODES.M) // For the Icon class. |
| + protected static void addAction(Notification.Builder builder, Action action) { |
|
Peter Beverloo
2016/02/10 12:29:37
Could we give this a different name instead of ove
Michael van Ouwerkerk
2016/02/10 17:18:12
Sure, we do have many methods called addAction. Do
|
| + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M && action.iconBitmap != null) { |
| + Icon icon = Icon.createWithBitmap(action.iconBitmap); |
| + builder.addAction( |
| + new Notification.Action.Builder(icon, action.title, action.intent).build()); |
| + } else { |
| + builder.addAction(action.iconId, action.title, action.intent); |
| + } |
| + } |
| } |