blob: 74a9cc1cac02defcf5450b022ca7eac93f1035fb [file] [log] [blame]
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;
}
}