14be0d52125b88dc992a4c500edbe95bf55484e0bAdam Powell/* 24be0d52125b88dc992a4c500edbe95bf55484e0bAdam Powell * Copyright (C) 2010 The Android Open Source Project 34be0d52125b88dc992a4c500edbe95bf55484e0bAdam Powell * 44be0d52125b88dc992a4c500edbe95bf55484e0bAdam Powell * Licensed under the Apache License, Version 2.0 (the "License"); 54be0d52125b88dc992a4c500edbe95bf55484e0bAdam Powell * you may not use this file except in compliance with the License. 64be0d52125b88dc992a4c500edbe95bf55484e0bAdam Powell * You may obtain a copy of the License at 74be0d52125b88dc992a4c500edbe95bf55484e0bAdam Powell * 84be0d52125b88dc992a4c500edbe95bf55484e0bAdam Powell * http://www.apache.org/licenses/LICENSE-2.0 94be0d52125b88dc992a4c500edbe95bf55484e0bAdam Powell * 104be0d52125b88dc992a4c500edbe95bf55484e0bAdam Powell * Unless required by applicable law or agreed to in writing, software 114be0d52125b88dc992a4c500edbe95bf55484e0bAdam Powell * distributed under the License is distributed on an "AS IS" BASIS, 124be0d52125b88dc992a4c500edbe95bf55484e0bAdam Powell * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 134be0d52125b88dc992a4c500edbe95bf55484e0bAdam Powell * See the License for the specific language governing permissions and 144be0d52125b88dc992a4c500edbe95bf55484e0bAdam Powell * limitations under the License. 154be0d52125b88dc992a4c500edbe95bf55484e0bAdam Powell */ 164be0d52125b88dc992a4c500edbe95bf55484e0bAdam Powell 174be0d52125b88dc992a4c500edbe95bf55484e0bAdam Powellpackage android.widget; 184be0d52125b88dc992a4c500edbe95bf55484e0bAdam Powell 194be0d52125b88dc992a4c500edbe95bf55484e0bAdam Powellimport com.android.internal.view.menu.MenuBuilder; 204be0d52125b88dc992a4c500edbe95bf55484e0bAdam Powellimport com.android.internal.view.menu.MenuPopupHelper; 2142b91bbcdaf64b2f19d0a9ce168964b31a5dc139Adam Powellimport com.android.internal.view.menu.MenuPresenter; 224be0d52125b88dc992a4c500edbe95bf55484e0bAdam Powellimport com.android.internal.view.menu.SubMenuBuilder; 234be0d52125b88dc992a4c500edbe95bf55484e0bAdam Powell 244be0d52125b88dc992a4c500edbe95bf55484e0bAdam Powellimport android.content.Context; 2554c94dea8a26e66fa59a31fd9170ca221052d3aaAdam Powellimport android.view.Gravity; 264be0d52125b88dc992a4c500edbe95bf55484e0bAdam Powellimport android.view.Menu; 274be0d52125b88dc992a4c500edbe95bf55484e0bAdam Powellimport android.view.MenuInflater; 284be0d52125b88dc992a4c500edbe95bf55484e0bAdam Powellimport android.view.MenuItem; 294be0d52125b88dc992a4c500edbe95bf55484e0bAdam Powellimport android.view.View; 301955a5b531f03dec90f285b590ef62e3d632783cAlan Viveretteimport android.view.View.OnTouchListener; 311955a5b531f03dec90f285b590ef62e3d632783cAlan Viveretteimport android.widget.ListPopupWindow.ForwardingListener; 324be0d52125b88dc992a4c500edbe95bf55484e0bAdam Powell 334be0d52125b88dc992a4c500edbe95bf55484e0bAdam Powell/** 344be0d52125b88dc992a4c500edbe95bf55484e0bAdam Powell * A PopupMenu displays a {@link Menu} in a modal popup window anchored to a {@link View}. 354be0d52125b88dc992a4c500edbe95bf55484e0bAdam Powell * The popup will appear below the anchor view if there is room, or above it if there is not. 364be0d52125b88dc992a4c500edbe95bf55484e0bAdam Powell * If the IME is visible the popup will not overlap it until it is touched. Touching outside 374be0d52125b88dc992a4c500edbe95bf55484e0bAdam Powell * of the popup will dismiss it. 384be0d52125b88dc992a4c500edbe95bf55484e0bAdam Powell */ 3942b91bbcdaf64b2f19d0a9ce168964b31a5dc139Adam Powellpublic class PopupMenu implements MenuBuilder.Callback, MenuPresenter.Callback { 404be0d52125b88dc992a4c500edbe95bf55484e0bAdam Powell private Context mContext; 414be0d52125b88dc992a4c500edbe95bf55484e0bAdam Powell private MenuBuilder mMenu; 424be0d52125b88dc992a4c500edbe95bf55484e0bAdam Powell private View mAnchor; 434be0d52125b88dc992a4c500edbe95bf55484e0bAdam Powell private MenuPopupHelper mPopup; 444be0d52125b88dc992a4c500edbe95bf55484e0bAdam Powell private OnMenuItemClickListener mMenuItemClickListener; 4542b91bbcdaf64b2f19d0a9ce168964b31a5dc139Adam Powell private OnDismissListener mDismissListener; 461955a5b531f03dec90f285b590ef62e3d632783cAlan Viverette private OnTouchListener mDragListener; 4742b91bbcdaf64b2f19d0a9ce168964b31a5dc139Adam Powell 4842b91bbcdaf64b2f19d0a9ce168964b31a5dc139Adam Powell /** 4942b91bbcdaf64b2f19d0a9ce168964b31a5dc139Adam Powell * Callback interface used to notify the application that the menu has closed. 5042b91bbcdaf64b2f19d0a9ce168964b31a5dc139Adam Powell */ 5142b91bbcdaf64b2f19d0a9ce168964b31a5dc139Adam Powell public interface OnDismissListener { 5242b91bbcdaf64b2f19d0a9ce168964b31a5dc139Adam Powell /** 5342b91bbcdaf64b2f19d0a9ce168964b31a5dc139Adam Powell * Called when the associated menu has been dismissed. 5442b91bbcdaf64b2f19d0a9ce168964b31a5dc139Adam Powell * 5542b91bbcdaf64b2f19d0a9ce168964b31a5dc139Adam Powell * @param menu The PopupMenu that was dismissed. 5642b91bbcdaf64b2f19d0a9ce168964b31a5dc139Adam Powell */ 5742b91bbcdaf64b2f19d0a9ce168964b31a5dc139Adam Powell public void onDismiss(PopupMenu menu); 5842b91bbcdaf64b2f19d0a9ce168964b31a5dc139Adam Powell } 594be0d52125b88dc992a4c500edbe95bf55484e0bAdam Powell 604be0d52125b88dc992a4c500edbe95bf55484e0bAdam Powell /** 614be0d52125b88dc992a4c500edbe95bf55484e0bAdam Powell * Construct a new PopupMenu. 624be0d52125b88dc992a4c500edbe95bf55484e0bAdam Powell * 634be0d52125b88dc992a4c500edbe95bf55484e0bAdam Powell * @param context Context for the PopupMenu. 644be0d52125b88dc992a4c500edbe95bf55484e0bAdam Powell * @param anchor Anchor view for this popup. The popup will appear below the anchor if there 654be0d52125b88dc992a4c500edbe95bf55484e0bAdam Powell * is room, or above it if there is not. 664be0d52125b88dc992a4c500edbe95bf55484e0bAdam Powell */ 674be0d52125b88dc992a4c500edbe95bf55484e0bAdam Powell public PopupMenu(Context context, View anchor) { 6854c94dea8a26e66fa59a31fd9170ca221052d3aaAdam Powell this(context, anchor, Gravity.NO_GRAVITY); 6954c94dea8a26e66fa59a31fd9170ca221052d3aaAdam Powell } 7054c94dea8a26e66fa59a31fd9170ca221052d3aaAdam Powell 7154c94dea8a26e66fa59a31fd9170ca221052d3aaAdam Powell /** 7254c94dea8a26e66fa59a31fd9170ca221052d3aaAdam Powell * Construct a new PopupMenu. 7354c94dea8a26e66fa59a31fd9170ca221052d3aaAdam Powell * 7454c94dea8a26e66fa59a31fd9170ca221052d3aaAdam Powell * @param context Context for the PopupMenu. 7554c94dea8a26e66fa59a31fd9170ca221052d3aaAdam Powell * @param anchor Anchor view for this popup. The popup will appear below the anchor if there 7654c94dea8a26e66fa59a31fd9170ca221052d3aaAdam Powell * is room, or above it if there is not. 7754c94dea8a26e66fa59a31fd9170ca221052d3aaAdam Powell * @param gravity The {@link Gravity} value for aligning the popup with its anchor 7854c94dea8a26e66fa59a31fd9170ca221052d3aaAdam Powell */ 7954c94dea8a26e66fa59a31fd9170ca221052d3aaAdam Powell public PopupMenu(Context context, View anchor, int gravity) { 804be0d52125b88dc992a4c500edbe95bf55484e0bAdam Powell // TODO Theme? 814be0d52125b88dc992a4c500edbe95bf55484e0bAdam Powell mContext = context; 824be0d52125b88dc992a4c500edbe95bf55484e0bAdam Powell mMenu = new MenuBuilder(context); 834be0d52125b88dc992a4c500edbe95bf55484e0bAdam Powell mMenu.setCallback(this); 844be0d52125b88dc992a4c500edbe95bf55484e0bAdam Powell mAnchor = anchor; 854be0d52125b88dc992a4c500edbe95bf55484e0bAdam Powell mPopup = new MenuPopupHelper(context, mMenu, anchor); 8654c94dea8a26e66fa59a31fd9170ca221052d3aaAdam Powell mPopup.setGravity(gravity); 8742b91bbcdaf64b2f19d0a9ce168964b31a5dc139Adam Powell mPopup.setCallback(this); 884be0d52125b88dc992a4c500edbe95bf55484e0bAdam Powell } 894be0d52125b88dc992a4c500edbe95bf55484e0bAdam Powell 904be0d52125b88dc992a4c500edbe95bf55484e0bAdam Powell /** 911955a5b531f03dec90f285b590ef62e3d632783cAlan Viverette * Returns an {@link OnTouchListener} that can be added to the anchor view 921955a5b531f03dec90f285b590ef62e3d632783cAlan Viverette * to implement drag-to-open behavior. 931955a5b531f03dec90f285b590ef62e3d632783cAlan Viverette * <p> 941955a5b531f03dec90f285b590ef62e3d632783cAlan Viverette * When the listener is set on a view, touching that view and dragging 951955a5b531f03dec90f285b590ef62e3d632783cAlan Viverette * outside of its bounds will open the popup window. Lifting will select the 961955a5b531f03dec90f285b590ef62e3d632783cAlan Viverette * currently touched list item. 971955a5b531f03dec90f285b590ef62e3d632783cAlan Viverette * <p> 981955a5b531f03dec90f285b590ef62e3d632783cAlan Viverette * Example usage: 993f9832d3c7b30bf4dc8ed9e5123b02daca96c878Alan Viverette * <pre> 1003f9832d3c7b30bf4dc8ed9e5123b02daca96c878Alan Viverette * PopupMenu myPopup = new PopupMenu(context, myAnchor); 1013f9832d3c7b30bf4dc8ed9e5123b02daca96c878Alan Viverette * myAnchor.setOnTouchListener(myPopup.getDragToOpenListener()); 1023f9832d3c7b30bf4dc8ed9e5123b02daca96c878Alan Viverette * </pre> 1031955a5b531f03dec90f285b590ef62e3d632783cAlan Viverette * 1041955a5b531f03dec90f285b590ef62e3d632783cAlan Viverette * @return a touch listener that controls drag-to-open behavior 1051955a5b531f03dec90f285b590ef62e3d632783cAlan Viverette */ 1061955a5b531f03dec90f285b590ef62e3d632783cAlan Viverette public OnTouchListener getDragToOpenListener() { 1071955a5b531f03dec90f285b590ef62e3d632783cAlan Viverette if (mDragListener == null) { 1081955a5b531f03dec90f285b590ef62e3d632783cAlan Viverette mDragListener = new ForwardingListener(mAnchor) { 1091955a5b531f03dec90f285b590ef62e3d632783cAlan Viverette @Override 11099d72497d30ad3109c987348f4bf8494c1f93299Alan Viverette protected boolean onForwardingStarted() { 11199d72497d30ad3109c987348f4bf8494c1f93299Alan Viverette show(); 11299d72497d30ad3109c987348f4bf8494c1f93299Alan Viverette return true; 11399d72497d30ad3109c987348f4bf8494c1f93299Alan Viverette } 11499d72497d30ad3109c987348f4bf8494c1f93299Alan Viverette 11599d72497d30ad3109c987348f4bf8494c1f93299Alan Viverette @Override 11699d72497d30ad3109c987348f4bf8494c1f93299Alan Viverette protected boolean onForwardingStopped() { 11799d72497d30ad3109c987348f4bf8494c1f93299Alan Viverette dismiss(); 11899d72497d30ad3109c987348f4bf8494c1f93299Alan Viverette return true; 11999d72497d30ad3109c987348f4bf8494c1f93299Alan Viverette } 12099d72497d30ad3109c987348f4bf8494c1f93299Alan Viverette 12199d72497d30ad3109c987348f4bf8494c1f93299Alan Viverette @Override 1221955a5b531f03dec90f285b590ef62e3d632783cAlan Viverette public ListPopupWindow getPopup() { 12399d72497d30ad3109c987348f4bf8494c1f93299Alan Viverette // This will be null until show() is called. 1241955a5b531f03dec90f285b590ef62e3d632783cAlan Viverette return mPopup.getPopup(); 1251955a5b531f03dec90f285b590ef62e3d632783cAlan Viverette } 1261955a5b531f03dec90f285b590ef62e3d632783cAlan Viverette }; 1271955a5b531f03dec90f285b590ef62e3d632783cAlan Viverette } 1281955a5b531f03dec90f285b590ef62e3d632783cAlan Viverette 1291955a5b531f03dec90f285b590ef62e3d632783cAlan Viverette return mDragListener; 1301955a5b531f03dec90f285b590ef62e3d632783cAlan Viverette } 1311955a5b531f03dec90f285b590ef62e3d632783cAlan Viverette 1321955a5b531f03dec90f285b590ef62e3d632783cAlan Viverette /** 1334be0d52125b88dc992a4c500edbe95bf55484e0bAdam Powell * @return the {@link Menu} associated with this popup. Populate the returned Menu with 1344be0d52125b88dc992a4c500edbe95bf55484e0bAdam Powell * items before calling {@link #show()}. 1354be0d52125b88dc992a4c500edbe95bf55484e0bAdam Powell * 1364be0d52125b88dc992a4c500edbe95bf55484e0bAdam Powell * @see #show() 1374be0d52125b88dc992a4c500edbe95bf55484e0bAdam Powell * @see #getMenuInflater() 1384be0d52125b88dc992a4c500edbe95bf55484e0bAdam Powell */ 1394be0d52125b88dc992a4c500edbe95bf55484e0bAdam Powell public Menu getMenu() { 1404be0d52125b88dc992a4c500edbe95bf55484e0bAdam Powell return mMenu; 1414be0d52125b88dc992a4c500edbe95bf55484e0bAdam Powell } 1424be0d52125b88dc992a4c500edbe95bf55484e0bAdam Powell 1434be0d52125b88dc992a4c500edbe95bf55484e0bAdam Powell /** 1444be0d52125b88dc992a4c500edbe95bf55484e0bAdam Powell * @return a {@link MenuInflater} that can be used to inflate menu items from XML into the 1454be0d52125b88dc992a4c500edbe95bf55484e0bAdam Powell * menu returned by {@link #getMenu()}. 1464be0d52125b88dc992a4c500edbe95bf55484e0bAdam Powell * 1474be0d52125b88dc992a4c500edbe95bf55484e0bAdam Powell * @see #getMenu() 1484be0d52125b88dc992a4c500edbe95bf55484e0bAdam Powell */ 1494be0d52125b88dc992a4c500edbe95bf55484e0bAdam Powell public MenuInflater getMenuInflater() { 1504be0d52125b88dc992a4c500edbe95bf55484e0bAdam Powell return new MenuInflater(mContext); 1514be0d52125b88dc992a4c500edbe95bf55484e0bAdam Powell } 1524be0d52125b88dc992a4c500edbe95bf55484e0bAdam Powell 1534be0d52125b88dc992a4c500edbe95bf55484e0bAdam Powell /** 15442b91bbcdaf64b2f19d0a9ce168964b31a5dc139Adam Powell * Inflate a menu resource into this PopupMenu. This is equivalent to calling 15542b91bbcdaf64b2f19d0a9ce168964b31a5dc139Adam Powell * popupMenu.getMenuInflater().inflate(menuRes, popupMenu.getMenu()). 15642b91bbcdaf64b2f19d0a9ce168964b31a5dc139Adam Powell * @param menuRes Menu resource to inflate 15742b91bbcdaf64b2f19d0a9ce168964b31a5dc139Adam Powell */ 15842b91bbcdaf64b2f19d0a9ce168964b31a5dc139Adam Powell public void inflate(int menuRes) { 15942b91bbcdaf64b2f19d0a9ce168964b31a5dc139Adam Powell getMenuInflater().inflate(menuRes, mMenu); 16042b91bbcdaf64b2f19d0a9ce168964b31a5dc139Adam Powell } 16142b91bbcdaf64b2f19d0a9ce168964b31a5dc139Adam Powell 16242b91bbcdaf64b2f19d0a9ce168964b31a5dc139Adam Powell /** 1634be0d52125b88dc992a4c500edbe95bf55484e0bAdam Powell * Show the menu popup anchored to the view specified during construction. 1644be0d52125b88dc992a4c500edbe95bf55484e0bAdam Powell * @see #dismiss() 1654be0d52125b88dc992a4c500edbe95bf55484e0bAdam Powell */ 1664be0d52125b88dc992a4c500edbe95bf55484e0bAdam Powell public void show() { 1674be0d52125b88dc992a4c500edbe95bf55484e0bAdam Powell mPopup.show(); 1684be0d52125b88dc992a4c500edbe95bf55484e0bAdam Powell } 1694be0d52125b88dc992a4c500edbe95bf55484e0bAdam Powell 1704be0d52125b88dc992a4c500edbe95bf55484e0bAdam Powell /** 1714be0d52125b88dc992a4c500edbe95bf55484e0bAdam Powell * Dismiss the menu popup. 1724be0d52125b88dc992a4c500edbe95bf55484e0bAdam Powell * @see #show() 1734be0d52125b88dc992a4c500edbe95bf55484e0bAdam Powell */ 1744be0d52125b88dc992a4c500edbe95bf55484e0bAdam Powell public void dismiss() { 1754be0d52125b88dc992a4c500edbe95bf55484e0bAdam Powell mPopup.dismiss(); 1764be0d52125b88dc992a4c500edbe95bf55484e0bAdam Powell } 1774be0d52125b88dc992a4c500edbe95bf55484e0bAdam Powell 17842b91bbcdaf64b2f19d0a9ce168964b31a5dc139Adam Powell /** 17942b91bbcdaf64b2f19d0a9ce168964b31a5dc139Adam Powell * Set a listener that will be notified when the user selects an item from the menu. 18042b91bbcdaf64b2f19d0a9ce168964b31a5dc139Adam Powell * 18142b91bbcdaf64b2f19d0a9ce168964b31a5dc139Adam Powell * @param listener Listener to notify 18242b91bbcdaf64b2f19d0a9ce168964b31a5dc139Adam Powell */ 1834be0d52125b88dc992a4c500edbe95bf55484e0bAdam Powell public void setOnMenuItemClickListener(OnMenuItemClickListener listener) { 1844be0d52125b88dc992a4c500edbe95bf55484e0bAdam Powell mMenuItemClickListener = listener; 1854be0d52125b88dc992a4c500edbe95bf55484e0bAdam Powell } 1864be0d52125b88dc992a4c500edbe95bf55484e0bAdam Powell 1874be0d52125b88dc992a4c500edbe95bf55484e0bAdam Powell /** 18842b91bbcdaf64b2f19d0a9ce168964b31a5dc139Adam Powell * Set a listener that will be notified when this menu is dismissed. 18942b91bbcdaf64b2f19d0a9ce168964b31a5dc139Adam Powell * 19042b91bbcdaf64b2f19d0a9ce168964b31a5dc139Adam Powell * @param listener Listener to notify 19142b91bbcdaf64b2f19d0a9ce168964b31a5dc139Adam Powell */ 19242b91bbcdaf64b2f19d0a9ce168964b31a5dc139Adam Powell public void setOnDismissListener(OnDismissListener listener) { 19342b91bbcdaf64b2f19d0a9ce168964b31a5dc139Adam Powell mDismissListener = listener; 19442b91bbcdaf64b2f19d0a9ce168964b31a5dc139Adam Powell } 19542b91bbcdaf64b2f19d0a9ce168964b31a5dc139Adam Powell 19642b91bbcdaf64b2f19d0a9ce168964b31a5dc139Adam Powell /** 1974be0d52125b88dc992a4c500edbe95bf55484e0bAdam Powell * @hide 1984be0d52125b88dc992a4c500edbe95bf55484e0bAdam Powell */ 1994be0d52125b88dc992a4c500edbe95bf55484e0bAdam Powell public boolean onMenuItemSelected(MenuBuilder menu, MenuItem item) { 2004be0d52125b88dc992a4c500edbe95bf55484e0bAdam Powell if (mMenuItemClickListener != null) { 2014be0d52125b88dc992a4c500edbe95bf55484e0bAdam Powell return mMenuItemClickListener.onMenuItemClick(item); 2024be0d52125b88dc992a4c500edbe95bf55484e0bAdam Powell } 2034be0d52125b88dc992a4c500edbe95bf55484e0bAdam Powell return false; 2044be0d52125b88dc992a4c500edbe95bf55484e0bAdam Powell } 2054be0d52125b88dc992a4c500edbe95bf55484e0bAdam Powell 2064be0d52125b88dc992a4c500edbe95bf55484e0bAdam Powell /** 2074be0d52125b88dc992a4c500edbe95bf55484e0bAdam Powell * @hide 2084be0d52125b88dc992a4c500edbe95bf55484e0bAdam Powell */ 2094be0d52125b88dc992a4c500edbe95bf55484e0bAdam Powell public void onCloseMenu(MenuBuilder menu, boolean allMenusAreClosing) { 21042b91bbcdaf64b2f19d0a9ce168964b31a5dc139Adam Powell if (mDismissListener != null) { 21142b91bbcdaf64b2f19d0a9ce168964b31a5dc139Adam Powell mDismissListener.onDismiss(this); 21242b91bbcdaf64b2f19d0a9ce168964b31a5dc139Adam Powell } 2134be0d52125b88dc992a4c500edbe95bf55484e0bAdam Powell } 2144be0d52125b88dc992a4c500edbe95bf55484e0bAdam Powell 2154be0d52125b88dc992a4c500edbe95bf55484e0bAdam Powell /** 2164be0d52125b88dc992a4c500edbe95bf55484e0bAdam Powell * @hide 2174be0d52125b88dc992a4c500edbe95bf55484e0bAdam Powell */ 21842b91bbcdaf64b2f19d0a9ce168964b31a5dc139Adam Powell public boolean onOpenSubMenu(MenuBuilder subMenu) { 219823f074a73cfc23c40a7b576c71daa096ee9ed6aAdam Powell if (subMenu == null) return false; 220823f074a73cfc23c40a7b576c71daa096ee9ed6aAdam Powell 2214be0d52125b88dc992a4c500edbe95bf55484e0bAdam Powell if (!subMenu.hasVisibleItems()) { 2224be0d52125b88dc992a4c500edbe95bf55484e0bAdam Powell return true; 2234be0d52125b88dc992a4c500edbe95bf55484e0bAdam Powell } 2244be0d52125b88dc992a4c500edbe95bf55484e0bAdam Powell 2254be0d52125b88dc992a4c500edbe95bf55484e0bAdam Powell // Current menu will be dismissed by the normal helper, submenu will be shown in its place. 2264be0d52125b88dc992a4c500edbe95bf55484e0bAdam Powell new MenuPopupHelper(mContext, subMenu, mAnchor).show(); 2274be0d52125b88dc992a4c500edbe95bf55484e0bAdam Powell return true; 2284be0d52125b88dc992a4c500edbe95bf55484e0bAdam Powell } 2294be0d52125b88dc992a4c500edbe95bf55484e0bAdam Powell 2304be0d52125b88dc992a4c500edbe95bf55484e0bAdam Powell /** 2314be0d52125b88dc992a4c500edbe95bf55484e0bAdam Powell * @hide 2324be0d52125b88dc992a4c500edbe95bf55484e0bAdam Powell */ 2334be0d52125b88dc992a4c500edbe95bf55484e0bAdam Powell public void onCloseSubMenu(SubMenuBuilder menu) { 2344be0d52125b88dc992a4c500edbe95bf55484e0bAdam Powell } 2354be0d52125b88dc992a4c500edbe95bf55484e0bAdam Powell 2364be0d52125b88dc992a4c500edbe95bf55484e0bAdam Powell /** 2374be0d52125b88dc992a4c500edbe95bf55484e0bAdam Powell * @hide 2384be0d52125b88dc992a4c500edbe95bf55484e0bAdam Powell */ 2394be0d52125b88dc992a4c500edbe95bf55484e0bAdam Powell public void onMenuModeChange(MenuBuilder menu) { 2404be0d52125b88dc992a4c500edbe95bf55484e0bAdam Powell } 2414be0d52125b88dc992a4c500edbe95bf55484e0bAdam Powell 2424be0d52125b88dc992a4c500edbe95bf55484e0bAdam Powell /** 2434be0d52125b88dc992a4c500edbe95bf55484e0bAdam Powell * Interface responsible for receiving menu item click events if the items themselves 2444be0d52125b88dc992a4c500edbe95bf55484e0bAdam Powell * do not have individual item click listeners. 2454be0d52125b88dc992a4c500edbe95bf55484e0bAdam Powell */ 2464be0d52125b88dc992a4c500edbe95bf55484e0bAdam Powell public interface OnMenuItemClickListener { 2474be0d52125b88dc992a4c500edbe95bf55484e0bAdam Powell /** 2484be0d52125b88dc992a4c500edbe95bf55484e0bAdam Powell * This method will be invoked when a menu item is clicked if the item itself did 2494be0d52125b88dc992a4c500edbe95bf55484e0bAdam Powell * not already handle the event. 2504be0d52125b88dc992a4c500edbe95bf55484e0bAdam Powell * 2514be0d52125b88dc992a4c500edbe95bf55484e0bAdam Powell * @param item {@link MenuItem} that was clicked 2524be0d52125b88dc992a4c500edbe95bf55484e0bAdam Powell * @return <code>true</code> if the event was handled, <code>false</code> otherwise. 2534be0d52125b88dc992a4c500edbe95bf55484e0bAdam Powell */ 2544be0d52125b88dc992a4c500edbe95bf55484e0bAdam Powell public boolean onMenuItemClick(MenuItem item); 2554be0d52125b88dc992a4c500edbe95bf55484e0bAdam Powell } 2564be0d52125b88dc992a4c500edbe95bf55484e0bAdam Powell} 257