ActionMenuItemView.java revision c619e74cc62678cef09b5f92e87e762a1f02aab7
1/*
2 * Copyright (C) 2010 The Android Open Source Project
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 *      http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
16
17package com.android.internal.view.menu;
18
19import android.content.Context;
20import android.graphics.drawable.Drawable;
21import android.text.TextUtils;
22import android.util.AttributeSet;
23import android.view.View;
24import android.widget.Button;
25import android.widget.ImageButton;
26import android.widget.LinearLayout;
27
28/**
29 * @hide
30 */
31public class ActionMenuItemView extends LinearLayout
32        implements MenuView.ItemView, View.OnClickListener, ActionMenuView.ActionMenuChildView {
33    private static final String TAG = "ActionMenuItemView";
34
35    private MenuItemImpl mItemData;
36    private CharSequence mTitle;
37    private MenuBuilder.ItemInvoker mItemInvoker;
38
39    private ImageButton mImageButton;
40    private Button mTextButton;
41
42    public ActionMenuItemView(Context context) {
43        this(context, null);
44    }
45
46    public ActionMenuItemView(Context context, AttributeSet attrs) {
47        super(context, attrs);
48    }
49
50    public ActionMenuItemView(Context context, AttributeSet attrs, int defStyle) {
51        super(context, attrs, defStyle);
52    }
53
54    @Override
55    public void onFinishInflate() {
56        mImageButton = (ImageButton) findViewById(com.android.internal.R.id.imageButton);
57        mTextButton = (Button) findViewById(com.android.internal.R.id.textButton);
58        mImageButton.setOnClickListener(this);
59        mTextButton.setOnClickListener(this);
60        setOnClickListener(this);
61    }
62
63    public MenuItemImpl getItemData() {
64        return mItemData;
65    }
66
67    public void initialize(MenuItemImpl itemData, int menuType) {
68        mItemData = itemData;
69
70        setIcon(itemData.getIcon());
71        setTitle(itemData.getTitleForItemView(this)); // Title only takes effect if there is no icon
72        setId(itemData.getItemId());
73
74        setVisibility(itemData.isVisible() ? View.VISIBLE : View.GONE);
75        setEnabled(itemData.isEnabled());
76    }
77
78    @Override
79    public void setEnabled(boolean enabled) {
80        super.setEnabled(enabled);
81        mImageButton.setEnabled(enabled);
82        mTextButton.setEnabled(enabled);
83    }
84
85    public void onClick(View v) {
86        if (mItemInvoker != null) {
87            mItemInvoker.invokeItem(mItemData);
88        }
89    }
90
91    public void setItemInvoker(MenuBuilder.ItemInvoker invoker) {
92        mItemInvoker = invoker;
93    }
94
95    public boolean prefersCondensedTitle() {
96        return true;
97    }
98
99    public void setCheckable(boolean checkable) {
100        // TODO Support checkable action items
101    }
102
103    public void setChecked(boolean checked) {
104        // TODO Support checkable action items
105    }
106
107    private void updateTextButtonVisibility() {
108        boolean visible = !TextUtils.isEmpty(mTextButton.getText());
109        visible = visible && (mImageButton.getDrawable() == null || mItemData.showsTextAsAction());
110        mTextButton.setVisibility(visible ? VISIBLE : GONE);
111    }
112
113    public void setIcon(Drawable icon) {
114        mImageButton.setImageDrawable(icon);
115        if (icon != null) {
116            mImageButton.setVisibility(VISIBLE);
117        } else {
118            mImageButton.setVisibility(GONE);
119        }
120
121        updateTextButtonVisibility();
122    }
123
124    public boolean hasText() {
125        return mTextButton.getVisibility() != GONE;
126    }
127
128    public void setShortcut(boolean showShortcut, char shortcutKey) {
129        // Action buttons don't show text for shortcut keys.
130    }
131
132    public void setTitle(CharSequence title) {
133        mTitle = title;
134
135        // populate accessibility description with title
136        setContentDescription(title);
137
138        mTextButton.setText(mTitle);
139
140        updateTextButtonVisibility();
141    }
142
143    public boolean showsIcon() {
144        return true;
145    }
146
147    public boolean needsDividerBefore() {
148        return hasText() && mItemData.getIcon() == null;
149    }
150
151    public boolean needsDividerAfter() {
152        return hasText();
153    }
154}
155