/* * 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; } }