@WorkerThread void onSuccessfulPurchase(@NonNull String purchaseData, @NonNull String signature) { final boolean verified = verifier == null || verifier.verify(signatureBase64, purchaseData, signature); if (verified) { final Purchase purchase = fromJson(purchaseData, signature); cache.cache(purchase); handler.obtainMessage(PremiumerHandler.ON_PURCHASE_SUCCESSFUL, purchase).sendToTarget(); } else { handler.obtainMessage(PremiumerHandler.ON_PURCHASE_FAILED_VERIFICATION).sendToTarget(); } }
@Override public void run() { boolean consumed = false; final Purchase purchase = cache.load(); if (purchase != null && purchase.purchaseToken != null) { consumed = billing.consumeSku(purchase.purchaseToken); } final int message; if (consumed) { cache.clear(); message = PremiumerHandler.ON_SKU_CONSUMED; } else { message = PremiumerHandler.ON_FAILED_TO_CONSUME_SKU; } handler.obtainMessage(message, purchase).sendToTarget(); } });
@Override public void run() { final Purchase purchase = cache.load(); handler.obtainMessage(PremiumerHandler.ON_PURCHASE_DETAILS, purchase).sendToTarget(); } });
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(); } }
@Test public void purchaseDetails() throws Exception { final Purchase purchase = new Purchase(JSON_PURCHASE, null); when(cache.load()).thenReturn(purchase); premiumer.bind(); assertBound(true); final boolean enqueued = premiumer.purchaseDetails(); assertThat(enqueued).isTrue(); assertInvokedOnce(listener).onPurchaseDetails(purchase); }
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(); } }