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.LinearLayout;
309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.widget.RadioButton;
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 */
369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectpublic class ListMenuItemView extends LinearLayout implements MenuView.ItemView {
378eeb4d1a70faa4d5834de44bfa515742566c6ba3Adam Powell    private static final String TAG = "ListMenuItemView";
389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    private MenuItemImpl mItemData;
399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    private ImageView mIconView;
419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    private RadioButton mRadioButton;
429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    private TextView mTitleView;
439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    private CheckBox mCheckBox;
449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    private TextView mShortcutView;
459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    private Drawable mBackground;
479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    private int mTextAppearance;
489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    private Context mTextAppearanceContext;
49e7d468410b3a783560d5158a5798cef1b4b67702Adam Powell    private boolean mPreserveIconSpacing;
509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    private int mMenuType;
529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
53696cba573e651b0e4f18a4718627c8ccecb3bda0Adam Powell    private LayoutInflater mInflater;
54696cba573e651b0e4f18a4718627c8ccecb3bda0Adam Powell
559151103ff20d28e8db2a2cc0386d57b8dad4b5d5Adam Powell    private boolean mForceShowIcon;
569151103ff20d28e8db2a2cc0386d57b8dad4b5d5Adam Powell
579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public ListMenuItemView(Context context, AttributeSet attrs, int defStyle) {
589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        super(context, attrs);
599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        TypedArray a =
619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            context.obtainStyledAttributes(
629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                attrs, com.android.internal.R.styleable.MenuView, defStyle, 0);
639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        mBackground = a.getDrawable(com.android.internal.R.styleable.MenuView_itemBackground);
659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        mTextAppearance = a.getResourceId(com.android.internal.R.styleable.
669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                                          MenuView_itemTextAppearance, -1);
67e7d468410b3a783560d5158a5798cef1b4b67702Adam Powell        mPreserveIconSpacing = a.getBoolean(
68e7d468410b3a783560d5158a5798cef1b4b67702Adam Powell                com.android.internal.R.styleable.MenuView_preserveIconSpacing, false);
699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        mTextAppearanceContext = context;
709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        a.recycle();
729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public ListMenuItemView(Context context, AttributeSet attrs) {
759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        this(context, attrs, 0);
769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    @Override
799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    protected void onFinishInflate() {
809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        super.onFinishInflate();
819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        setBackgroundDrawable(mBackground);
839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        mTitleView = (TextView) findViewById(com.android.internal.R.id.title);
859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        if (mTextAppearance != -1) {
869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            mTitleView.setTextAppearance(mTextAppearanceContext,
879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                                         mTextAppearance);
889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        mShortcutView = (TextView) findViewById(com.android.internal.R.id.shortcut);
919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public void initialize(MenuItemImpl itemData, int menuType) {
949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        mItemData = itemData;
959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        mMenuType = menuType;
969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        setVisibility(itemData.isVisible() ? View.VISIBLE : View.GONE);
989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        setTitle(itemData.getTitleForItemView(this));
1009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        setCheckable(itemData.isCheckable());
1019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        setShortcut(itemData.shouldShowShortcut(), itemData.getShortcut());
1029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        setIcon(itemData.getIcon());
1039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        setEnabled(itemData.isEnabled());
1049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
1059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1069151103ff20d28e8db2a2cc0386d57b8dad4b5d5Adam Powell    public void setForceShowIcon(boolean forceShow) {
1079151103ff20d28e8db2a2cc0386d57b8dad4b5d5Adam Powell        mPreserveIconSpacing = mForceShowIcon = forceShow;
1089151103ff20d28e8db2a2cc0386d57b8dad4b5d5Adam Powell    }
1099151103ff20d28e8db2a2cc0386d57b8dad4b5d5Adam Powell
1109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public void setTitle(CharSequence title) {
1119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        if (title != null) {
1129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            mTitleView.setText(title);
1139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            if (mTitleView.getVisibility() != VISIBLE) mTitleView.setVisibility(VISIBLE);
1159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        } else {
1169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            if (mTitleView.getVisibility() != GONE) mTitleView.setVisibility(GONE);
1179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
1189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
1199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public MenuItemImpl getItemData() {
1219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        return mItemData;
1229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
1239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public void setCheckable(boolean checkable) {
1259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        if (!checkable && mRadioButton == null && mCheckBox == null) {
1269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            return;
1279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
1289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        // Depending on whether its exclusive check or not, the checkbox or
1309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        // radio button will be the one in use (and the other will be otherCompoundButton)
1319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        final CompoundButton compoundButton;
1329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        final CompoundButton otherCompoundButton;
1339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        if (mItemData.isExclusiveCheckable()) {
1358eeb4d1a70faa4d5834de44bfa515742566c6ba3Adam Powell            if (mRadioButton == null) {
1368eeb4d1a70faa4d5834de44bfa515742566c6ba3Adam Powell                insertRadioButton();
1378eeb4d1a70faa4d5834de44bfa515742566c6ba3Adam Powell            }
1389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            compoundButton = mRadioButton;
1399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            otherCompoundButton = mCheckBox;
1409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        } else {
1418eeb4d1a70faa4d5834de44bfa515742566c6ba3Adam Powell            if (mCheckBox == null) {
1428eeb4d1a70faa4d5834de44bfa515742566c6ba3Adam Powell                insertCheckBox();
1438eeb4d1a70faa4d5834de44bfa515742566c6ba3Adam Powell            }
1449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            compoundButton = mCheckBox;
1459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            otherCompoundButton = mRadioButton;
1469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
1479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        if (checkable) {
1499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            compoundButton.setChecked(mItemData.isChecked());
1509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            final int newVisibility = checkable ? VISIBLE : GONE;
1529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            if (compoundButton.getVisibility() != newVisibility) {
1539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                compoundButton.setVisibility(newVisibility);
1549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            }
1559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            // Make sure the other compound button isn't visible
1578eeb4d1a70faa4d5834de44bfa515742566c6ba3Adam Powell            if (otherCompoundButton != null && otherCompoundButton.getVisibility() != GONE) {
1589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                otherCompoundButton.setVisibility(GONE);
1599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            }
1609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        } else {
1618eeb4d1a70faa4d5834de44bfa515742566c6ba3Adam Powell            if (mCheckBox != null) mCheckBox.setVisibility(GONE);
1628eeb4d1a70faa4d5834de44bfa515742566c6ba3Adam Powell            if (mRadioButton != null) mRadioButton.setVisibility(GONE);
1639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
1649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
1659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public void setChecked(boolean checked) {
1679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        CompoundButton compoundButton;
1689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        if (mItemData.isExclusiveCheckable()) {
1709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            if (mRadioButton == null) {
1719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                insertRadioButton();
1729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            }
1739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            compoundButton = mRadioButton;
1749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        } else {
1759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            if (mCheckBox == null) {
1769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                insertCheckBox();
1779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            }
1789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            compoundButton = mCheckBox;
1799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
1809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        compoundButton.setChecked(checked);
1829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
1839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public void setShortcut(boolean showShortcut, char shortcutKey) {
1859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        final int newVisibility = (showShortcut && mItemData.shouldShowShortcut())
1869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                ? VISIBLE : GONE;
1879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        if (newVisibility == VISIBLE) {
1899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            mShortcutView.setText(mItemData.getShortcutLabel());
1909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
1919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        if (mShortcutView.getVisibility() != newVisibility) {
1939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            mShortcutView.setVisibility(newVisibility);
1949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
1959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
1969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public void setIcon(Drawable icon) {
1989151103ff20d28e8db2a2cc0386d57b8dad4b5d5Adam Powell        final boolean showIcon = mItemData.shouldShowIcon() || mForceShowIcon;
199e7d468410b3a783560d5158a5798cef1b4b67702Adam Powell        if (!showIcon && !mPreserveIconSpacing) {
2009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            return;
2019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
2029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
2039151103ff20d28e8db2a2cc0386d57b8dad4b5d5Adam Powell        if (mIconView == null && icon == null && !mPreserveIconSpacing) {
2049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            return;
2059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
2069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
2079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        if (mIconView == null) {
2089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            insertIconView();
2099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
2109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
211e7d468410b3a783560d5158a5798cef1b4b67702Adam Powell        if (icon != null || mPreserveIconSpacing) {
212e7d468410b3a783560d5158a5798cef1b4b67702Adam Powell            mIconView.setImageDrawable(showIcon ? icon : null);
2139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
2149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            if (mIconView.getVisibility() != VISIBLE) {
2159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                mIconView.setVisibility(VISIBLE);
2169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            }
2179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        } else {
2189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            mIconView.setVisibility(GONE);
2199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
2209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
2219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
2229151103ff20d28e8db2a2cc0386d57b8dad4b5d5Adam Powell    @Override
2239151103ff20d28e8db2a2cc0386d57b8dad4b5d5Adam Powell    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
2249151103ff20d28e8db2a2cc0386d57b8dad4b5d5Adam Powell        if (mIconView != null && mPreserveIconSpacing) {
2259151103ff20d28e8db2a2cc0386d57b8dad4b5d5Adam Powell            // Enforce minimum icon spacing
2269151103ff20d28e8db2a2cc0386d57b8dad4b5d5Adam Powell            ViewGroup.LayoutParams lp = getLayoutParams();
2279151103ff20d28e8db2a2cc0386d57b8dad4b5d5Adam Powell            LayoutParams iconLp = (LayoutParams) mIconView.getLayoutParams();
2289151103ff20d28e8db2a2cc0386d57b8dad4b5d5Adam Powell            if (lp.height > 0 && iconLp.width <= 0) {
2299151103ff20d28e8db2a2cc0386d57b8dad4b5d5Adam Powell                iconLp.width = lp.height;
2309151103ff20d28e8db2a2cc0386d57b8dad4b5d5Adam Powell            }
2319151103ff20d28e8db2a2cc0386d57b8dad4b5d5Adam Powell        }
2329151103ff20d28e8db2a2cc0386d57b8dad4b5d5Adam Powell        super.onMeasure(widthMeasureSpec, heightMeasureSpec);
2339151103ff20d28e8db2a2cc0386d57b8dad4b5d5Adam Powell    }
2349151103ff20d28e8db2a2cc0386d57b8dad4b5d5Adam Powell
2359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    private void insertIconView() {
236696cba573e651b0e4f18a4718627c8ccecb3bda0Adam Powell        LayoutInflater inflater = getInflater();
2379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        mIconView = (ImageView) inflater.inflate(com.android.internal.R.layout.list_menu_item_icon,
2389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                this, false);
2399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        addView(mIconView, 0);
2409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
2419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
2429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    private void insertRadioButton() {
243696cba573e651b0e4f18a4718627c8ccecb3bda0Adam Powell        LayoutInflater inflater = getInflater();
2449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        mRadioButton =
2459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                (RadioButton) inflater.inflate(com.android.internal.R.layout.list_menu_item_radio,
2469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                this, false);
2479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        addView(mRadioButton);
2489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
2499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
2509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    private void insertCheckBox() {
251696cba573e651b0e4f18a4718627c8ccecb3bda0Adam Powell        LayoutInflater inflater = getInflater();
2529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        mCheckBox =
2539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                (CheckBox) inflater.inflate(com.android.internal.R.layout.list_menu_item_checkbox,
2549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                this, false);
2559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        addView(mCheckBox);
2569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
2579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
2589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public boolean prefersCondensedTitle() {
2599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        return false;
2609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
2619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
2629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public boolean showsIcon() {
2639151103ff20d28e8db2a2cc0386d57b8dad4b5d5Adam Powell        return mForceShowIcon;
2649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
2659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
266696cba573e651b0e4f18a4718627c8ccecb3bda0Adam Powell    private LayoutInflater getInflater() {
267696cba573e651b0e4f18a4718627c8ccecb3bda0Adam Powell        if (mInflater == null) {
268696cba573e651b0e4f18a4718627c8ccecb3bda0Adam Powell            mInflater = LayoutInflater.from(mContext);
269696cba573e651b0e4f18a4718627c8ccecb3bda0Adam Powell        }
270696cba573e651b0e4f18a4718627c8ccecb3bda0Adam Powell        return mInflater;
271696cba573e651b0e4f18a4718627c8ccecb3bda0Adam Powell    }
2729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
273