[android] Added PP closing after ads removal purchase is successful

This commit is contained in:
Александр Зацепин 2018-10-01 15:15:05 +03:00 committed by yoksnod
parent 7cff0cf8ea
commit 45a0cc6fc5
6 changed files with 61 additions and 15 deletions

View file

@ -73,6 +73,7 @@ import com.mapswithme.maps.maplayer.subway.SubwayManager;
import com.mapswithme.maps.maplayer.traffic.OnTrafficLayerToggleListener;
import com.mapswithme.maps.maplayer.traffic.TrafficManager;
import com.mapswithme.maps.maplayer.traffic.widget.TrafficButton;
import com.mapswithme.maps.purchase.AdsRemovalActivationCallback;
import com.mapswithme.maps.purchase.AdsRemovalPurchaseCallback;
import com.mapswithme.maps.purchase.AdsRemovalPurchaseControllerProvider;
import com.mapswithme.maps.purchase.PurchaseController;
@ -150,7 +151,8 @@ public class MwmActivity extends BaseMwmFragmentActivity
OnTrafficLayerToggleListener,
OnSubwayLayerToggleListener,
BookmarkManager.BookmarksCatalogListener,
AdsRemovalPurchaseControllerProvider
AdsRemovalPurchaseControllerProvider,
AdsRemovalActivationCallback
{
private static final Logger LOGGER = LoggerFactory.INSTANCE.getLogger(LoggerFactory.Type.MISC);
private static final String TAG = MwmActivity.class.getSimpleName();
@ -1837,6 +1839,12 @@ public class MwmActivity extends BaseMwmFragmentActivity
return mAdsRemovalPurchaseController;
}
@Override
public void onAdsRemovalActivation()
{
closePlacePage();
}
private void adjustMenuLineFrameVisibility(@Nullable final Runnable completion)
{
final RoutingController controller = RoutingController.get();

View file

@ -0,0 +1,6 @@
package com.mapswithme.maps.purchase;
public interface AdsRemovalActivationCallback
{
void onAdsRemovalActivation();
}

View file

@ -7,9 +7,11 @@ import android.view.View;
import android.widget.RelativeLayout;
import android.widget.TextView;
import com.mapswithme.maps.PrivateVariables;
import com.mapswithme.maps.R;
import com.mapswithme.maps.dialog.AlertDialog;
import com.mapswithme.util.UiUtils;
import com.mapswithme.util.statistics.Statistics;
enum AdsRemovalPaymentState
{
@ -49,6 +51,8 @@ enum AdsRemovalPaymentState
View image = view.findViewById(R.id.image);
alignPayButtonBelow(view, image == null ? R.id.title : R.id.image);
dialog.updatePaymentButtons();
Statistics.INSTANCE.trackPurchasePreviewShow(PrivateVariables.adsRemovalVendor(),
PrivateVariables.adsRemovalYearlyProductId());
}
},
EXPLANATION
@ -113,7 +117,7 @@ enum AdsRemovalPaymentState
@Override
void activate(@NonNull AdsRemovalPurchaseDialog dialog)
{
dialog.dismissAllowingStateLoss();
dialog.finishValidation();
}
};

View file

@ -14,5 +14,5 @@ public interface AdsRemovalPurchaseCallback
void onProductDetailsFailure();
void onStoreConnectionFailed();
void onValidationStarted();
void onValidationStatusObtained(@NonNull AdsRemovalValidationStatus status);
void onValidationFinish(boolean success);
}

View file

@ -67,6 +67,10 @@ class AdsRemovalPurchaseController extends AbstractPurchaseController<AdsRemoval
public void onValidate(@NonNull AdsRemovalValidationStatus status)
{
LOGGER.i(TAG, "Validation status of 'ads removal': " + status);
if (status == AdsRemovalValidationStatus.VERIFIED)
Statistics.INSTANCE.trackEvent(Statistics.EventName.INAPP_PURCHASE_VALIDATION_SUCCESS);
else
Statistics.INSTANCE.trackPurchaseValidationError(status);
boolean activateSubscription = status != AdsRemovalValidationStatus.NOT_VERIFIED;
LOGGER.i(TAG, "Ads removal subscription "
+ (activateSubscription ? "activated" : "deactivated"));
@ -74,7 +78,7 @@ class AdsRemovalPurchaseController extends AbstractPurchaseController<AdsRemoval
if (activateSubscription)
Statistics.INSTANCE.trackPurchaseProductDelivered(PrivateVariables.adsRemovalVendor());
if (getUiCallback() != null)
getUiCallback().onValidationStatusObtained(status);
getUiCallback().onValidationFinish(activateSubscription);
}
}

View file

@ -35,12 +35,14 @@ public class AdsRemovalPurchaseDialog extends BaseMwmDialogFragment implements A
private final static String TAG = AdsRemovalPurchaseDialog.class.getSimpleName();
private final static String EXTRA_CURRENT_STATE = "extra_current_state";
private final static String EXTRA_PRODUCT_DETAILS = "extra_product_details";
private final static String EXTRA_ACTIVATION_RESULT = "extra_activation_result";
private final static int WEEKS_IN_YEAR = 52;
private final static int WEEKS_IN_MONTH = 4;
final static int REQ_CODE_PRODUCT_DETAILS_FAILURE = 1;
final static int REQ_CODE_PAYMENT_FAILURE = 2;
final static int REQ_CODE_VALIDATION_SERVER_ERROR = 3;
private boolean mActivationResult;
@Nullable
private ProductDetails[] mProductDetails;
@NonNull
@ -50,6 +52,8 @@ public class AdsRemovalPurchaseDialog extends BaseMwmDialogFragment implements A
private PurchaseController<AdsRemovalPurchaseCallback> mController;
@NonNull
private PurchaseCallback mPurchaseCallback = new PurchaseCallback();
@Nullable
private AdsRemovalActivationCallback mActivationCallback;
@SuppressWarnings("NullableProblems")
@NonNull
private View mYearlyButton;
@ -77,6 +81,8 @@ public class AdsRemovalPurchaseDialog extends BaseMwmDialogFragment implements A
LOGGER.d(TAG, "onAttach");
mController = ((AdsRemovalPurchaseControllerProvider) context).getAdsRemovalPurchaseController();
mController.addCallback(mPurchaseCallback);
if (context instanceof AdsRemovalActivationCallback)
mActivationCallback = (AdsRemovalActivationCallback) context;
}
@Nullable
@ -113,6 +119,7 @@ public class AdsRemovalPurchaseDialog extends BaseMwmDialogFragment implements A
= (ProductDetails[]) savedInstanceState.getParcelableArray(EXTRA_PRODUCT_DETAILS);
if (productDetails != null)
mProductDetails = productDetails;
mActivationResult = savedInstanceState.getBoolean(EXTRA_ACTIVATION_RESULT);
activateState(savedState);
return;
@ -201,6 +208,7 @@ public class AdsRemovalPurchaseDialog extends BaseMwmDialogFragment implements A
LOGGER.d(TAG, "onSaveInstanceState");
outState.putInt(EXTRA_CURRENT_STATE, mState.ordinal());
outState.putParcelableArray(EXTRA_PRODUCT_DETAILS, mProductDetails);
outState.putBoolean(EXTRA_ACTIVATION_RESULT, mActivationResult);
}
@Override
@ -218,6 +226,14 @@ public class AdsRemovalPurchaseDialog extends BaseMwmDialogFragment implements A
mController.removeCallback();
}
void finishValidation()
{
if (mActivationResult && mActivationCallback != null)
mActivationCallback.onAdsRemovalActivation();
dismissAllowingStateLoss();
}
void updatePaymentButtons()
{
updateYearlyButton();
@ -311,6 +327,11 @@ public class AdsRemovalPurchaseDialog extends BaseMwmDialogFragment implements A
}
}
private void handleActivationResult(boolean result)
{
mActivationResult = result;
}
private static class PurchaseCallback implements AdsRemovalPurchaseCallback,
Detachable<AdsRemovalPurchaseDialog>
{
@ -320,20 +341,16 @@ public class AdsRemovalPurchaseDialog extends BaseMwmDialogFragment implements A
private List<SkuDetails> mPendingDetails;
@Nullable
private AdsRemovalPaymentState mPendingState;
private Boolean mPendingActivationResult;
@Override
public void onProductDetailsLoaded(@NonNull List<SkuDetails> details)
{
if (mDialog == null)
{
mPendingDetails = Collections.unmodifiableList(details);
return;
}
mDialog.handleProductDetails(details);
else
mDialog.handleProductDetails(details);
activateStateSafely(AdsRemovalPaymentState.PRICE_SELECTION);
Statistics.INSTANCE.trackPurchasePreviewShow(PrivateVariables.adsRemovalVendor(),
PrivateVariables.adsRemovalYearlyProductId());
}
@Override
@ -363,12 +380,13 @@ public class AdsRemovalPurchaseDialog extends BaseMwmDialogFragment implements A
}
@Override
public void onValidationStatusObtained(@NonNull AdsRemovalValidationStatus status)
public void onValidationFinish(boolean success)
{
if (status == AdsRemovalValidationStatus.VERIFIED)
Statistics.INSTANCE.trackEvent(Statistics.EventName.INAPP_PURCHASE_VALIDATION_SUCCESS);
if (mDialog == null)
mPendingActivationResult = success;
else
Statistics.INSTANCE.trackPurchaseValidationError(status);
mDialog.handleActivationResult(success);
activateStateSafely(AdsRemovalPaymentState.VALIDATION_FINISH);
}
@ -393,6 +411,12 @@ public class AdsRemovalPurchaseDialog extends BaseMwmDialogFragment implements A
mPendingDetails = null;
}
if (mPendingActivationResult != null)
{
mDialog.handleActivationResult(mPendingActivationResult);
mPendingActivationResult = null;
}
if (mPendingState != null)
{
mDialog.activateState(mPendingState);