blob: 3325df617de9bb07780028b646adf59421417cf9 [file] [log] [blame]
Adam Powell96675b12010-06-10 18:58:59 -07001/*
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.util.AttributeSet;
Adam Powell96675b12010-06-10 18:58:59 -070022import android.view.View;
Adam Powell1f9c7af2010-08-03 11:26:07 -070023import android.widget.Button;
Adam Powell96675b12010-06-10 18:58:59 -070024import android.widget.ImageButton;
Adam Powelld8404b22010-10-13 14:26:41 -070025import android.widget.LinearLayout;
Adam Powell96675b12010-06-10 18:58:59 -070026
27/**
28 * @hide
29 */
Adam Powelld8404b22010-10-13 14:26:41 -070030public class ActionMenuItemView extends LinearLayout
Adam Powell1f9c7af2010-08-03 11:26:07 -070031 implements MenuView.ItemView, View.OnClickListener {
Adam Powell96675b12010-06-10 18:58:59 -070032 private static final String TAG = "ActionMenuItemView";
Jeff Sharkeya8a72c32010-07-31 18:27:13 -070033
Adam Powell96675b12010-06-10 18:58:59 -070034 private MenuItemImpl mItemData;
35 private CharSequence mTitle;
36 private MenuBuilder.ItemInvoker mItemInvoker;
Jeff Sharkeya8a72c32010-07-31 18:27:13 -070037
Adam Powell1f9c7af2010-08-03 11:26:07 -070038 private ImageButton mImageButton;
39 private Button mTextButton;
40
Adam Powell96675b12010-06-10 18:58:59 -070041 public ActionMenuItemView(Context context) {
42 this(context, null);
43 }
Jeff Sharkeya8a72c32010-07-31 18:27:13 -070044
Adam Powell96675b12010-06-10 18:58:59 -070045 public ActionMenuItemView(Context context, AttributeSet attrs) {
Adam Powellbe4d68e2010-10-08 18:16:34 -070046 super(context, attrs);
Adam Powell96675b12010-06-10 18:58:59 -070047 }
Jeff Sharkeya8a72c32010-07-31 18:27:13 -070048
Adam Powell96675b12010-06-10 18:58:59 -070049 public ActionMenuItemView(Context context, AttributeSet attrs, int defStyle) {
50 super(context, attrs, defStyle);
51 }
52
Adam Powell1f9c7af2010-08-03 11:26:07 -070053 @Override
54 public void onFinishInflate() {
55 mImageButton = (ImageButton) findViewById(com.android.internal.R.id.imageButton);
56 mTextButton = (Button) findViewById(com.android.internal.R.id.textButton);
57 mImageButton.setOnClickListener(this);
58 mTextButton.setOnClickListener(this);
59 }
60
Adam Powell96675b12010-06-10 18:58:59 -070061 public MenuItemImpl getItemData() {
62 return mItemData;
63 }
64
65 public void initialize(MenuItemImpl itemData, int menuType) {
66 mItemData = itemData;
Jeff Sharkeya8a72c32010-07-31 18:27:13 -070067
Adam Powell96675b12010-06-10 18:58:59 -070068 setIcon(itemData.getIcon());
Adam Powelle7d46842011-01-13 21:36:09 -080069 setTitle(itemData.getTitleForItemView(this)); // Title only takes effect if there is no icon
Adam Powell96675b12010-06-10 18:58:59 -070070 setId(itemData.getItemId());
Jeff Sharkeya8a72c32010-07-31 18:27:13 -070071
Adam Powell96675b12010-06-10 18:58:59 -070072 setVisibility(itemData.isVisible() ? View.VISIBLE : View.GONE);
73 setEnabled(itemData.isEnabled());
74 }
Jeff Sharkeya8a72c32010-07-31 18:27:13 -070075
Adam Powell00df32d2010-09-02 13:58:24 -070076 @Override
77 public void setEnabled(boolean enabled) {
78 super.setEnabled(enabled);
79 mImageButton.setEnabled(enabled);
80 mTextButton.setEnabled(enabled);
81 }
82
Adam Powell1f9c7af2010-08-03 11:26:07 -070083 public void onClick(View v) {
84 if (mItemInvoker != null) {
85 mItemInvoker.invokeItem(mItemData);
Adam Powell96675b12010-06-10 18:58:59 -070086 }
87 }
Jeff Sharkeya8a72c32010-07-31 18:27:13 -070088
Adam Powell96675b12010-06-10 18:58:59 -070089 public void setItemInvoker(MenuBuilder.ItemInvoker invoker) {
90 mItemInvoker = invoker;
91 }
92
93 public boolean prefersCondensedTitle() {
Adam Powelle7d46842011-01-13 21:36:09 -080094 return true;
Adam Powell96675b12010-06-10 18:58:59 -070095 }
96
97 public void setCheckable(boolean checkable) {
98 // TODO Support checkable action items
99 }
100
101 public void setChecked(boolean checked) {
102 // TODO Support checkable action items
103 }
104
105 public void setIcon(Drawable icon) {
Adam Powell1f9c7af2010-08-03 11:26:07 -0700106 mImageButton.setImageDrawable(icon);
107 if (icon != null) {
108 mImageButton.setVisibility(VISIBLE);
Adam Powell1f9c7af2010-08-03 11:26:07 -0700109 } else {
110 mImageButton.setVisibility(GONE);
111 }
Adam Powell9f125d32011-01-14 15:36:56 -0800112
113 mTextButton.setVisibility(icon == null || mItemData.showsTextAsAction() ? VISIBLE : GONE);
Adam Powell96675b12010-06-10 18:58:59 -0700114 }
Adam Powellbe4d68e2010-10-08 18:16:34 -0700115
116 public boolean hasText() {
117 return mTextButton.getVisibility() != GONE;
118 }
Adam Powell96675b12010-06-10 18:58:59 -0700119
120 public void setShortcut(boolean showShortcut, char shortcutKey) {
121 // Action buttons don't show text for shortcut keys.
122 }
123
124 public void setTitle(CharSequence title) {
125 mTitle = title;
Jeff Sharkeya8a72c32010-07-31 18:27:13 -0700126
127 // populate accessibility description with title
128 setContentDescription(title);
Adam Powell1f9c7af2010-08-03 11:26:07 -0700129
Adam Powelld8404b22010-10-13 14:26:41 -0700130 if (mImageButton.getDrawable() == null || mItemData.showsTextAsAction()) {
Adam Powell1f9c7af2010-08-03 11:26:07 -0700131 mTextButton.setText(mTitle);
132 mTextButton.setVisibility(VISIBLE);
133 }
Adam Powell96675b12010-06-10 18:58:59 -0700134 }
135
136 public boolean showsIcon() {
137 return true;
138 }
Adam Powell96675b12010-06-10 18:58:59 -0700139}