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