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