diff options
| author | Alan Viverette <alanv@google.com> | 2015-10-08 19:54:16 +0000 |
|---|---|---|
| committer | Alan Viverette <alanv@google.com> | 2015-10-08 19:54:16 +0000 |
| commit | 2ac975deb3d5833ad3daf7f4325f062d875b6036 (patch) | |
| tree | 853cee623bcf1e2a6c9798013ae478ce4ac192e7 /core/java/android/widget/MenuPopupWindow.java | |
| parent | 8375d639986529969ea5e118de548d29db16ec97 (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.java | 53 |
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 |
