summaryrefslogtreecommitdiff
path: root/core/java/android/widget/MenuPopupWindow.java
diff options
context:
space:
mode:
authorAlan Viverette <alanv@google.com>2015-10-08 19:54:16 +0000
committerAlan Viverette <alanv@google.com>2015-10-08 19:54:16 +0000
commit2ac975deb3d5833ad3daf7f4325f062d875b6036 (patch)
tree853cee623bcf1e2a6c9798013ae478ce4ac192e7 /core/java/android/widget/MenuPopupWindow.java
parent8375d639986529969ea5e118de548d29db16ec97 (diff)
Revert "Reduce CascadingMenuPopup's reliance on internal ListView state"
Introduced some regressions. Reverting until we can do better testing. This reverts commit 8375d639986529969ea5e118de548d29db16ec97. Change-Id: I9b15d63e52c814ef8985b86f8a50359e39355d39
Diffstat (limited to 'core/java/android/widget/MenuPopupWindow.java')
-rw-r--r--core/java/android/widget/MenuPopupWindow.java53
1 files changed, 21 insertions, 32 deletions
diff --git a/core/java/android/widget/MenuPopupWindow.java b/core/java/android/widget/MenuPopupWindow.java
index 6b740d9268f9..1fb62d0fa6c9 100644
--- a/core/java/android/widget/MenuPopupWindow.java
+++ b/core/java/android/widget/MenuPopupWindow.java
@@ -16,7 +16,6 @@
package android.widget;
-import android.annotation.NonNull;
import android.content.Context;
import android.content.res.Configuration;
import android.content.res.Resources;
@@ -73,18 +72,10 @@ public class MenuPopupWindow extends ListPopupWindow implements MenuItemHoverLis
}
@Override
- public void onItemHoverEnter(@NonNull MenuBuilder menu, int position) {
+ public void onItemHovered(MenuBuilder menu, int position) {
// Forward up the chain
if (mHoverListener != null) {
- mHoverListener.onItemHoverEnter(menu, position);
- }
- }
-
- @Override
- public void onItemHoverExit(@NonNull MenuBuilder menu, int position) {
- // Forward up the chain
- if (mHoverListener != null) {
- mHoverListener.onItemHoverExit(menu, position);
+ mHoverListener.onItemHovered(menu, position);
}
}
@@ -97,8 +88,6 @@ public class MenuPopupWindow extends ListPopupWindow implements MenuItemHoverLis
private MenuItemHoverListener mHoverListener;
- private int mPreviouslyHoveredPosition = INVALID_POSITION;
-
public MenuDropDownListView(Context context, boolean hijackFocus) {
super(context, hijackFocus);
@@ -146,17 +135,25 @@ public class MenuPopupWindow extends ListPopupWindow implements MenuItemHoverLis
@Override
public boolean onHoverEvent(MotionEvent ev) {
- final int position;
- if (ev.getAction() == MotionEvent.ACTION_HOVER_EXIT) {
- position = INVALID_POSITION;
- } else {
- position = pointToPosition((int) ev.getX(), (int) ev.getY());
+ boolean dispatchHover = false;
+ final int position = pointToPosition((int) ev.getX(), (int) ev.getY());
+
+ final int action = ev.getActionMasked();
+ if (action == MotionEvent.ACTION_HOVER_ENTER
+ || action == MotionEvent.ACTION_HOVER_MOVE) {
+ if (position != INVALID_POSITION && position != mSelectedPosition) {
+ final View hoveredItem = getChildAt(position - getFirstVisiblePosition());
+ if (hoveredItem.isEnabled()) {
+ dispatchHover = true;
+ }
+ }
}
- // Dispatch any changes in hovered position to the listener.
- if (mHoverListener != null && mPreviouslyHoveredPosition != position) {
- final ListAdapter adapter = getAdapter();
- final MenuAdapter menuAdapter;
+ boolean superVal = super.onHoverEvent(ev);
+
+ if (dispatchHover && mHoverListener != null) {
+ ListAdapter adapter = getAdapter();
+ MenuAdapter menuAdapter;
if (adapter instanceof HeaderViewListAdapter) {
menuAdapter = (MenuAdapter) ((HeaderViewListAdapter) adapter)
.getWrappedAdapter();
@@ -164,18 +161,10 @@ public class MenuPopupWindow extends ListPopupWindow implements MenuItemHoverLis
menuAdapter = (MenuAdapter) adapter;
}
- final MenuBuilder menu = menuAdapter.getAdapterMenu();
- if (mPreviouslyHoveredPosition != INVALID_POSITION) {
- mHoverListener.onItemHoverExit(menu, mPreviouslyHoveredPosition);
- }
- if (position != INVALID_POSITION) {
- mHoverListener.onItemHoverEnter(menu, position);
- }
+ mHoverListener.onItemHovered(menuAdapter.getAdapterMenu(), position);
}
- mPreviouslyHoveredPosition = position;
-
- return super.onHoverEvent(ev);
+ return superVal;
}
}
} \ No newline at end of file