package com.actionbarsherlock.internal.view.menu; import java.lang.ref.WeakReference; import android.content.Context; import android.graphics.drawable.Drawable; import android.util.AttributeSet; import android.view.View; import android.widget.FrameLayout; import android.widget.ImageView; import android.widget.RelativeLayout; import android.widget.TextView; import com.actionbarsherlock.R; public class ActionMenuItemView extends RelativeLayout implements MenuView.ItemView, View.OnClickListener { private ImageView mImageButton; private TextView mTextButton; private FrameLayout mCustomView; private MenuItemImpl mMenuItem; private WeakReference<ImageView> mDivider; public ActionMenuItemView(Context context) { this(context, null); } public ActionMenuItemView(Context context, AttributeSet attrs) { this(context, attrs, R.attr.actionButtonStyle); } public ActionMenuItemView(Context context, AttributeSet attrs, int defStyle) { super(context, attrs, defStyle); setOnClickListener(this); } @Override protected void onFinishInflate() { super.onFinishInflate(); mImageButton = (ImageView) findViewById(R.id.abs__item_icon); mImageButton.setOnClickListener(this); mTextButton = (TextView) findViewById(R.id.abs__item_text); mTextButton.setOnClickListener(this); mCustomView = (FrameLayout) findViewById(R.id.abs__item_custom); mCustomView.setOnClickListener(this); } public void setEnabled(boolean enabled) { super.setEnabled(enabled); mImageButton.setEnabled(enabled); mTextButton.setEnabled(enabled); mCustomView.setEnabled(enabled); } public void setDivider(ImageView divider) { mDivider = new WeakReference<ImageView>(divider); //Ensure we are not displaying the divider when we are not visible setDividerVisibility(getVisibility()); } public void setVisible(boolean visible) { final int visibility = visible ? View.VISIBLE : View.GONE; setDividerVisibility(visibility); setVisibility(visibility); } private void setDividerVisibility(int visibility) { if ((mDivider != null) && (mDivider.get() != null)) { mDivider.get().setVisibility(visibility); } } public void reloadDisplay() { final boolean hasCustomView = mCustomView.getChildCount() > 0; final boolean hasText = mMenuItem.showsActionItemText() && !"".equals(mTextButton.getText()); if (hasCustomView) { mCustomView.setVisibility(View.VISIBLE); mImageButton.setVisibility(View.GONE); mTextButton.setVisibility(View.GONE); } else { mCustomView.setVisibility(View.GONE); mImageButton.setVisibility(View.VISIBLE); mTextButton.setVisibility(hasText ? View.VISIBLE : View.GONE); } } public void setIcon(Drawable icon) { mImageButton.setImageDrawable(icon); } public void setTitle(CharSequence title) { mTextButton.setText(title); reloadDisplay(); } @Override public void initialize(MenuItemImpl itemData, int menuType) { mMenuItem = itemData; setId(itemData.getItemId()); setIcon(itemData.getIcon()); setTitle(itemData.getTitle()); setEnabled(itemData.isEnabled()); setActionView(itemData.getActionView()); setVisible(itemData.isVisible()); } @Override public MenuItemImpl getItemData() { return mMenuItem; } @Override public void setCheckable(boolean checkable) { // No-op } @Override public void setChecked(boolean checked) { // No-op } @Override public void setShortcut(boolean showShortcut, char shortcutKey) { // No-op } @Override public void setActionView(View actionView) { mCustomView.removeAllViews(); if (actionView != null) { mCustomView.addView(actionView); } reloadDisplay(); } @Override public boolean prefersCondensedTitle() { return true; } @Override public boolean showsIcon() { return true; } @Override public void onClick(View v) { if (mMenuItem != null) { mMenuItem.invoke(); } } }