• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 package org.robolectric.shadows;
2 
3 import static org.robolectric.util.reflector.Reflector.reflector;
4 
5 import android.view.LayoutInflater;
6 import android.view.View;
7 import android.widget.Adapter;
8 import android.widget.ListView;
9 import com.android.internal.app.AlertController;
10 import java.lang.reflect.InvocationTargetException;
11 import org.robolectric.RuntimeEnvironment;
12 import org.robolectric.annotation.Implementation;
13 import org.robolectric.annotation.Implements;
14 import org.robolectric.annotation.RealObject;
15 import org.robolectric.util.ReflectionHelpers;
16 import org.robolectric.util.reflector.Direct;
17 import org.robolectric.util.reflector.ForType;
18 
19 @Implements(value = AlertController.class, isInAndroidSdk = false)
20 public class ShadowAlertController {
21 
22   @RealObject AlertController realAlertController;
23 
24   private CharSequence title;
25   private CharSequence message;
26   private View view;
27   private View customTitleView;
28   private int iconId;
29 
30   @Implementation
setTitle(CharSequence title)31   public void setTitle(CharSequence title) throws InvocationTargetException, IllegalAccessException {
32     this.title = title;
33     reflector(AlertControllerReflector.class, realAlertController).setTitle(title);
34   }
35 
getTitle()36   public CharSequence getTitle() {
37     return title == null ? "" : title;
38   }
39 
40   @Implementation
setCustomTitle(View customTitleView)41   public void setCustomTitle(View customTitleView) {
42     this.customTitleView = customTitleView;
43     reflector(AlertControllerReflector.class, realAlertController).setCustomTitle(customTitleView);
44   }
45 
getCustomTitleView()46   public View getCustomTitleView() {
47     return customTitleView;
48   }
49 
50   @Implementation
setMessage(CharSequence message)51   public void setMessage(CharSequence message) {
52     this.message = message;
53     reflector(AlertControllerReflector.class, realAlertController).setMessage(message);
54   }
55 
getMessage()56   public CharSequence getMessage() {
57     return message == null ? "" : message;
58   }
59 
60   @Implementation
setView(View view)61   public void setView(View view) {
62     this.view = view;
63     reflector(AlertControllerReflector.class, realAlertController).setView(view);
64   }
65 
66   @Implementation
setView(int resourceId)67   public void setView(int resourceId) {
68     setView(LayoutInflater.from(RuntimeEnvironment.getApplication()).inflate(resourceId, null));
69   }
70 
71   @Implementation
setIcon(int iconId)72   public void setIcon(int iconId) {
73     this.iconId = iconId;
74     reflector(AlertControllerReflector.class, realAlertController).setIcon(iconId);
75   }
76 
getIconId()77   public int getIconId() {
78     return iconId;
79   }
80 
getView()81   public View getView() {
82     return view;
83   }
84 
getAdapter()85   public Adapter getAdapter() {
86     return ReflectionHelpers.<ListView>callInstanceMethod(realAlertController, "getListView")
87         .getAdapter();
88   }
89 
90   @ForType(AlertController.class)
91   interface AlertControllerReflector {
92 
93     @Direct
setTitle(CharSequence title)94     void setTitle(CharSequence title);
95 
96     @Direct
setCustomTitle(View customTitleView)97     void setCustomTitle(View customTitleView);
98 
99     @Direct
setMessage(CharSequence message)100     void setMessage(CharSequence message);
101 
102     @Direct
setView(View view)103     void setView(View view);
104 
105     @Direct
setIcon(int iconId)106     void setIcon(int iconId);
107   }
108 }
109