1704d59a9e57b28939ba5c709cf4b50d72aa072e6Christian Williamspackage org.robolectric.android.controller; 2d77cda99f1fc52c208a304d8d351890c2f86b3acOr Bar 3851f2a9519be23c73a9e2929128179b405e2e7a6Christian Williamsimport static org.robolectric.util.ReflectionHelpers.ClassParameter.from; 4851f2a9519be23c73a9e2929128179b405e2e7a6Christian Williams 52d32b2d19d998e333132721bd35796214a4877c8Jonathan Gerrishimport android.app.ActivityThread; 6d77cda99f1fc52c208a304d8d351890c2f86b3acOr Barimport android.app.Application; 7d77cda99f1fc52c208a304d8d351890c2f86b3acOr Barimport android.app.IntentService; 8851f2a9519be23c73a9e2929128179b405e2e7a6Christian Williamsimport android.app.Service; 9d77cda99f1fc52c208a304d8d351890c2f86b3acOr Barimport android.content.Context; 10d77cda99f1fc52c208a304d8d351890c2f86b3acOr Barimport android.content.Intent; 11d77cda99f1fc52c208a304d8d351890c2f86b3acOr Barimport android.os.IBinder; 12d77cda99f1fc52c208a304d8d351890c2f86b3acOr Barimport org.robolectric.RuntimeEnvironment; 13704d59a9e57b28939ba5c709cf4b50d72aa072e6Christian Williamsimport org.robolectric.util.ReflectionHelpers; 14d7a9f4498c0efc28746d4d7bdf480f67f1058cb2Jonathan Gerrish 155ccd46d95e489a6216889d52ef94e4cf5a72ace4Jonathan Gerrishpublic class IntentServiceController<T extends IntentService> extends ComponentController<IntentServiceController<T>, T> { 16d77cda99f1fc52c208a304d8d351890c2f86b3acOr Bar 172d32b2d19d998e333132721bd35796214a4877c8Jonathan Gerrish public static <T extends IntentService> IntentServiceController<T> of(final T service, final Intent intent) { 182d32b2d19d998e333132721bd35796214a4877c8Jonathan Gerrish final IntentServiceController<T> controller = new IntentServiceController<>(service, intent); 192d32b2d19d998e333132721bd35796214a4877c8Jonathan Gerrish controller.attach(); 202d32b2d19d998e333132721bd35796214a4877c8Jonathan Gerrish return controller; 212d32b2d19d998e333132721bd35796214a4877c8Jonathan Gerrish } 222d32b2d19d998e333132721bd35796214a4877c8Jonathan Gerrish 232d32b2d19d998e333132721bd35796214a4877c8Jonathan Gerrish private IntentServiceController(final T service, final Intent intent) { 242d32b2d19d998e333132721bd35796214a4877c8Jonathan Gerrish super(service, intent); 252d32b2d19d998e333132721bd35796214a4877c8Jonathan Gerrish } 26d77cda99f1fc52c208a304d8d351890c2f86b3acOr Bar 27ec931896007fd3c459ed0d48d6861366872c8296Brett Chabot private IntentServiceController<T> attach() { 282d32b2d19d998e333132721bd35796214a4877c8Jonathan Gerrish if (attached) { 298c2a42227e584a7d9c519e453ce715d4ce5172baOr Bar return this; 30d77cda99f1fc52c208a304d8d351890c2f86b3acOr Bar } 31d77cda99f1fc52c208a304d8d351890c2f86b3acOr Bar 322d32b2d19d998e333132721bd35796214a4877c8Jonathan Gerrish ReflectionHelpers.callInstanceMethod(Service.class, component, "attach", 332d32b2d19d998e333132721bd35796214a4877c8Jonathan Gerrish from(Context.class, RuntimeEnvironment.application.getBaseContext()), 342d32b2d19d998e333132721bd35796214a4877c8Jonathan Gerrish from(ActivityThread.class, null), 352d32b2d19d998e333132721bd35796214a4877c8Jonathan Gerrish from(String.class, component.getClass().getSimpleName()), 362d32b2d19d998e333132721bd35796214a4877c8Jonathan Gerrish from(IBinder.class, null), 372d32b2d19d998e333132721bd35796214a4877c8Jonathan Gerrish from(Application.class, RuntimeEnvironment.application), 382d32b2d19d998e333132721bd35796214a4877c8Jonathan Gerrish from(Object.class, null)); 39d77cda99f1fc52c208a304d8d351890c2f86b3acOr Bar 402d32b2d19d998e333132721bd35796214a4877c8Jonathan Gerrish attached = true; 412d32b2d19d998e333132721bd35796214a4877c8Jonathan Gerrish return this; 422d32b2d19d998e333132721bd35796214a4877c8Jonathan Gerrish } 43d77cda99f1fc52c208a304d8d351890c2f86b3acOr Bar 442d32b2d19d998e333132721bd35796214a4877c8Jonathan Gerrish public IntentServiceController<T> bind() { 452d32b2d19d998e333132721bd35796214a4877c8Jonathan Gerrish invokeWhilePaused("onBind", from(Intent.class, getIntent())); 462d32b2d19d998e333132721bd35796214a4877c8Jonathan Gerrish return this; 472d32b2d19d998e333132721bd35796214a4877c8Jonathan Gerrish } 48d77cda99f1fc52c208a304d8d351890c2f86b3acOr Bar 492d32b2d19d998e333132721bd35796214a4877c8Jonathan Gerrish @Override public IntentServiceController<T> create() { 502d32b2d19d998e333132721bd35796214a4877c8Jonathan Gerrish invokeWhilePaused("onCreate"); 512d32b2d19d998e333132721bd35796214a4877c8Jonathan Gerrish return this; 522d32b2d19d998e333132721bd35796214a4877c8Jonathan Gerrish } 53d77cda99f1fc52c208a304d8d351890c2f86b3acOr Bar 542d32b2d19d998e333132721bd35796214a4877c8Jonathan Gerrish @Override public IntentServiceController<T> destroy() { 552d32b2d19d998e333132721bd35796214a4877c8Jonathan Gerrish invokeWhilePaused("onDestroy"); 562d32b2d19d998e333132721bd35796214a4877c8Jonathan Gerrish return this; 572d32b2d19d998e333132721bd35796214a4877c8Jonathan Gerrish } 58d77cda99f1fc52c208a304d8d351890c2f86b3acOr Bar 592d32b2d19d998e333132721bd35796214a4877c8Jonathan Gerrish public IntentServiceController<T> rebind() { 602d32b2d19d998e333132721bd35796214a4877c8Jonathan Gerrish invokeWhilePaused("onRebind", from(Intent.class, getIntent())); 612d32b2d19d998e333132721bd35796214a4877c8Jonathan Gerrish return this; 622d32b2d19d998e333132721bd35796214a4877c8Jonathan Gerrish } 63d77cda99f1fc52c208a304d8d351890c2f86b3acOr Bar 642d32b2d19d998e333132721bd35796214a4877c8Jonathan Gerrish public IntentServiceController<T> startCommand(final int flags, final int startId) { 652d32b2d19d998e333132721bd35796214a4877c8Jonathan Gerrish final IntentServiceController<T> intentServiceController = handleIntent(); 662d32b2d19d998e333132721bd35796214a4877c8Jonathan Gerrish get().stopSelf(startId); 672d32b2d19d998e333132721bd35796214a4877c8Jonathan Gerrish return intentServiceController; 682d32b2d19d998e333132721bd35796214a4877c8Jonathan Gerrish } 692d32b2d19d998e333132721bd35796214a4877c8Jonathan Gerrish 702d32b2d19d998e333132721bd35796214a4877c8Jonathan Gerrish public IntentServiceController<T> unbind() { 712d32b2d19d998e333132721bd35796214a4877c8Jonathan Gerrish invokeWhilePaused("onUnbind", from(Intent.class, getIntent())); 722d32b2d19d998e333132721bd35796214a4877c8Jonathan Gerrish return this; 732d32b2d19d998e333132721bd35796214a4877c8Jonathan Gerrish } 742d32b2d19d998e333132721bd35796214a4877c8Jonathan Gerrish 752d32b2d19d998e333132721bd35796214a4877c8Jonathan Gerrish public IntentServiceController<T> handleIntent() { 762d32b2d19d998e333132721bd35796214a4877c8Jonathan Gerrish invokeWhilePaused("onHandleIntent", from(Intent.class, getIntent())); 772d32b2d19d998e333132721bd35796214a4877c8Jonathan Gerrish return this; 782d32b2d19d998e333132721bd35796214a4877c8Jonathan Gerrish } 79582530917f13cef209225ce455ba5e4684d7b32dbrettchabot 80582530917f13cef209225ce455ba5e4684d7b32dbrettchabot /** 81582530917f13cef209225ce455ba5e4684d7b32dbrettchabot * @deprecated Use the appropriate builder in {@link org.robolectric.Robolectric} instead. 82582530917f13cef209225ce455ba5e4684d7b32dbrettchabot * 83582530917f13cef209225ce455ba5e4684d7b32dbrettchabot * This method will be removed in Robolectric 3.6. 84582530917f13cef209225ce455ba5e4684d7b32dbrettchabot */ 85582530917f13cef209225ce455ba5e4684d7b32dbrettchabot @Deprecated 86582530917f13cef209225ce455ba5e4684d7b32dbrettchabot public IntentServiceController<T> withIntent(Intent intent) { 87582530917f13cef209225ce455ba5e4684d7b32dbrettchabot this.intent = intent; 88582530917f13cef209225ce455ba5e4684d7b32dbrettchabot return this; 89582530917f13cef209225ce455ba5e4684d7b32dbrettchabot } 907530851293fa9b96b602509a9c20a6978a1eb2cbBrett Chabot} 91