1bbbb8f39d1b1d1b317c5f9237f20fe6b1d9eb17fAdam Powell/* 2bbbb8f39d1b1d1b317c5f9237f20fe6b1d9eb17fAdam Powell * Copyright (C) 2011 The Android Open Source Project 3bbbb8f39d1b1d1b317c5f9237f20fe6b1d9eb17fAdam Powell * 4bbbb8f39d1b1d1b317c5f9237f20fe6b1d9eb17fAdam Powell * Licensed under the Apache License, Version 2.0 (the "License"); 5bbbb8f39d1b1d1b317c5f9237f20fe6b1d9eb17fAdam Powell * you may not use this file except in compliance with the License. 6bbbb8f39d1b1d1b317c5f9237f20fe6b1d9eb17fAdam Powell * You may obtain a copy of the License at 7bbbb8f39d1b1d1b317c5f9237f20fe6b1d9eb17fAdam Powell * 8bbbb8f39d1b1d1b317c5f9237f20fe6b1d9eb17fAdam Powell * http://www.apache.org/licenses/LICENSE-2.0 9bbbb8f39d1b1d1b317c5f9237f20fe6b1d9eb17fAdam Powell * 10bbbb8f39d1b1d1b317c5f9237f20fe6b1d9eb17fAdam Powell * Unless required by applicable law or agreed to in writing, software 11bbbb8f39d1b1d1b317c5f9237f20fe6b1d9eb17fAdam Powell * distributed under the License is distributed on an "AS IS" BASIS, 12bbbb8f39d1b1d1b317c5f9237f20fe6b1d9eb17fAdam Powell * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13bbbb8f39d1b1d1b317c5f9237f20fe6b1d9eb17fAdam Powell * See the License for the specific language governing permissions and 14bbbb8f39d1b1d1b317c5f9237f20fe6b1d9eb17fAdam Powell * limitations under the License. 15bbbb8f39d1b1d1b317c5f9237f20fe6b1d9eb17fAdam Powell */ 16bbbb8f39d1b1d1b317c5f9237f20fe6b1d9eb17fAdam Powell 17da10fdd1400ecfd8d7f2e55651dd528d0614dfc5Jeff Brownpackage android.support.v7.internal.view.menu; 18bbbb8f39d1b1d1b317c5f9237f20fe6b1d9eb17fAdam Powell 19bbbb8f39d1b1d1b317c5f9237f20fe6b1d9eb17fAdam Powellimport android.content.Context; 20bbbb8f39d1b1d1b317c5f9237f20fe6b1d9eb17fAdam Powellimport android.os.Parcelable; 21bbbb8f39d1b1d1b317c5f9237f20fe6b1d9eb17fAdam Powellimport android.view.ViewGroup; 22bbbb8f39d1b1d1b317c5f9237f20fe6b1d9eb17fAdam Powell 23bbbb8f39d1b1d1b317c5f9237f20fe6b1d9eb17fAdam Powell/** 2420ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns * A MenuPresenter is responsible for building views for a Menu object. It takes over some 2520ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns * responsibility from the old style monolithic MenuBuilder class. 2689208232f3b5d1451408d787872504a190bc7ee0Chris Banes * 2789208232f3b5d1451408d787872504a190bc7ee0Chris Banes * @hide 28bbbb8f39d1b1d1b317c5f9237f20fe6b1d9eb17fAdam Powell */ 29bbbb8f39d1b1d1b317c5f9237f20fe6b1d9eb17fAdam Powellpublic interface MenuPresenter { 3020ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns 3120ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns /** 3220ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns * Called by menu implementation to notify another component of open/close events. 3389208232f3b5d1451408d787872504a190bc7ee0Chris Banes * 3489208232f3b5d1451408d787872504a190bc7ee0Chris Banes * @hide 3520ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns */ 3620ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns public interface Callback { 3720ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns 3820ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns /** 3920ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns * Called when a menu is closing. 4020ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns */ 4120ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns public void onCloseMenu(MenuBuilder menu, boolean allMenusAreClosing); 4220ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns 4320ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns /** 4420ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns * Called when a submenu opens. Useful for notifying the application of menu state so that 4520ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns * it does not attempt to hide the action bar while a submenu is open or similar. 4620ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns * 4720ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns * @param subMenu Submenu currently being opened 4820ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns * @return true if the Callback will handle presenting the submenu, false if the presenter 4920ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns * should attempt to do so. 5020ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns */ 5120ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns public boolean onOpenSubMenu(MenuBuilder subMenu); 5220ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns } 5320ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns 5420ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns /** 5520ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns * Initialize this presenter for the given context and menu. This method is called by 5620ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns * MenuBuilder when a presenter is added. See 5720ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns * {@link MenuBuilder#addMenuPresenter(MenuPresenter)} 5820ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns * 5920ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns * @param context Context for this presenter; used for view creation and resource management 6020ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns * @param menu Menu to host 6120ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns */ 6220ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns public void initForMenu(Context context, MenuBuilder menu); 6320ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns 64bbbb8f39d1b1d1b317c5f9237f20fe6b1d9eb17fAdam Powell /** 6530837f1095c803f332f4a1c3f0917c8afdd50156Adam Powell * Retrieve a MenuView to display the menu specified in 6630837f1095c803f332f4a1c3f0917c8afdd50156Adam Powell * {@link #initForMenu(Context, MenuBuilder)}. 6720ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns * 6820ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns * @param root Intended parent of the MenuView. 6920ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns * @return A freshly created MenuView. 7020ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns */ 7120ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns public MenuView getMenuView(ViewGroup root); 7220ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns 7320ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns /** 7420ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns * Update the menu UI in response to a change. Called by MenuBuilder during the normal course of 7520ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns * operation. 7620ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns * 7720ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns * @param cleared true if the menu was entirely cleared 7820ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns */ 7920ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns public void updateMenuView(boolean cleared); 8020ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns 8120ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns /** 8220ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns * Set a callback object that will be notified of menu events related to this specific 8320ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns * presentation. 8420ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns * 8520ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns * @param cb Callback that will be notified of future events 8620ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns */ 8720ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns public void setCallback(Callback cb); 8820ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns 8920ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns /** 9020ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns * Called by Menu implementations to indicate that a submenu item has been selected. An active 9120ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns * Callback should be notified, and if applicable the presenter should present the submenu. 9220ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns * 9320ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns * @param subMenu SubMenu being opened 9420ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns * @return true if the the event was handled, false otherwise. 9520ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns */ 9620ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns public boolean onSubMenuSelected(SubMenuBuilder subMenu); 9720ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns 9820ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns /** 9920ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns * Called by Menu implementations to indicate that a menu or submenu is closing. Presenter 10020ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns * implementations should close the representation of the menu indicated as necessary and notify 10120ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns * a registered callback. 10220ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns * 10320ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns * @param menu Menu or submenu that is closing. 10420ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns * @param allMenusAreClosing True if all associated menus are closing. 105bbbb8f39d1b1d1b317c5f9237f20fe6b1d9eb17fAdam Powell */ 106bbbb8f39d1b1d1b317c5f9237f20fe6b1d9eb17fAdam Powell public void onCloseMenu(MenuBuilder menu, boolean allMenusAreClosing); 107bbbb8f39d1b1d1b317c5f9237f20fe6b1d9eb17fAdam Powell 108bbbb8f39d1b1d1b317c5f9237f20fe6b1d9eb17fAdam Powell /** 10920ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns * Called by Menu implementations to flag items that will be shown as actions. 11020ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns * 11120ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns * @return true if this presenter changed the action status of any items. 11220ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns */ 11320ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns public boolean flagActionItems(); 11420ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns 11520ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns /** 11620ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns * Called when a menu item with a collapsable action view should expand its action view. 11720ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns * 11820ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns * @param menu Menu containing the item to be expanded 11920ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns * @param item Item to be expanded 12020ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns * @return true if this presenter expanded the action view, false otherwise. 12120ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns */ 12220ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns public boolean expandItemActionView(MenuBuilder menu, MenuItemImpl item); 12320ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns 12420ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns /** 12520ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns * Called when a menu item with a collapsable action view should collapse its action view. 12620ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns * 12720ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns * @param menu Menu containing the item to be collapsed 12820ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns * @param item Item to be collapsed 12920ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns * @return true if this presenter collapsed the action view, false otherwise. 13020ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns */ 13120ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns public boolean collapseItemActionView(MenuBuilder menu, MenuItemImpl item); 13220ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns 13320ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns /** 13420ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns * Returns an ID for determining how to save/restore instance state. 13520ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns * 13620ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns * @return a valid ID value. 13720ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns */ 13820ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns public int getId(); 13920ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns 14020ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns /** 14120ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns * Returns a Parcelable describing the current state of the presenter. It will be passed to the 14220ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns * {@link #onRestoreInstanceState(Parcelable)} method of the presenter sharing the same ID 14320ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns * later. 14420ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns * 14520ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns * @return The saved instance state 14620ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns */ 14720ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns public Parcelable onSaveInstanceState(); 14820ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns 14920ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns /** 15020ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns * Supplies the previously saved instance state to be restored. 151bbbb8f39d1b1d1b317c5f9237f20fe6b1d9eb17fAdam Powell * 15220ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns * @param state The previously saved instance state 153bbbb8f39d1b1d1b317c5f9237f20fe6b1d9eb17fAdam Powell */ 15420ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns public void onRestoreInstanceState(Parcelable state); 155bbbb8f39d1b1d1b317c5f9237f20fe6b1d9eb17fAdam Powell} 156