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 529b678e4d6d6f3afb955caabd95fd7a5392c1c5..615b7c8fb67885ad79fd377688ec0a8c45c7933d 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,13 +5,13 @@ |
package org.chromium.chrome.browser.contextmenu; |
import android.app.Activity; |
+import android.util.Pair; |
import android.view.ContextMenu; |
import android.view.ContextMenu.ContextMenuInfo; |
-import android.view.MenuItem; |
-import android.view.MenuItem.OnMenuItemClickListener; |
import android.view.View; |
import android.view.View.OnCreateContextMenuListener; |
+import org.chromium.base.Callback; |
import org.chromium.base.VisibleForTesting; |
import org.chromium.base.annotations.CalledByNative; |
import org.chromium.base.metrics.RecordHistogram; |
@@ -21,14 +21,17 @@ import org.chromium.content_public.browser.WebContents; |
import org.chromium.ui.base.WindowAndroid; |
import org.chromium.ui.base.WindowAndroid.OnCloseContextMenuListener; |
+import java.util.List; |
+ |
/** |
* A helper class that handles generating context menus for {@link ContentViewCore}s. |
*/ |
-public class ContextMenuHelper implements OnCreateContextMenuListener, OnMenuItemClickListener { |
+public class ContextMenuHelper implements OnCreateContextMenuListener { |
private long mNativeContextMenuHelper; |
private ContextMenuPopulator mPopulator; |
private ContextMenuParams mCurrentContextMenuParams; |
+ private Activity mActivity; |
private ContextMenuHelper(long nativeContextMenuHelper) { |
mNativeContextMenuHelper = nativeContextMenuHelper; |
@@ -62,15 +65,17 @@ public class ContextMenuHelper implements OnCreateContextMenuListener, OnMenuIte |
*/ |
@CalledByNative |
private void showContextMenu(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 == null || windowAndroid.getActivity().get() == null) { |
return; |
} |
mCurrentContextMenuParams = params; |
+ mActivity = windowAndroid.getActivity().get(); |
view.setOnCreateContextMenuListener(this); |
if (view.showContextMenu()) { |
@@ -128,16 +133,17 @@ public class ContextMenuHelper implements OnCreateContextMenuListener, OnMenuIte |
@Override |
public void onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo menuInfo) { |
assert mPopulator != null; |
- mPopulator.buildContextMenu(menu, v.getContext(), mCurrentContextMenuParams); |
- for (int i = 0; i < menu.size(); i++) { |
- menu.getItem(i).setOnMenuItemClickListener(this); |
- } |
- } |
- |
- @Override |
- public boolean onMenuItemClick(MenuItem item) { |
- return mPopulator.onItemSelected(this, mCurrentContextMenuParams, item.getItemId()); |
+ 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); |
+ } |
+ }); |
} |
/** |