forked from organicmaps/organicmaps
[android] separate skudetails validation between subs type and in-app type
This commit is contained in:
parent
0182e3134d
commit
30da8376ee
5 changed files with 80 additions and 5 deletions
|
@ -0,0 +1,16 @@
|
|||
package com.mapswithme.maps.purchase;
|
||||
|
||||
import android.support.annotation.Nullable;
|
||||
|
||||
import com.android.billingclient.api.SkuDetails;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
public class DefaultSkuDetailsValidationStrategy implements SkuDetailsValidationStrategy
|
||||
{
|
||||
@Override
|
||||
public boolean isValid(@Nullable List<SkuDetails> skuDetails)
|
||||
{
|
||||
return skuDetails != null && !skuDetails.isEmpty();
|
||||
}
|
||||
}
|
|
@ -29,15 +29,19 @@ class PlayStoreBillingManager implements BillingManager<PlayStoreBillingCallback
|
|||
@NonNull
|
||||
@BillingClient.SkuType
|
||||
private final String mProductType;
|
||||
@NonNull
|
||||
private final SkuDetailsValidationStrategy mSkuDetailsValidationStrategy;
|
||||
@SuppressWarnings({ "NullableProblems" })
|
||||
@NonNull
|
||||
private BillingConnection mConnection;
|
||||
@NonNull
|
||||
private final List<BillingRequest> mPendingRequests = new ArrayList<>();
|
||||
|
||||
PlayStoreBillingManager(@NonNull @BillingClient.SkuType String productType)
|
||||
PlayStoreBillingManager(@NonNull @BillingClient.SkuType String productType,
|
||||
@NonNull SkuDetailsValidationStrategy strategy)
|
||||
{
|
||||
mProductType = productType;
|
||||
mSkuDetailsValidationStrategy = strategy;
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -62,7 +66,8 @@ class PlayStoreBillingManager implements BillingManager<PlayStoreBillingCallback
|
|||
public void queryProductDetails(@NonNull List<String> productIds)
|
||||
{
|
||||
executeBillingRequest(new QueryProductDetailsRequest(getClientOrThrow(), mProductType,
|
||||
mCallback, productIds));
|
||||
mCallback, productIds,
|
||||
mSkuDetailsValidationStrategy));
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
|
@ -21,7 +21,8 @@ public class PurchaseFactory
|
|||
@NonNull Context context)
|
||||
{
|
||||
BillingManager<PlayStoreBillingCallback> billingManager
|
||||
= new PlayStoreBillingManager(BillingClient.SkuType.SUBS);
|
||||
= new PlayStoreBillingManager(BillingClient.SkuType.SUBS,
|
||||
new SubscriptionSkuDetailsValidationStrategy());
|
||||
PurchaseValidationObservable observable = PurchaseValidationObservable.from(context);
|
||||
PurchaseValidator<ValidationCallback> validator = new DefaultPurchaseValidator(observable);
|
||||
String yearlyProduct = PrivateVariables.adsRemovalYearlyProductId();
|
||||
|
@ -37,7 +38,8 @@ public class PurchaseFactory
|
|||
@NonNull Context context, @Nullable String productId, @Nullable String serverId)
|
||||
{
|
||||
BillingManager<PlayStoreBillingCallback> billingManager
|
||||
= new PlayStoreBillingManager(BillingClient.SkuType.INAPP);
|
||||
= new PlayStoreBillingManager(BillingClient.SkuType.INAPP,
|
||||
new DefaultSkuDetailsValidationStrategy());
|
||||
PurchaseValidationObservable observable = PurchaseValidationObservable.from(context);
|
||||
PurchaseValidator<ValidationCallback> validator = new DefaultPurchaseValidator(observable);
|
||||
return new BookmarkPurchaseController(validator, billingManager, productId, serverId);
|
||||
|
@ -55,7 +57,8 @@ public class PurchaseFactory
|
|||
@NonNull Context context)
|
||||
{
|
||||
BillingManager<PlayStoreBillingCallback> billingManager
|
||||
= new PlayStoreBillingManager(BillingClient.SkuType.INAPP);
|
||||
= new PlayStoreBillingManager(BillingClient.SkuType.INAPP,
|
||||
new DefaultSkuDetailsValidationStrategy());
|
||||
PurchaseValidationObservable observable = PurchaseValidationObservable.from(context);
|
||||
PurchaseValidator<ValidationCallback> validator = new DefaultPurchaseValidator(observable);
|
||||
return new FailedBookmarkPurchaseController(validator, billingManager);
|
||||
|
|
|
@ -0,0 +1,12 @@
|
|||
package com.mapswithme.maps.purchase;
|
||||
|
||||
import android.support.annotation.Nullable;
|
||||
|
||||
import com.android.billingclient.api.SkuDetails;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
public interface SkuDetailsValidationStrategy
|
||||
{
|
||||
boolean isValid(@Nullable List<SkuDetails> skuDetails);
|
||||
}
|
|
@ -0,0 +1,39 @@
|
|||
package com.mapswithme.maps.purchase;
|
||||
|
||||
import android.support.annotation.Nullable;
|
||||
|
||||
import com.android.billingclient.api.SkuDetails;
|
||||
import com.mapswithme.util.CrashlyticsUtils;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
import static com.mapswithme.maps.purchase.PlayStoreBillingManager.LOGGER;
|
||||
import static com.mapswithme.maps.purchase.PlayStoreBillingManager.TAG;
|
||||
|
||||
public class SubscriptionSkuDetailsValidationStrategy extends DefaultSkuDetailsValidationStrategy
|
||||
{
|
||||
@Override
|
||||
public boolean isValid(@Nullable List<SkuDetails> skuDetails)
|
||||
{
|
||||
boolean hasDetails = super.isValid(skuDetails);
|
||||
return hasDetails && !hasIncorrectSkuDetails(skuDetails) ;
|
||||
}
|
||||
|
||||
private static boolean hasIncorrectSkuDetails(@Nullable List<SkuDetails> skuDetails)
|
||||
{
|
||||
if (skuDetails == null)
|
||||
return true;
|
||||
|
||||
for (SkuDetails each : skuDetails)
|
||||
{
|
||||
if (AdsRemovalPurchaseDialog.Period.getInstance(each.getSubscriptionPeriod()) == null)
|
||||
{
|
||||
String msg = "Unsupported subscription period: '" + each.getSubscriptionPeriod() + "'";
|
||||
CrashlyticsUtils.logException(new IllegalStateException(msg));
|
||||
LOGGER.e(TAG, msg);
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
}
|
Loading…
Add table
Reference in a new issue