1 package org.robolectric.fakes; 2 3 import android.content.Context; 4 import android.content.Intent; 5 import android.graphics.drawable.Drawable; 6 import android.view.ActionProvider; 7 import android.view.ContextMenu; 8 import android.view.LayoutInflater; 9 import android.view.MenuItem; 10 import android.view.SubMenu; 11 import android.view.View; 12 import org.robolectric.RuntimeEnvironment; 13 14 /** 15 * Robolectric implementation of {@link android.view.MenuItem}. 16 */ 17 public class RoboMenuItem implements MenuItem { 18 private int itemId; 19 private int groupId; 20 private CharSequence title; 21 private boolean enabled = true; 22 private boolean checked = false; 23 private boolean checkable = false; 24 private boolean visible = true; 25 private boolean expanded = false; 26 private OnMenuItemClickListener menuItemClickListener; 27 public Drawable icon; 28 private Intent intent; 29 private SubMenu subMenu; 30 private View actionView; 31 private OnActionExpandListener actionExpandListener; 32 private int order; 33 private Context context; 34 RoboMenuItem()35 public RoboMenuItem() { 36 this(RuntimeEnvironment.getApplication()); 37 } 38 RoboMenuItem(Context context)39 public RoboMenuItem(Context context) { 40 this.context = context; 41 } 42 RoboMenuItem(int itemId)43 public RoboMenuItem(int itemId) { 44 this.itemId = itemId; 45 } 46 setItemId(int itemId)47 public void setItemId(int itemId) { 48 this.itemId = itemId; 49 } 50 setGroupId(int groupId)51 public void setGroupId(int groupId) { 52 this.groupId = groupId; 53 } 54 55 @Override getItemId()56 public int getItemId() { 57 return itemId; 58 } 59 60 @Override getGroupId()61 public int getGroupId() { 62 return groupId; 63 } 64 65 @Override getOrder()66 public int getOrder() { 67 return order; 68 } 69 setOrder(int order)70 public void setOrder(int order) { 71 this.order = order; 72 } 73 74 @Override setTitle(CharSequence title)75 public MenuItem setTitle(CharSequence title) { 76 this.title = title; 77 return this; 78 } 79 80 @Override setTitle(int title)81 public MenuItem setTitle(int title) { 82 return this; 83 } 84 85 @Override getTitle()86 public CharSequence getTitle() { 87 return title; 88 } 89 90 @Override setTitleCondensed(CharSequence title)91 public MenuItem setTitleCondensed(CharSequence title) { 92 return this; 93 } 94 95 @Override getTitleCondensed()96 public CharSequence getTitleCondensed() { 97 return null; 98 } 99 100 @Override setIcon(Drawable icon)101 public MenuItem setIcon(Drawable icon) { 102 this.icon = icon; 103 return this; 104 } 105 106 @Override setIcon(int iconRes)107 public MenuItem setIcon(int iconRes) { 108 this.icon = iconRes == 0 ? null : context.getResources().getDrawable(iconRes); 109 return this; 110 } 111 112 @Override getIcon()113 public Drawable getIcon() { 114 return this.icon; 115 } 116 117 @Override setIntent(Intent intent)118 public MenuItem setIntent(Intent intent) { 119 this.intent = intent; 120 return this; 121 } 122 123 @Override getIntent()124 public Intent getIntent() { 125 return this.intent; 126 } 127 128 @Override setShortcut(char numericChar, char alphaChar)129 public MenuItem setShortcut(char numericChar, char alphaChar) { 130 return this; 131 } 132 133 @Override setNumericShortcut(char numericChar)134 public MenuItem setNumericShortcut(char numericChar) { 135 return this; 136 } 137 138 @Override getNumericShortcut()139 public char getNumericShortcut() { 140 return 0; 141 } 142 143 @Override setAlphabeticShortcut(char alphaChar)144 public MenuItem setAlphabeticShortcut(char alphaChar) { 145 return this; 146 } 147 148 @Override getAlphabeticShortcut()149 public char getAlphabeticShortcut() { 150 return 0; 151 } 152 153 @Override setCheckable(boolean checkable)154 public MenuItem setCheckable(boolean checkable) { 155 this.checkable = checkable; 156 return this; 157 } 158 159 @Override isCheckable()160 public boolean isCheckable() { 161 return checkable; 162 } 163 164 @Override setChecked(boolean checked)165 public MenuItem setChecked(boolean checked) { 166 this.checked = checked; 167 return this; 168 } 169 170 @Override isChecked()171 public boolean isChecked() { 172 return checked; 173 } 174 175 @Override setVisible(boolean visible)176 public MenuItem setVisible(boolean visible) { 177 this.visible = visible; 178 return this; 179 } 180 181 @Override isVisible()182 public boolean isVisible() { 183 return visible; 184 } 185 186 @Override setEnabled(boolean enabled)187 public MenuItem setEnabled(boolean enabled) { 188 this.enabled = enabled; 189 return this; 190 } 191 192 @Override isEnabled()193 public boolean isEnabled() { 194 return enabled; 195 } 196 197 @Override hasSubMenu()198 public boolean hasSubMenu() { 199 return subMenu != null; 200 } 201 202 @Override getSubMenu()203 public SubMenu getSubMenu() { 204 return subMenu; 205 } 206 setSubMenu(SubMenu subMenu)207 public void setSubMenu(SubMenu subMenu) { 208 this.subMenu = subMenu; 209 } 210 211 @Override setOnMenuItemClickListener(OnMenuItemClickListener menuItemClickListener)212 public MenuItem setOnMenuItemClickListener(OnMenuItemClickListener menuItemClickListener) { 213 this.menuItemClickListener = menuItemClickListener; 214 return this; 215 } 216 217 @Override getMenuInfo()218 public ContextMenu.ContextMenuInfo getMenuInfo() { 219 return null; 220 } 221 click()222 public void click() { 223 if (enabled && menuItemClickListener != null) { 224 menuItemClickListener.onMenuItemClick(this); 225 } else if (enabled && intent != null) { 226 context.startActivity(intent); 227 } 228 } 229 230 @Override setShowAsAction(int actionEnum)231 public void setShowAsAction(int actionEnum) { 232 } 233 234 @Override setShowAsActionFlags(int actionEnum)235 public MenuItem setShowAsActionFlags(int actionEnum) { 236 return this; 237 } 238 239 @Override setActionView(View view)240 public MenuItem setActionView(View view) { 241 actionView = view; 242 return this; 243 } 244 245 @Override setActionView(int resId)246 public MenuItem setActionView(int resId) { 247 actionView = LayoutInflater.from(context).inflate(resId, null); 248 return this; 249 } 250 251 @Override getActionView()252 public View getActionView() { 253 return actionView; 254 } 255 256 @Override setActionProvider(ActionProvider actionProvider)257 public MenuItem setActionProvider(ActionProvider actionProvider) { 258 return this; 259 } 260 261 @Override getActionProvider()262 public ActionProvider getActionProvider() { 263 return null; 264 } 265 266 @Override expandActionView()267 public boolean expandActionView() { 268 if (actionView != null) { 269 if (actionExpandListener != null) { 270 actionExpandListener.onMenuItemActionExpand(this); 271 } 272 273 expanded = true; 274 return true; 275 } 276 277 return false; 278 } 279 280 @Override collapseActionView()281 public boolean collapseActionView() { 282 if (actionView != null) { 283 if (actionExpandListener != null) { 284 actionExpandListener.onMenuItemActionCollapse(this); 285 } 286 287 expanded = false; 288 return true; 289 } 290 291 return false; 292 } 293 294 @Override isActionViewExpanded()295 public boolean isActionViewExpanded() { 296 return expanded; 297 } 298 299 @Override setOnActionExpandListener(OnActionExpandListener listener)300 public MenuItem setOnActionExpandListener(OnActionExpandListener listener) { 301 actionExpandListener = listener; 302 return this; 303 } 304 } 305 306