MenuPresenter.java revision 696cba573e651b0e4f18a4718627c8ccecb3bda0
1/* 2 * Copyright (C) 2011 The Android Open Source Project 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License. 15 */ 16 17package com.android.internal.view.menu; 18 19import android.content.Context; 20import android.view.Menu; 21import android.view.ViewGroup; 22 23/** 24 * A MenuPresenter is responsible for building views for a Menu object. 25 * It takes over some responsibility from the old style monolithic MenuBuilder class. 26 */ 27public interface MenuPresenter { 28 /** 29 * Called by menu implementation to notify another component of open/close events. 30 */ 31 public interface Callback { 32 /** 33 * Called when a menu is closing. 34 * @param menu 35 * @param allMenusAreClosing 36 */ 37 public void onCloseMenu(MenuBuilder menu, boolean allMenusAreClosing); 38 39 /** 40 * Called when a submenu opens. Useful for notifying the application 41 * of menu state so that it does not attempt to hide the action bar 42 * while a submenu is open or similar. 43 * 44 * @param subMenu Submenu currently being opened 45 * @return true if the Callback will handle presenting the submenu, false if 46 * the presenter should attempt to do so. 47 */ 48 public boolean onOpenSubMenu(MenuBuilder subMenu); 49 } 50 51 /** 52 * Initialize this presenter for the given context and menu. 53 * This method is called by MenuBuilder when a presenter is 54 * added. See {@link MenuBuilder#addMenuPresenter(MenuPresenter)} 55 * 56 * @param context Context for this presenter; used for view creation and resource management 57 * @param menu Menu to host 58 */ 59 public void initForMenu(Context context, MenuBuilder menu); 60 61 /** 62 * Retrieve a MenuView to display the menu specified in 63 * {@link #initForMenu(Context, Menu)}. 64 * 65 * @param root Intended parent of the MenuView. 66 * @return A freshly created MenuView. 67 */ 68 public MenuView getMenuView(ViewGroup root); 69 70 /** 71 * Update the menu UI in response to a change. Called by 72 * MenuBuilder during the normal course of operation. 73 * 74 * @param cleared true if the menu was entirely cleared 75 */ 76 public void updateMenuView(boolean cleared); 77 78 /** 79 * Set a callback object that will be notified of menu events 80 * related to this specific presentation. 81 * @param cb Callback that will be notified of future events 82 */ 83 public void setCallback(Callback cb); 84 85 /** 86 * Called by Menu implementations to indicate that a submenu item 87 * has been selected. An active Callback should be notified, and 88 * if applicable the presenter should present the submenu. 89 * 90 * @param subMenu SubMenu being opened 91 * @return true if the the event was handled, false otherwise. 92 */ 93 public boolean onSubMenuSelected(SubMenuBuilder subMenu); 94 95 /** 96 * Called by Menu implementations to indicate that a menu or submenu is 97 * closing. Presenter implementations should close the representation 98 * of the menu indicated as necessary and notify a registered callback. 99 * 100 * @param menu Menu or submenu that is closing. 101 * @param allMenusAreClosing True if all associated menus are closing. 102 */ 103 public void onCloseMenu(MenuBuilder menu, boolean allMenusAreClosing); 104 105 /** 106 * Called by Menu implementations to flag items that will be shown as actions. 107 * @return true if this presenter changed the action status of any items. 108 */ 109 public boolean flagActionItems(); 110} 111