Index: chrome/android/java/src/org/chromium/chrome/browser/notifications/NotificationPlatformBridge.java |
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/notifications/NotificationPlatformBridge.java b/chrome/android/java/src/org/chromium/chrome/browser/notifications/NotificationPlatformBridge.java |
index 7a26a4a93ce65ca16224f6fa0bd7c87126b38ab1..c611f2ae215719bd5c56b3ccf3e96923bc51cad8 100644 |
--- a/chrome/android/java/src/org/chromium/chrome/browser/notifications/NotificationPlatformBridge.java |
+++ b/chrome/android/java/src/org/chromium/chrome/browser/notifications/NotificationPlatformBridge.java |
@@ -305,21 +305,21 @@ public class NotificationPlatformBridge { |
} |
/** |
- * Returns the Intent to create a PendingIntent for completing |action| on the notification |
- * identified by the data in the other parameters. |
+ * Returns the PendingIntent for completing |action| on the notification identified by the data |
+ * in the other parameters. |
* |
* @param action The action this pending intent will represent. |
* @param persistentNotificationId The persistent id of the notification. |
* @param origin The origin to whom the notification belongs. |
* @param profileId |
* @param incognito |
- * @param webApkPackage The package of the WebAPK associated with the notification. |
- * Empty if the notification is not associated with a WebAPK. |
+ * @param webApkPackage The package of the WebAPK associated with the notification. Empty if |
+ * the notification is not associated with a WebAPK. |
* @param tag The tag of the notification. May be NULL. |
* @param actionIndex The zero-based index of the action button, or -1 if not applicable. |
*/ |
- private Intent makeIntent(String action, long persistentNotificationId, String origin, |
- String profileId, boolean incognito, @Nullable String webApkPackage, |
+ private PendingIntent makePendingIntent(String action, long persistentNotificationId, |
+ String origin, String profileId, boolean incognito, @Nullable String webApkPackage, |
@Nullable String tag, int actionIndex) { |
Uri intentData = makeIntentData(persistentNotificationId, origin, actionIndex); |
Intent intent = new Intent(action, intentData); |
@@ -335,24 +335,6 @@ public class NotificationPlatformBridge { |
NotificationConstants.EXTRA_NOTIFICATION_INFO_WEB_APK_PACKAGE, webApkPackage); |
intent.putExtra(NotificationConstants.EXTRA_NOTIFICATION_INFO_ACTION_INDEX, actionIndex); |
- return intent; |
- } |
- /** |
- * Returns the PendingIntent for completing |action| on the notification identified by the data |
- * in the other parameters. |
- * |
- * @param action The action this pending intent will represent. |
- * @param persistentNotificationId The persistent id of the notification. |
- * @param origin The origin to whom the notification belongs. |
- * @param tag The tag of the notification. May be NULL. |
- * @param actionIndex The zero-based index of the action button, or -1 if not applicable. |
- */ |
- private PendingIntent makePendingIntent(String action, long persistentNotificationId, |
- String origin, String profileId, boolean incognito, @Nullable String tag, |
- int actionIndex) { |
- Intent intent = makeIntent(action, persistentNotificationId, origin, profileId, incognito, |
- null, tag, actionIndex); |
- |
return PendingIntent.getBroadcast(mAppContext, PENDING_INTENT_REQUEST_CODE, intent, |
PendingIntent.FLAG_UPDATE_CURRENT); |
} |
@@ -504,8 +486,7 @@ public class NotificationPlatformBridge { |
throw new IllegalArgumentException("The number of action titles and icons must match."); |
} |
- final NotificationBuilderBase notificationBuilder = createNotificationBuilder(); |
- final String platformTag = makePlatformTag(persistentNotificationId, origin, tag); |
+ Resources res = mAppContext.getResources(); |
// Record whether it's known whether notifications can be shown to the user at all. |
RecordHistogram.recordEnumeratedHistogram( |
@@ -513,127 +494,71 @@ public class NotificationPlatformBridge { |
NotificationSystemStatusUtil.determineAppNotificationStatus(mAppContext), |
NotificationSystemStatusUtil.APP_NOTIFICATIONS_STATUS_BOUNDARY); |
- buildNotification(notificationBuilder, |
- true /* hasSettings */, actionTitles != null ? actionTitles.length : 0, |
- persistentNotificationId, origin, profileId, incognito, tag, |
- title, body, icon, badge, vibrationPattern, timestamp, renotify, silent); |
+ // Set up a pending intent for going to the settings screen for |origin|. |
+ Intent settingsIntent = PreferencesLauncher.createIntentForSettingsPage( |
+ mAppContext, SingleWebsitePreferences.class.getName()); |
+ settingsIntent.setData( |
+ makeIntentData(persistentNotificationId, origin, -1 /* actionIndex */)); |
+ settingsIntent.putExtra(Preferences.EXTRA_SHOW_FRAGMENT_ARGUMENTS, |
+ SingleWebsitePreferences.createFragmentArgsForSite(origin)); |
- if (!webApkPackage.isEmpty()) { |
- displayNotificationInWebAPK(notificationBuilder, persistentNotificationId, origin, |
- profileId, incognito, tag, webApkPackage, actionTitles, actionIcons, |
- platformTag); |
- return; |
- } else { |
- PendingIntent clickIntent = makePendingIntent( |
- NotificationConstants.ACTION_CLICK_NOTIFICATION, persistentNotificationId, |
- origin, profileId, incognito, tag, -1 /* actionIndex */); |
- PendingIntent closeIntent = makePendingIntent( |
- NotificationConstants.ACTION_CLOSE_NOTIFICATION, persistentNotificationId, |
- origin, profileId, incognito, tag, -1 /* actionIndex */); |
- notificationBuilder.setContentIntent(clickIntent) |
- .setDeleteIntent(closeIntent); |
- |
- PendingIntent[] actionIntents = null; |
- if (actionTitles.length > 0) { |
- actionIntents = new PendingIntent[actionTitles.length]; |
- for (int actionIndex = 0; actionIndex < actionTitles.length; |
- actionIndex++) { |
- notificationBuilder.addAction(actionIcons[actionIndex], |
- actionTitles[actionIndex], |
- makePendingIntent(NotificationConstants.ACTION_CLICK_NOTIFICATION, |
- persistentNotificationId, origin, profileId, |
- incognito, tag, actionIndex)); |
- } |
- } |
- mNotificationManager.notify(platformTag, PLATFORM_ID, notificationBuilder.build()); |
- } |
- } |
- |
- /** |
- * Build and format a notification to display. Every fields (except PendingIntents) are set |
- * to the notification builder within this function. |
- */ |
- private void buildNotification(NotificationBuilderBase notificationBuilder, |
- boolean hasSettings, int actionLength, |
- long persistentNotificationId, String origin, String profileId, |
- boolean incognito, String tag, String title, String body, Bitmap icon, Bitmap badge, |
- int[] vibrationPattern, long timestamp, boolean renotify, boolean silent) { |
- Resources res = mAppContext.getResources(); |
- PendingIntent pendingSettingsIntent = null; |
- if (hasSettings) { |
- // Set up a pending intent for going to the settings screen for |origin|. |
- Intent settingsIntent = PreferencesLauncher.createIntentForSettingsPage( |
- mAppContext, SingleWebsitePreferences.class.getName()); |
- settingsIntent.setData( |
- makeIntentData(persistentNotificationId, origin, -1 /* actionIndex */)); |
- settingsIntent.putExtra(Preferences.EXTRA_SHOW_FRAGMENT_ARGUMENTS, |
- SingleWebsitePreferences.createFragmentArgsForSite(origin)); |
- |
- pendingSettingsIntent = PendingIntent.getActivity(mAppContext, |
- PENDING_INTENT_REQUEST_CODE, settingsIntent, PendingIntent.FLAG_UPDATE_CURRENT); |
+ PendingIntent pendingSettingsIntent = PendingIntent.getActivity(mAppContext, |
+ PENDING_INTENT_REQUEST_CODE, settingsIntent, PendingIntent.FLAG_UPDATE_CURRENT); |
+ PendingIntent clickIntent = makePendingIntent( |
+ NotificationConstants.ACTION_CLICK_NOTIFICATION, persistentNotificationId, origin, |
+ profileId, incognito, webApkPackage, tag, -1 /* actionIndex */); |
+ PendingIntent closeIntent = makePendingIntent( |
+ NotificationConstants.ACTION_CLOSE_NOTIFICATION, persistentNotificationId, |
+ origin, profileId, incognito, webApkPackage, tag, -1 /* actionIndex */); |
+ |
+ NotificationBuilderBase notificationBuilder = |
+ createNotificationBuilder() |
+ .setTitle(title) |
+ .setBody(body) |
+ .setLargeIcon(ensureNormalizedIcon(icon, origin)) |
+ .setSmallIcon(R.drawable.ic_chrome) |
+ .setSmallIcon(badge) |
+ .setContentIntent(clickIntent) |
+ .setDeleteIntent(closeIntent) |
+ .setTicker(createTickerText(title, body)) |
+ .setTimestamp(timestamp) |
+ .setRenotify(renotify) |
+ .setOrigin(UrlUtilities.formatUrlForSecurityDisplay( |
+ origin, false /* showScheme */)); |
+ |
+ for (int actionIndex = 0; actionIndex < actionTitles.length; actionIndex++) { |
+ notificationBuilder.addAction(actionIcons[actionIndex], actionTitles[actionIndex], |
+ makePendingIntent(NotificationConstants.ACTION_CLICK_NOTIFICATION, |
+ persistentNotificationId, origin, profileId, |
+ incognito, webApkPackage, tag, actionIndex)); |
} |
- notificationBuilder.setTitle(title) |
- .setBody(body) |
- .setLargeIcon(ensureNormalizedIcon(icon, origin)) |
- .setSmallIcon(R.drawable.ic_chrome) |
- .setSmallIcon(badge) |
- .setTicker(createTickerText(title, body)) |
- .setTimestamp(timestamp) |
- .setRenotify(renotify) |
- .setOrigin(UrlUtilities.formatUrlForSecurityDisplay( |
- origin, false /* showScheme */)); |
- if (hasSettings) { |
- // If action buttons are displayed, there isn't room for the full Site Settings button |
- // label and icon, so abbreviate it. This has the unfortunate side-effect of |
- // unnecessarily abbreviating it on Android Wear also (crbug.com/576656). |
- // If custom layouts are enabled, the label and icon provided here only affect |
- // Android Wear, so don't abbreviate them. |
- boolean abbreviateSiteSettings = actionLength > 0 && !useCustomLayouts(); |
- int settingsIconId = abbreviateSiteSettings ? 0 : R.drawable.settings_cog; |
- CharSequence settingsTitle = abbreviateSiteSettings |
- ? res.getString(R.string.notification_site_settings_button) |
- : res.getString(R.string.page_info_site_settings_button); |
- // If the settings button is displayed together with the other buttons it has to |
- // be the last one, so add it after the other actions. |
- notificationBuilder.addSettingsAction(settingsIconId, settingsTitle, |
- pendingSettingsIntent); |
- } |
+ // If action buttons are displayed, there isn't room for the full Site Settings button |
+ // label and icon, so abbreviate it. This has the unfortunate side-effect of unnecessarily |
+ // abbreviating it on Android Wear also (crbug.com/576656). If custom layouts are enabled, |
+ // the label and icon provided here only affect Android Wear, so don't abbreviate them. |
+ boolean abbreviateSiteSettings = actionTitles.length > 0 && !useCustomLayouts(); |
+ int settingsIconId = abbreviateSiteSettings ? 0 : R.drawable.settings_cog; |
+ CharSequence settingsTitle = abbreviateSiteSettings |
+ ? res.getString(R.string.notification_site_settings_button) |
+ : res.getString(R.string.page_info_site_settings_button); |
+ // If the settings button is displayed together with the other buttons it has to be the last |
+ // one, so add it after the other actions. |
+ notificationBuilder.addSettingsAction(settingsIconId, settingsTitle, pendingSettingsIntent); |
notificationBuilder.setDefaults(makeDefaults(vibrationPattern.length, silent)); |
if (vibrationPattern.length > 0) { |
notificationBuilder.setVibrate(makeVibrationPattern(vibrationPattern)); |
} |
- } |
- /** |
- * Bind to the Service of required WebAPK, create an notification and display. |
- */ |
- private void displayNotificationInWebAPK(NotificationBuilderBase notificationBuilder, |
- long persistentNotificationId, String origin, String profileId, |
- boolean incognito, String tag, String webApkPackage, String[] actionTitles, |
- Bitmap[] actionIcons, String platformTag) { |
- Intent clickIntent = makeIntent(NotificationConstants.ACTION_CLICK_NOTIFICATION, |
- persistentNotificationId, origin, |
- profileId, incognito, webApkPackage, tag, -1 /* actionIndex */); |
- Intent closeIntent = makeIntent(NotificationConstants.ACTION_CLOSE_NOTIFICATION, |
- persistentNotificationId, origin, profileId, incognito, webApkPackage, |
- tag, -1 /* actionIndex */); |
- Intent[] actionIntents = null; |
- if (actionTitles.length > 0) { |
- actionIntents = new Intent[actionTitles.length]; |
- for (int actionIndex = 0; actionIndex < actionTitles.length; |
- actionIndex++) { |
- actionIntents[actionIndex] = makeIntent( |
- NotificationConstants.ACTION_CLICK_NOTIFICATION, persistentNotificationId, |
- origin, profileId, incognito, webApkPackage, tag, actionIndex); |
- } |
+ String platformTag = makePlatformTag(persistentNotificationId, origin, tag); |
+ if (webApkPackage.isEmpty()) { |
+ mNotificationManager.notify(platformTag, PLATFORM_ID, notificationBuilder.build()); |
+ } else { |
+ new NotificationClient().displayNotification( |
+ notificationBuilder, platformTag, PLATFORM_ID, webApkPackage); |
} |
- NotificationClient client = new NotificationClient(); |
- client.displayNotification(PENDING_INTENT_REQUEST_CODE, notificationBuilder, clickIntent, |
- closeIntent, actionIntents, actionTitles, actionIcons, |
- PendingIntent.FLAG_UPDATE_CURRENT, platformTag, PLATFORM_ID, webApkPackage); |
} |
private NotificationBuilderBase createNotificationBuilder() { |