Chromium Code Reviews| Index: chrome/android/java/src/org/chromium/chrome/browser/browseractions/BrowserActionsContextMenuItemDelegate.java |
| diff --git a/chrome/android/java/src/org/chromium/chrome/browser/browseractions/BrowserActionsContextMenuItemDelegate.java b/chrome/android/java/src/org/chromium/chrome/browser/browseractions/BrowserActionsContextMenuItemDelegate.java |
| index eb8103067cf9ba6098c427cc1cab7c2bc887cbe0..abbf43b5028966a94cdf84a13a7b0f6d243adf81 100644 |
| --- a/chrome/android/java/src/org/chromium/chrome/browser/browseractions/BrowserActionsContextMenuItemDelegate.java |
| +++ b/chrome/android/java/src/org/chromium/chrome/browser/browseractions/BrowserActionsContextMenuItemDelegate.java |
| @@ -4,7 +4,9 @@ |
| package org.chromium.chrome.browser.browseractions; |
| +import android.annotation.TargetApi; |
| import android.app.Activity; |
| +import android.app.NotificationManager; |
| import android.app.PendingIntent; |
| import android.app.PendingIntent.CanceledException; |
| import android.content.ClipData; |
| @@ -12,22 +14,85 @@ import android.content.ClipboardManager; |
| import android.content.Context; |
| import android.content.Intent; |
| import android.net.Uri; |
| +import android.os.Build; |
| import android.provider.Browser; |
| +import android.service.notification.StatusBarNotification; |
| import org.chromium.base.ContextUtils; |
| import org.chromium.base.Log; |
| +import org.chromium.chrome.R; |
| +import org.chromium.chrome.browser.ChromeTabbedActivity; |
| import org.chromium.chrome.browser.IntentHandler; |
| import org.chromium.chrome.browser.document.ChromeLauncherActivity; |
| +import org.chromium.chrome.browser.notifications.ChannelDefinitions; |
| +import org.chromium.chrome.browser.notifications.ChromeNotificationBuilder; |
| +import org.chromium.chrome.browser.notifications.NotificationBuilderFactory; |
| +import org.chromium.chrome.browser.notifications.NotificationConstants; |
| +import org.chromium.chrome.browser.notifications.NotificationUmaTracker; |
| import org.chromium.chrome.browser.util.IntentUtils; |
| +import org.chromium.ui.widget.Toast; |
| /** |
| * A delegate responsible for taking actions based on browser action context menu selections. |
| */ |
| public class BrowserActionsContextMenuItemDelegate { |
| private static final String TAG = "BrowserActionsItem"; |
| + /** |
| + * Action to request open ChromeTabbedActivity in tab switcher mode. |
| + */ |
| + public static final String ACTION_BROWSER_ACTIONS_OPEN_IN_BACKGROUND = |
| + "org.chromium.chrome.browser.browseractions.browser_action_open_in_background"; |
| + |
| + /** |
| + * Extra that indicates whether to show a Tab for single url or the tab swictcher for |
| + * multiple urls. |
| + */ |
| + public static final String EXTRA_IS_SINGLE_URL = |
| + "org.chromium.chrome.browser.browseractions.is_single_url"; |
| private final Context mContext; |
| private final Activity mActivity; |
| + private final NotificationManager mNotificationManager; |
| + |
| + private void sendBrowserActionsNotification(String linkUrl) { |
| + Intent intent = new Intent(mContext, ChromeTabbedActivity.class); |
|
David Trainor- moved to gerrit
2017/05/17 16:48:02
ChromeLauncherActivity?
ltian
2017/05/19 21:02:47
Done.
|
| + intent.setAction(ACTION_BROWSER_ACTIONS_OPEN_IN_BACKGROUND); |
| + intent.putExtra(EXTRA_IS_SINGLE_URL, true); |
|
David Trainor- moved to gerrit
2017/05/17 16:48:02
Can we just pull isSingleUrl() out to a helper tha
ltian
2017/05/19 21:02:47
Talk with Sam and he is ok to display notification
|
| + ChromeNotificationBuilder builder = |
| + NotificationBuilderFactory |
| + .createChromeNotificationBuilder( |
| + true /* preferCompat */, ChannelDefinitions.CHANNEL_ID_BROWSER) |
| + .setSmallIcon(R.drawable.infobar_chrome) |
| + .setLocalOnly(true) |
| + .setAutoCancel(true) |
| + .setContentText( |
| + mContext.getString(R.string.browser_actions_notification_text)) |
| + .setContentTitle(mContext.getString( |
| + R.string.browser_actions_single_link_open_notification_title)); |
| + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M && hasBrowserActionsNotification()) { |
| + builder.setContentTitle(mContext.getString( |
| + R.string.browser_actions_multi_links_open_notification_title)); |
| + intent.putExtra(EXTRA_IS_SINGLE_URL, false); |
| + } |
| + PendingIntent notifyPendingIntent = |
| + PendingIntent.getActivity(mContext, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT); |
| + builder.setContentIntent(notifyPendingIntent); |
| + mNotificationManager.notify( |
| + NotificationConstants.NOTIFICATION_ID_BROWSER_ACTIONS, builder.build()); |
| + NotificationUmaTracker.getInstance().onNotificationShown( |
| + NotificationUmaTracker.BROWSER_ACTIONS, ChannelDefinitions.CHANNEL_ID_BROWSER); |
| + } |
| + |
| + @TargetApi(Build.VERSION_CODES.M) |
| + private boolean hasBrowserActionsNotification() { |
| + StatusBarNotification[] notifications = mNotificationManager.getActiveNotifications(); |
| + for (StatusBarNotification notification : notifications) { |
| + if (notification.getId() == NotificationConstants.NOTIFICATION_ID_BROWSER_ACTIONS) { |
| + return true; |
| + } |
| + } |
| + return false; |
| + } |
| /** |
| * Builds a {@link BrowserActionsContextMenuItemDelegate} instance. |
| @@ -35,6 +100,8 @@ public class BrowserActionsContextMenuItemDelegate { |
| public BrowserActionsContextMenuItemDelegate(Activity activity) { |
| mContext = ContextUtils.getApplicationContext(); |
| mActivity = activity; |
| + mNotificationManager = |
| + (NotificationManager) mContext.getSystemService(Context.NOTIFICATION_SERVICE); |
| } |
| /** |
| @@ -68,7 +135,12 @@ public class BrowserActionsContextMenuItemDelegate { |
| * Called when the {@code linkUrl} should be opened in Chrome in the background. |
| * @param linkUrl The url to open. |
| */ |
| - public void onOpenInBackground(String linkUrl) {} |
| + public void onOpenInBackground(String linkUrl) { |
| + sendBrowserActionsNotification(linkUrl); |
| + Toast.makeText(mContext, R.string.browser_actions_open_in_background_toast_message, |
| + Toast.LENGTH_SHORT) |
| + .show(); |
| + } |
| /** |
| * Called when a custom item of Browser action menu is selected. |