/*
* Copyright (C) 2006 The Android Open Source Project
* Copyright (C) 2011 Jake Wharton
*
* 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.actionbarsherlock.internal.view.menu;
import android.content.Intent;
import android.graphics.drawable.Drawable;
import android.support.v4.view.MenuItem;
import android.support.v4.view.SubMenu;
import android.view.ActionProvider;
import android.view.View;
import android.view.ContextMenu.ContextMenuInfo;
/**
* <p>Interface for direct access to a previously created menu item.</p>
*
* <p>An Item is returned by calling one of the {@link Menu#add(int)}
* methods.</p>
*
* <p>For a feature set of specific menu types, see {@link Menu}.</p>
*/
public final class MenuItemWrapper implements MenuItem {
private static final class HoneycombMenuItem {
static View getActionView(android.view.MenuItem item) {
return item.getActionView();
}
static void setActionView(android.view.MenuItem item, int resId) {
item.setActionView(resId);
}
static void setActionView(android.view.MenuItem item, View view) {
item.setActionView(view);
}
static void setShowAsAction(android.view.MenuItem item, int actionEnum) {
item.setShowAsAction(actionEnum);
}
}
/** Native {@link android.view.MenuItem} whose methods are wrapped. */
private final android.view.MenuItem mMenuItem;
/**
* Constructor used to create a wrapper to a native
* {@link android.view.MenuItem} so we can return the same type for native
* and {@link MenuItemImpl} instances, the latter of which will override
* all the methods defined in this base class.
*
* @param menuItem Native instance.
*/
public MenuItemWrapper(android.view.MenuItem menuItem) {
mMenuItem = menuItem;
}
/**
* Returns the currently set action view for this menu item.
*
* @return The item's action view
* @see #setActionView(int)
* @see #setActionView(View)
* @see #setShowAsAction(int)
*/
public View getActionView() {
if (mMenuItem != null) {
return HoneycombMenuItem.getActionView(mMenuItem);
}
return null;
}
/**
* Set an action view for this menu item. An action view will be displayed
* in place of an automatically generated menu item element in the UI when
* this item is shown as an action within a parent.
*
* @param resId Layout resource to use for presenting this item to the user.
* @return This Item so additional setters can be called.
* @see #setActionView(View)
*/
public MenuItem setActionView(int resId) {
if (mMenuItem != null) {
HoneycombMenuItem.setActionView(mMenuItem, resId);
}
return this;
}
/**
* Set an action view for this menu item. An action view will be displayed
* in place of an automatically generated menu item element in the UI when
* this item is shown as an action within a parent.
*
* @param view View to use for presenting this item to the user.
* @return This Item so additional setters can be called.
* @see #setActionView(int)
*/
public MenuItem setActionView(View view) {
if (mMenuItem != null) {
HoneycombMenuItem.setActionView(mMenuItem, view);
}
return this;
}
/**
* Sets how this item should display in the presence of an Action Bar. The
* parameter actionEnum is a flag set. One of
* {@link #SHOW_AS_ACTION_ALWAYS}, {@link #SHOW_AS_ACTION_IF_ROOM}, or
* {@link #SHOW_AS_ACTION_NEVER} should be used, and you may optionally OR
* the value with {@link #SHOW_AS_ACTION_WITH_TEXT}.
* {@link #SHOW_AS_ACTION_WITH_TEXT} requests that when the item is shown as
* an action, it should be shown with a text label.
*
* @param actionEnum How the item should display. One of
* {@link #SHOW_AS_ACTION_ALWAYS}, {@link #SHOW_AS_ACTION_IF_ROOM}, or
* {@link #SHOW_AS_ACTION_NEVER}. {@link #SHOW_AS_ACTION_NEVER} is the
* default.
*/
public void setShowAsAction(int actionEnum) {
if (mMenuItem != null) {
HoneycombMenuItem.setShowAsAction(mMenuItem, actionEnum);
}
}
// ---------------------------------------------------------------------
// MENU ITEM SUPPORT
// ---------------------------------------------------------------------
@Override
public char getAlphabeticShortcut() {
return mMenuItem.getAlphabeticShortcut();
}
@Override
public int getGroupId() {
return mMenuItem.getGroupId();
}
@Override
public Drawable getIcon() {
return mMenuItem.getIcon();
}
@Override
public Intent getIntent() {
return mMenuItem.getIntent();
}
@Override
public int getItemId() {
return mMenuItem.getItemId();
}
@Override
public ContextMenuInfo getMenuInfo() {
return mMenuItem.getMenuInfo();
}
@Override
public char getNumericShortcut() {
return mMenuItem.getNumericShortcut();
}
@Override
public int getOrder() {
return mMenuItem.getOrder();
}
@Override
public SubMenu getSubMenu() {
return new SubMenuWrapper(mMenuItem.getSubMenu());
}
@Override
public CharSequence getTitle() {
return mMenuItem.getTitle();
}
@Override
public CharSequence getTitleCondensed() {
return mMenuItem.getTitleCondensed();
}
@Override
public boolean hasSubMenu() {
return mMenuItem.hasSubMenu();
}
@Override
public boolean isCheckable() {
return mMenuItem.isCheckable();
}
@Override
public boolean isChecked() {
return mMenuItem.isChecked();
}
@Override
public boolean isEnabled() {
return mMenuItem.isEnabled();
}
@Override
public boolean isVisible() {
return mMenuItem.isVisible();
}
@Override
public MenuItem setAlphabeticShortcut(char alphaChar) {
mMenuItem.setAlphabeticShortcut(alphaChar);
return this;
}
@Override
public MenuItem setCheckable(boolean checkable) {
mMenuItem.setCheckable(checkable);
return this;
}
@Override
public MenuItem setChecked(boolean checked) {
mMenuItem.setChecked(checked);
return this;
}
@Override
public MenuItem setEnabled(boolean enabled) {
mMenuItem.setEnabled(enabled);
return this;
}
@Override
public MenuItem setIcon(Drawable icon) {
mMenuItem.setIcon(icon);
return this;
}
@Override
public MenuItem setIcon(int iconRes) {
mMenuItem.setIcon(iconRes);
return this;
}
@Override
public MenuItem setIntent(Intent intent) {
mMenuItem.setIntent(intent);
return this;
}
@Override
public MenuItem setNumericShortcut(char numericChar) {
mMenuItem.setNumericShortcut(numericChar);
return this;
}
@Override
public MenuItem setOnMenuItemClickListener(android.view.MenuItem.OnMenuItemClickListener menuItemClickListener) {
mMenuItem.setOnMenuItemClickListener(menuItemClickListener);
return this;
}
/**
* Set a custom listener for invocation of this menu item.
*
* @param menuItemClickListener The object to receive invokations.
* @return This Item so additional setters can be called.
*/
public MenuItem setOnMenuItemClickListener(OnMenuItemClickListener menuItemClickListener) {
mMenuItem.setOnMenuItemClickListener(menuItemClickListener);
return this;
}
@Override
public MenuItem setShortcut(char numericChar, char alphaChar) {
mMenuItem.setShortcut(numericChar, alphaChar);
return this;
}
@Override
public MenuItem setTitle(CharSequence title) {
mMenuItem.setTitle(title);
return this;
}
@Override
public MenuItem setTitle(int title) {
mMenuItem.setTitle(title);
return this;
}
@Override
public MenuItem setTitleCondensed(CharSequence title) {
mMenuItem.setTitleCondensed(title);
return this;
}
@Override
public MenuItem setVisible(boolean visible) {
mMenuItem.setVisible(visible);
return this;
}
@Override
public boolean collapseActionView() {
// TODO Auto-generated method stub
return false;
}
@Override
public boolean expandActionView() {
// TODO Auto-generated method stub
return false;
}
@Override
public ActionProvider getActionProvider() {
// TODO Auto-generated method stub
return null;
}
@Override
public boolean isActionViewExpanded() {
// TODO Auto-generated method stub
return false;
}
@Override
public android.view.MenuItem setActionProvider(ActionProvider actionProvider) {
// TODO Auto-generated method stub
return null;
}
@Override
public android.view.MenuItem setOnActionExpandListener(OnActionExpandListener listener) {
// TODO Auto-generated method stub
return null;
}
@Override
public android.view.MenuItem setShowAsActionFlags(int actionEnum) {
// TODO Auto-generated method stub
return null;
}
}