3d4dd42fda33f26540ab3bae891c455bddf7063c
[pub/Android/ownCloud.git] / actionbarsherlock / src / com / actionbarsherlock / internal / view / menu / MenuWrapper.java
1 package com.actionbarsherlock.internal.view.menu;
2
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;
10
11 public class MenuWrapper implements Menu {
12 private final android.view.Menu mNativeMenu;
13
14 private final WeakHashMap<android.view.MenuItem, MenuItem> mNativeMap =
15 new WeakHashMap<android.view.MenuItem, MenuItem>();
16
17
18 public MenuWrapper(android.view.Menu nativeMenu) {
19 mNativeMenu = nativeMenu;
20 }
21
22 public android.view.Menu unwrap() {
23 return mNativeMenu;
24 }
25
26 private MenuItem addInternal(android.view.MenuItem nativeItem) {
27 MenuItem item = new MenuItemWrapper(nativeItem);
28 mNativeMap.put(nativeItem, item);
29 return item;
30 }
31
32 @Override
33 public MenuItem add(CharSequence title) {
34 return addInternal(mNativeMenu.add(title));
35 }
36
37 @Override
38 public MenuItem add(int titleRes) {
39 return addInternal(mNativeMenu.add(titleRes));
40 }
41
42 @Override
43 public MenuItem add(int groupId, int itemId, int order, CharSequence title) {
44 return addInternal(mNativeMenu.add(groupId, itemId, order, title));
45 }
46
47 @Override
48 public MenuItem add(int groupId, int itemId, int order, int titleRes) {
49 return addInternal(mNativeMenu.add(groupId, itemId, order, titleRes));
50 }
51
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);
57 return subMenu;
58 }
59
60 @Override
61 public SubMenu addSubMenu(CharSequence title) {
62 return addInternal(mNativeMenu.addSubMenu(title));
63 }
64
65 @Override
66 public SubMenu addSubMenu(int titleRes) {
67 return addInternal(mNativeMenu.addSubMenu(titleRes));
68 }
69
70 @Override
71 public SubMenu addSubMenu(int groupId, int itemId, int order, CharSequence title) {
72 return addInternal(mNativeMenu.addSubMenu(groupId, itemId, order, title));
73 }
74
75 @Override
76 public SubMenu addSubMenu(int groupId, int itemId, int order, int titleRes) {
77 return addInternal(mNativeMenu.addSubMenu(groupId, itemId, order, titleRes));
78 }
79
80 @Override
81 public int addIntentOptions(int groupId, int itemId, int order, ComponentName caller, Intent[] specifics, Intent intent, int flags, MenuItem[] outSpecificItems) {
82 int result;
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]);
88 }
89 } else {
90 result = mNativeMenu.addIntentOptions(groupId, itemId, order, caller, specifics, intent, flags, null);
91 }
92 return result;
93 }
94
95 @Override
96 public void removeItem(int id) {
97 mNativeMenu.removeItem(id);
98 }
99
100 @Override
101 public void removeGroup(int groupId) {
102 mNativeMenu.removeGroup(groupId);
103 }
104
105 @Override
106 public void clear() {
107 mNativeMap.clear();
108 mNativeMenu.clear();
109 }
110
111 @Override
112 public void setGroupCheckable(int group, boolean checkable, boolean exclusive) {
113 mNativeMenu.setGroupCheckable(group, checkable, exclusive);
114 }
115
116 @Override
117 public void setGroupVisible(int group, boolean visible) {
118 mNativeMenu.setGroupVisible(group, visible);
119 }
120
121 @Override
122 public void setGroupEnabled(int group, boolean enabled) {
123 mNativeMenu.setGroupEnabled(group, enabled);
124 }
125
126 @Override
127 public boolean hasVisibleItems() {
128 return mNativeMenu.hasVisibleItems();
129 }
130
131 @Override
132 public MenuItem findItem(int id) {
133 android.view.MenuItem nativeItem = mNativeMenu.findItem(id);
134 return findItem(nativeItem);
135 }
136
137 public MenuItem findItem(android.view.MenuItem nativeItem) {
138 if (nativeItem == null) {
139 return null;
140 }
141
142 MenuItem wrapped = mNativeMap.get(nativeItem);
143 if (wrapped != null) {
144 return wrapped;
145 }
146
147 return addInternal(nativeItem);
148 }
149
150 @Override
151 public int size() {
152 return mNativeMenu.size();
153 }
154
155 @Override
156 public MenuItem getItem(int index) {
157 android.view.MenuItem nativeItem = mNativeMenu.getItem(index);
158 return findItem(nativeItem);
159 }
160
161 @Override
162 public void close() {
163 mNativeMenu.close();
164 }
165
166 @Override
167 public boolean performShortcut(int keyCode, KeyEvent event, int flags) {
168 return mNativeMenu.performShortcut(keyCode, event, flags);
169 }
170
171 @Override
172 public boolean isShortcutKey(int keyCode, KeyEvent event) {
173 return mNativeMenu.isShortcutKey(keyCode, event);
174 }
175
176 @Override
177 public boolean performIdentifierAction(int id, int flags) {
178 return mNativeMenu.performIdentifierAction(id, flags);
179 }
180
181 @Override
182 public void setQwertyMode(boolean isQwerty) {
183 mNativeMenu.setQwertyMode(isQwerty);
184 }
185 }