/*
 * Copyright (C) 2011 The Android Open Source Project
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

package com.android.internal.view.menu;

import android.annotation.NonNull;
import android.annotation.Nullable;
import android.content.Context;
import android.os.Parcelable;
import android.view.ViewGroup;

A MenuPresenter is responsible for building views for a Menu object. It takes over some responsibility from the old style monolithic MenuBuilder class.
/** * A MenuPresenter is responsible for building views for a Menu object. * It takes over some responsibility from the old style monolithic MenuBuilder class. */
public interface MenuPresenter {
Called by menu implementation to notify another component of open/close events.
/** * Called by menu implementation to notify another component of open/close events. */
public interface Callback {
Called when a menu is closing.
Params:
  • menu –
  • allMenusAreClosing –
/** * Called when a menu is closing. * @param menu * @param allMenusAreClosing */
public void onCloseMenu(MenuBuilder menu, boolean allMenusAreClosing);
Called when a submenu opens. Useful for notifying the application of menu state so that it does not attempt to hide the action bar while a submenu is open or similar.
Params:
  • subMenu – Submenu currently being opened
Returns:true if the Callback will handle presenting the submenu, false if the presenter should attempt to do so.
/** * Called when a submenu opens. Useful for notifying the application * of menu state so that it does not attempt to hide the action bar * while a submenu is open or similar. * * @param subMenu Submenu currently being opened * @return true if the Callback will handle presenting the submenu, false if * the presenter should attempt to do so. */
public boolean onOpenSubMenu(MenuBuilder subMenu); }
Initializes this presenter for the given context and menu.

This method is called by MenuBuilder when a presenter is added. See MenuBuilder.addMenuPresenter(MenuPresenter).

Params:
  • context – the context for this presenter; used for view creation and resource management, must be non-null
  • menu – the menu to host, or null to clear the hosted menu
/** * Initializes this presenter for the given context and menu. * <p> * This method is called by MenuBuilder when a presenter is added. See * {@link MenuBuilder#addMenuPresenter(MenuPresenter)}. * * @param context the context for this presenter; used for view creation * and resource management, must be non-{@code null} * @param menu the menu to host, or {@code null} to clear the hosted menu */
public void initForMenu(@NonNull Context context, @Nullable MenuBuilder menu);
Retrieve a MenuView to display the menu specified in initForMenu(Context, MenuBuilder).
Params:
  • root – Intended parent of the MenuView.
Returns:A freshly created MenuView.
/** * Retrieve a MenuView to display the menu specified in * {@link #initForMenu(Context, MenuBuilder)}. * * @param root Intended parent of the MenuView. * @return A freshly created MenuView. */
public MenuView getMenuView(ViewGroup root);
Update the menu UI in response to a change. Called by MenuBuilder during the normal course of operation.
Params:
  • cleared – true if the menu was entirely cleared
/** * Update the menu UI in response to a change. Called by * MenuBuilder during the normal course of operation. * * @param cleared true if the menu was entirely cleared */
public void updateMenuView(boolean cleared);
Set a callback object that will be notified of menu events related to this specific presentation.
Params:
  • cb – Callback that will be notified of future events
/** * Set a callback object that will be notified of menu events * related to this specific presentation. * @param cb Callback that will be notified of future events */
public void setCallback(Callback cb);
Called by Menu implementations to indicate that a submenu item has been selected. An active Callback should be notified, and if applicable the presenter should present the submenu.
Params:
  • subMenu – SubMenu being opened
Returns:true if the the event was handled, false otherwise.
/** * Called by Menu implementations to indicate that a submenu item * has been selected. An active Callback should be notified, and * if applicable the presenter should present the submenu. * * @param subMenu SubMenu being opened * @return true if the the event was handled, false otherwise. */
public boolean onSubMenuSelected(SubMenuBuilder subMenu);
Called by Menu implementations to indicate that a menu or submenu is closing. Presenter implementations should close the representation of the menu indicated as necessary and notify a registered callback.
Params:
  • menu – the menu or submenu that is closing
  • allMenusAreClosing – true if all displayed menus and submenus are closing, false if only the specified menu is closing
/** * Called by Menu implementations to indicate that a menu or submenu is * closing. Presenter implementations should close the representation * of the menu indicated as necessary and notify a registered callback. * * @param menu the menu or submenu that is closing * @param allMenusAreClosing {@code true} if all displayed menus and * submenus are closing, {@code false} if only * the specified menu is closing */
public void onCloseMenu(MenuBuilder menu, boolean allMenusAreClosing);
Called by Menu implementations to flag items that will be shown as actions.
Returns:true if this presenter changed the action status of any items.
/** * Called by Menu implementations to flag items that will be shown as actions. * @return true if this presenter changed the action status of any items. */
public boolean flagActionItems();
Called when a menu item with a collapsable action view should expand its action view.
Params:
  • menu – Menu containing the item to be expanded
  • item – Item to be expanded
Returns:true if this presenter expanded the action view, false otherwise.
/** * Called when a menu item with a collapsable action view should expand its action view. * * @param menu Menu containing the item to be expanded * @param item Item to be expanded * @return true if this presenter expanded the action view, false otherwise. */
public boolean expandItemActionView(MenuBuilder menu, MenuItemImpl item);
Called when a menu item with a collapsable action view should collapse its action view.
Params:
  • menu – Menu containing the item to be collapsed
  • item – Item to be collapsed
Returns:true if this presenter collapsed the action view, false otherwise.
/** * Called when a menu item with a collapsable action view should collapse its action view. * * @param menu Menu containing the item to be collapsed * @param item Item to be collapsed * @return true if this presenter collapsed the action view, false otherwise. */
public boolean collapseItemActionView(MenuBuilder menu, MenuItemImpl item);
Returns an ID for determining how to save/restore instance state.
Returns:a valid ID value.
/** * Returns an ID for determining how to save/restore instance state. * @return a valid ID value. */
public int getId();
Returns a Parcelable describing the current state of the presenter. It will be passed to the onRestoreInstanceState(Parcelable) method of the presenter sharing the same ID later.
Returns:The saved instance state
/** * Returns a Parcelable describing the current state of the presenter. * It will be passed to the {@link #onRestoreInstanceState(Parcelable)} * method of the presenter sharing the same ID later. * @return The saved instance state */
public Parcelable onSaveInstanceState();
Supplies the previously saved instance state to be restored.
Params:
  • state – The previously saved instance state
/** * Supplies the previously saved instance state to be restored. * @param state The previously saved instance state */
public void onRestoreInstanceState(Parcelable state); }