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; 26058ac7cfe5bb7b9ecc411b94622ac3f31a7fa25eAlan Viveretteimport android.view.accessibility.AccessibilityNodeInfo; 279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.widget.CheckBox; 289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.widget.CompoundButton; 299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.widget.ImageView; 30d9ddf52c1281db14d9243ecef6c07bdeed1e6e34Alan Viveretteimport android.widget.LinearLayout; 319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.widget.RadioButton; 329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.widget.TextView; 339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project/** 359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * The item view for each item in the ListView-based MenuViews. 369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 37d9ddf52c1281db14d9243ecef6c07bdeed1e6e34Alan Viverettepublic class ListMenuItemView extends LinearLayout implements MenuView.ItemView { 38d9ddf52c1281db14d9243ecef6c07bdeed1e6e34Alan Viverette private static final String TAG = "ListMenuItemView"; 39d9ddf52c1281db14d9243ecef6c07bdeed1e6e34Alan Viverette private MenuItemImpl mItemData; 40d9ddf52c1281db14d9243ecef6c07bdeed1e6e34Alan Viverette 419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private ImageView mIconView; 429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private RadioButton mRadioButton; 439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private TextView mTitleView; 449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private CheckBox mCheckBox; 459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private TextView mShortcutView; 46d9ddf52c1281db14d9243ecef6c07bdeed1e6e34Alan Viverette 47d9ddf52c1281db14d9243ecef6c07bdeed1e6e34Alan Viverette private Drawable mBackground; 48d9ddf52c1281db14d9243ecef6c07bdeed1e6e34Alan Viverette private int mTextAppearance; 49d9ddf52c1281db14d9243ecef6c07bdeed1e6e34Alan Viverette private Context mTextAppearanceContext; 50d9ddf52c1281db14d9243ecef6c07bdeed1e6e34Alan Viverette private boolean mPreserveIconSpacing; 51d9ddf52c1281db14d9243ecef6c07bdeed1e6e34Alan Viverette 52d9ddf52c1281db14d9243ecef6c07bdeed1e6e34Alan Viverette private int mMenuType; 53d9ddf52c1281db14d9243ecef6c07bdeed1e6e34Alan Viverette 54696cba573e651b0e4f18a4718627c8ccecb3bda0Adam Powell private LayoutInflater mInflater; 55696cba573e651b0e4f18a4718627c8ccecb3bda0Adam Powell 569151103ff20d28e8db2a2cc0386d57b8dad4b5d5Adam Powell private boolean mForceShowIcon; 579151103ff20d28e8db2a2cc0386d57b8dad4b5d5Adam Powell 589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public ListMenuItemView(Context context, AttributeSet attrs, int defStyle) { 599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project super(context, attrs); 60d9ddf52c1281db14d9243ecef6c07bdeed1e6e34Alan Viverette 61d9ddf52c1281db14d9243ecef6c07bdeed1e6e34Alan Viverette TypedArray a = 62d9ddf52c1281db14d9243ecef6c07bdeed1e6e34Alan Viverette context.obtainStyledAttributes( 639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project attrs, com.android.internal.R.styleable.MenuView, defStyle, 0); 64d9ddf52c1281db14d9243ecef6c07bdeed1e6e34Alan Viverette 659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mBackground = a.getDrawable(com.android.internal.R.styleable.MenuView_itemBackground); 66d9ddf52c1281db14d9243ecef6c07bdeed1e6e34Alan Viverette mTextAppearance = a.getResourceId(com.android.internal.R.styleable. 67d9ddf52c1281db14d9243ecef6c07bdeed1e6e34Alan Viverette MenuView_itemTextAppearance, -1); 68e7d468410b3a783560d5158a5798cef1b4b67702Adam Powell mPreserveIconSpacing = a.getBoolean( 69e7d468410b3a783560d5158a5798cef1b4b67702Adam Powell com.android.internal.R.styleable.MenuView_preserveIconSpacing, false); 70d9ddf52c1281db14d9243ecef6c07bdeed1e6e34Alan Viverette mTextAppearanceContext = context; 71d9ddf52c1281db14d9243ecef6c07bdeed1e6e34Alan Viverette 729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project a.recycle(); 739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public ListMenuItemView(Context context, AttributeSet attrs) { 769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project this(context, attrs, 0); 779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project @Override 809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project protected void onFinishInflate() { 819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project super.onFinishInflate(); 82d9ddf52c1281db14d9243ecef6c07bdeed1e6e34Alan Viverette 83d9ddf52c1281db14d9243ecef6c07bdeed1e6e34Alan Viverette setBackgroundDrawable(mBackground); 84d9ddf52c1281db14d9243ecef6c07bdeed1e6e34Alan Viverette 859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mTitleView = (TextView) findViewById(com.android.internal.R.id.title); 86d9ddf52c1281db14d9243ecef6c07bdeed1e6e34Alan Viverette if (mTextAppearance != -1) { 87d9ddf52c1281db14d9243ecef6c07bdeed1e6e34Alan Viverette mTitleView.setTextAppearance(mTextAppearanceContext, 88d9ddf52c1281db14d9243ecef6c07bdeed1e6e34Alan Viverette mTextAppearance); 899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 90d9ddf52c1281db14d9243ecef6c07bdeed1e6e34Alan Viverette 919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mShortcutView = (TextView) findViewById(com.android.internal.R.id.shortcut); 929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void initialize(MenuItemImpl itemData, int menuType) { 959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mItemData = itemData; 96d9ddf52c1281db14d9243ecef6c07bdeed1e6e34Alan Viverette mMenuType = menuType; 979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project setVisibility(itemData.isVisible() ? View.VISIBLE : View.GONE); 99d9ddf52c1281db14d9243ecef6c07bdeed1e6e34Alan Viverette 1009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project setTitle(itemData.getTitleForItemView(this)); 1019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project setCheckable(itemData.isCheckable()); 1029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project setShortcut(itemData.shouldShowShortcut(), itemData.getShortcut()); 1039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project setIcon(itemData.getIcon()); 1049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project setEnabled(itemData.isEnabled()); 1059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1079151103ff20d28e8db2a2cc0386d57b8dad4b5d5Adam Powell public void setForceShowIcon(boolean forceShow) { 1089151103ff20d28e8db2a2cc0386d57b8dad4b5d5Adam Powell mPreserveIconSpacing = mForceShowIcon = forceShow; 1099151103ff20d28e8db2a2cc0386d57b8dad4b5d5Adam Powell } 1109151103ff20d28e8db2a2cc0386d57b8dad4b5d5Adam Powell 1119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void setTitle(CharSequence title) { 1129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (title != null) { 1139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mTitleView.setText(title); 114d9ddf52c1281db14d9243ecef6c07bdeed1e6e34Alan Viverette 115d9ddf52c1281db14d9243ecef6c07bdeed1e6e34Alan Viverette if (mTitleView.getVisibility() != VISIBLE) mTitleView.setVisibility(VISIBLE); 1169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } else { 117d9ddf52c1281db14d9243ecef6c07bdeed1e6e34Alan Viverette if (mTitleView.getVisibility() != GONE) mTitleView.setVisibility(GONE); 1189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 120d9ddf52c1281db14d9243ecef6c07bdeed1e6e34Alan Viverette 1219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public MenuItemImpl getItemData() { 1229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return mItemData; 1239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void setCheckable(boolean checkable) { 1269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (!checkable && mRadioButton == null && mCheckBox == null) { 1279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return; 1289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 129d9ddf52c1281db14d9243ecef6c07bdeed1e6e34Alan Viverette 1309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // Depending on whether its exclusive check or not, the checkbox or 1319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // radio button will be the one in use (and the other will be otherCompoundButton) 1329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project final CompoundButton compoundButton; 133d9ddf52c1281db14d9243ecef6c07bdeed1e6e34Alan Viverette final CompoundButton otherCompoundButton; 1349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (mItemData.isExclusiveCheckable()) { 1368eeb4d1a70faa4d5834de44bfa515742566c6ba3Adam Powell if (mRadioButton == null) { 1378eeb4d1a70faa4d5834de44bfa515742566c6ba3Adam Powell insertRadioButton(); 1388eeb4d1a70faa4d5834de44bfa515742566c6ba3Adam Powell } 1399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project compoundButton = mRadioButton; 1409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project otherCompoundButton = mCheckBox; 1419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } else { 1428eeb4d1a70faa4d5834de44bfa515742566c6ba3Adam Powell if (mCheckBox == null) { 1438eeb4d1a70faa4d5834de44bfa515742566c6ba3Adam Powell insertCheckBox(); 1448eeb4d1a70faa4d5834de44bfa515742566c6ba3Adam Powell } 1459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project compoundButton = mCheckBox; 1469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project otherCompoundButton = mRadioButton; 1479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 148d9ddf52c1281db14d9243ecef6c07bdeed1e6e34Alan Viverette 1499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (checkable) { 1509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project compoundButton.setChecked(mItemData.isChecked()); 151d9ddf52c1281db14d9243ecef6c07bdeed1e6e34Alan Viverette 1529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project final int newVisibility = checkable ? VISIBLE : GONE; 1539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (compoundButton.getVisibility() != newVisibility) { 1549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project compoundButton.setVisibility(newVisibility); 1559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 156d9ddf52c1281db14d9243ecef6c07bdeed1e6e34Alan 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 { 162d9ddf52c1281db14d9243ecef6c07bdeed1e6e34Alan Viverette if (mCheckBox != null) mCheckBox.setVisibility(GONE); 163d9ddf52c1281db14d9243ecef6c07bdeed1e6e34Alan Viverette if (mRadioButton != null) mRadioButton.setVisibility(GONE); 1649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 166d9ddf52c1281db14d9243ecef6c07bdeed1e6e34Alan Viverette 1679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void setChecked(boolean checked) { 1689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project CompoundButton compoundButton; 169d9ddf52c1281db14d9243ecef6c07bdeed1e6e34Alan Viverette 1709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (mItemData.isExclusiveCheckable()) { 1719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (mRadioButton == null) { 1729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project insertRadioButton(); 1739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project compoundButton = mRadioButton; 1759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } else { 1769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (mCheckBox == null) { 1779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project insertCheckBox(); 1789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project compoundButton = mCheckBox; 1809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 181d9ddf52c1281db14d9243ecef6c07bdeed1e6e34Alan Viverette 1829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project compoundButton.setChecked(checked); 1839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void setShortcut(boolean showShortcut, char shortcutKey) { 186d9ddf52c1281db14d9243ecef6c07bdeed1e6e34Alan Viverette final int newVisibility = (showShortcut && mItemData.shouldShowShortcut()) 187d9ddf52c1281db14d9243ecef6c07bdeed1e6e34Alan Viverette ? VISIBLE : GONE; 1889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (newVisibility == VISIBLE) { 1909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mShortcutView.setText(mItemData.getShortcutLabel()); 1919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (mShortcutView.getVisibility() != newVisibility) { 1949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mShortcutView.setVisibility(newVisibility); 1959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 197d9ddf52c1281db14d9243ecef6c07bdeed1e6e34Alan Viverette 1989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void setIcon(Drawable icon) { 1999151103ff20d28e8db2a2cc0386d57b8dad4b5d5Adam Powell final boolean showIcon = mItemData.shouldShowIcon() || mForceShowIcon; 200e7d468410b3a783560d5158a5798cef1b4b67702Adam Powell if (!showIcon && !mPreserveIconSpacing) { 2019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return; 2029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 203d9ddf52c1281db14d9243ecef6c07bdeed1e6e34Alan Viverette 2049151103ff20d28e8db2a2cc0386d57b8dad4b5d5Adam Powell if (mIconView == null && icon == null && !mPreserveIconSpacing) { 2059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return; 2069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 207d9ddf52c1281db14d9243ecef6c07bdeed1e6e34Alan Viverette 2089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (mIconView == null) { 2099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project insertIconView(); 2109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 211d9ddf52c1281db14d9243ecef6c07bdeed1e6e34Alan Viverette 212e7d468410b3a783560d5158a5798cef1b4b67702Adam Powell if (icon != null || mPreserveIconSpacing) { 213e7d468410b3a783560d5158a5798cef1b4b67702Adam Powell mIconView.setImageDrawable(showIcon ? icon : null); 2149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (mIconView.getVisibility() != VISIBLE) { 2169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mIconView.setVisibility(VISIBLE); 2179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } else { 2199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mIconView.setVisibility(GONE); 2209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 222d9ddf52c1281db14d9243ecef6c07bdeed1e6e34Alan Viverette 2239151103ff20d28e8db2a2cc0386d57b8dad4b5d5Adam Powell @Override 2249151103ff20d28e8db2a2cc0386d57b8dad4b5d5Adam Powell protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { 2259151103ff20d28e8db2a2cc0386d57b8dad4b5d5Adam Powell if (mIconView != null && mPreserveIconSpacing) { 2269151103ff20d28e8db2a2cc0386d57b8dad4b5d5Adam Powell // Enforce minimum icon spacing 227d9ddf52c1281db14d9243ecef6c07bdeed1e6e34Alan Viverette ViewGroup.LayoutParams lp = getLayoutParams(); 228d9ddf52c1281db14d9243ecef6c07bdeed1e6e34Alan Viverette LayoutParams iconLp = (LayoutParams) mIconView.getLayoutParams(); 2299151103ff20d28e8db2a2cc0386d57b8dad4b5d5Adam Powell if (lp.height > 0 && iconLp.width <= 0) { 2309151103ff20d28e8db2a2cc0386d57b8dad4b5d5Adam Powell iconLp.width = lp.height; 2319151103ff20d28e8db2a2cc0386d57b8dad4b5d5Adam Powell } 2329151103ff20d28e8db2a2cc0386d57b8dad4b5d5Adam Powell } 2339151103ff20d28e8db2a2cc0386d57b8dad4b5d5Adam Powell super.onMeasure(widthMeasureSpec, heightMeasureSpec); 2349151103ff20d28e8db2a2cc0386d57b8dad4b5d5Adam Powell } 2359151103ff20d28e8db2a2cc0386d57b8dad4b5d5Adam Powell 2369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private void insertIconView() { 237d9ddf52c1281db14d9243ecef6c07bdeed1e6e34Alan Viverette LayoutInflater inflater = getInflater(); 238d9ddf52c1281db14d9243ecef6c07bdeed1e6e34Alan Viverette mIconView = (ImageView) inflater.inflate(com.android.internal.R.layout.list_menu_item_icon, 239d9ddf52c1281db14d9243ecef6c07bdeed1e6e34Alan Viverette this, false); 240d9ddf52c1281db14d9243ecef6c07bdeed1e6e34Alan Viverette addView(mIconView, 0); 2419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 242d9ddf52c1281db14d9243ecef6c07bdeed1e6e34Alan Viverette 2439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private void insertRadioButton() { 244d9ddf52c1281db14d9243ecef6c07bdeed1e6e34Alan Viverette LayoutInflater inflater = getInflater(); 245d9ddf52c1281db14d9243ecef6c07bdeed1e6e34Alan Viverette mRadioButton = 246d9ddf52c1281db14d9243ecef6c07bdeed1e6e34Alan Viverette (RadioButton) inflater.inflate(com.android.internal.R.layout.list_menu_item_radio, 247d9ddf52c1281db14d9243ecef6c07bdeed1e6e34Alan Viverette this, false); 248c39451267bd0c484f7d9a7ae6475533268be6640Adam Powell addView(mRadioButton); 2499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 250d9ddf52c1281db14d9243ecef6c07bdeed1e6e34Alan Viverette 2519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private void insertCheckBox() { 252d9ddf52c1281db14d9243ecef6c07bdeed1e6e34Alan Viverette LayoutInflater inflater = getInflater(); 253d9ddf52c1281db14d9243ecef6c07bdeed1e6e34Alan Viverette mCheckBox = 254d9ddf52c1281db14d9243ecef6c07bdeed1e6e34Alan Viverette (CheckBox) inflater.inflate(com.android.internal.R.layout.list_menu_item_checkbox, 255d9ddf52c1281db14d9243ecef6c07bdeed1e6e34Alan Viverette this, false); 256c39451267bd0c484f7d9a7ae6475533268be6640Adam Powell addView(mCheckBox); 2579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public boolean prefersCondensedTitle() { 2609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return false; 2619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public boolean showsIcon() { 2649151103ff20d28e8db2a2cc0386d57b8dad4b5d5Adam Powell return mForceShowIcon; 2659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 266d9ddf52c1281db14d9243ecef6c07bdeed1e6e34Alan Viverette 267696cba573e651b0e4f18a4718627c8ccecb3bda0Adam Powell private LayoutInflater getInflater() { 268696cba573e651b0e4f18a4718627c8ccecb3bda0Adam Powell if (mInflater == null) { 269696cba573e651b0e4f18a4718627c8ccecb3bda0Adam Powell mInflater = LayoutInflater.from(mContext); 270696cba573e651b0e4f18a4718627c8ccecb3bda0Adam Powell } 271696cba573e651b0e4f18a4718627c8ccecb3bda0Adam Powell return mInflater; 272696cba573e651b0e4f18a4718627c8ccecb3bda0Adam Powell } 273058ac7cfe5bb7b9ecc411b94622ac3f31a7fa25eAlan Viverette 274058ac7cfe5bb7b9ecc411b94622ac3f31a7fa25eAlan Viverette @Override 275058ac7cfe5bb7b9ecc411b94622ac3f31a7fa25eAlan Viverette public void onInitializeAccessibilityNodeInfo(AccessibilityNodeInfo info) { 276058ac7cfe5bb7b9ecc411b94622ac3f31a7fa25eAlan Viverette super.onInitializeAccessibilityNodeInfo(info); 277058ac7cfe5bb7b9ecc411b94622ac3f31a7fa25eAlan Viverette 278058ac7cfe5bb7b9ecc411b94622ac3f31a7fa25eAlan Viverette if (mItemData != null && mItemData.hasSubMenu()) { 279cb8ed39b3fb591be60b9fb1799d4ea4530eab758Svetoslav Ganov info.setCanOpenPopup(true); 280058ac7cfe5bb7b9ecc411b94622ac3f31a7fa25eAlan Viverette } 281058ac7cfe5bb7b9ecc411b94622ac3f31a7fa25eAlan Viverette } 2829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project} 283