@Override public void bind() { final boolean bound = binder.hasBillingCapabilities(BILLING_INTENT) && binder.bind(BILLING_INTENT, connection, Context.BIND_AUTO_CREATE); // listener.onBillingAvailable() will be invoked later. if (!bound) { listener.onBillingUnavailable(); } }
@Override public void onServiceConnected(ComponentName name, IBinder iBinder) { final IInAppBillingService s = binder.service(iBinder); final Billing b = binder.billing(context.getPackageName(), s); if (b.isBillingSupported()) { billing = b; listener.onBillingAvailable(); } else { binder.unbind(); listener.onBillingUnavailable(); } }
@Test public void unbind() { final SimpleBinderContext context = new SimpleBinderContext(); final Intent intent = new Intent(); final ServiceConnection connection = mock(ServiceConnection.class); final Binder binder = binder(context); binder.bind(intent, connection, 0); binder.unbind(); assertThat(context.service).isNull(); assertThat(context.connection).isNull(); assertThat(context.flags).isEqualTo(0); assertThat(binder.isBound()).isFalse(); }
@Test public void bindFailure() { final Context context = new ContextStub() { @Override public boolean bindService(Intent service, ServiceConnection conn, int flags) { return false; } }; final Intent intent = new Intent(); final ServiceConnection connection = mock(ServiceConnection.class); final Binder binder = binder(context); binder.bind(intent, connection, 0); assertThat(binder.isBound()).isFalse(); }
@Override public void unbind() { binder.unbind(); listener.onBillingUnavailable(); }
private void assertBillingCapabilities(@NonNull Context context, boolean expected) { final Binder binder = binder(context); final Intent intent = new Intent(); assertThat(binder.hasBillingCapabilities(intent)).isEqualTo(expected); }
@Test public void purchaseNotBound() { assertThat(binder.isBound()).isFalse(); final Activity activity = mock(Activity.class); final boolean purchased = premiumer.purchase(activity); assertThat(purchased).isFalse(); }
@Test public void bind() { final SimpleBinderContext context = new SimpleBinderContext(); final Intent intent = new Intent(); final ServiceConnection connection = mock(ServiceConnection.class); final Binder binder = binder(context); binder.bind(intent, connection, 0); assertThat(context.service).isEqualTo(intent); assertThat(context.connection).isEqualTo(connection); assertThat(context.flags).isEqualTo(0); assertThat(binder.isBound()).isTrue(); }
@Override public void onServiceDisconnected(ComponentName name) { billing = null; binder.unbind(); listener.onBillingUnavailable(); } }
private void assertBound(boolean bound) { assertThat(binder.isBound()).isEqualTo(bound); if (bound) { assertInvokedOnce(listener).onBillingAvailable(); } else { assertInvokedOnce(listener).onBillingUnavailable(); } }