Loading core/java/android/widget/ActionMenuPresenter.java +12 −20 Original line number Diff line number Diff line Loading @@ -74,6 +74,7 @@ public class ActionMenuPresenter extends BaseMenuPresenter private ActionButtonSubmenu mActionButtonPopup; private OpenOverflowRunnable mPostedOpenRunnable; private ActionMenuPopupCallback mPopupCallback; final PopupPresenterCallback mPopupPresenterCallback = new PopupPresenterCallback(); int mOpenSubMenuId; Loading Loading @@ -177,33 +178,17 @@ public class ActionMenuPresenter extends BaseMenuPresenter } @Override public void bindItemView(final MenuItemImpl item, MenuView.ItemView itemView) { public void bindItemView(MenuItemImpl item, MenuView.ItemView itemView) { itemView.initialize(item, 0); final ActionMenuView menuView = (ActionMenuView) mMenuView; final ActionMenuItemView actionItemView = (ActionMenuItemView) itemView; actionItemView.setItemInvoker(menuView); if (item.hasSubMenu()) { actionItemView.setOnTouchListener(new ForwardingListener(actionItemView) { @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 { actionItemView.setOnTouchListener(null); if (mPopupCallback == null) { mPopupCallback = new ActionMenuPopupCallback(); } actionItemView.setPopupCallback(mPopupCallback); } @Override Loading Loading @@ -761,4 +746,11 @@ public class ActionMenuPresenter extends BaseMenuPresenter mPostedOpenRunnable = null; } } private class ActionMenuPopupCallback extends ActionMenuItemView.PopupCallback { @Override public ListPopupWindow getPopup() { return mActionButtonPopup != null ? mActionButtonPopup.getPopup() : null; } } } core/java/com/android/internal/view/menu/ActionMenuItemView.java +63 −0 Original line number Diff line number Diff line Loading @@ -29,8 +29,10 @@ import android.view.MotionEvent; import android.view.View; import android.view.accessibility.AccessibilityEvent; import android.widget.ActionMenuView; import android.widget.ListPopupWindow; import android.widget.TextView; import android.widget.Toast; import android.widget.ListPopupWindow.ForwardingListener; /** * @hide Loading @@ -44,6 +46,8 @@ public class ActionMenuItemView extends TextView private CharSequence mTitle; private Drawable mIcon; private MenuBuilder.ItemInvoker mItemInvoker; private ForwardingListener mForwardingListener; private PopupCallback mPopupCallback; private boolean mAllowTextWithIcon; private boolean mExpandedFormat; Loading Loading @@ -104,6 +108,7 @@ public class ActionMenuItemView extends TextView return mItemData; } @Override public void initialize(MenuItemImpl itemData, int menuType) { mItemData = itemData; Loading @@ -113,8 +118,24 @@ public class ActionMenuItemView extends TextView setVisibility(itemData.isVisible() ? View.VISIBLE : View.GONE); setEnabled(itemData.isEnabled()); if (itemData.hasSubMenu()) { if (mForwardingListener == null) { mForwardingListener = new ActionMenuItemForwardingListener(); } } } @Override public boolean onTouchEvent(MotionEvent e) { if (mItemData.hasSubMenu() && mForwardingListener != null && mForwardingListener.onTouch(this, e)) { return true; } return super.onTouchEvent(e); } @Override public void onClick(View v) { if (mItemInvoker != null) { mItemInvoker.invokeItem(mItemData); Loading @@ -125,6 +146,10 @@ public class ActionMenuItemView extends TextView mItemInvoker = invoker; } public void setPopupCallback(PopupCallback popupCallback) { mPopupCallback = popupCallback; } public boolean prefersCondensedTitle() { return true; } Loading Loading @@ -290,4 +315,42 @@ public class ActionMenuItemView extends TextView super.setPadding((w - dw) / 2, getPaddingTop(), getPaddingRight(), getPaddingBottom()); } } private class ActionMenuItemForwardingListener extends ForwardingListener { public ActionMenuItemForwardingListener() { super(ActionMenuItemView.this); } @Override public ListPopupWindow getPopup() { if (mPopupCallback != null) { return mPopupCallback.getPopup(); } return null; } @Override protected boolean onForwardingStarted() { // Call the invoker, then check if the expected popup is showing. if (mItemInvoker != null && mItemInvoker.invokeItem(mItemData)) { final ListPopupWindow popup = getPopup(); return popup != null && popup.isShowing(); } return false; } @Override protected boolean onForwardingStopped() { final ListPopupWindow popup = getPopup(); if (popup != null) { popup.dismiss(); return true; } return false; } } public static abstract class PopupCallback { public abstract ListPopupWindow getPopup(); } } Loading
core/java/android/widget/ActionMenuPresenter.java +12 −20 Original line number Diff line number Diff line Loading @@ -74,6 +74,7 @@ public class ActionMenuPresenter extends BaseMenuPresenter private ActionButtonSubmenu mActionButtonPopup; private OpenOverflowRunnable mPostedOpenRunnable; private ActionMenuPopupCallback mPopupCallback; final PopupPresenterCallback mPopupPresenterCallback = new PopupPresenterCallback(); int mOpenSubMenuId; Loading Loading @@ -177,33 +178,17 @@ public class ActionMenuPresenter extends BaseMenuPresenter } @Override public void bindItemView(final MenuItemImpl item, MenuView.ItemView itemView) { public void bindItemView(MenuItemImpl item, MenuView.ItemView itemView) { itemView.initialize(item, 0); final ActionMenuView menuView = (ActionMenuView) mMenuView; final ActionMenuItemView actionItemView = (ActionMenuItemView) itemView; actionItemView.setItemInvoker(menuView); if (item.hasSubMenu()) { actionItemView.setOnTouchListener(new ForwardingListener(actionItemView) { @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 { actionItemView.setOnTouchListener(null); if (mPopupCallback == null) { mPopupCallback = new ActionMenuPopupCallback(); } actionItemView.setPopupCallback(mPopupCallback); } @Override Loading Loading @@ -761,4 +746,11 @@ public class ActionMenuPresenter extends BaseMenuPresenter mPostedOpenRunnable = null; } } private class ActionMenuPopupCallback extends ActionMenuItemView.PopupCallback { @Override public ListPopupWindow getPopup() { return mActionButtonPopup != null ? mActionButtonPopup.getPopup() : null; } } }
core/java/com/android/internal/view/menu/ActionMenuItemView.java +63 −0 Original line number Diff line number Diff line Loading @@ -29,8 +29,10 @@ import android.view.MotionEvent; import android.view.View; import android.view.accessibility.AccessibilityEvent; import android.widget.ActionMenuView; import android.widget.ListPopupWindow; import android.widget.TextView; import android.widget.Toast; import android.widget.ListPopupWindow.ForwardingListener; /** * @hide Loading @@ -44,6 +46,8 @@ public class ActionMenuItemView extends TextView private CharSequence mTitle; private Drawable mIcon; private MenuBuilder.ItemInvoker mItemInvoker; private ForwardingListener mForwardingListener; private PopupCallback mPopupCallback; private boolean mAllowTextWithIcon; private boolean mExpandedFormat; Loading Loading @@ -104,6 +108,7 @@ public class ActionMenuItemView extends TextView return mItemData; } @Override public void initialize(MenuItemImpl itemData, int menuType) { mItemData = itemData; Loading @@ -113,8 +118,24 @@ public class ActionMenuItemView extends TextView setVisibility(itemData.isVisible() ? View.VISIBLE : View.GONE); setEnabled(itemData.isEnabled()); if (itemData.hasSubMenu()) { if (mForwardingListener == null) { mForwardingListener = new ActionMenuItemForwardingListener(); } } } @Override public boolean onTouchEvent(MotionEvent e) { if (mItemData.hasSubMenu() && mForwardingListener != null && mForwardingListener.onTouch(this, e)) { return true; } return super.onTouchEvent(e); } @Override public void onClick(View v) { if (mItemInvoker != null) { mItemInvoker.invokeItem(mItemData); Loading @@ -125,6 +146,10 @@ public class ActionMenuItemView extends TextView mItemInvoker = invoker; } public void setPopupCallback(PopupCallback popupCallback) { mPopupCallback = popupCallback; } public boolean prefersCondensedTitle() { return true; } Loading Loading @@ -290,4 +315,42 @@ public class ActionMenuItemView extends TextView super.setPadding((w - dw) / 2, getPaddingTop(), getPaddingRight(), getPaddingBottom()); } } private class ActionMenuItemForwardingListener extends ForwardingListener { public ActionMenuItemForwardingListener() { super(ActionMenuItemView.this); } @Override public ListPopupWindow getPopup() { if (mPopupCallback != null) { return mPopupCallback.getPopup(); } return null; } @Override protected boolean onForwardingStarted() { // Call the invoker, then check if the expected popup is showing. if (mItemInvoker != null && mItemInvoker.invokeItem(mItemData)) { final ListPopupWindow popup = getPopup(); return popup != null && popup.isShowing(); } return false; } @Override protected boolean onForwardingStopped() { final ListPopupWindow popup = getPopup(); if (popup != null) { popup.dismiss(); return true; } return false; } } public static abstract class PopupCallback { public abstract ListPopupWindow getPopup(); } }