Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(31)

Side by Side Diff: chrome/android/java/src/org/chromium/chrome/browser/browseractions/BrowserActionsContextMenuItemDelegate.java

Issue 2876863002: [Android] Show notification for opening new tab in background of Browser Actions (Closed)
Patch Set: Fix trybots errors. Created 3 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // Copyright 2017 The Chromium Authors. All rights reserved. 1 // Copyright 2017 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 package org.chromium.chrome.browser.browseractions; 5 package org.chromium.chrome.browser.browseractions;
6 6
7 import android.app.NotificationManager;
7 import android.app.PendingIntent; 8 import android.app.PendingIntent;
8 import android.app.PendingIntent.CanceledException; 9 import android.app.PendingIntent.CanceledException;
9 import android.content.ClipData; 10 import android.content.ClipData;
10 import android.content.ClipboardManager; 11 import android.content.ClipboardManager;
11 import android.content.Context; 12 import android.content.Context;
12 import android.content.Intent; 13 import android.content.Intent;
14 import android.content.SharedPreferences;
13 import android.net.Uri; 15 import android.net.Uri;
14 import android.provider.Browser; 16 import android.provider.Browser;
15 17
16 import org.chromium.base.ContextUtils; 18 import org.chromium.base.ContextUtils;
17 import org.chromium.base.Log; 19 import org.chromium.base.Log;
20 import org.chromium.chrome.R;
18 import org.chromium.chrome.browser.IntentHandler; 21 import org.chromium.chrome.browser.IntentHandler;
19 import org.chromium.chrome.browser.document.ChromeLauncherActivity; 22 import org.chromium.chrome.browser.document.ChromeLauncherActivity;
23 import org.chromium.chrome.browser.notifications.ChromeNotificationBuilder;
24 import org.chromium.chrome.browser.notifications.NotificationBuilderFactory;
25 import org.chromium.chrome.browser.notifications.NotificationConstants;
26 import org.chromium.chrome.browser.notifications.NotificationUmaTracker;
27 import org.chromium.chrome.browser.notifications.channels.ChannelDefinitions;
20 import org.chromium.chrome.browser.tabmodel.TabModel.TabLaunchType; 28 import org.chromium.chrome.browser.tabmodel.TabModel.TabLaunchType;
21 import org.chromium.chrome.browser.util.IntentUtils; 29 import org.chromium.chrome.browser.util.IntentUtils;
30 import org.chromium.ui.widget.Toast;
22 31
23 /** 32 /**
24 * A delegate responsible for taking actions based on browser action context men u selections. 33 * A delegate responsible for taking actions based on browser action context men u selections.
25 */ 34 */
26 public class BrowserActionsContextMenuItemDelegate { 35 public class BrowserActionsContextMenuItemDelegate {
27 private static final String TAG = "BrowserActionsItem"; 36 private static final String TAG = "BrowserActionsItem";
37 /**
38 * Action to request open ChromeTabbedActivity in tab switcher mode.
39 */
40 public static final String ACTION_BROWSER_ACTIONS_OPEN_IN_BACKGROUND =
41 "org.chromium.chrome.browser.browseractions.browser_action_open_in_b ackground";
42
43 public static final String PREF_HAS_BROWSER_ACTIONS_NOTIFICATION =
44 "org.chromium.chrome.browser.browseractions.HAS_BROWSER_ACTIONS_NOTI FICATION";
45
46 /**
47 * Extra that indicates whether to show a Tab for single url or the tab swit cher for
48 * multiple urls.
49 */
50 public static final String EXTRA_IS_SINGLE_URL =
51 "org.chromium.chrome.browser.browseractions.is_single_url";
28 52
29 private final Context mContext; 53 private final Context mContext;
54 private final NotificationManager mNotificationManager;
55 private final SharedPreferences mSharedPreferences;
56
57 private void sendBrowserActionsNotification() {
58 ChromeNotificationBuilder builder = createNotificationBuilder();
59 mNotificationManager.notify(
60 NotificationConstants.NOTIFICATION_ID_BROWSER_ACTIONS, builder.b uild());
61 mSharedPreferences.edit().putBoolean(PREF_HAS_BROWSER_ACTIONS_NOTIFICATI ON, true).apply();
62 NotificationUmaTracker.getInstance().onNotificationShown(
63 NotificationUmaTracker.BROWSER_ACTIONS, ChannelDefinitions.CHANN EL_ID_BROWSER);
64 }
65
66 private ChromeNotificationBuilder createNotificationBuilder() {
67 ChromeNotificationBuilder builder =
68 NotificationBuilderFactory
69 .createChromeNotificationBuilder(
70 true /* preferCompat */, ChannelDefinitions.CHAN NEL_ID_BROWSER)
71 .setSmallIcon(R.drawable.infobar_chrome)
72 .setLocalOnly(true)
73 .setAutoCancel(true)
74 .setContentText(
75 mContext.getString(R.string.browser_actions_noti fication_text));
76 int titleResId = hasBrowserActionsNotification()
77 ? R.string.browser_actions_multi_links_open_notification_title
78 : R.string.browser_actions_single_link_open_notification_title;
79 builder.setContentTitle(mContext.getString(titleResId));
80 Intent intent = buildNotificationIntent();
81 PendingIntent notifyPendingIntent =
82 PendingIntent.getActivity(mContext, 0, intent, PendingIntent.FLA G_UPDATE_CURRENT);
83 builder.setContentIntent(notifyPendingIntent);
84 return builder;
85 }
86
87 private Intent buildNotificationIntent() {
88 Intent intent = new Intent(mContext, ChromeLauncherActivity.class);
89 intent.setAction(ACTION_BROWSER_ACTIONS_OPEN_IN_BACKGROUND);
90 intent.putExtra(EXTRA_IS_SINGLE_URL, !hasBrowserActionsNotification());
91 return intent;
92 }
93
94 private boolean hasBrowserActionsNotification() {
95 return mSharedPreferences.getBoolean(PREF_HAS_BROWSER_ACTIONS_NOTIFICATI ON, false);
96 }
30 97
31 /** 98 /**
32 * Builds a {@link BrowserActionsContextMenuItemDelegate} instance. 99 * Builds a {@link BrowserActionsContextMenuItemDelegate} instance.
33 */ 100 */
34 public BrowserActionsContextMenuItemDelegate() { 101 public BrowserActionsContextMenuItemDelegate() {
35 mContext = ContextUtils.getApplicationContext(); 102 mContext = ContextUtils.getApplicationContext();
103 mNotificationManager =
104 (NotificationManager) mContext.getSystemService(Context.NOTIFICA TION_SERVICE);
105 mSharedPreferences = ContextUtils.getAppSharedPreferences();
36 } 106 }
37 107
38 /** 108 /**
39 * Called when the {@code text} should be saved to the clipboard. 109 * Called when the {@code text} should be saved to the clipboard.
40 * @param text The text to save to the clipboard. 110 * @param text The text to save to the clipboard.
41 */ 111 */
42 public void onSaveToClipboard(String text) { 112 public void onSaveToClipboard(String text) {
43 ClipboardManager clipboardManager = 113 ClipboardManager clipboardManager =
44 (ClipboardManager) mContext.getSystemService(Context.CLIPBOARD_S ERVICE); 114 (ClipboardManager) mContext.getSystemService(Context.CLIPBOARD_S ERVICE);
45 ClipData data = ClipData.newPlainText("url", text); 115 ClipData data = ClipData.newPlainText("url", text);
(...skipping 13 matching lines...) Expand all
59 intent.putExtra(Browser.EXTRA_APPLICATION_ID, mContext.getPackageName()) ; 129 intent.putExtra(Browser.EXTRA_APPLICATION_ID, mContext.getPackageName()) ;
60 IntentHandler.addTrustedIntentExtras(intent); 130 IntentHandler.addTrustedIntentExtras(intent);
61 IntentHandler.setTabLaunchType(intent, TabLaunchType.FROM_EXTERNAL_APP); 131 IntentHandler.setTabLaunchType(intent, TabLaunchType.FROM_EXTERNAL_APP);
62 IntentUtils.safeStartActivity(mContext, intent); 132 IntentUtils.safeStartActivity(mContext, intent);
63 } 133 }
64 134
65 /** 135 /**
66 * Called when the {@code linkUrl} should be opened in Chrome in the backgro und. 136 * Called when the {@code linkUrl} should be opened in Chrome in the backgro und.
67 * @param linkUrl The url to open. 137 * @param linkUrl The url to open.
68 */ 138 */
69 public void onOpenInBackground(String linkUrl) {} 139 public void onOpenInBackground(String linkUrl) {
140 sendBrowserActionsNotification();
141 Toast.makeText(mContext, R.string.browser_actions_open_in_background_toa st_message,
142 Toast.LENGTH_SHORT)
143 .show();
144 }
70 145
71 /** 146 /**
72 * Called when a custom item of Browser action menu is selected. 147 * Called when a custom item of Browser action menu is selected.
73 * @param action The PendingIntent action to be launched. 148 * @param action The PendingIntent action to be launched.
74 */ 149 */
75 public void onCustomItemSelected(PendingIntent action) { 150 public void onCustomItemSelected(PendingIntent action) {
76 try { 151 try {
77 action.send(); 152 action.send();
78 } catch (CanceledException e) { 153 } catch (CanceledException e) {
79 Log.e(TAG, "Browser Action in Chrome failed to send pending intent." ); 154 Log.e(TAG, "Browser Action in Chrome failed to send pending intent." );
80 } 155 }
81 } 156 }
82 157
83 /** 158 /**
84 * Called when the page of the {@code linkUrl} should be downloaded. 159 * Called when the page of the {@code linkUrl} should be downloaded.
85 * @param linkUrl The url of the page to download. 160 * @param linkUrl The url of the page to download.
86 */ 161 */
87 public void startDownload(String linkUrl) {} 162 public void startDownload(String linkUrl) {}
88 163
89 /** 164 /**
90 * Called when the {@code linkUrl} should be shared. 165 * Called when the {@code linkUrl} should be shared.
91 * @param linkUrl The url to share. 166 * @param linkUrl The url to share.
92 */ 167 */
93 public void share(String linkUrl) {} 168 public void share(String linkUrl) {}
169
170 /**
171 * Cancel Browser Actions notification.
172 */
173 public static void cancelBrowserActionsNotification() {
174 NotificationManager notificationManager =
175 (NotificationManager) ContextUtils.getApplicationContext().getSy stemService(
176 Context.NOTIFICATION_SERVICE);
177 notificationManager.cancel(NotificationConstants.NOTIFICATION_ID_BROWSER _ACTIONS);
178 ContextUtils.getAppSharedPreferences()
179 .edit()
180 .putBoolean(
181 BrowserActionsContextMenuItemDelegate.PREF_HAS_BROWSER_A CTIONS_NOTIFICATION,
182 false)
183 .apply();
184 }
185
186 /**
187 * Checks whether Chrome should display tab switcher via Browser Actions Int ent.
188 * @param intent The intent to open the Chrome.
189 * @param isOverviewVisible Whether tab switcher is shown.
190 */
191 public static boolean toggleOverviewByBrowserActions(Intent intent, boolean isOverviewVisible) {
192 boolean fromBrowserActions = isStartedByBrowserActions(intent);
193 boolean isSingleUrl = IntentUtils.safeGetBooleanExtra(
194 intent, BrowserActionsContextMenuItemDelegate.EXTRA_IS_SINGLE_UR L, false);
195 if (fromBrowserActions) {
196 return isSingleUrl == isOverviewVisible;
197 }
198 return false;
199 }
200
201 private static boolean isStartedByBrowserActions(Intent intent) {
202 if (BrowserActionsContextMenuItemDelegate.ACTION_BROWSER_ACTIONS_OPEN_IN _BACKGROUND.equals(
203 intent.getAction())) {
204 return true;
205 }
206 return false;
207 }
94 } 208 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698