ListMenuItemView.java revision c39451267bd0c484f7d9a7ae6475533268be6640
19066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project/* 29066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Copyright (C) 2006 The Android Open Source Project 39066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 49066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Licensed under the Apache License, Version 2.0 (the "License"); 59066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * you may not use this file except in compliance with the License. 69066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * You may obtain a copy of the License at 79066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 89066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * http://www.apache.org/licenses/LICENSE-2.0 99066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Unless required by applicable law or agreed to in writing, software 119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * distributed under the License is distributed on an "AS IS" BASIS, 129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * See the License for the specific language governing permissions and 149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * limitations under the License. 159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectpackage com.android.internal.view.menu; 189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.content.Context; 209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.content.res.TypedArray; 219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.graphics.drawable.Drawable; 229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.util.AttributeSet; 239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.view.LayoutInflater; 249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.view.View; 259151103ff20d28e8db2a2cc0386d57b8dad4b5d5Adam Powellimport android.view.ViewGroup; 269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.widget.CheckBox; 279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.widget.CompoundButton; 289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.widget.ImageView; 299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.widget.RadioButton; 308933efd49a0b2c10ddb30b23b57f5676634d0277Alan Viveretteimport android.widget.RelativeLayout; 319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.widget.TextView; 329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project/** 349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * The item view for each item in the ListView-based MenuViews. 359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 368933efd49a0b2c10ddb30b23b57f5676634d0277Alan Viverettepublic class ListMenuItemView extends RelativeLayout implements MenuView.ItemView { 378933efd49a0b2c10ddb30b23b57f5676634d0277Alan Viverette private final Drawable mBackground; 388933efd49a0b2c10ddb30b23b57f5676634d0277Alan Viverette private final int mTextAppearance; 398933efd49a0b2c10ddb30b23b57f5676634d0277Alan Viverette 408933efd49a0b2c10ddb30b23b57f5676634d0277Alan Viverette private MenuItemImpl mItemData; 418933efd49a0b2c10ddb30b23b57f5676634d0277Alan Viverette 429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private ImageView mIconView; 439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private RadioButton mRadioButton; 449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private TextView mTitleView; 459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private CheckBox mCheckBox; 469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private TextView mShortcutView; 478933efd49a0b2c10ddb30b23b57f5676634d0277Alan Viverette 48696cba573e651b0e4f18a4718627c8ccecb3bda0Adam Powell private LayoutInflater mInflater; 49696cba573e651b0e4f18a4718627c8ccecb3bda0Adam Powell 508933efd49a0b2c10ddb30b23b57f5676634d0277Alan Viverette private boolean mPreserveIconSpacing; 519151103ff20d28e8db2a2cc0386d57b8dad4b5d5Adam Powell private boolean mForceShowIcon; 529151103ff20d28e8db2a2cc0386d57b8dad4b5d5Adam Powell 539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public ListMenuItemView(Context context, AttributeSet attrs, int defStyle) { 549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project super(context, attrs); 558933efd49a0b2c10ddb30b23b57f5676634d0277Alan Viverette 568933efd49a0b2c10ddb30b23b57f5676634d0277Alan Viverette final TypedArray a = context.obtainStyledAttributes( 579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project attrs, com.android.internal.R.styleable.MenuView, defStyle, 0); 589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mBackground = a.getDrawable(com.android.internal.R.styleable.MenuView_itemBackground); 598933efd49a0b2c10ddb30b23b57f5676634d0277Alan Viverette mTextAppearance = a.getResourceId( 608933efd49a0b2c10ddb30b23b57f5676634d0277Alan Viverette com.android.internal.R.styleable.MenuView_itemTextAppearance, 0); 61e7d468410b3a783560d5158a5798cef1b4b67702Adam Powell mPreserveIconSpacing = a.getBoolean( 62e7d468410b3a783560d5158a5798cef1b4b67702Adam Powell com.android.internal.R.styleable.MenuView_preserveIconSpacing, false); 638933efd49a0b2c10ddb30b23b57f5676634d0277Alan Viverette 649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project a.recycle(); 659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public ListMenuItemView(Context context, AttributeSet attrs) { 689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project this(context, attrs, 0); 699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project @Override 729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project protected void onFinishInflate() { 739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project super.onFinishInflate(); 748933efd49a0b2c10ddb30b23b57f5676634d0277Alan Viverette 758933efd49a0b2c10ddb30b23b57f5676634d0277Alan Viverette setBackground(mBackground); 768933efd49a0b2c10ddb30b23b57f5676634d0277Alan Viverette 779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mTitleView = (TextView) findViewById(com.android.internal.R.id.title); 788933efd49a0b2c10ddb30b23b57f5676634d0277Alan Viverette if (mTextAppearance != 0) { 798933efd49a0b2c10ddb30b23b57f5676634d0277Alan Viverette mTitleView.setTextAppearance(mContext, mTextAppearance); 809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 818933efd49a0b2c10ddb30b23b57f5676634d0277Alan Viverette 829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mShortcutView = (TextView) findViewById(com.android.internal.R.id.shortcut); 839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 858933efd49a0b2c10ddb30b23b57f5676634d0277Alan Viverette @Override 869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void initialize(MenuItemImpl itemData, int menuType) { 879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mItemData = itemData; 889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project setVisibility(itemData.isVisible() ? View.VISIBLE : View.GONE); 909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project setTitle(itemData.getTitleForItemView(this)); 919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project setCheckable(itemData.isCheckable()); 929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project setShortcut(itemData.shouldShowShortcut(), itemData.getShortcut()); 939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project setIcon(itemData.getIcon()); 949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project setEnabled(itemData.isEnabled()); 959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 979151103ff20d28e8db2a2cc0386d57b8dad4b5d5Adam Powell public void setForceShowIcon(boolean forceShow) { 989151103ff20d28e8db2a2cc0386d57b8dad4b5d5Adam Powell mPreserveIconSpacing = mForceShowIcon = forceShow; 999151103ff20d28e8db2a2cc0386d57b8dad4b5d5Adam Powell } 1009151103ff20d28e8db2a2cc0386d57b8dad4b5d5Adam Powell 1018933efd49a0b2c10ddb30b23b57f5676634d0277Alan Viverette @Override 1029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void setTitle(CharSequence title) { 1039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (title != null) { 1049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mTitleView.setText(title); 1058933efd49a0b2c10ddb30b23b57f5676634d0277Alan Viverette 1068933efd49a0b2c10ddb30b23b57f5676634d0277Alan Viverette if (mTitleView.getVisibility() != VISIBLE) { 1078933efd49a0b2c10ddb30b23b57f5676634d0277Alan Viverette mTitleView.setVisibility(VISIBLE); 1088933efd49a0b2c10ddb30b23b57f5676634d0277Alan Viverette } 1099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } else { 1108933efd49a0b2c10ddb30b23b57f5676634d0277Alan Viverette if (mTitleView.getVisibility() != GONE) { 1118933efd49a0b2c10ddb30b23b57f5676634d0277Alan Viverette mTitleView.setVisibility(GONE); 1128933efd49a0b2c10ddb30b23b57f5676634d0277Alan Viverette } 1139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1158933efd49a0b2c10ddb30b23b57f5676634d0277Alan Viverette 1168933efd49a0b2c10ddb30b23b57f5676634d0277Alan Viverette @Override 1179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public MenuItemImpl getItemData() { 1189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return mItemData; 1199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1218933efd49a0b2c10ddb30b23b57f5676634d0277Alan Viverette @Override 1229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void setCheckable(boolean checkable) { 1239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (!checkable && mRadioButton == null && mCheckBox == null) { 1249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return; 1259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1268933efd49a0b2c10ddb30b23b57f5676634d0277Alan Viverette 1279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // Depending on whether its exclusive check or not, the checkbox or 1289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // radio button will be the one in use (and the other will be otherCompoundButton) 1299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project final CompoundButton compoundButton; 1308933efd49a0b2c10ddb30b23b57f5676634d0277Alan Viverette final CompoundButton otherCompoundButton; 1319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (mItemData.isExclusiveCheckable()) { 1338eeb4d1a70faa4d5834de44bfa515742566c6ba3Adam Powell if (mRadioButton == null) { 1348eeb4d1a70faa4d5834de44bfa515742566c6ba3Adam Powell insertRadioButton(); 1358eeb4d1a70faa4d5834de44bfa515742566c6ba3Adam Powell } 1369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project compoundButton = mRadioButton; 1379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project otherCompoundButton = mCheckBox; 1389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } else { 1398eeb4d1a70faa4d5834de44bfa515742566c6ba3Adam Powell if (mCheckBox == null) { 1408eeb4d1a70faa4d5834de44bfa515742566c6ba3Adam Powell insertCheckBox(); 1418eeb4d1a70faa4d5834de44bfa515742566c6ba3Adam Powell } 1429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project compoundButton = mCheckBox; 1439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project otherCompoundButton = mRadioButton; 1449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1458933efd49a0b2c10ddb30b23b57f5676634d0277Alan Viverette 1469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (checkable) { 1479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project compoundButton.setChecked(mItemData.isChecked()); 1488933efd49a0b2c10ddb30b23b57f5676634d0277Alan Viverette 1499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project final int newVisibility = checkable ? VISIBLE : GONE; 1509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (compoundButton.getVisibility() != newVisibility) { 1519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project compoundButton.setVisibility(newVisibility); 1529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1538933efd49a0b2c10ddb30b23b57f5676634d0277Alan Viverette 1548933efd49a0b2c10ddb30b23b57f5676634d0277Alan Viverette // Align text to the start of the visible compound button. 1558933efd49a0b2c10ddb30b23b57f5676634d0277Alan Viverette alignTextToStartOf(compoundButton); 1568933efd49a0b2c10ddb30b23b57f5676634d0277Alan Viverette 1579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // Make sure the other compound button isn't visible 1588eeb4d1a70faa4d5834de44bfa515742566c6ba3Adam Powell if (otherCompoundButton != null && otherCompoundButton.getVisibility() != GONE) { 1599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project otherCompoundButton.setVisibility(GONE); 1609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } else { 1628933efd49a0b2c10ddb30b23b57f5676634d0277Alan Viverette if (mCheckBox != null) { 1638933efd49a0b2c10ddb30b23b57f5676634d0277Alan Viverette mCheckBox.setVisibility(GONE); 1648933efd49a0b2c10ddb30b23b57f5676634d0277Alan Viverette } 1658933efd49a0b2c10ddb30b23b57f5676634d0277Alan Viverette if (mRadioButton != null) { 1668933efd49a0b2c10ddb30b23b57f5676634d0277Alan Viverette mRadioButton.setVisibility(GONE); 1678933efd49a0b2c10ddb30b23b57f5676634d0277Alan Viverette } 1689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1708933efd49a0b2c10ddb30b23b57f5676634d0277Alan Viverette 1718933efd49a0b2c10ddb30b23b57f5676634d0277Alan Viverette @Override 1729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void setChecked(boolean checked) { 1739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project CompoundButton compoundButton; 1748933efd49a0b2c10ddb30b23b57f5676634d0277Alan Viverette 1759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (mItemData.isExclusiveCheckable()) { 1769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (mRadioButton == null) { 1779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project insertRadioButton(); 1789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project compoundButton = mRadioButton; 1809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } else { 1819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (mCheckBox == null) { 1829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project insertCheckBox(); 1839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project compoundButton = mCheckBox; 1859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1868933efd49a0b2c10ddb30b23b57f5676634d0277Alan Viverette 1879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project compoundButton.setChecked(checked); 1889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1908933efd49a0b2c10ddb30b23b57f5676634d0277Alan Viverette @Override 1919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void setShortcut(boolean showShortcut, char shortcutKey) { 1928933efd49a0b2c10ddb30b23b57f5676634d0277Alan Viverette final int newVisibility = (showShortcut && mItemData.shouldShowShortcut()) ? VISIBLE : GONE; 1939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (newVisibility == VISIBLE) { 1959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mShortcutView.setText(mItemData.getShortcutLabel()); 1969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (mShortcutView.getVisibility() != newVisibility) { 1999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mShortcutView.setVisibility(newVisibility); 2009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2028933efd49a0b2c10ddb30b23b57f5676634d0277Alan Viverette 2038933efd49a0b2c10ddb30b23b57f5676634d0277Alan Viverette @Override 2049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void setIcon(Drawable icon) { 2059151103ff20d28e8db2a2cc0386d57b8dad4b5d5Adam Powell final boolean showIcon = mItemData.shouldShowIcon() || mForceShowIcon; 206e7d468410b3a783560d5158a5798cef1b4b67702Adam Powell if (!showIcon && !mPreserveIconSpacing) { 2079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return; 2089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2098933efd49a0b2c10ddb30b23b57f5676634d0277Alan Viverette 2109151103ff20d28e8db2a2cc0386d57b8dad4b5d5Adam Powell if (mIconView == null && icon == null && !mPreserveIconSpacing) { 2119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return; 2129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2138933efd49a0b2c10ddb30b23b57f5676634d0277Alan Viverette 2149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (mIconView == null) { 2159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project insertIconView(); 2169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2178933efd49a0b2c10ddb30b23b57f5676634d0277Alan Viverette 218e7d468410b3a783560d5158a5798cef1b4b67702Adam Powell if (icon != null || mPreserveIconSpacing) { 219e7d468410b3a783560d5158a5798cef1b4b67702Adam Powell mIconView.setImageDrawable(showIcon ? icon : null); 2209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (mIconView.getVisibility() != VISIBLE) { 2229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mIconView.setVisibility(VISIBLE); 2239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } else { 2259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mIconView.setVisibility(GONE); 2269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2288933efd49a0b2c10ddb30b23b57f5676634d0277Alan Viverette 2299151103ff20d28e8db2a2cc0386d57b8dad4b5d5Adam Powell @Override 2309151103ff20d28e8db2a2cc0386d57b8dad4b5d5Adam Powell protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { 2319151103ff20d28e8db2a2cc0386d57b8dad4b5d5Adam Powell if (mIconView != null && mPreserveIconSpacing) { 2329151103ff20d28e8db2a2cc0386d57b8dad4b5d5Adam Powell // Enforce minimum icon spacing 2338933efd49a0b2c10ddb30b23b57f5676634d0277Alan Viverette final ViewGroup.LayoutParams lp = getLayoutParams(); 2348933efd49a0b2c10ddb30b23b57f5676634d0277Alan Viverette final LayoutParams iconLp = (LayoutParams) mIconView.getLayoutParams(); 2359151103ff20d28e8db2a2cc0386d57b8dad4b5d5Adam Powell if (lp.height > 0 && iconLp.width <= 0) { 2369151103ff20d28e8db2a2cc0386d57b8dad4b5d5Adam Powell iconLp.width = lp.height; 2379151103ff20d28e8db2a2cc0386d57b8dad4b5d5Adam Powell } 2389151103ff20d28e8db2a2cc0386d57b8dad4b5d5Adam Powell } 2398933efd49a0b2c10ddb30b23b57f5676634d0277Alan Viverette 2409151103ff20d28e8db2a2cc0386d57b8dad4b5d5Adam Powell super.onMeasure(widthMeasureSpec, heightMeasureSpec); 2419151103ff20d28e8db2a2cc0386d57b8dad4b5d5Adam Powell } 2429151103ff20d28e8db2a2cc0386d57b8dad4b5d5Adam Powell 2439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private void insertIconView() { 2448933efd49a0b2c10ddb30b23b57f5676634d0277Alan Viverette mIconView = (ImageView) getInflater() 245c39451267bd0c484f7d9a7ae6475533268be6640Adam Powell .inflate(com.android.internal.R.layout.list_menu_item_icon, this, false); 246c39451267bd0c484f7d9a7ae6475533268be6640Adam Powell addView(mIconView); 2479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2488933efd49a0b2c10ddb30b23b57f5676634d0277Alan Viverette 2499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private void insertRadioButton() { 2508933efd49a0b2c10ddb30b23b57f5676634d0277Alan Viverette mRadioButton = (RadioButton) getInflater() 251c39451267bd0c484f7d9a7ae6475533268be6640Adam Powell .inflate(com.android.internal.R.layout.list_menu_item_radio, this, false); 252c39451267bd0c484f7d9a7ae6475533268be6640Adam Powell addView(mRadioButton); 2539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2548933efd49a0b2c10ddb30b23b57f5676634d0277Alan Viverette 2559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private void insertCheckBox() { 2568933efd49a0b2c10ddb30b23b57f5676634d0277Alan Viverette mCheckBox = (CheckBox) getInflater() 257c39451267bd0c484f7d9a7ae6475533268be6640Adam Powell .inflate(com.android.internal.R.layout.list_menu_item_checkbox, this, false); 258c39451267bd0c484f7d9a7ae6475533268be6640Adam Powell addView(mCheckBox); 2599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2618933efd49a0b2c10ddb30b23b57f5676634d0277Alan Viverette private void alignTextToStartOf(View v) { 2628933efd49a0b2c10ddb30b23b57f5676634d0277Alan Viverette final LayoutParams params = (LayoutParams) mTitleView.getLayoutParams(); 2638933efd49a0b2c10ddb30b23b57f5676634d0277Alan Viverette params.addRule(RelativeLayout.START_OF, v.getId()); 2648933efd49a0b2c10ddb30b23b57f5676634d0277Alan Viverette mTitleView.setLayoutParams(params); 2658933efd49a0b2c10ddb30b23b57f5676634d0277Alan Viverette } 2668933efd49a0b2c10ddb30b23b57f5676634d0277Alan Viverette 2678933efd49a0b2c10ddb30b23b57f5676634d0277Alan Viverette @Override 2689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public boolean prefersCondensedTitle() { 2699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return false; 2709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2728933efd49a0b2c10ddb30b23b57f5676634d0277Alan Viverette @Override 2739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public boolean showsIcon() { 2749151103ff20d28e8db2a2cc0386d57b8dad4b5d5Adam Powell return mForceShowIcon; 2759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2768933efd49a0b2c10ddb30b23b57f5676634d0277Alan Viverette 277696cba573e651b0e4f18a4718627c8ccecb3bda0Adam Powell private LayoutInflater getInflater() { 278696cba573e651b0e4f18a4718627c8ccecb3bda0Adam Powell if (mInflater == null) { 279696cba573e651b0e4f18a4718627c8ccecb3bda0Adam Powell mInflater = LayoutInflater.from(mContext); 280696cba573e651b0e4f18a4718627c8ccecb3bda0Adam Powell } 281696cba573e651b0e4f18a4718627c8ccecb3bda0Adam Powell return mInflater; 282696cba573e651b0e4f18a4718627c8ccecb3bda0Adam Powell } 2839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project} 284