xref: /aosp_15_r20/external/robolectric/shadows/framework/src/main/java/org/robolectric/shadows/ShadowPopupMenu.java (revision e6ba16074e6af37d123cb567d575f496bf0a58ee)
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