[android] Generalized ads removal purchase controller to reuse it for bookmark subscription

This commit is contained in:
Александр Зацепин 2019-06-26 18:39:42 +03:00 committed by yoksnod
parent bfd51dc7f8
commit 022d6aeae7
3 changed files with 65 additions and 20 deletions

View file

@ -6,7 +6,6 @@ import android.text.TextUtils;
import com.android.billingclient.api.Purchase;
import com.mapswithme.maps.Framework;
import com.mapswithme.maps.PrivateVariables;
import com.mapswithme.util.ConnectionState;
import com.mapswithme.util.log.Logger;
import com.mapswithme.util.log.LoggerFactory;
@ -23,12 +22,16 @@ class AdsRemovalPurchaseController extends AbstractPurchaseController<Validation
private final ValidationCallback mValidationCallback = new AdValidationCallbackImpl();
@NonNull
private final PlayStoreBillingCallback mBillingCallback = new PlayStoreBillingCallbackImpl();
@NonNull
private final SubscriptionType mType;
AdsRemovalPurchaseController(@NonNull PurchaseValidator<ValidationCallback> validator,
@NonNull BillingManager<PlayStoreBillingCallback> billingManager,
@NonNull SubscriptionType subscriptionType,
@NonNull String... productIds)
{
super(validator, billingManager, productIds);
mType = subscriptionType;
}
@Override
@ -50,31 +53,27 @@ class AdsRemovalPurchaseController extends AbstractPurchaseController<Validation
@Override
public void onValidate(@NonNull String purchaseData, @NonNull ValidationStatus status)
{
LOGGER.i(TAG, "Validation status of 'ads removal': " + status);
LOGGER.i(TAG, "Validation status of '" + mType + "': " + status);
if (status == ValidationStatus.VERIFIED)
Statistics.INSTANCE.trackPurchaseEvent(Statistics.EventName
.INAPP_PURCHASE_VALIDATION_SUCCESS,
PrivateVariables.adsRemovalServerId());
mType.getServerId());
else
Statistics.INSTANCE.trackPurchaseValidationError(PrivateVariables.adsRemovalServerId(),
status);
Statistics.INSTANCE.trackPurchaseValidationError(mType.getServerId(), status);
final boolean shouldActivateSubscription = status != ValidationStatus.NOT_VERIFIED;
final boolean hasActiveSubscription = Framework.nativeHasActiveSubscription(
Framework.SUBSCRIPTION_TYPE_REMOVE_ADS);
final boolean hasActiveSubscription = Framework.nativeHasActiveSubscription(mType.ordinal());
if (!hasActiveSubscription && shouldActivateSubscription)
{
LOGGER.i(TAG, "Ads removal subscription activated");
Statistics.INSTANCE.trackPurchaseProductDelivered(PrivateVariables.adsRemovalServerId(),
PrivateVariables.adsRemovalVendor());
Statistics.INSTANCE.trackPurchaseProductDelivered(mType.getServerId(), mType.getVendor());
}
else if (hasActiveSubscription && !shouldActivateSubscription)
{
LOGGER.i(TAG, "Ads removal subscription deactivated");
}
Framework.nativeSetActiveSubscription(Framework.SUBSCRIPTION_TYPE_REMOVE_ADS,
shouldActivateSubscription);
Framework.nativeSetActiveSubscription(mType.ordinal(), shouldActivateSubscription);
if (getUiCallback() != null)
getUiCallback().onValidationFinish(shouldActivateSubscription);
@ -86,8 +85,7 @@ class AdsRemovalPurchaseController extends AbstractPurchaseController<Validation
@Override
void validate(@NonNull String purchaseData)
{
getValidator().validate(PrivateVariables.adsRemovalServerId(),
PrivateVariables.adsRemovalVendor(), purchaseData);
getValidator().validate(mType.getServerId(), mType.getVendor(), purchaseData);
}
@Override
@ -104,11 +102,11 @@ class AdsRemovalPurchaseController extends AbstractPurchaseController<Validation
if (TextUtils.isEmpty(purchaseData))
{
LOGGER.i(TAG, "Existing purchase data for 'ads removal' not found");
if (Framework.nativeHasActiveSubscription(Framework.SUBSCRIPTION_TYPE_REMOVE_ADS))
LOGGER.i(TAG, "Existing purchase data for '" + mType + "' not found");
if (Framework.nativeHasActiveSubscription(mType.ordinal()))
{
LOGGER.i(TAG, "Ads removal subscription deactivated");
Framework.nativeSetActiveSubscription(Framework.SUBSCRIPTION_TYPE_REMOVE_ADS, false);
LOGGER.i(TAG, "'" + mType + "' subscription deactivated");
Framework.nativeSetActiveSubscription(mType.ordinal(), false);
}
return;
}
@ -120,8 +118,7 @@ class AdsRemovalPurchaseController extends AbstractPurchaseController<Validation
}
LOGGER.i(TAG, "Validating existing purchase data for '" + productId + "'...");
getValidator().validate(PrivateVariables.adsRemovalServerId(),
PrivateVariables.adsRemovalVendor(), purchaseData);
getValidator().validate(mType.getServerId(), mType.getVendor(), purchaseData);
}
}
}

View file

@ -29,7 +29,8 @@ public class PurchaseFactory
String weeklyProduct = PrivateVariables.adsRemovalWeeklyProductId();
String[] productIds = Utils.concatArrays(PrivateVariables.adsRemovalNotUsedList(),
yearlyProduct, monthlyProduct, weeklyProduct);
return new AdsRemovalPurchaseController(validator, billingManager, productIds);
return new AdsRemovalPurchaseController(validator, billingManager,
SubscriptionType.ADS_REMOVAL, productIds);
}
@NonNull

View file

@ -0,0 +1,47 @@
package com.mapswithme.maps.purchase;
import android.support.annotation.NonNull;
import com.mapswithme.maps.PrivateVariables;
public enum SubscriptionType
{
ADS_REMOVAL
{
@NonNull
@Override
String getServerId()
{
return PrivateVariables.adsRemovalServerId();
}
@NonNull
@Override
String getVendor()
{
return PrivateVariables.adsRemovalVendor();
}
},
BOOKMARKS
{
@NonNull
@Override
String getServerId()
{
return PrivateVariables.bookmarksSubscriptionServerId();
}
@NonNull
@Override
String getVendor()
{
return PrivateVariables.bookmarksSubscriptionVendor();
}
};
@NonNull
abstract String getServerId();
@NonNull
abstract String getVendor();
}