Wed, 31 Dec 2014 07:22:50 +0100
Correct previous dual key logic pending first delivery installment.
1 /* This Source Code Form is subject to the terms of the Mozilla Public
2 * License, v. 2.0. If a copy of the MPL was not distributed with this file,
3 * You can obtain one at http://mozilla.org/MPL/2.0/. */
5 package org.mozilla.gecko.menu;
7 import org.mozilla.gecko.R;
8 import org.mozilla.gecko.widget.GeckoActionProvider;
10 import android.content.Intent;
11 import android.graphics.drawable.Drawable;
12 import android.os.Build;
13 import android.view.ActionProvider;
14 import android.view.ContextMenu;
15 import android.view.MenuItem;
16 import android.view.SubMenu;
17 import android.view.View;
19 public class GeckoMenuItem implements MenuItem {
20 private static final String LOGTAG = "GeckoMenuItem";
22 public static final int SHOW_AS_ACTION_NEVER = 0;
23 public static final int SHOW_AS_ACTION_IF_ROOM = 1;
24 public static final int SHOW_AS_ACTION_ALWAYS = 2;
26 // A View that can show a MenuItem should be able to initialize from
27 // the properties of the MenuItem.
28 public static interface Layout {
29 public void initialize(GeckoMenuItem item);
30 public void setShowIcon(boolean show);
31 }
33 public static interface OnShowAsActionChangedListener {
34 public boolean hasActionItemBar();
35 public void onShowAsActionChanged(GeckoMenuItem item);
36 }
38 private int mId;
39 private int mOrder;
40 private View mActionView;
41 private int mActionEnum;
42 private CharSequence mTitle;
43 private CharSequence mTitleCondensed;
44 private boolean mCheckable = false;
45 private boolean mChecked = false;
46 private boolean mVisible = true;
47 private boolean mEnabled = true;
48 private Drawable mIcon;
49 private int mIconRes;
50 private GeckoActionProvider mActionProvider;
51 private GeckoMenu mMenu;
52 private GeckoSubMenu mSubMenu;
53 private MenuItem.OnMenuItemClickListener mMenuItemClickListener = null;
54 private OnShowAsActionChangedListener mShowAsActionChangedListener;
56 public GeckoMenuItem(GeckoMenu menu, int id, int order, int titleRes) {
57 mMenu = menu;
58 mId = id;
59 mOrder = order;
60 setTitle(titleRes);
61 }
63 public GeckoMenuItem(GeckoMenu menu, int id, int order, CharSequence title) {
64 mMenu = menu;
65 mId = id;
66 mOrder = order;
67 setTitle(title);
68 }
70 @Override
71 public boolean collapseActionView() {
72 return false;
73 }
75 @Override
76 public boolean expandActionView() {
77 return false;
78 }
80 public boolean hasActionProvider() {
81 if (Build.VERSION.SDK_INT < 14) {
82 return false;
83 }
85 return (mActionProvider != null);
86 }
88 public int getActionEnum() {
89 return mActionEnum;
90 }
92 public GeckoActionProvider getGeckoActionProvider() {
93 return mActionProvider;
94 }
96 @Override
97 public ActionProvider getActionProvider() {
98 return null;
99 }
101 @Override
102 public View getActionView() {
103 if (mActionProvider != null) {
104 return mActionProvider.getView();
105 }
107 return mActionView;
108 }
110 @Override
111 public char getAlphabeticShortcut() {
112 return 0;
113 }
115 @Override
116 public int getGroupId() {
117 return 0;
118 }
120 @Override
121 public Drawable getIcon() {
122 if (mIcon == null) {
123 if (mIconRes != 0)
124 return mMenu.getResources().getDrawable(mIconRes);
125 else
126 return null;
127 } else {
128 return mIcon;
129 }
130 }
132 @Override
133 public Intent getIntent() {
134 return null;
135 }
137 @Override
138 public int getItemId() {
139 return mId;
140 }
142 @Override
143 public ContextMenu.ContextMenuInfo getMenuInfo() {
144 return null;
145 }
147 @Override
148 public char getNumericShortcut() {
149 return 0;
150 }
152 @Override
153 public int getOrder() {
154 return mOrder;
155 }
157 @Override
158 public SubMenu getSubMenu() {
159 return mSubMenu;
160 }
162 @Override
163 public CharSequence getTitle() {
164 return mTitle;
165 }
167 @Override
168 public CharSequence getTitleCondensed() {
169 return mTitleCondensed;
170 }
172 @Override
173 public boolean hasSubMenu() {
174 if (mActionProvider != null)
175 return mActionProvider.hasSubMenu();
177 return (mSubMenu != null);
178 }
180 public boolean isActionItem() {
181 return (mActionEnum > 0);
182 }
184 @Override
185 public boolean isActionViewExpanded() {
186 return false;
187 }
189 @Override
190 public boolean isCheckable() {
191 return mCheckable;
192 }
194 @Override
195 public boolean isChecked() {
196 return mChecked;
197 }
199 @Override
200 public boolean isEnabled() {
201 return mEnabled;
202 }
204 @Override
205 public boolean isVisible() {
206 return mVisible;
207 }
209 @Override
210 public MenuItem setActionProvider(ActionProvider actionProvider) {
211 return this;
212 }
214 public MenuItem setActionProvider(GeckoActionProvider actionProvider) {
215 mActionProvider = actionProvider;
216 if (mActionProvider != null) {
217 actionProvider.setOnTargetSelectedListener(new GeckoActionProvider.OnTargetSelectedListener() {
218 @Override
219 public void onTargetSelected() {
220 mMenu.close();
222 // Refresh the menu item to show the high frequency apps.
223 mShowAsActionChangedListener.onShowAsActionChanged(GeckoMenuItem.this);
224 }
225 });
226 }
228 mShowAsActionChangedListener.onShowAsActionChanged(this);
229 return this;
230 }
232 @Override
233 public MenuItem setActionView(int resId) {
234 return this;
235 }
237 @Override
238 public MenuItem setActionView(View view) {
239 return this;
240 }
242 @Override
243 public MenuItem setAlphabeticShortcut(char alphaChar) {
244 return this;
245 }
247 @Override
248 public MenuItem setCheckable(boolean checkable) {
249 mCheckable = checkable;
250 mMenu.onItemChanged(this);
251 return this;
252 }
254 @Override
255 public MenuItem setChecked(boolean checked) {
256 mChecked = checked;
257 mMenu.onItemChanged(this);
258 return this;
259 }
261 @Override
262 public MenuItem setEnabled(boolean enabled) {
263 mEnabled = enabled;
264 mMenu.onItemChanged(this);
265 return this;
266 }
268 @Override
269 public MenuItem setIcon(Drawable icon) {
270 mIcon = icon;
271 mMenu.onItemChanged(this);
272 return this;
273 }
275 @Override
276 public MenuItem setIcon(int iconRes) {
277 mIconRes = iconRes;
278 mMenu.onItemChanged(this);
279 return this;
280 }
282 @Override
283 public MenuItem setIntent(Intent intent) {
284 return this;
285 }
287 @Override
288 public MenuItem setNumericShortcut(char numericChar) {
289 return this;
290 }
292 @Override
293 public MenuItem setOnActionExpandListener(MenuItem.OnActionExpandListener listener) {
294 return this;
295 }
297 @Override
298 public MenuItem setOnMenuItemClickListener(MenuItem.OnMenuItemClickListener menuItemClickListener) {
299 mMenuItemClickListener = menuItemClickListener;
300 return this;
301 }
303 @Override
304 public MenuItem setShortcut(char numericChar, char alphaChar) {
305 return this;
306 }
308 @Override
309 public void setShowAsAction(int actionEnum) {
310 setShowAsAction(actionEnum, 0);
311 }
313 public void setShowAsAction(int actionEnum, int style) {
314 if (mShowAsActionChangedListener == null)
315 return;
317 if (mActionEnum == actionEnum)
318 return;
320 if (actionEnum > 0) {
321 if (!mShowAsActionChangedListener.hasActionItemBar())
322 return;
324 if (!hasActionProvider()) {
325 // Change the type to just an icon
326 MenuItemActionBar actionView;
327 if (style != 0) {
328 actionView = new MenuItemActionBar(mMenu.getContext(), null, style);
329 } else {
330 if (actionEnum == SHOW_AS_ACTION_ALWAYS) {
331 actionView = new MenuItemActionBar(mMenu.getContext());
332 } else {
333 actionView = new MenuItemActionBar(mMenu.getContext(), null, R.attr.menuItemSecondaryActionBarStyle);
334 }
335 }
337 actionView.initialize(this);
338 mActionView = actionView;
339 }
341 mActionEnum = actionEnum;
342 }
344 mShowAsActionChangedListener.onShowAsActionChanged(this);
345 }
347 @Override
348 public MenuItem setShowAsActionFlags(int actionEnum) {
349 return this;
350 }
352 public MenuItem setSubMenu(GeckoSubMenu subMenu) {
353 mSubMenu = subMenu;
354 return this;
355 }
357 @Override
358 public MenuItem setTitle(CharSequence title) {
359 mTitle = title;
360 mMenu.onItemChanged(this);
361 return this;
362 }
364 @Override
365 public MenuItem setTitle(int title) {
366 mTitle = mMenu.getResources().getString(title);
367 mMenu.onItemChanged(this);
368 return this;
369 }
371 @Override
372 public MenuItem setTitleCondensed(CharSequence title) {
373 mTitleCondensed = title;
374 return this;
375 }
377 @Override
378 public MenuItem setVisible(boolean visible) {
379 mVisible = visible;
380 mMenu.onItemChanged(this);
381 return this;
382 }
384 public boolean invoke() {
385 if (mMenuItemClickListener != null)
386 return mMenuItemClickListener.onMenuItemClick(this);
387 else
388 return false;
389 }
391 public void setOnShowAsActionChangedListener(OnShowAsActionChangedListener listener) {
392 mShowAsActionChangedListener = listener;
393 }
394 }