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 5c1d5b56e0b164930efff40b4c68479f4fa65d9e..0cea43ff463f27e86f4f730a31cbe75c1f1b5328 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 |
@@ -5,30 +5,23 @@ |
package org.chromium.chrome.browser.browseractions; |
import android.app.Activity; |
-import android.app.NotificationManager; |
import android.app.PendingIntent; |
import android.app.PendingIntent.CanceledException; |
import android.content.ClipData; |
import android.content.ClipboardManager; |
import android.content.Context; |
import android.content.Intent; |
-import android.content.SharedPreferences; |
import android.net.Uri; |
import android.provider.Browser; |
import org.chromium.base.ApplicationStatus; |
-import org.chromium.base.ContextUtils; |
import org.chromium.base.Log; |
import org.chromium.base.VisibleForTesting; |
import org.chromium.chrome.R; |
import org.chromium.chrome.browser.ChromeTabbedActivity; |
import org.chromium.chrome.browser.IntentHandler; |
+import org.chromium.chrome.browser.browseractions.BrowserActionsTabCreatorManager.BrowserActionsTabCreator; |
import org.chromium.chrome.browser.document.ChromeLauncherActivity; |
-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.notifications.channels.ChannelDefinitions; |
import org.chromium.chrome.browser.share.ShareHelper; |
import org.chromium.chrome.browser.share.ShareParams; |
import org.chromium.chrome.browser.tab.Tab; |
@@ -45,28 +38,10 @@ import java.lang.ref.WeakReference; |
*/ |
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"; |
- |
- public static final String PREF_HAS_BROWSER_ACTIONS_NOTIFICATION = |
- "org.chromium.chrome.browser.browseractions.HAS_BROWSER_ACTIONS_NOTIFICATION"; |
- |
- /** |
- * Extra that indicates whether to show a Tab for single url or the tab switcher for |
- * multiple urls. |
- */ |
- public static final String EXTRA_IS_SINGLE_URL = |
- "org.chromium.chrome.browser.browseractions.is_single_url"; |
private final Activity mActivity; |
- private final NotificationManager mNotificationManager; |
- private final SharedPreferences mSharedPreferences; |
private final String mSourcePackageName; |
- |
- private Intent mNotificationIntent; |
+ private final BrowserActionsTabCreatorManager mTabCreatorManager; |
/** |
* Builds a {@link BrowserActionsContextMenuItemDelegate} instance. |
@@ -75,64 +50,11 @@ public class BrowserActionsContextMenuItemDelegate { |
*/ |
public BrowserActionsContextMenuItemDelegate(Activity activity, String sourcePackageName) { |
mActivity = activity; |
- mNotificationManager = |
- (NotificationManager) activity.getSystemService(Context.NOTIFICATION_SERVICE); |
- mSharedPreferences = ContextUtils.getAppSharedPreferences(); |
mSourcePackageName = sourcePackageName; |
- } |
- |
- @VisibleForTesting |
- Intent getNotificationIntent() { |
- return mNotificationIntent; |
- } |
- |
- private void sendBrowserActionsNotification(int tabId) { |
- ChromeNotificationBuilder builder = createNotificationBuilder(tabId); |
- mNotificationManager.notify( |
- NotificationConstants.NOTIFICATION_ID_BROWSER_ACTIONS, builder.build()); |
- mSharedPreferences.edit().putBoolean(PREF_HAS_BROWSER_ACTIONS_NOTIFICATION, true).apply(); |
- NotificationUmaTracker.getInstance().onNotificationShown( |
- NotificationUmaTracker.BROWSER_ACTIONS, ChannelDefinitions.CHANNEL_ID_BROWSER); |
- } |
- |
- private ChromeNotificationBuilder createNotificationBuilder(int tabId) { |
- ChromeNotificationBuilder builder = |
- NotificationBuilderFactory |
- .createChromeNotificationBuilder( |
- true /* preferCompat */, ChannelDefinitions.CHANNEL_ID_BROWSER) |
- .setSmallIcon(R.drawable.infobar_chrome) |
- .setLocalOnly(true) |
- .setAutoCancel(true) |
- .setContentText( |
- mActivity.getString(R.string.browser_actions_notification_text)); |
- int titleResId = hasBrowserActionsNotification() |
- ? R.string.browser_actions_multi_links_open_notification_title |
- : R.string.browser_actions_single_link_open_notification_title; |
- builder.setContentTitle(mActivity.getString(titleResId)); |
- mNotificationIntent = buildNotificationIntent(tabId); |
- PendingIntent notifyPendingIntent = PendingIntent.getActivity( |
- mActivity, 0, mNotificationIntent, PendingIntent.FLAG_UPDATE_CURRENT); |
- builder.setContentIntent(notifyPendingIntent); |
- return builder; |
- } |
- |
- private Intent buildNotificationIntent(int tabId) { |
- boolean multipleUrls = hasBrowserActionsNotification(); |
- if (!multipleUrls && tabId != Tab.INVALID_TAB_ID) { |
- return Tab.createBringTabToFrontIntent(tabId); |
- } |
- Intent intent = new Intent(mActivity, ChromeLauncherActivity.class); |
- intent.setAction(ACTION_BROWSER_ACTIONS_OPEN_IN_BACKGROUND); |
- intent.putExtra(EXTRA_IS_SINGLE_URL, !multipleUrls); |
- return intent; |
- } |
- |
- boolean hasBrowserActionsNotification() { |
- return mSharedPreferences.getBoolean(PREF_HAS_BROWSER_ACTIONS_NOTIFICATION, false); |
+ mTabCreatorManager = new BrowserActionsTabCreatorManager(); |
} |
private int openTabInBackground(String linkUrl) { |
- int tabId = Tab.INVALID_TAB_ID; |
Referrer referrer = IntentHandler.constructValidReferrerForAuthority(mSourcePackageName); |
LoadUrlParams loadUrlParams = new LoadUrlParams(linkUrl); |
loadUrlParams.setReferrer(referrer); |
@@ -145,10 +67,25 @@ public class BrowserActionsContextMenuItemDelegate { |
Tab tab = activity.getTabModelSelector().openNewTab( |
loadUrlParams, TabLaunchType.FROM_BROWSER_ACTIONS, null, false); |
assert tab != null; |
- tabId = tab.getId(); |
+ return tab.getId(); |
} |
} |
- return tabId; |
+ BrowserActionsTabModelSelector selector = |
+ BrowserActionsTabModelSelector.getInstance(mActivity, mTabCreatorManager); |
+ if (!selector.isActiveState()) { |
+ selector.initializeSelector(); |
+ ((BrowserActionsTabCreator) mTabCreatorManager.getTabCreator(false)) |
+ .setTabModel(selector.getCurrentModel()); |
+ selector.loadState(true); |
+ selector.restoreTabs(false); |
+ } |
+ selector.openNewTab(loadUrlParams, TabLaunchType.FROM_BROWSER_ACTIONS, null, false); |
+ return Tab.INVALID_TAB_ID; |
+ } |
+ |
+ @VisibleForTesting |
+ BrowserActionsTabCreatorManager getTabCreatorManager() { |
+ return mTabCreatorManager; |
} |
/** |
@@ -183,19 +120,17 @@ public class BrowserActionsContextMenuItemDelegate { |
* @param linkUrl The url to open. |
*/ |
public void onOpenInBackground(String linkUrl) { |
+ BrowserActionsService.sendIntent( |
+ BrowserActionsService.ACTION_TAB_CREATION_START, Tab.INVALID_TAB_ID); |
+ |
int tabId = openTabInBackground(linkUrl); |
if (tabId != Tab.INVALID_TAB_ID) { |
- sendBrowserActionsNotification(tabId); |
- Toast.makeText(mActivity, R.string.browser_actions_open_in_background_toast_message, |
- Toast.LENGTH_SHORT) |
- .show(); |
- } else { |
- Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(linkUrl)); |
- intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); |
- intent.setClass(mActivity, ChromeLauncherActivity.class); |
- intent.putExtra(ChromeLauncherActivity.EXTRA_IS_ALLOWED_TO_RETURN_TO_PARENT, false); |
- IntentUtils.safeStartActivity(mActivity, intent); |
+ BrowserActionsService.sendIntent( |
+ BrowserActionsService.ACTION_TAB_CREATION_UPDATE, Tab.INVALID_TAB_ID); |
} |
+ Toast.makeText(mActivity, R.string.browser_actions_open_in_background_toast_message, |
+ Toast.LENGTH_SHORT) |
+ .show(); |
} |
/** |
@@ -230,43 +165,4 @@ public class BrowserActionsContextMenuItemDelegate { |
.build(); |
ShareHelper.share(params); |
} |
- |
- /** |
- * Cancel Browser Actions notification. |
- */ |
- public static void cancelBrowserActionsNotification() { |
- NotificationManager notificationManager = |
- (NotificationManager) ContextUtils.getApplicationContext().getSystemService( |
- Context.NOTIFICATION_SERVICE); |
- notificationManager.cancel(NotificationConstants.NOTIFICATION_ID_BROWSER_ACTIONS); |
- ContextUtils.getAppSharedPreferences() |
- .edit() |
- .putBoolean( |
- BrowserActionsContextMenuItemDelegate.PREF_HAS_BROWSER_ACTIONS_NOTIFICATION, |
- false) |
- .apply(); |
- } |
- |
- /** |
- * Checks whether Chrome should display tab switcher via Browser Actions Intent. |
- * @param intent The intent to open the Chrome. |
- * @param isOverviewVisible Whether tab switcher is shown. |
- */ |
- public static boolean toggleOverviewByBrowserActions(Intent intent, boolean isOverviewVisible) { |
- boolean fromBrowserActions = isStartedByBrowserActions(intent); |
- boolean isSingleUrl = IntentUtils.safeGetBooleanExtra( |
- intent, BrowserActionsContextMenuItemDelegate.EXTRA_IS_SINGLE_URL, false); |
- if (fromBrowserActions) { |
- return isSingleUrl == isOverviewVisible; |
- } |
- return false; |
- } |
- |
- private static boolean isStartedByBrowserActions(Intent intent) { |
- if (BrowserActionsContextMenuItemDelegate.ACTION_BROWSER_ACTIONS_OPEN_IN_BACKGROUND.equals( |
- intent.getAction())) { |
- return true; |
- } |
- return false; |
- } |
} |