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

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

Issue 2931433004: [Android] Open a tab in the background from Browser Actions if ChromeTabbedActivity is available (Closed)
Patch Set: Fix test failures. 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/BrowserActionsContextMenuHelper.java
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/browseractions/BrowserActionsContextMenuHelper.java b/chrome/android/java/src/org/chromium/chrome/browser/browseractions/BrowserActionsContextMenuHelper.java
index f97f2d697411f31cfd72983faf4b9d38b4516e06..99b175421537ab6ef81e98cc8027b5d64a5c6d02 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/browseractions/BrowserActionsContextMenuHelper.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/browseractions/BrowserActionsContextMenuHelper.java
@@ -4,8 +4,10 @@
package org.chromium.chrome.browser.browseractions;
+import android.app.Activity;
import android.app.PendingIntent;
import android.app.PendingIntent.CanceledException;
+import android.app.ProgressDialog;
import android.content.Intent;
import android.net.Uri;
import android.support.customtabs.browseractions.BrowserActionItem;
@@ -21,6 +23,7 @@ import android.view.View.OnCreateContextMenuListener;
import org.chromium.base.Callback;
import org.chromium.base.Log;
+import org.chromium.base.VisibleForTesting;
import org.chromium.chrome.R;
import org.chromium.chrome.browser.contextmenu.ChromeContextMenuItem;
import org.chromium.chrome.browser.contextmenu.ContextMenuItem;
@@ -41,14 +44,33 @@ import java.util.List;
public class BrowserActionsContextMenuHelper implements OnCreateContextMenuListener,
OnCloseContextMenuListener,
OnAttachStateChangeListener {
- private static final String TAG = "cr_BrowserActions";
- private static final boolean IS_NEW_UI_ENABLED = true;
+ /** Notified about events happening for Browser Actions tests. */
+ public interface BrowserActionsTestDelegate {
+ /** Called when menu is shown. */
+ void onBrowserActionsMenuShown();
+
+ /** Called when {@link BrowserActionActivity#finishNativeInitialization} is done. */
+ void onFinishNativeInitialization();
- private static final List<Integer> CUSTOM_BROWSER_ACTIONS_ID_GROUP =
+ /** Called when Browser Actions start opening a tab in background */
+ void onOpenTabInBackgroundStart();
+
+ /** Initializes data needed for testing. */
+ void initialize(BrowserActionsContextMenuItemDelegate delegate,
+ SparseArray<PendingIntent> customActions,
+ List<Pair<Integer, List<ContextMenuItem>>> items,
+ ProgressDialog progressDialog);
+ }
+
+
+ static final List<Integer> CUSTOM_BROWSER_ACTIONS_ID_GROUP =
Arrays.asList(R.id.browser_actions_custom_item_one,
R.id.browser_actions_custom_item_two, R.id.browser_actions_custom_item_three,
R.id.browser_actions_custom_item_four, R.id.browser_actions_custom_item_five);
+ private static final String TAG = "cr_BrowserActions";
+ private static final boolean IS_NEW_UI_ENABLED = true;
+
// Items list that could be included in the Browser Actions context menu for type {@code LINK}.
private final List<? extends ContextMenuItem> mBrowserActionsLinkGroup;
@@ -56,31 +78,44 @@ public class BrowserActionsContextMenuHelper implements OnCreateContextMenuListe
private final SparseArray<PendingIntent> mCustomItemActionMap = new SparseArray<>();
private final ContextMenuParams mCurrentContextMenuParams;
- private final BrowserActionsContextMenuItemDelegate mDelegate;
- private final BrowserActionActivity mActivity;
+ private final BrowserActionsContextMenuItemDelegate mMenuItemDelegate;
+ private final Activity mActivity;
private final Callback<Integer> mItemSelectedCallback;
private final Runnable mOnMenuShown;
private final Runnable mOnMenuClosed;
+ private final Runnable mOnMenuShownListener;
private final Callback<Boolean> mOnShareClickedRunnable;
private final PendingIntent mOnBrowserActionSelectedCallback;
private final List<Pair<Integer, List<ContextMenuItem>>> mItems;
- public BrowserActionsContextMenuHelper(BrowserActionActivity activity, ContextMenuParams params,
+ private final ProgressDialog mProgressDialog;
+
+ private BrowserActionsTestDelegate mTestDelegate;
+ private boolean mIsOpenInBackgroundPending;
+ private boolean mIsNativeInitialized;
+
+ public BrowserActionsContextMenuHelper(Activity activity, ContextMenuParams params,
List<BrowserActionItem> customItems, String sourcePackageName,
- PendingIntent onBrowserActionSelectedCallback) {
+ PendingIntent onBrowserActionSelectedCallback, final Runnable listener) {
mActivity = activity;
mCurrentContextMenuParams = params;
+ mOnMenuShownListener = listener;
mOnMenuShown = new Runnable() {
@Override
public void run() {
- mActivity.onMenuShown();
+ mOnMenuShownListener.run();
+ if (mTestDelegate != null) {
+ mTestDelegate.onBrowserActionsMenuShown();
+ }
}
};
mOnMenuClosed = new Runnable() {
@Override
public void run() {
- mActivity.finish();
+ if (!mIsOpenInBackgroundPending) {
+ mActivity.finish();
+ }
}
};
mItemSelectedCallback = new Callback<Integer>() {
@@ -92,7 +127,7 @@ public class BrowserActionsContextMenuHelper implements OnCreateContextMenuListe
mOnShareClickedRunnable = new Callback<Boolean>() {
@Override
public void onResult(Boolean isShareLink) {
- mDelegate.share(true, mCurrentContextMenuParams.getLinkUrl());
+ mMenuItemDelegate.share(true, mCurrentContextMenuParams.getLinkUrl());
}
};
ShareContextMenuItem shareItem = new ShareContextMenuItem(R.drawable.ic_share_white_24dp,
@@ -103,12 +138,23 @@ public class BrowserActionsContextMenuHelper implements OnCreateContextMenuListe
ChromeContextMenuItem.BROWSER_ACTIONS_OPEN_IN_INCOGNITO_TAB,
ChromeContextMenuItem.BROWSER_ACTION_SAVE_LINK_AS,
ChromeContextMenuItem.BROWSER_ACTIONS_COPY_ADDRESS, shareItem);
- mDelegate = new BrowserActionsContextMenuItemDelegate(mActivity, sourcePackageName);
+ mMenuItemDelegate = new BrowserActionsContextMenuItemDelegate(mActivity, sourcePackageName);
mOnBrowserActionSelectedCallback = onBrowserActionSelectedCallback;
+ mProgressDialog = new ProgressDialog(mActivity);
mItems = buildContextMenuItems(customItems);
}
+ /**
+ * Sets the {@link BrowserActionsTestDelegate} for testing.
+ * @param testDelegate The delegate used to notified Browser Actions events.
+ */
+ @VisibleForTesting
+ void setTestDelegateForTesting(BrowserActionsTestDelegate testDelegate) {
+ mTestDelegate = testDelegate;
+ mTestDelegate.initialize(mMenuItemDelegate, mCustomItemActionMap, mItems, mProgressDialog);
+ }
+
/**
* Builds items for Browser Actions context menu.
*/
@@ -138,24 +184,28 @@ public class BrowserActionsContextMenuHelper implements OnCreateContextMenuListe
}
}
- private boolean onItemSelected(int itemId) {
+ boolean onItemSelected(int itemId) {
if (itemId == R.id.browser_actions_open_in_background) {
- mDelegate.onOpenInBackground(mCurrentContextMenuParams.getLinkUrl());
- notifyBrowserActionSelected(BrowserActionsIntent.ITEM_OPEN_IN_NEW_TAB);
+ if (mIsNativeInitialized) {
+ handleOpenInBackground();
+ } else {
+ mIsOpenInBackgroundPending = true;
+ waitNativeInitialized();
+ }
} else if (itemId == R.id.browser_actions_open_in_incognito_tab) {
- mDelegate.onOpenInIncognitoTab(mCurrentContextMenuParams.getLinkUrl());
+ mMenuItemDelegate.onOpenInIncognitoTab(mCurrentContextMenuParams.getLinkUrl());
notifyBrowserActionSelected(BrowserActionsIntent.ITEM_OPEN_IN_INCOGNITO);
} else if (itemId == R.id.browser_actions_save_link_as) {
- mDelegate.startDownload(mCurrentContextMenuParams.getLinkUrl());
+ mMenuItemDelegate.startDownload(mCurrentContextMenuParams.getLinkUrl());
notifyBrowserActionSelected(BrowserActionsIntent.ITEM_DOWNLOAD);
} else if (itemId == R.id.browser_actions_copy_address) {
- mDelegate.onSaveToClipboard(mCurrentContextMenuParams.getLinkUrl());
+ mMenuItemDelegate.onSaveToClipboard(mCurrentContextMenuParams.getLinkUrl());
notifyBrowserActionSelected(BrowserActionsIntent.ITEM_COPY);
} else if (itemId == R.id.browser_actions_share) {
- mDelegate.share(false, mCurrentContextMenuParams.getLinkUrl());
+ mMenuItemDelegate.share(false, mCurrentContextMenuParams.getLinkUrl());
notifyBrowserActionSelected(BrowserActionsIntent.ITEM_SHARE);
} else if (mCustomItemActionMap.indexOfKey(itemId) >= 0) {
- mDelegate.onCustomItemSelected(mCustomItemActionMap.get(itemId));
+ mMenuItemDelegate.onCustomItemSelected(mCustomItemActionMap.get(itemId));
}
return true;
}
@@ -171,6 +221,21 @@ public class BrowserActionsContextMenuHelper implements OnCreateContextMenuListe
}
}
+ /**
+ * Display a progress dialog to wait for native libraries initialized.
+ */
+ private void waitNativeInitialized() {
+ mProgressDialog.setMessage(
+ mActivity.getString(R.string.browser_actions_loading_native_message));
+ mProgressDialog.show();
+ }
+
+ private void dismissProgressDialog() {
+ if (mProgressDialog != null && mProgressDialog.isShowing()) {
+ mProgressDialog.dismiss();
+ }
+ }
+
/**
* Displays the Browser Actions context menu.
* @param view The view to show the context menu if old UI is used.
@@ -208,4 +273,28 @@ public class BrowserActionsContextMenuHelper implements OnCreateContextMenuListe
@Override
public void onViewDetachedFromWindow(View v) {}
+
+ /**
+ * Finishes all pending actions which requires Chrome native libraries.
+ */
+ public void onNativeInitialized() {
+ mIsNativeInitialized = true;
+ if (mTestDelegate != null) {
+ mTestDelegate.onFinishNativeInitialization();
+ }
+ if (mIsOpenInBackgroundPending) {
+ mIsOpenInBackgroundPending = false;
+ dismissProgressDialog();
+ handleOpenInBackground();
+ mActivity.finish();
+ }
+ }
+
+ private void handleOpenInBackground() {
+ mMenuItemDelegate.onOpenInBackground(mCurrentContextMenuParams.getLinkUrl());
+ if (mTestDelegate != null) {
+ mTestDelegate.onOpenTabInBackgroundStart();
+ }
+ notifyBrowserActionSelected(BrowserActionsIntent.ITEM_OPEN_IN_NEW_TAB);
+ }
}

Powered by Google App Engine
This is Rietveld 408576698