package com.xtremelabs.robolectric.shadows; import android.app.Application; import android.app.Notification; import android.app.Service; import android.content.Context; import android.content.ServiceConnection; import com.xtremelabs.robolectric.Robolectric; import com.xtremelabs.robolectric.internal.Implementation; import com.xtremelabs.robolectric.internal.Implements; import com.xtremelabs.robolectric.internal.RealObject; import static com.xtremelabs.robolectric.Robolectric.shadowOf; @SuppressWarnings({"UnusedDeclaration"}) @Implements(Service.class) public class ShadowService extends ShadowContextWrapper { @RealObject Service realService; private Notification lastForegroundNotification; private boolean selfStopped = false; private boolean unbindServiceShouldThrowIllegalArgument = false; private boolean foregroundStopped; private boolean notificationShouldRemoved; @Implementation public final Application getApplication() { return Robolectric.application; } @Implementation @Override public Context getApplicationContext() { return Robolectric.application; } @Implementation public void onDestroy() { assertNoBroadcastListenersRegistered(); } @Implementation public void unbindService(ServiceConnection conn) { if (unbindServiceShouldThrowIllegalArgument) { throw new IllegalArgumentException(); } } @Implementation public void stopSelf() { selfStopped = true; } public void setUnbindServiceShouldThrowIllegalArgument(boolean flag) { unbindServiceShouldThrowIllegalArgument = flag; } @Implementation public final void startForeground(int id, Notification notification) { lastForegroundNotification = notification; } @Implementation public void stopForeground(boolean removeNotification) { foregroundStopped = true; notificationShouldRemoved = removeNotification; } public Notification getLastForegroundNotification() { return lastForegroundNotification; } /** * Utility method that throws a {@code RuntimeException} if any {@code BroadcastListener}s are still registered. */ public void assertNoBroadcastListenersRegistered() { ((ShadowApplication) shadowOf(getApplicationContext())).assertNoBroadcastListenersRegistered(realService, "Service"); } /** * Non-Android accessor, to use in assertions. * @return */ public boolean isStoppedBySelf() { return selfStopped; } public boolean isForegroundStopped() { return foregroundStopped; } public boolean getNotificationShouldRemoved() { return notificationShouldRemoved; } }