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