1 package org.robolectric.shadows; 2 3 import static org.robolectric.util.reflector.Reflector.reflector; 4 5 import android.widget.PopupMenu; 6 import org.robolectric.RuntimeEnvironment; 7 import org.robolectric.annotation.Implementation; 8 import org.robolectric.annotation.Implements; 9 import org.robolectric.annotation.RealObject; 10 import org.robolectric.shadow.api.Shadow; 11 import org.robolectric.util.reflector.Direct; 12 import org.robolectric.util.reflector.ForType; 13 14 @Implements(PopupMenu.class) 15 public class ShadowPopupMenu { 16 17 @RealObject private PopupMenu realPopupMenu; 18 19 private boolean isShowing; 20 private PopupMenu.OnMenuItemClickListener onMenuItemClickListener; 21 22 @Implementation show()23 protected void show() { 24 this.isShowing = true; 25 setLatestPopupMenu(this); 26 reflector(PopupMenuReflector.class, realPopupMenu).show(); 27 } 28 29 @Implementation dismiss()30 protected void dismiss() { 31 this.isShowing = false; 32 reflector(PopupMenuReflector.class, realPopupMenu).dismiss(); 33 } 34 35 @Implementation setOnMenuItemClickListener(PopupMenu.OnMenuItemClickListener listener)36 protected void setOnMenuItemClickListener(PopupMenu.OnMenuItemClickListener listener) { 37 this.onMenuItemClickListener = listener; 38 reflector(PopupMenuReflector.class, realPopupMenu).setOnMenuItemClickListener(listener); 39 } 40 isShowing()41 public boolean isShowing() { 42 return isShowing; 43 } 44 getLatestPopupMenu()45 public static PopupMenu getLatestPopupMenu() { 46 ShadowApplication shadowApplication = Shadow.extract(RuntimeEnvironment.getApplication()); 47 ShadowPopupMenu popupMenu = shadowApplication.getLatestPopupMenu(); 48 return popupMenu == null ? null : popupMenu.realPopupMenu; 49 } 50 setLatestPopupMenu(ShadowPopupMenu latestPopupMenu)51 public static void setLatestPopupMenu(ShadowPopupMenu latestPopupMenu) { 52 ShadowApplication shadowApplication = Shadow.extract(RuntimeEnvironment.getApplication()); 53 if (shadowApplication != null) shadowApplication.setLatestPopupMenu(latestPopupMenu); 54 } 55 getOnMenuItemClickListener()56 public PopupMenu.OnMenuItemClickListener getOnMenuItemClickListener() { 57 return onMenuItemClickListener; 58 } 59 60 @ForType(PopupMenu.class) 61 interface PopupMenuReflector { 62 63 @Direct show()64 void show(); 65 66 @Direct dismiss()67 void dismiss(); 68 69 @Direct setOnMenuItemClickListener(PopupMenu.OnMenuItemClickListener listener)70 void setOnMenuItemClickListener(PopupMenu.OnMenuItemClickListener listener); 71 } 72 } 73