@Override public void handleMessage(Message msg) { switch (msg.what) { case ON_SHOW_ADS: listener.onShowAds(); break; case ON_HIDE_ADS: listener.onHideAds(); break; case ON_BILLING_AVAILABLE: listener.onBillingAvailable(); break; case ON_BILLING_UNAVAILABLE: listener.onBillingUnavailable(); break; case ON_SKU_DETAILS: listener.onSkuDetails((SkuDetails) msg.obj); break; case ON_SKU_CONSUMED: listener.onSkuConsumed(); break; case ON_FAILED_TO_CONSUME_SKU: listener.onFailedToConsumeSku(); break; case ON_PURCHASE_REQUESTED: listener.onPurchaseRequested((String) msg.obj); break; case ON_PURCHASE_DETAILS: listener.onPurchaseDetails((Purchase) msg.obj); break; case ON_PURCHASE_SUCCESSFUL:
@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(); } }
listener.onPurchaseBadResult(resultCode, data); return true; listener.onPurchaseBadResponse(null); return true; listener.onPurchaseBadResponse(data); return true; listener.onPurchaseBadResponse(data); return true;
private void consumeSku(@Nullable Purchase cached) { premiumer.bind(); assertBound(true); when(cache.load()).thenReturn(cached); final boolean consumed = premiumer.consumeSku(); assertThat(consumed).isTrue(); assertInvokedOnce(cache).load(); if (cached == null) { assertInvokedOnce(listener).onFailedToConsumeSku(); } else { assertInvokedOnce(listener).onSkuConsumed(); } }
private void handleActivityVerification(boolean verified) throws Exception { final String responseData = JSON_PURCHASE; final String responseSignature = "responseSignature"; when(verifier.verify(SIGNATURE, responseData, responseSignature)).thenReturn(verified); final Intent intent = newBillingIntent(BILLING_RESPONSE_RESULT_OK, responseData, responseSignature); final boolean handled = premiumer.handleActivityResult(REQUEST_CODE, RESULT_OK, intent); assertThat(handled).isTrue(); assertInvokedOnce(verifier).verify(SIGNATURE, responseData, responseSignature); if (verified) { final Purchase purchase = new Purchase(responseData, responseSignature); assertInvokedOnce(cache).cache(purchase); assertInvokedOnce(listener).onPurchaseSuccessful(purchase); } else { assertInvokedOnce(listener).onPurchaseFailedVerification(); } }
@Override public void onBillingUnavailable() { listener.onBillingUnavailable(); }
@Override public void onPurchaseBadResponse(@Nullable Intent data) { listener.onPurchaseBadResponse(data); }
@Override public void onPurchaseRequested(@Nullable String payload) { listener.onPurchaseRequested(payload); }
@Override public void onPurchaseBadResult(int resultCode, @Nullable Intent data) { listener.onPurchaseBadResult(resultCode, data); }
@Override public void onPurchaseDetails(@Nullable Purchase purchase) { listener.onPurchaseDetails(purchase); }
@Override public void onHideAds() { listener.onHideAds(); }
@Override public void onPurchaseFailedVerification() { listener.onPurchaseFailedVerification(); } }
@Override public void onBillingAvailable() { listener.onBillingAvailable(); }
@Override public void onFailedToConsumeSku() { listener.onFailedToConsumeSku(); }
@Override public void onPurchaseSuccessful(@NonNull Purchase purchase) { listener.onPurchaseSuccessful(purchase); }
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(); } }
@Override public void onServiceDisconnected(ComponentName name) { billing = null; binder.unbind(); listener.onBillingUnavailable(); } }
private void handleActivityResultBadData(@Nullable String data) { final Intent intent = newBillingIntent(BILLING_RESPONSE_RESULT_OK, data, null); final boolean handled = premiumer.handleActivityResult(REQUEST_CODE, RESULT_OK, intent); assertThat(handled).isTrue(); assertInvokedOnce(listener).onPurchaseBadResponse(intent); }
@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; }
@Test public void handleActivityResultBadResult() { final int result = RESULT_CANCELED; final Intent intent = new Intent(); final boolean handled = premiumer.handleActivityResult(REQUEST_CODE, result, intent); assertThat(handled).isTrue(); assertInvokedOnce(listener).onPurchaseBadResult(result, intent); }