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)
32       throws InvocationTargetException, IllegalAccessException {
33     this.title = title;
34     reflector(AlertControllerReflector.class, realAlertController).setTitle(title);
35   }
36 
getTitle()37   public CharSequence getTitle() {
38     return title == null ? "" : title;
39   }
40 
41   @Implementation
setCustomTitle(View customTitleView)42   public void setCustomTitle(View customTitleView) {
43     this.customTitleView = customTitleView;
44     reflector(AlertControllerReflector.class, realAlertController).setCustomTitle(customTitleView);
45   }
46 
getCustomTitleView()47   public View getCustomTitleView() {
48     return customTitleView;
49   }
50 
51   @Implementation
setMessage(CharSequence message)52   public void setMessage(CharSequence message) {
53     this.message = message;
54     reflector(AlertControllerReflector.class, realAlertController).setMessage(message);
55   }
56 
getMessage()57   public CharSequence getMessage() {
58     return message == null ? "" : message;
59   }
60 
61   @Implementation
setView(View view)62   public void setView(View view) {
63     this.view = view;
64     reflector(AlertControllerReflector.class, realAlertController).setView(view);
65   }
66 
67   @Implementation
setView(int resourceId)68   public void setView(int resourceId) {
69     setView(LayoutInflater.from(RuntimeEnvironment.getApplication()).inflate(resourceId, null));
70   }
71 
72   @Implementation
setIcon(int iconId)73   public void setIcon(int iconId) {
74     this.iconId = iconId;
75     reflector(AlertControllerReflector.class, realAlertController).setIcon(iconId);
76   }
77 
getIconId()78   public int getIconId() {
79     return iconId;
80   }
81 
getView()82   public View getView() {
83     return view;
84   }
85 
getAdapter()86   public Adapter getAdapter() {
87     return ReflectionHelpers.<ListView>callInstanceMethod(realAlertController, "getListView")
88         .getAdapter();
89   }
90 
91   @ForType(AlertController.class)
92   interface AlertControllerReflector {
93 
94     @Direct
setTitle(CharSequence title)95     void setTitle(CharSequence title);
96 
97     @Direct
setCustomTitle(View customTitleView)98     void setCustomTitle(View customTitleView);
99 
100     @Direct
setMessage(CharSequence message)101     void setMessage(CharSequence message);
102 
103     @Direct
setView(View view)104     void setView(View view);
105 
106     @Direct
setIcon(int iconId)107     void setIcon(int iconId);
108   }
109 }
110