1 package com.actionbarsherlock.internal.view.menu;
3 import java.util.WeakHashMap;
4 import android.content.ComponentName;
5 import android.content.Intent;
6 import android.view.KeyEvent;
7 import com.actionbarsherlock.view.Menu;
8 import com.actionbarsherlock.view.MenuItem;
9 import com.actionbarsherlock.view.SubMenu;
11 public class MenuWrapper implements Menu {
12 private final android.view.Menu mNativeMenu;
14 private final WeakHashMap<android.view.MenuItem, MenuItem> mNativeMap =
15 new WeakHashMap<android.view.MenuItem, MenuItem>();
18 public MenuWrapper(android.view.Menu nativeMenu) {
19 mNativeMenu = nativeMenu;
22 public android.view.Menu unwrap() {
26 private MenuItem addInternal(android.view.MenuItem nativeItem) {
27 MenuItem item = new MenuItemWrapper(nativeItem);
28 mNativeMap.put(nativeItem, item);
33 public MenuItem add(CharSequence title) {
34 return addInternal(mNativeMenu.add(title));
38 public MenuItem add(int titleRes) {
39 return addInternal(mNativeMenu.add(titleRes));
43 public MenuItem add(int groupId, int itemId, int order, CharSequence title) {
44 return addInternal(mNativeMenu.add(groupId, itemId, order, title));
48 public MenuItem add(int groupId, int itemId, int order, int titleRes) {
49 return addInternal(mNativeMenu.add(groupId, itemId, order, titleRes));
52 private SubMenu addInternal(android.view.SubMenu nativeSubMenu) {
53 SubMenu subMenu = new SubMenuWrapper(nativeSubMenu);
54 android.view.MenuItem nativeItem = nativeSubMenu.getItem();
55 MenuItem item = subMenu.getItem();
56 mNativeMap.put(nativeItem, item);
61 public SubMenu addSubMenu(CharSequence title) {
62 return addInternal(mNativeMenu.addSubMenu(title));
66 public SubMenu addSubMenu(int titleRes) {
67 return addInternal(mNativeMenu.addSubMenu(titleRes));
71 public SubMenu addSubMenu(int groupId, int itemId, int order, CharSequence title) {
72 return addInternal(mNativeMenu.addSubMenu(groupId, itemId, order, title));
76 public SubMenu addSubMenu(int groupId, int itemId, int order, int titleRes) {
77 return addInternal(mNativeMenu.addSubMenu(groupId, itemId, order, titleRes));
81 public int addIntentOptions(int groupId, int itemId, int order, ComponentName caller, Intent[] specifics, Intent intent, int flags, MenuItem[] outSpecificItems) {
82 android.view.MenuItem[] nativeOutItems = new android.view.MenuItem[outSpecificItems.length];
83 int result = mNativeMenu.addIntentOptions(groupId, itemId, order, caller, specifics, intent, flags, nativeOutItems);
84 for (int i = 0, length = outSpecificItems.length; i < length; i++) {
85 outSpecificItems[i] = new MenuItemWrapper(nativeOutItems[i]);
91 public void removeItem(int id) {
92 mNativeMenu.removeItem(id);
96 public void removeGroup(int groupId) {
97 mNativeMenu.removeGroup(groupId);
101 public void clear() {
107 public void setGroupCheckable(int group, boolean checkable, boolean exclusive) {
108 mNativeMenu.setGroupCheckable(group, checkable, exclusive);
112 public void setGroupVisible(int group, boolean visible) {
113 mNativeMenu.setGroupVisible(group, visible);
117 public void setGroupEnabled(int group, boolean enabled) {
118 mNativeMenu.setGroupEnabled(group, enabled);
122 public boolean hasVisibleItems() {
123 return mNativeMenu.hasVisibleItems();
127 public MenuItem findItem(int id) {
128 android.view.MenuItem nativeItem = mNativeMenu.findItem(id);
129 return findItem(nativeItem);
132 public MenuItem findItem(android.view.MenuItem nativeItem) {
133 if (nativeItem == null) {
137 MenuItem wrapped = mNativeMap.get(nativeItem);
138 if (wrapped != null) {
142 return addInternal(nativeItem);
147 return mNativeMenu.size();
151 public MenuItem getItem(int index) {
152 android.view.MenuItem nativeItem = mNativeMenu.getItem(index);
153 return findItem(nativeItem);
157 public void close() {
162 public boolean performShortcut(int keyCode, KeyEvent event, int flags) {
163 return mNativeMenu.performShortcut(keyCode, event, flags);
167 public boolean isShortcutKey(int keyCode, KeyEvent event) {
168 return mNativeMenu.isShortcutKey(keyCode, event);
172 public boolean performIdentifierAction(int id, int flags) {
173 return mNativeMenu.performIdentifierAction(id, flags);
177 public void setQwertyMode(boolean isQwerty) {
178 mNativeMenu.setQwertyMode(isQwerty);