gecko/mobile/android/base/menu/MenuItemDefault.java
Sriram Ramasubramanian 5c140c7ef2 Bug 869123: Make a "menu" package for menu related stuff. [r=wesj]
--HG--
rename : mobile/android/base/GeckoMenu.java => mobile/android/base/menu/GeckoMenu.java
rename : mobile/android/base/GeckoMenuInflater.java => mobile/android/base/menu/GeckoMenuInflater.java
rename : mobile/android/base/GeckoMenuItem.java => mobile/android/base/menu/GeckoMenuItem.java
rename : mobile/android/base/GeckoSubMenu.java => mobile/android/base/menu/GeckoSubMenu.java
rename : mobile/android/base/MenuItemActionBar.java => mobile/android/base/menu/MenuItemActionBar.java
rename : mobile/android/base/MenuItemDefault.java => mobile/android/base/menu/MenuItemDefault.java
rename : mobile/android/base/MenuPanel.java => mobile/android/base/menu/MenuPanel.java
rename : mobile/android/base/MenuPopup.java => mobile/android/base/menu/MenuPopup.java
rename : mobile/android/base/Divider.java => mobile/android/base/widget/Divider.java
rename : mobile/android/base/GeckoPopupMenu.java => mobile/android/base/widget/GeckoPopupMenu.java
extra : rebase_source : 3b51b8af8318e346fe41b3ab7c18421d67b1359b
2013-05-15 10:41:25 -07:00

151 lines
4.4 KiB
Java

/* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this file,
* You can obtain one at http://mozilla.org/MPL/2.0/. */
package org.mozilla.gecko.menu;
import org.mozilla.gecko.R;
import android.content.Context;
import android.content.res.Resources;
import android.graphics.Rect;
import android.graphics.drawable.Drawable;
import android.util.AttributeSet;
import android.view.Gravity;
import android.view.LayoutInflater;
import android.view.View;
import android.widget.TextView;
public class MenuItemDefault extends TextView
implements GeckoMenuItem.Layout {
private static final int[] STATE_MORE = new int[] { R.attr.state_more };
private static final int[] STATE_CHECKED = new int[] { android.R.attr.state_checkable, android.R.attr.state_checked };
private static final int[] STATE_UNCHECKED = new int[] { android.R.attr.state_checkable };
private Drawable mIcon;
private Drawable mState;
private static Rect sIconBounds;
private boolean mCheckable = false;
private boolean mChecked = false;
private boolean mHasSubMenu = false;
public MenuItemDefault(Context context) {
this(context, null);
}
public MenuItemDefault(Context context, AttributeSet attrs) {
this(context, attrs, R.style.MenuItemDefault);
}
public MenuItemDefault(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
Resources res = context.getResources();
int width = res.getDimensionPixelSize(R.dimen.menu_item_row_width);
int height = res.getDimensionPixelSize(R.dimen.menu_item_row_height);
setMinimumWidth(width);
setMinimumHeight(height);
setGravity(Gravity.CENTER_VERTICAL);
float density = res.getDisplayMetrics().density;
int padding = (int) (10 * density);
setPadding(padding, 0, padding, 0);
int drawablePadding = (int) (6 * density);
setCompoundDrawablePadding(drawablePadding);
int stateIconSize = res.getDimensionPixelSize(R.dimen.menu_item_state_icon);
Rect stateIconBounds = new Rect(0, 0, stateIconSize, stateIconSize);
mState = res.getDrawable(R.drawable.menu_item_state);
mState.setBounds(stateIconBounds);
if (sIconBounds == null) {
int iconSize = res.getDimensionPixelSize(R.dimen.menu_item_icon);
sIconBounds = new Rect(0, 0, iconSize, iconSize);
}
setCompoundDrawables(mIcon, null, mState, null);
}
@Override
public int[] onCreateDrawableState(int extraSpace) {
final int[] drawableState = super.onCreateDrawableState(extraSpace + 2);
if (mHasSubMenu)
mergeDrawableStates(drawableState, STATE_MORE);
else if (mCheckable && mChecked)
mergeDrawableStates(drawableState, STATE_CHECKED);
else if (mCheckable && !mChecked)
mergeDrawableStates(drawableState, STATE_UNCHECKED);
return drawableState;
}
@Override
public View getView() {
return this;
}
@Override
public void setIcon(Drawable icon) {
mIcon = icon;
if (mIcon != null)
mIcon.setBounds(sIconBounds);
setCompoundDrawables(mIcon, null, mState, null);
}
@Override
public void setIcon(int icon) {
Drawable drawable = null;
if (icon != 0)
drawable = getContext().getResources().getDrawable(icon);
setIcon(drawable);
}
@Override
public void setTitle(CharSequence title) {
setText(title);
}
@Override
public void setEnabled(boolean enabled) {
super.setEnabled(enabled);
if (mIcon != null)
mIcon.setAlpha(enabled ? 255 : 99);
if (mState != null)
mState.setAlpha(enabled ? 255 : 99);
}
@Override
public void setCheckable(boolean checkable) {
if (mCheckable != checkable) {
mCheckable = checkable;
refreshDrawableState();
}
}
@Override
public void setChecked(boolean checked) {
if (mChecked != checked) {
mChecked = checked;
refreshDrawableState();
}
}
@Override
public void setSubMenuIndicator(boolean hasSubMenu) {
if (mHasSubMenu != hasSubMenu) {
mHasSubMenu = hasSubMenu;
refreshDrawableState();
}
}
}