[android] Added bmk purchase consumption even if validation is not verified

This commit is contained in:
Александр Зацепин 2019-08-29 18:05:35 +03:00 committed by Aleksey Belousov
parent 065d73b057
commit bb20ac4c88
3 changed files with 80 additions and 29 deletions

View file

@ -0,0 +1,47 @@
package com.mapswithme.maps.purchase;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import com.mapswithme.util.log.Logger;
import com.mapswithme.util.log.LoggerFactory;
import com.mapswithme.util.statistics.Statistics;
abstract class AbstractBookmarkValidationCallback implements ValidationCallback
{
private static final Logger LOGGER = LoggerFactory.INSTANCE.getLogger(LoggerFactory.Type.BILLING);
private static final String TAG = AbstractBookmarkValidationCallback.class.getSimpleName();
@Nullable
private final String mServerId;
AbstractBookmarkValidationCallback(@Nullable String serverId)
{
mServerId = serverId;
}
@Override
public final void onValidate(@NonNull String purchaseData, @NonNull ValidationStatus status)
{
LOGGER.i(TAG, "Validation status of 'paid bookmark': " + status);
if (status == ValidationStatus.VERIFIED)
{
//noinspection ConstantConditions
Statistics.INSTANCE.trackPurchaseEvent(Statistics.EventName.INAPP_PURCHASE_VALIDATION_SUCCESS,
mServerId);
consumePurchase(purchaseData);
return;
}
// We consume purchase in 'NOT_VERIFIED' case to allow user enter in bookmark catalog again.
if (status == ValidationStatus.NOT_VERIFIED)
consumePurchase(purchaseData);
//noinspection ConstantConditions
Statistics.INSTANCE.trackPurchaseValidationError(mServerId, status);
onValidationError(status);
}
abstract void onValidationError(@NonNull ValidationStatus status);
abstract void consumePurchase(@NonNull String purchaseData);
}

View file

@ -22,7 +22,7 @@ class BookmarkPurchaseController extends AbstractPurchaseController<ValidationCa
@NonNull
private final PlayStoreBillingCallback mBillingCallback = new PlayStoreBillingCallbackImpl();
@NonNull
private final ValidationCallback mValidationCallback = new ValidationCallbackImpl();
private final ValidationCallback mValidationCallback;
@Nullable
private final String mServerId;
@ -32,6 +32,7 @@ class BookmarkPurchaseController extends AbstractPurchaseController<ValidationCa
{
super(validator, billingManager, productId);
mServerId = serverId;
mValidationCallback = new ValidationCallbackImpl(mServerId);
}
@Override
@ -48,28 +49,27 @@ class BookmarkPurchaseController extends AbstractPurchaseController<ValidationCa
getBillingManager().removeCallback(mBillingCallback);
}
private class ValidationCallbackImpl implements ValidationCallback
private class ValidationCallbackImpl extends AbstractBookmarkValidationCallback
{
@Override
public void onValidate(@NonNull String purchaseData, @NonNull ValidationStatus status)
ValidationCallbackImpl(@Nullable String serverId)
{
LOGGER.i(TAG, "Validation status of 'paid bookmark': " + status);
if (status == ValidationStatus.VERIFIED)
{
//noinspection ConstantConditions
Statistics.INSTANCE.trackPurchaseEvent(Statistics.EventName.INAPP_PURCHASE_VALIDATION_SUCCESS,
mServerId);
LOGGER.i(TAG, "Bookmark purchase consuming...");
getBillingManager().consumePurchase(PurchaseUtils.parseToken(purchaseData));
return;
}
super(serverId);
}
//noinspection ConstantConditions
Statistics.INSTANCE.trackPurchaseValidationError(mServerId, status);
@Override
void onValidationError(@NonNull ValidationStatus status)
{
if (getUiCallback() != null)
getUiCallback().onValidationFinish(false);
}
@Override
void consumePurchase(@NonNull String purchaseData)
{
LOGGER.i(TAG, "Bookmark purchase consuming...");
getBillingManager().consumePurchase(PurchaseUtils.parseToken(purchaseData));
}
}
private class PlayStoreBillingCallbackImpl extends AbstractPlayStoreBillingCallback
@ -121,7 +121,7 @@ class BookmarkPurchaseController extends AbstractPurchaseController<ValidationCa
@Override
public void onConsumptionSuccess()
{
LOGGER.i(TAG, "Bookmark purchase consumed and verified");
LOGGER.i(TAG, "Bookmark purchase consumed");
if (getUiCallback() != null)
getUiCallback().onValidationFinish(true);
}

View file

@ -24,7 +24,7 @@ public class FailedBookmarkPurchaseController implements PurchaseController<Fail
@Nullable
private FailedPurchaseChecker mCallback;
@NonNull
private final ValidationCallback mValidationCallback = new ValidationCallbackImpl();
private final ValidationCallback mValidationCallback = new ValidationCallbackImpl(null);
@NonNull
private final PlayStoreBillingCallback mBillingCallback = new PlayStoreBillingCallbackImpl();
@ -102,20 +102,17 @@ public class FailedBookmarkPurchaseController implements PurchaseController<Fail
mValidator.onRestore(inState);
}
private class ValidationCallbackImpl implements ValidationCallback
private class ValidationCallbackImpl extends AbstractBookmarkValidationCallback
{
@Override
public void onValidate(@NonNull String purchaseData, @NonNull ValidationStatus status)
ValidationCallbackImpl(@Nullable String serverId)
{
LOGGER.i(TAG, "Validation status of 'paid bookmark': " + status);
if (status == ValidationStatus.VERIFIED)
{
LOGGER.i(TAG, "Bookmark purchase consuming...");
mBillingManager.consumePurchase(PurchaseUtils.parseToken(purchaseData));
return;
}
super(serverId);
}
@Override
void onValidationError(@NonNull ValidationStatus status)
{
if (status == ValidationStatus.AUTH_ERROR)
{
if (mCallback != null)
@ -126,6 +123,13 @@ public class FailedBookmarkPurchaseController implements PurchaseController<Fail
if (mCallback != null)
mCallback.onFailedPurchaseDetected(true);
}
@Override
void consumePurchase(@NonNull String purchaseData)
{
LOGGER.i(TAG, "Failed bookmark purchase consuming...");
mBillingManager.consumePurchase(PurchaseUtils.parseToken(purchaseData));
}
}
private class PlayStoreBillingCallbackImpl implements PlayStoreBillingCallback
@ -187,7 +191,7 @@ public class FailedBookmarkPurchaseController implements PurchaseController<Fail
@Override
public void onConsumptionSuccess()
{
LOGGER.i(TAG, "Failed bookmark purchase consumed and verified");
LOGGER.i(TAG, "Failed bookmark purchase consumed");
if (mCallback != null)
mCallback.onFailedPurchaseDetected(false);
}