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
) {
83 if (outSpecificItems
!= null
) {
84 android
.view
.MenuItem
[] nativeOutItems
= new android
.view
.MenuItem
[outSpecificItems
.length
];
85 result
= mNativeMenu
.addIntentOptions(groupId
, itemId
, order
, caller
, specifics
, intent
, flags
, nativeOutItems
);
86 for (int i
= 0, length
= outSpecificItems
.length
; i
< length
; i
++) {
87 outSpecificItems
[i
] = new MenuItemWrapper(nativeOutItems
[i
]);
90 result
= mNativeMenu
.addIntentOptions(groupId
, itemId
, order
, caller
, specifics
, intent
, flags
, null
);
96 public void removeItem(int id
) {
97 mNativeMenu
.removeItem(id
);
101 public void removeGroup(int groupId
) {
102 mNativeMenu
.removeGroup(groupId
);
106 public void clear() {
112 public void setGroupCheckable(int group
, boolean checkable
, boolean exclusive
) {
113 mNativeMenu
.setGroupCheckable(group
, checkable
, exclusive
);
117 public void setGroupVisible(int group
, boolean visible
) {
118 mNativeMenu
.setGroupVisible(group
, visible
);
122 public void setGroupEnabled(int group
, boolean enabled
) {
123 mNativeMenu
.setGroupEnabled(group
, enabled
);
127 public boolean hasVisibleItems() {
128 return mNativeMenu
.hasVisibleItems();
132 public MenuItem
findItem(int id
) {
133 android
.view
.MenuItem nativeItem
= mNativeMenu
.findItem(id
);
134 return findItem(nativeItem
);
137 public MenuItem
findItem(android
.view
.MenuItem nativeItem
) {
138 if (nativeItem
== null
) {
142 MenuItem wrapped
= mNativeMap
.get(nativeItem
);
143 if (wrapped
!= null
) {
147 return addInternal(nativeItem
);
152 return mNativeMenu
.size();
156 public MenuItem
getItem(int index
) {
157 android
.view
.MenuItem nativeItem
= mNativeMenu
.getItem(index
);
158 return findItem(nativeItem
);
162 public void close() {
167 public boolean performShortcut(int keyCode
, KeyEvent event
, int flags
) {
168 return mNativeMenu
.performShortcut(keyCode
, event
, flags
);
172 public boolean isShortcutKey(int keyCode
, KeyEvent event
) {
173 return mNativeMenu
.isShortcutKey(keyCode
, event
);
177 public boolean performIdentifierAction(int id
, int flags
) {
178 return mNativeMenu
.performIdentifierAction(id
, flags
);
182 public void setQwertyMode(boolean isQwerty
) {
183 mNativeMenu
.setQwertyMode(isQwerty
);