@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 onBillingUnavailable() { super.onBillingUnavailable(); onShowAds(); }
@Override public void onSkuConsumed() { super.onSkuConsumed(); onShowAds(); } }
@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 skuDetails() throws Exception { premiumer.bind(); assertBound(true); final boolean enqueued = premiumer.skuDetails(); assertThat(enqueued).isTrue(); final SkuDetails details = new SkuDetails(JSON_SKU); assertInvokedOnce(listener).onSkuDetails(details); }
private static void assertSimplePremiumer(@NonNull Binder binder, boolean isBound) { final PremiumerListener listener = mock(PremiumerListener.class); premiumer(listener, binder).bind(); if (isBound) { assertInvokedOnce(listener).onBillingAvailable(); assertInvokedNever(listener).onBillingUnavailable(); } else { assertInvokedNever(listener).onBillingAvailable(); assertInvokedOnce(listener).onBillingUnavailable(); } }
private static Premiumer premiumer(@NonNull PremiumerListener listener, @NonNull Binder binder) { final Builder builder = PremiumerBuilder.with(RuntimeEnvironment.application) .sku("dummy.sku") .listener(listener) .autoNotifyAds(false); return TestFactory.premiumer(builder, binder); }
@Override public boolean purchase(@Nullable Activity activity) { if (billing == null || activity == null) { return false; } final String payload = payloadGenerator.generate(); if (billing.purchase(activity, sku, requestCode, payload)) { listener.onPurchaseRequested(payload); return true; } return false; }
@Override public void onServiceDisconnected(ComponentName name) { billing = null; binder.unbind(); listener.onBillingUnavailable(); } }
@Override public void onBillingAvailable() { super.onBillingAvailable(); checkAds(); }
@Override public Bundle getPurchases(int apiVersion, String packageName, String type, String continuationToken) throws RemoteException { final Bundle bundle = responseOkBundle(); bundle.putStringArrayList(RESPONSE_ITEM_LIST, arrayList(SKU)); return bundle; }
private static IInAppBillingService withOwnedSkus(String... ownedSkus) { final Bundle bundle = populateLSuccessfulList(RESPONSE_ITEM_LIST, ownedSkus); return new BillingServiceStub() { @Override public Bundle getPurchases(int apiVersion, String packageName, String type, String continuationToken) throws RemoteException { return bundle; } }; }
@Override public Bundle getBuyIntent(int apiVersion, String packageName, String sku, String type, String developerPayload) throws RemoteException { return badResponseBundle(); }
@Override public void unbind() { binder.unbind(); listener.onBillingUnavailable(); }
private static IInAppBillingService withJsonSkus(String... jsonSkus) { final Bundle bundle = populateLSuccessfulList(RESPONSE_DETAILS_LIST, jsonSkus); return new BillingServiceStub() { @Override public Bundle getSkuDetails(int apiVersion, String packageName, String type, Bundle skusBundle) throws RemoteException { return bundle; } }; }
@Override public Bundle getSkuDetails(int apiVersion, String packageName, String type, Bundle skusBundle) throws RemoteException { return badResponseBundle(); }