Index: chrome/android/java/src/org/chromium/chrome/browser/appmenu/AppMenuButtonHelper.java |
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/appmenu/AppMenuButtonHelper.java b/chrome/android/java/src/org/chromium/chrome/browser/appmenu/AppMenuButtonHelper.java |
index 7ef177911fdf1b121af656fff45efcc44ea19e86..e6b58dcd79188c67e685d6d66e80723518267ca4 100644 |
--- a/chrome/android/java/src/org/chromium/chrome/browser/appmenu/AppMenuButtonHelper.java |
+++ b/chrome/android/java/src/org/chromium/chrome/browser/appmenu/AppMenuButtonHelper.java |
@@ -19,16 +19,14 @@ import org.chromium.chrome.browser.UmaBridge; |
* Then this class will handle everything regarding showing app menu for you. |
*/ |
public class AppMenuButtonHelper implements OnTouchListener { |
- private final View mMenuButton; |
private final AppMenuHandler mMenuHandler; |
private Runnable mOnAppMenuShownListener; |
+ private boolean mIsTouchEventsBeingProcessed; |
/** |
- * @param menuButton Menu button instance that will trigger the app menu. |
* @param menuHandler MenuHandler implementation that can show and get the app menu. |
*/ |
- public AppMenuButtonHelper(View menuButton, AppMenuHandler menuHandler) { |
- mMenuButton = menuButton; |
+ public AppMenuButtonHelper(AppMenuHandler menuHandler) { |
mMenuHandler = menuHandler; |
} |
@@ -41,12 +39,13 @@ public class AppMenuButtonHelper implements OnTouchListener { |
/** |
* Shows the app menu if it is not already shown. |
+ * @param view View that initiated showing this menu. Normally it is a menu button. |
* @param startDragging Whether dragging is started. |
* @return Whether or not if the app menu is successfully shown. |
*/ |
- private boolean showAppMenu(boolean startDragging) { |
- if (!mMenuHandler.isAppMenuShowing() && |
- mMenuHandler.showAppMenu(mMenuButton, false, startDragging)) { |
+ private boolean showAppMenu(View view, boolean startDragging) { |
+ if (!mMenuHandler.isAppMenuShowing() |
+ && mMenuHandler.showAppMenu(view, false, startDragging)) { |
// Initial start dragging can be canceled in case if it was just single tap. |
// So we only record non-dragging here, and will deal with those dragging cases in |
// AppMenuDragHelper class. |
@@ -65,15 +64,16 @@ public class AppMenuButtonHelper implements OnTouchListener { |
* touch events to prepare AppMenu showing. |
*/ |
public boolean isAppMenuActive() { |
- return mMenuButton.isPressed() || mMenuHandler.isAppMenuShowing(); |
+ return mIsTouchEventsBeingProcessed || mMenuHandler.isAppMenuShowing(); |
} |
/** |
* Handle the key press event on a menu button. |
+ * @param view View that received the enter key press event. |
* @return Whether the app menu was shown as a result of this action. |
*/ |
- public boolean onEnterKeyPress() { |
- return showAppMenu(false); |
+ public boolean onEnterKeyPress(View view) { |
+ return showAppMenu(view, false); |
} |
@SuppressLint("ClickableViewAccessibility") |
@@ -83,14 +83,16 @@ public class AppMenuButtonHelper implements OnTouchListener { |
switch (event.getActionMasked()) { |
case MotionEvent.ACTION_DOWN: |
+ mIsTouchEventsBeingProcessed = true; |
isTouchEventConsumed |= true; |
- mMenuButton.setPressed(true); |
- showAppMenu(true); |
+ view.setPressed(true); |
+ showAppMenu(view, true); |
break; |
case MotionEvent.ACTION_UP: |
case MotionEvent.ACTION_CANCEL: |
+ mIsTouchEventsBeingProcessed = false; |
isTouchEventConsumed |= true; |
- mMenuButton.setPressed(false); |
+ view.setPressed(false); |
break; |
default: |
} |
@@ -100,7 +102,7 @@ public class AppMenuButtonHelper implements OnTouchListener { |
// dragging correctly. |
AppMenuDragHelper dragHelper = mMenuHandler.getAppMenuDragHelper(); |
if (dragHelper != null) { |
- isTouchEventConsumed |= dragHelper.handleDragging(event); |
+ isTouchEventConsumed |= dragHelper.handleDragging(event, view); |
} |
return isTouchEventConsumed; |
} |