1 package com.xtremelabs.robolectric.shadows; 2 3 import android.app.Application; 4 import android.app.Notification; 5 import android.app.Service; 6 import android.content.Context; 7 import android.content.ServiceConnection; 8 import com.xtremelabs.robolectric.Robolectric; 9 import com.xtremelabs.robolectric.internal.Implementation; 10 import com.xtremelabs.robolectric.internal.Implements; 11 import com.xtremelabs.robolectric.internal.RealObject; 12 13 import static com.xtremelabs.robolectric.Robolectric.shadowOf; 14 15 @SuppressWarnings({"UnusedDeclaration"}) 16 @Implements(Service.class) 17 public class ShadowService extends ShadowContextWrapper { 18 @RealObject Service realService; 19 20 private Notification lastForegroundNotification; 21 private boolean selfStopped = false; 22 private boolean unbindServiceShouldThrowIllegalArgument = false; 23 private boolean foregroundStopped; 24 private boolean notificationShouldRemoved; 25 26 @Implementation getApplication()27 public final Application getApplication() { 28 return Robolectric.application; 29 } 30 31 @Implementation @Override getApplicationContext()32 public Context getApplicationContext() { 33 return Robolectric.application; 34 } 35 36 @Implementation onDestroy()37 public void onDestroy() { 38 assertNoBroadcastListenersRegistered(); 39 } 40 41 @Implementation unbindService(ServiceConnection conn)42 public void unbindService(ServiceConnection conn) { 43 if (unbindServiceShouldThrowIllegalArgument) { 44 throw new IllegalArgumentException(); 45 } 46 } 47 48 @Implementation stopSelf()49 public void stopSelf() { 50 selfStopped = true; 51 } 52 setUnbindServiceShouldThrowIllegalArgument(boolean flag)53 public void setUnbindServiceShouldThrowIllegalArgument(boolean flag) { 54 unbindServiceShouldThrowIllegalArgument = flag; 55 } 56 57 @Implementation startForeground(int id, Notification notification)58 public final void startForeground(int id, Notification notification) { 59 lastForegroundNotification = notification; 60 } 61 62 @Implementation stopForeground(boolean removeNotification)63 public void stopForeground(boolean removeNotification) { 64 foregroundStopped = true; 65 notificationShouldRemoved = removeNotification; 66 } 67 getLastForegroundNotification()68 public Notification getLastForegroundNotification() { 69 return lastForegroundNotification; 70 } 71 72 /** 73 * Utility method that throws a {@code RuntimeException} if any {@code BroadcastListener}s are still registered. 74 */ assertNoBroadcastListenersRegistered()75 public void assertNoBroadcastListenersRegistered() { 76 ((ShadowApplication) shadowOf(getApplicationContext())).assertNoBroadcastListenersRegistered(realService, "Service"); 77 } 78 79 /** 80 * Non-Android accessor, to use in assertions. 81 * @return 82 */ isStoppedBySelf()83 public boolean isStoppedBySelf() { 84 return selfStopped; 85 } 86 isForegroundStopped()87 public boolean isForegroundStopped() { 88 return foregroundStopped; 89 } 90 getNotificationShouldRemoved()91 public boolean getNotificationShouldRemoved() { 92 return notificationShouldRemoved; 93 } 94 }