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

Unified Diff: chrome/android/java/src/org/chromium/chrome/browser/contextmenu/ContextMenuHelper.java

Issue 2751333006: Create the base Custom Context Menu Dialog. (Closed)
Patch Set: git rebase Created 3 years, 9 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/contextmenu/ContextMenuHelper.java
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/contextmenu/ContextMenuHelper.java b/chrome/android/java/src/org/chromium/chrome/browser/contextmenu/ContextMenuHelper.java
index 615b7c8fb67885ad79fd377688ec0a8c45c7933d..dbb62b1694e5b2f51452d42dbae5dffa2134433f 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/contextmenu/ContextMenuHelper.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/contextmenu/ContextMenuHelper.java
@@ -5,6 +5,7 @@
package org.chromium.chrome.browser.contextmenu;
import android.app.Activity;
+import android.content.Context;
import android.util.Pair;
import android.view.ContextMenu;
import android.view.ContextMenu.ContextMenuInfo;
@@ -15,6 +16,7 @@ import org.chromium.base.Callback;
import org.chromium.base.VisibleForTesting;
import org.chromium.base.annotations.CalledByNative;
import org.chromium.base.metrics.RecordHistogram;
+import org.chromium.chrome.browser.ChromeFeatureList;
import org.chromium.chrome.browser.share.ShareHelper;
import org.chromium.content.browser.ContentViewCore;
import org.chromium.content_public.browser.WebContents;
@@ -31,7 +33,10 @@ public class ContextMenuHelper implements OnCreateContextMenuListener {
private ContextMenuPopulator mPopulator;
private ContextMenuParams mCurrentContextMenuParams;
- private Activity mActivity;
+ private Context mContext;
+ private Callback<Integer> mCallback;
+ private Runnable mOnMenuShown;
+ private Runnable mOnMenuClosed;
private ContextMenuHelper(long nativeContextMenuHelper) {
mNativeContextMenuHelper = nativeContextMenuHelper;
@@ -64,31 +69,60 @@ public class ContextMenuHelper implements OnCreateContextMenuListener {
* @param params The {@link ContextMenuParams} that indicate what menu items to show.
*/
@CalledByNative
- private void showContextMenu(ContentViewCore contentViewCore, ContextMenuParams params) {
+ private void showContextMenu(final ContentViewCore contentViewCore, ContextMenuParams params) {
if (params.isFile()) return;
View view = contentViewCore.getContainerView();
final WindowAndroid windowAndroid = contentViewCore.getWindowAndroid();
if (view == null || view.getVisibility() != View.VISIBLE || view.getParent() == null
- || windowAndroid == null || windowAndroid.getActivity().get() == null) {
+ || windowAndroid == null || windowAndroid.getContext().get() == null
+ || mPopulator == null) {
return;
}
mCurrentContextMenuParams = params;
- mActivity = windowAndroid.getActivity().get();
+ mContext = windowAndroid.getContext().get();
+ mCallback = new Callback<Integer>() {
+ @Override
+ public void onResult(Integer result) {
+ mPopulator.onItemSelected(
+ ContextMenuHelper.this, mCurrentContextMenuParams, result);
+ }
+ };
+ mOnMenuShown = new Runnable() {
+ @Override
+ public void run() {
+ WebContents webContents = contentViewCore.getWebContents();
+ RecordHistogram.recordBooleanHistogram("ContextMenu.Shown", webContents != null);
+ }
+ };
+ mOnMenuClosed = new Runnable() {
+ @Override
+ public void run() {
+ if (mNativeContextMenuHelper == 0) return;
+ nativeOnContextMenuClosed(mNativeContextMenuHelper);
+ }
+ };
+ if (ChromeFeatureList.isEnabled(ChromeFeatureList.CUSTOM_CONTEXT_MENU)) {
+ List<Pair<Integer, List<ContextMenuItem>>> items =
+ mPopulator.buildContextMenu(null, mContext, mCurrentContextMenuParams);
+
+ ContextMenuUi menuUi = new TabularContextMenuUi();
+ menuUi.displayMenu(mContext, mCurrentContextMenuParams, items, mCallback, mOnMenuShown,
+ mOnMenuClosed);
+ return;
+ }
+
+ // The Platform Context Menu requires the listener within this hepler since this helper and
+ // provides context menu for us to show.
view.setOnCreateContextMenuListener(this);
if (view.showContextMenu()) {
- WebContents webContents = contentViewCore.getWebContents();
- RecordHistogram.recordBooleanHistogram(
- "ContextMenu.Shown", webContents != null);
-
+ mOnMenuShown.run();
windowAndroid.addContextMenuCloseListener(new OnCloseContextMenuListener() {
@Override
public void onContextMenuClosed() {
- if (mNativeContextMenuHelper == 0) return;
-
- nativeOnContextMenuClosed(mNativeContextMenuHelper);
+ mOnMenuClosed.run();
windowAndroid.removeContextMenuCloseListener(this);
}
});
@@ -132,18 +166,11 @@ public class ContextMenuHelper implements OnCreateContextMenuListener {
@Override
public void onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo menuInfo) {
- assert mPopulator != null;
-
List<Pair<Integer, List<ContextMenuItem>>> items =
mPopulator.buildContextMenu(menu, v.getContext(), mCurrentContextMenuParams);
ContextMenuUi menuUi = new PlatformContextMenuUi(menu);
- menuUi.displayMenu(mActivity, mCurrentContextMenuParams, items, new Callback<Integer>() {
- @Override
- public void onResult(Integer result) {
- mPopulator.onItemSelected(
- ContextMenuHelper.this, mCurrentContextMenuParams, result);
- }
- });
+ menuUi.displayMenu(
+ mContext, mCurrentContextMenuParams, items, mCallback, mOnMenuShown, mOnMenuClosed);
}
/**

Powered by Google App Engine
This is Rietveld 408576698