Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/mapsme/omim.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDmitry Donskoy <donskdmitry@mail.ru>2018-12-12 18:51:57 +0300
committerDmitry Donskoy <donskdmitry@mail.ru>2018-12-12 18:51:57 +0300
commit6ba2eefce2465f3028c3223161d34e89b4cccbc7 (patch)
tree37b3db922c7e4427114980ea206354ba815dad32
parentd7a198aedfcaeac8f4761841bb91b55e5f1b78fd (diff)
[android] separate skudetails validation between subs type and in-app typeMAPSME-9242-fix-sku-details-validation
-rw-r--r--android/src/com/mapswithme/maps/purchase/DefaultSkuDetailsValidationStrategy.java16
-rw-r--r--android/src/com/mapswithme/maps/purchase/PlayStoreBillingManager.java9
-rw-r--r--android/src/com/mapswithme/maps/purchase/PurchaseFactory.java9
-rw-r--r--android/src/com/mapswithme/maps/purchase/QueryProductDetailsRequest.java41
-rw-r--r--android/src/com/mapswithme/maps/purchase/SkuDetailsValidationStrategy.java12
-rw-r--r--android/src/com/mapswithme/maps/purchase/SubscriptionSkuDetailsValidationStrategy.java39
6 files changed, 90 insertions, 36 deletions
diff --git a/android/src/com/mapswithme/maps/purchase/DefaultSkuDetailsValidationStrategy.java b/android/src/com/mapswithme/maps/purchase/DefaultSkuDetailsValidationStrategy.java
new file mode 100644
index 0000000000..89aec10ab3
--- /dev/null
+++ b/android/src/com/mapswithme/maps/purchase/DefaultSkuDetailsValidationStrategy.java
@@ -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();
+ }
+}
diff --git a/android/src/com/mapswithme/maps/purchase/PlayStoreBillingManager.java b/android/src/com/mapswithme/maps/purchase/PlayStoreBillingManager.java
index f04d02420b..49bfc79de6 100644
--- a/android/src/com/mapswithme/maps/purchase/PlayStoreBillingManager.java
+++ b/android/src/com/mapswithme/maps/purchase/PlayStoreBillingManager.java
@@ -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
diff --git a/android/src/com/mapswithme/maps/purchase/PurchaseFactory.java b/android/src/com/mapswithme/maps/purchase/PurchaseFactory.java
index 63eb2d46bd..8b79f01e0d 100644
--- a/android/src/com/mapswithme/maps/purchase/PurchaseFactory.java
+++ b/android/src/com/mapswithme/maps/purchase/PurchaseFactory.java
@@ -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);
diff --git a/android/src/com/mapswithme/maps/purchase/QueryProductDetailsRequest.java b/android/src/com/mapswithme/maps/purchase/QueryProductDetailsRequest.java
index c0c7dce823..1af8751409 100644
--- a/android/src/com/mapswithme/maps/purchase/QueryProductDetailsRequest.java
+++ b/android/src/com/mapswithme/maps/purchase/QueryProductDetailsRequest.java
@@ -18,13 +18,17 @@ class QueryProductDetailsRequest extends PlayStoreBillingRequest<PlayStoreBillin
{
@NonNull
private final List<String> mProductIds;
+ @NonNull
+ private final SkuDetailsValidationStrategy mSkuDetailsValidationStrategy;
QueryProductDetailsRequest(@NonNull BillingClient client, @NonNull String productType,
@Nullable PlayStoreBillingCallback callback,
- @NonNull List<String> productIds)
+ @NonNull List<String> productIds,
+ @NonNull SkuDetailsValidationStrategy strategy)
{
super(client, productType, callback);
mProductIds = Collections.unmodifiableList(productIds);
+ mSkuDetailsValidationStrategy = strategy;
}
@Override
@@ -49,39 +53,14 @@ class QueryProductDetailsRequest extends PlayStoreBillingRequest<PlayStoreBillin
return;
}
- if (skuDetails == null || skuDetails.isEmpty())
- {
- LOGGER.w(TAG, "Purchase details not found");
- if (getCallback() != null)
- getCallback().onPurchaseDetailsFailure();
+ if (getCallback() == null)
return;
- }
- if (hasIncorrectSkuDetails(skuDetails))
- {
- LOGGER.w(TAG, "Purchase details incorrect");
- if (getCallback() != null)
- getCallback().onPurchaseDetailsFailure();
- return;
- }
+ boolean isSkuValid = mSkuDetailsValidationStrategy.isValid(skuDetails);
- LOGGER.i(TAG, "Purchase details obtained: " + skuDetails);
- if (getCallback() != null)
+ if (isSkuValid)
getCallback().onPurchaseDetailsLoaded(skuDetails);
- }
-
- private static boolean hasIncorrectSkuDetails(@NonNull List<SkuDetails> skuDetails)
- {
- 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;
+ else
+ getCallback().onPurchaseDetailsFailure();
}
}
diff --git a/android/src/com/mapswithme/maps/purchase/SkuDetailsValidationStrategy.java b/android/src/com/mapswithme/maps/purchase/SkuDetailsValidationStrategy.java
new file mode 100644
index 0000000000..22de967c82
--- /dev/null
+++ b/android/src/com/mapswithme/maps/purchase/SkuDetailsValidationStrategy.java
@@ -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);
+}
diff --git a/android/src/com/mapswithme/maps/purchase/SubscriptionSkuDetailsValidationStrategy.java b/android/src/com/mapswithme/maps/purchase/SubscriptionSkuDetailsValidationStrategy.java
new file mode 100644
index 0000000000..69ef53e00f
--- /dev/null
+++ b/android/src/com/mapswithme/maps/purchase/SubscriptionSkuDetailsValidationStrategy.java
@@ -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;
+ }
+}