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