content: package com.actionbarsherlock.internal.view.menu;
  
  import android.content.Intent;
  import android.graphics.drawable.Drawable;
  import android.view.ContextMenu.ContextMenuInfo;
  import android.view.View;
  import com.actionbarsherlock.internal.view.ActionProviderWrapper;
  import com.actionbarsherlock.internal.widget.CollapsibleActionViewWrapper;
  import com.actionbarsherlock.view.ActionProvider;
  import com.actionbarsherlock.view.CollapsibleActionView;
  import com.actionbarsherlock.view.MenuItem;
  import com.actionbarsherlock.view.SubMenu;
  
  public class MenuItemWrapper implements MenuItem, android.view.MenuItem.OnMenuItemClickListener {
      private final android.view.MenuItem mNativeItem;
      private SubMenu mSubMenu = null;
      private OnMenuItemClickListener mMenuItemClickListener = null;
      private OnActionExpandListener mActionExpandListener = null;
      private android.view.MenuItem.OnActionExpandListener mNativeActionExpandListener = null;
  
  
      public MenuItemWrapper(android.view.MenuItem nativeItem) {
          if (nativeItem == null) {
              throw new IllegalStateException("Wrapped menu item cannot be null.");
          }
          mNativeItem = nativeItem;
      }
  
  
      @Override
      public int getItemId() {
          return mNativeItem.getItemId();
      }
  
      @Override
      public int getGroupId() {
          return mNativeItem.getGroupId();
      }
  
      @Override
      public int getOrder() {
          return mNativeItem.getOrder();
      }
  
      @Override
      public MenuItem setTitle(CharSequence title) {
          mNativeItem.setTitle(title);
          return this;
      }
  
      @Override
      public MenuItem setTitle(int title) {
          mNativeItem.setTitle(title);
          return this;
      }
  
      @Override
      public CharSequence getTitle() {
          return mNativeItem.getTitle();
      }
  
      @Override
      public MenuItem setTitleCondensed(CharSequence title) {
          mNativeItem.setTitleCondensed(title);
          return this;
      }
  
      @Override
      public CharSequence getTitleCondensed() {
          return mNativeItem.getTitleCondensed();
      }
  
      @Override
      public MenuItem setIcon(Drawable icon) {
          mNativeItem.setIcon(icon);
          return this;
      }
  
      @Override
      public MenuItem setIcon(int iconRes) {
          mNativeItem.setIcon(iconRes);
          return this;
      }
  
      @Override
      public Drawable getIcon() {
          return mNativeItem.getIcon();
      }
  
      @Override
      public MenuItem setIntent(Intent intent) {
          mNativeItem.setIntent(intent);
          return this;
      }
  
      @Override
      public Intent getIntent() {
          return mNativeItem.getIntent();
      }
  
      @Override
      public MenuItem setShortcut(char numericChar, char alphaChar) {
          mNativeItem.setShortcut(numericChar, alphaChar);
          return this;
      }
  
      @Override
      public MenuItem setNumericShortcut(char numericChar) {
          mNativeItem.setNumericShortcut(numericChar);
          return this;
      }
  
      @Override
      public char getNumericShortcut() {
          return mNativeItem.getNumericShortcut();
      }
  
      @Override
      public MenuItem setAlphabeticShortcut(char alphaChar) {
          mNativeItem.setAlphabeticShortcut(alphaChar);
          return this;
      }
  
      @Override
      public char getAlphabeticShortcut() {
          return mNativeItem.getAlphabeticShortcut();
      }
  
      @Override
      public MenuItem setCheckable(boolean checkable) {
          mNativeItem.setCheckable(checkable);
          return this;
      }
  
      @Override
      public boolean isCheckable() {
          return mNativeItem.isCheckable();
      }
  
      @Override
      public MenuItem setChecked(boolean checked) {
          mNativeItem.setChecked(checked);
          return this;
      }
  
      @Override
      public boolean isChecked() {
          return mNativeItem.isChecked();
      }
  
      @Override
      public MenuItem setVisible(boolean visible) {
          mNativeItem.setVisible(visible);
          return this;
      }
  
      @Override
      public boolean isVisible() {
          return mNativeItem.isVisible();
      }
  
      @Override
      public MenuItem setEnabled(boolean enabled) {
          mNativeItem.setEnabled(enabled);
          return this;
      }
  
      @Override
      public boolean isEnabled() {
          return mNativeItem.isEnabled();
      }
  
      @Override
      public boolean hasSubMenu() {
          return mNativeItem.hasSubMenu();
      }
  
      @Override
      public SubMenu getSubMenu() {
          if (hasSubMenu() && (mSubMenu == null)) {
              mSubMenu = new SubMenuWrapper(mNativeItem.getSubMenu());
          }
          return mSubMenu;
      }
  
      @Override
      public MenuItem setOnMenuItemClickListener(OnMenuItemClickListener menuItemClickListener) {
          mMenuItemClickListener = menuItemClickListener;
          //Register ourselves as the listener to proxy
          mNativeItem.setOnMenuItemClickListener(this);
          return this;
      }
  
      @Override
      public boolean onMenuItemClick(android.view.MenuItem item) {
          if (mMenuItemClickListener != null) {
              return mMenuItemClickListener.onMenuItemClick(this);
          }
          return false;
      }
  
      @Override
      public ContextMenuInfo getMenuInfo() {
          return mNativeItem.getMenuInfo();
      }
  
      @Override
      public void setShowAsAction(int actionEnum) {
          mNativeItem.setShowAsAction(actionEnum);
      }
  
      @Override
      public MenuItem setShowAsActionFlags(int actionEnum) {
          mNativeItem.setShowAsActionFlags(actionEnum);
          return this;
      }
  
      @Override
      public MenuItem setActionView(View view) {
          if (view != null && view instanceof CollapsibleActionView) {
              view = new CollapsibleActionViewWrapper(view);
          }
          mNativeItem.setActionView(view);
          return this;
      }
  
      @Override
      public MenuItem setActionView(int resId) {
          //Allow the native menu to inflate the resource
          mNativeItem.setActionView(resId);
          if (resId != 0) {
              //Get newly created view
              View view = mNativeItem.getActionView();
              if (view instanceof CollapsibleActionView) {
                  //Wrap it and re-set it
                  mNativeItem.setActionView(new CollapsibleActionViewWrapper(view));
              }
          }
          return this;
      }
  
      @Override
      public View getActionView() {
          View actionView = mNativeItem.getActionView();
          if (actionView instanceof CollapsibleActionViewWrapper) {
              return ((CollapsibleActionViewWrapper)actionView).unwrap();
          }
          return actionView;
      }
  
      @Override
      public MenuItem setActionProvider(ActionProvider actionProvider) {
          mNativeItem.setActionProvider(new ActionProviderWrapper(actionProvider));
          return this;
      }
  
      @Override
      public ActionProvider getActionProvider() {
          android.view.ActionProvider nativeProvider = mNativeItem.getActionProvider();
          if (nativeProvider != null && nativeProvider instanceof ActionProviderWrapper) {
              return ((ActionProviderWrapper)nativeProvider).unwrap();
          }
          return null;
      }
  
      @Override
      public boolean expandActionView() {
          return mNativeItem.expandActionView();
      }
  
      @Override
      public boolean collapseActionView() {
          return mNativeItem.collapseActionView();
      }
  
      @Override
      public boolean isActionViewExpanded() {
          return mNativeItem.isActionViewExpanded();
      }
  
      @Override
      public MenuItem setOnActionExpandListener(OnActionExpandListener listener) {
          mActionExpandListener = listener;
  
          if (mNativeActionExpandListener == null) {
              mNativeActionExpandListener = new android.view.MenuItem.OnActionExpandListener() {
                  @Override
                  public boolean onMenuItemActionExpand(android.view.MenuItem menuItem) {
                      if (mActionExpandListener != null) {
                          return mActionExpandListener.onMenuItemActionExpand(MenuItemWrapper.this);
                      }
                      return false;
                  }
  
                  @Override
                  public boolean onMenuItemActionCollapse(android.view.MenuItem menuItem) {
                      if (mActionExpandListener != null) {
                          return mActionExpandListener.onMenuItemActionCollapse(MenuItemWrapper.this);
                      }
                      return false;
                  }
              };
  
              //Register our inner-class as the listener to proxy method calls
              mNativeItem.setOnActionExpandListener(mNativeActionExpandListener);
          }
  
          return this;
      }
  }
  