/
githubmirror
/
omim
Обзор
Документация
Войти
/
githubmirror
/
omim
Код
Запросы
0
Пакеты
0
Релизы
0
Аналитика
Безопасность
master
android/src/com/mapswithme/maps/purchase/AbstractPurchaseController.java
205 строк
5 KB
Александр Зацепин
[android] Replaced initialization code by Initializable interface
27 фев 2020, 08:51
27 фев 2020, 08:51
0380e2b
Код
Авторство
О чём код?
package com.mapswithme.maps.purchase; import android.app.Activity; import android.os.Bundle; import androidx.annotation.NonNull; import androidx.annotation.Nullable; import com.android.billingclient.api.BillingClient; import com.android.billingclient.api.Purchase; import com.android.billingclient.api.SkuDetails; import com.mapswithme.util.log.Logger; import com.mapswithme.util.log.LoggerFactory; import java.util.Arrays; import java.util.Collections; import java.util.List; abstract class AbstractPurchaseController<V, B, UiCallback extends PurchaseCallback> implements PurchaseController<UiCallback> { private static final Logger LOGGER = LoggerFactory.INSTANCE.getLogger(LoggerFactory.Type.BILLING); private static final String TAG = AbstractPurchaseController.class.getSimpleName(); @NonNull private final PurchaseValidator<V> mValidator; @NonNull private final BillingManager<B> mBillingManager; @Nullable private UiCallback mUiCallback; @Nullable private final List<String> mProductIds; AbstractPurchaseController(@NonNull PurchaseValidator<V> validator, @NonNull BillingManager<B> billingManager, @Nullable String... productIds) { mValidator = validator; mBillingManager = billingManager; mProductIds = productIds != null ? Collections.unmodifiableList(Arrays.asList(productIds)) : null; } @Override public final void initialize(@Nullable Activity activity) { if (activity == null) throw new AssertionError("Activity must be non-null"); mBillingManager.initialize(activity); onInitialize(activity); } @Override public final void destroy() { mBillingManager.destroy(); onDestroy(); } @Override public void addCallback(@NonNull UiCallback callback) { mUiCallback = callback; } @Override public void removeCallback() { mUiCallback = null; } @Nullable UiCallback getUiCallback() { return mUiCallback; } @Override public boolean isPurchaseSupported() { return mBillingManager.isBillingSupported(); } @Override public void launchPurchaseFlow(@NonNull String productId) { mBillingManager.launchBillingFlowForProduct(productId); } @Override public void queryProductDetails() { if (mProductIds == null) throw new IllegalStateException("Product ids must be non-null!"); getBillingManager().queryProductDetails(mProductIds); } @Override public void validateExistingPurchases() { getBillingManager().queryExistingPurchases(); } @NonNull PurchaseValidator<V> getValidator() { return mValidator; } @NonNull BillingManager<B> getBillingManager() { return mBillingManager; } @Nullable final Purchase findTargetPurchase(@NonNull List<Purchase> purchases) { if (mProductIds == null) return null; for (Purchase purchase: purchases) { if (mProductIds.contains(purchase.getSku())) return purchase; } return null; } abstract void onInitialize(@NonNull Activity activity); abstract void onDestroy(); @Override public void onSave(@NonNull Bundle outState) { mValidator.onSave(outState); } @Override public void onRestore(@NonNull Bundle inState) { mValidator.onRestore(inState); } abstract class AbstractPlayStoreBillingCallback implements PlayStoreBillingCallback { @Override public void onPurchaseSuccessful(@NonNull List<Purchase> purchases) { Purchase target = findTargetPurchase(purchases); if (target == null) return; LOGGER.i(TAG, "Validating purchase '" + target.getSku() + " " + target.getOrderId() + "' on backend server..."); validate(target.getOriginalJson()); if (getUiCallback() != null) getUiCallback().onValidationStarted(); } @Override public void onProductDetailsLoaded(@NonNull List<SkuDetails> details) { if (getUiCallback() != null) getUiCallback().onProductDetailsLoaded(details); } @Override public void onPurchaseFailure(@BillingClient.BillingResponse int error) { if (getUiCallback() != null) getUiCallback().onPaymentFailure(error); } @Override public void onProductDetailsFailure() { if (getUiCallback() != null) getUiCallback().onProductDetailsFailure(); } @Override public void onStoreConnectionFailed() { if (getUiCallback() != null) getUiCallback().onStoreConnectionFailed(); } @Override public void onConsumptionSuccess() { // Do nothing by default. } @Override public void onConsumptionFailure() { // Do nothing by default. } abstract void validate(@NonNull String purchaseData); } }