| 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..add1beea26b99973b26161438dc23c41689de6b0 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
|
| @@ -15,6 +15,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;
|
| @@ -32,6 +33,9 @@ public class ContextMenuHelper implements OnCreateContextMenuListener {
|
| private ContextMenuPopulator mPopulator;
|
| private ContextMenuParams mCurrentContextMenuParams;
|
| private Activity mActivity;
|
| + private Callback<Integer> mCallback;
|
| + private Runnable mOnMenuShown;
|
| + private Runnable mOnMenuClosed;
|
|
|
| private ContextMenuHelper(long nativeContextMenuHelper) {
|
| mNativeContextMenuHelper = nativeContextMenuHelper;
|
| @@ -64,31 +68,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.getActivity().get() == null
|
| + || mPopulator == null) {
|
| return;
|
| }
|
|
|
| mCurrentContextMenuParams = params;
|
| mActivity = windowAndroid.getActivity().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, mActivity, mCurrentContextMenuParams);
|
| +
|
| + ContextMenuUi menuUi = new TabularContextMenuUi();
|
| + menuUi.displayMenu(mActivity, 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 +165,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(mActivity, mCurrentContextMenuParams, items, mCallback, mOnMenuShown,
|
| + mOnMenuClosed);
|
| }
|
|
|
| /**
|
|
|