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

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

Issue 2984453002: Add Browser Actions tab model selector and open a tab through it if ChromeTabbedActivity is not ava…
Patch Set: Sync changes. Created 3 years, 4 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 side-by-side diff with in-line comments
Download patch
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;
- }
}

Powered by Google App Engine
This is Rietveld 408576698