diff --git a/core/java/com/android/internal/view/menu/ActionMenuPresenter.java b/core/java/com/android/internal/view/menu/ActionMenuPresenter.java index f060efd984518..c1ae9c24ea4e6 100644 --- a/core/java/com/android/internal/view/menu/ActionMenuPresenter.java +++ b/core/java/com/android/internal/view/menu/ActionMenuPresenter.java @@ -156,7 +156,7 @@ public class ActionMenuPresenter extends BaseMenuPresenter } @Override - public View getItemView(MenuItemImpl item, View convertView, ViewGroup parent) { + public View getItemView(final MenuItemImpl item, View convertView, ViewGroup parent) { View actionView = item.getActionView(); if (actionView == null || item.hasCollapsibleActionView()) { if (!(convertView instanceof ActionMenuItemView)) { @@ -166,6 +166,27 @@ public class ActionMenuPresenter extends BaseMenuPresenter } actionView.setVisibility(item.isActionViewExpanded() ? View.GONE : View.VISIBLE); + if (item.hasSubMenu()) { + actionView.setOnTouchListener(new ForwardingListener(actionView) { + @Override + public ListPopupWindow getPopup() { + return mActionButtonPopup != null ? mActionButtonPopup.getPopup() : null; + } + + @Override + protected boolean onForwardingStarted() { + return onSubMenuSelected((SubMenuBuilder) item.getSubMenu()); + } + + @Override + protected boolean onForwardingStopped() { + return dismissPopupMenus(); + } + }); + } else { + actionView.setOnTouchListener(null); + } + final ActionMenuView menuParent = (ActionMenuView) parent; final ViewGroup.LayoutParams lp = actionView.getLayoutParams(); if (!menuParent.checkLayoutParams(lp)) {