Loading core/java/android/widget/DropDownListView.java +17 −0 Original line number Diff line number Diff line Loading @@ -159,6 +159,23 @@ public class DropDownListView extends ListView { return super.onHoverEvent(ev); } @Override public boolean onTouchEvent(MotionEvent event) { final int x = (int) event.getX(); final int y = (int) event.getY(); final int position = pointToPosition(x, y); if (position == INVALID_POSITION) { return super.onTouchEvent(event); } if (position != mSelectedPosition) { setSelectedPositionInt(position); setNextSelectedPositionInt(position); } return super.onTouchEvent(event); } /** * Handles forwarded events. * Loading core/java/android/widget/MenuItemHoverListener.java +1 −20 Original line number Diff line number Diff line Loading @@ -2,8 +2,6 @@ package android.widget; import com.android.internal.view.menu.MenuBuilder; import android.annotation.NonNull; /** * An interface notified when a menu item is hovered. Useful for cases when hover should trigger * some behavior at a higher level, like managing the opening and closing of submenus. Loading @@ -11,22 +9,5 @@ import android.annotation.NonNull; * @hide */ public interface MenuItemHoverListener { /** * Called when hover exits a menu item. * <p> * If hover is moving to another item, this method will be called before * {@link #onItemHoverEnter(MenuBuilder, int)} for the newly-hovered item. * * @param menu the item's parent menu * @param position the position of the item within the menu */ void onItemHoverExit(@NonNull MenuBuilder menu, int position); /** * Called when hover enters a menu item. * * @param menu the item's parent menu * @param position the position of the item within the menu */ void onItemHoverEnter(@NonNull MenuBuilder menu, int position); public void onItemHovered(MenuBuilder menu, int position); } core/java/android/widget/MenuPopupWindow.java +21 −32 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -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); } } Loading @@ -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); Loading Loading @@ -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; } } } boolean superVal = super.onHoverEvent(ev); // Dispatch any changes in hovered position to the listener. if (mHoverListener != null && mPreviouslyHoveredPosition != position) { final ListAdapter adapter = getAdapter(); final MenuAdapter menuAdapter; if (dispatchHover && mHoverListener != null) { ListAdapter adapter = getAdapter(); MenuAdapter menuAdapter; if (adapter instanceof HeaderViewListAdapter) { menuAdapter = (MenuAdapter) ((HeaderViewListAdapter) adapter) .getWrappedAdapter(); Loading @@ -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); mHoverListener.onItemHovered(menuAdapter.getAdapterMenu(), position); } if (position != INVALID_POSITION) { mHoverListener.onItemHoverEnter(menu, position); } } mPreviouslyHoveredPosition = position; return super.onHoverEvent(ev); return superVal; } } } No newline at end of file core/java/com/android/internal/view/menu/CascadingMenuPopup.java +197 −279 File changed.Preview size limit exceeded, changes collapsed. Show changes core/java/com/android/internal/view/menu/MenuBuilder.java +9 −8 Original line number Diff line number Diff line Loading @@ -936,14 +936,15 @@ public class MenuBuilder implements Menu { } /** * Closes the menu. * Closes the visible menu. * * @param closeAllMenus {@code true} if all displayed menus and submenus * should be completely closed (as when a menu item is * selected) or {@code false} if only this menu should * be closed * @param allMenusAreClosing Whether the menus are completely closing (true), * or whether there is another menu coming in this menu's place * (false). For example, if the menu is closing because a * sub menu is about to be shown, <var>allMenusAreClosing</var> * is false. */ public final void close(boolean closeAllMenus) { public final void close(boolean allMenusAreClosing) { if (mIsClosing) return; mIsClosing = true; Loading @@ -952,7 +953,7 @@ public class MenuBuilder implements Menu { if (presenter == null) { mPresenters.remove(ref); } else { presenter.onCloseMenu(this, closeAllMenus); presenter.onCloseMenu(this, allMenusAreClosing); } } mIsClosing = false; Loading Loading
core/java/android/widget/DropDownListView.java +17 −0 Original line number Diff line number Diff line Loading @@ -159,6 +159,23 @@ public class DropDownListView extends ListView { return super.onHoverEvent(ev); } @Override public boolean onTouchEvent(MotionEvent event) { final int x = (int) event.getX(); final int y = (int) event.getY(); final int position = pointToPosition(x, y); if (position == INVALID_POSITION) { return super.onTouchEvent(event); } if (position != mSelectedPosition) { setSelectedPositionInt(position); setNextSelectedPositionInt(position); } return super.onTouchEvent(event); } /** * Handles forwarded events. * Loading
core/java/android/widget/MenuItemHoverListener.java +1 −20 Original line number Diff line number Diff line Loading @@ -2,8 +2,6 @@ package android.widget; import com.android.internal.view.menu.MenuBuilder; import android.annotation.NonNull; /** * An interface notified when a menu item is hovered. Useful for cases when hover should trigger * some behavior at a higher level, like managing the opening and closing of submenus. Loading @@ -11,22 +9,5 @@ import android.annotation.NonNull; * @hide */ public interface MenuItemHoverListener { /** * Called when hover exits a menu item. * <p> * If hover is moving to another item, this method will be called before * {@link #onItemHoverEnter(MenuBuilder, int)} for the newly-hovered item. * * @param menu the item's parent menu * @param position the position of the item within the menu */ void onItemHoverExit(@NonNull MenuBuilder menu, int position); /** * Called when hover enters a menu item. * * @param menu the item's parent menu * @param position the position of the item within the menu */ void onItemHoverEnter(@NonNull MenuBuilder menu, int position); public void onItemHovered(MenuBuilder menu, int position); }
core/java/android/widget/MenuPopupWindow.java +21 −32 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -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); } } Loading @@ -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); Loading Loading @@ -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; } } } boolean superVal = super.onHoverEvent(ev); // Dispatch any changes in hovered position to the listener. if (mHoverListener != null && mPreviouslyHoveredPosition != position) { final ListAdapter adapter = getAdapter(); final MenuAdapter menuAdapter; if (dispatchHover && mHoverListener != null) { ListAdapter adapter = getAdapter(); MenuAdapter menuAdapter; if (adapter instanceof HeaderViewListAdapter) { menuAdapter = (MenuAdapter) ((HeaderViewListAdapter) adapter) .getWrappedAdapter(); Loading @@ -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); mHoverListener.onItemHovered(menuAdapter.getAdapterMenu(), position); } if (position != INVALID_POSITION) { mHoverListener.onItemHoverEnter(menu, position); } } mPreviouslyHoveredPosition = position; return super.onHoverEvent(ev); return superVal; } } } No newline at end of file
core/java/com/android/internal/view/menu/CascadingMenuPopup.java +197 −279 File changed.Preview size limit exceeded, changes collapsed. Show changes
core/java/com/android/internal/view/menu/MenuBuilder.java +9 −8 Original line number Diff line number Diff line Loading @@ -936,14 +936,15 @@ public class MenuBuilder implements Menu { } /** * Closes the menu. * Closes the visible menu. * * @param closeAllMenus {@code true} if all displayed menus and submenus * should be completely closed (as when a menu item is * selected) or {@code false} if only this menu should * be closed * @param allMenusAreClosing Whether the menus are completely closing (true), * or whether there is another menu coming in this menu's place * (false). For example, if the menu is closing because a * sub menu is about to be shown, <var>allMenusAreClosing</var> * is false. */ public final void close(boolean closeAllMenus) { public final void close(boolean allMenusAreClosing) { if (mIsClosing) return; mIsClosing = true; Loading @@ -952,7 +953,7 @@ public class MenuBuilder implements Menu { if (presenter == null) { mPresenters.remove(ref); } else { presenter.onCloseMenu(this, closeAllMenus); presenter.onCloseMenu(this, allMenusAreClosing); } } mIsClosing = false; Loading