create changelog entry
[debian/openrocket] / android-libraries / 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         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]);
86         }
87         return result;
88     }
89
90     @Override
91     public void removeItem(int id) {
92         mNativeMenu.removeItem(id);
93     }
94
95     @Override
96     public void removeGroup(int groupId) {
97         mNativeMenu.removeGroup(groupId);
98     }
99
100     @Override
101     public void clear() {
102         mNativeMap.clear();
103         mNativeMenu.clear();
104     }
105
106     @Override
107     public void setGroupCheckable(int group, boolean checkable, boolean exclusive) {
108         mNativeMenu.setGroupCheckable(group, checkable, exclusive);
109     }
110
111     @Override
112     public void setGroupVisible(int group, boolean visible) {
113         mNativeMenu.setGroupVisible(group, visible);
114     }
115
116     @Override
117     public void setGroupEnabled(int group, boolean enabled) {
118         mNativeMenu.setGroupEnabled(group, enabled);
119     }
120
121     @Override
122     public boolean hasVisibleItems() {
123         return mNativeMenu.hasVisibleItems();
124     }
125
126     @Override
127     public MenuItem findItem(int id) {
128         android.view.MenuItem nativeItem = mNativeMenu.findItem(id);
129         return findItem(nativeItem);
130     }
131
132     public MenuItem findItem(android.view.MenuItem nativeItem) {
133         if (nativeItem == null) {
134             return null;
135         }
136
137         MenuItem wrapped = mNativeMap.get(nativeItem);
138         if (wrapped != null) {
139             return wrapped;
140         }
141
142         return addInternal(nativeItem);
143     }
144
145     @Override
146     public int size() {
147         return mNativeMenu.size();
148     }
149
150     @Override
151     public MenuItem getItem(int index) {
152         android.view.MenuItem nativeItem = mNativeMenu.getItem(index);
153         return findItem(nativeItem);
154     }
155
156     @Override
157     public void close() {
158         mNativeMenu.close();
159     }
160
161     @Override
162     public boolean performShortcut(int keyCode, KeyEvent event, int flags) {
163         return mNativeMenu.performShortcut(keyCode, event, flags);
164     }
165
166     @Override
167     public boolean isShortcutKey(int keyCode, KeyEvent event) {
168         return mNativeMenu.isShortcutKey(keyCode, event);
169     }
170
171     @Override
172     public boolean performIdentifierAction(int id, int flags) {
173         return mNativeMenu.performIdentifierAction(id, flags);
174     }
175
176     @Override
177     public void setQwertyMode(boolean isQwerty) {
178         mNativeMenu.setQwertyMode(isQwerty);
179     }
180 }