1package com.xtremelabs.robolectric.tester.android.view;
2
3import android.content.ComponentName;
4import android.content.Context;
5import android.content.Intent;
6import android.view.KeyEvent;
7import android.view.Menu;
8import android.view.MenuItem;
9import android.view.SubMenu;
10
11import java.util.ArrayList;
12import java.util.List;
13
14public class TestMenu implements Menu {
15    private List<MenuItem> menuItems = new ArrayList<MenuItem>();
16    private Context context;
17
18    public TestMenu() {
19        this(null);
20    }
21
22    public TestMenu(Context context) {
23        this.context = context;
24    }
25
26    @Override
27    public MenuItem add(CharSequence title) {
28        return add(0, 0, 0, title);
29    }
30
31    @Override
32    public MenuItem add(int titleRes) {
33        return add(0, 0, 0, titleRes);
34    }
35
36    @Override
37    public MenuItem add(int groupId, int itemId, int order, CharSequence title) {
38        TestMenuItem menuItem = new TestMenuItem();
39        menuItems.add(menuItem);
40        menuItem.setItemId(itemId);
41        menuItem.setTitle(title);
42        return menuItem;
43    }
44
45    @Override
46    public MenuItem add(int groupId, int itemId, int order, int titleRes) {
47        return add(groupId, itemId, order, context.getResources().getString(titleRes));
48    }
49
50    @Override
51    public SubMenu addSubMenu(CharSequence title) {
52        TestSubMenu tsm = new TestSubMenu();
53        TestMenuItem menuItem = new TestMenuItem();
54        menuItems.add(menuItem);
55        menuItem.setTitle(title);
56        menuItem.setSubMenu(tsm);
57        return tsm;
58    }
59
60    @Override
61    public SubMenu addSubMenu(int titleRes) {
62        TestSubMenu tsm = new TestSubMenu();
63        TestMenuItem menuItem = new TestMenuItem();
64        menuItems.add(menuItem);
65        menuItem.setTitle(titleRes);
66        menuItem.setSubMenu(tsm);
67        return tsm;
68    }
69
70    @Override
71    public SubMenu addSubMenu(int groupId, int itemId, int order, CharSequence title) {
72        TestSubMenu tsm = new TestSubMenu();
73        TestMenuItem menuItem = new TestMenuItem();
74        menuItems.add(menuItem);
75        menuItem.setItemId(itemId);
76        menuItem.setTitle(title);
77        menuItem.setSubMenu(tsm);
78        return tsm;
79    }
80
81    @Override
82    public SubMenu addSubMenu(int groupId, int itemId, int order, int titleRes) {
83        TestSubMenu tsm = new TestSubMenu();
84        TestMenuItem menuItem = new TestMenuItem();
85        menuItems.add(menuItem);
86        menuItem.setItemId(itemId);
87        menuItem.setTitle(titleRes);
88        menuItem.setSubMenu(tsm);
89        return tsm;
90    }
91
92    @Override
93    public int addIntentOptions(int groupId, int itemId, int order, ComponentName caller, Intent[] specifics,
94                                Intent intent, int flags, MenuItem[] outSpecificItems) {
95        return 0;
96    }
97
98    @Override
99    public void removeItem(int id) {
100        MenuItem menuItem = findItem(id);
101        menuItems.remove(menuItem);
102    }
103
104    @Override
105    public void removeGroup(int groupId) {
106    }
107
108    @Override
109    public void clear() {
110        menuItems.clear();
111    }
112
113    @Override
114    public void setGroupCheckable(int group, boolean checkable, boolean exclusive) {
115    }
116
117    @Override
118    public void setGroupVisible(int group, boolean visible) {
119    }
120
121    @Override
122    public void setGroupEnabled(int group, boolean enabled) {
123    }
124
125    @Override
126    public boolean hasVisibleItems() {
127        return false;
128    }
129
130    @Override
131    public MenuItem findItem(int id) {
132        for (MenuItem item : menuItems) {
133            if (item.getItemId() == id) {
134                return item;
135            }
136        }
137        return null;
138    }
139
140    @Override
141    public int size() {
142        return menuItems.size();
143    }
144
145    @Override
146    public MenuItem getItem(int index) {
147        return menuItems.get(index);
148    }
149
150    @Override
151    public void close() {
152    }
153
154    @Override
155    public boolean performShortcut(int keyCode, KeyEvent event, int flags) {
156        return false;
157    }
158
159    @Override
160    public boolean isShortcutKey(int keyCode, KeyEvent event) {
161        return false;
162    }
163
164    @Override
165    public boolean performIdentifierAction(int id, int flags) {
166        return false;
167    }
168
169    @Override
170    public void setQwertyMode(boolean isQwerty) {
171    }
172
173    public TestMenuItem findMenuItem(CharSequence title) {
174        for (int i = 0; i < size(); i++) {
175            TestMenuItem menuItem = (TestMenuItem) getItem(i);
176            if (menuItem.getTitle().equals(title)) {
177                return menuItem;
178            }
179        }
180        return null;
181    }
182}
183