[android] Added PP closing after ads removal purchase is successful
This commit is contained in:
parent
7cff0cf8ea
commit
45a0cc6fc5
6 changed files with 61 additions and 15 deletions
|
@ -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();
|
||||
|
|
|
@ -0,0 +1,6 @@
|
|||
package com.mapswithme.maps.purchase;
|
||||
|
||||
public interface AdsRemovalActivationCallback
|
||||
{
|
||||
void onAdsRemovalActivation();
|
||||
}
|
|
@ -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();
|
||||
}
|
||||
};
|
||||
|
||||
|
|
|
@ -14,5 +14,5 @@ public interface AdsRemovalPurchaseCallback
|
|||
void onProductDetailsFailure();
|
||||
void onStoreConnectionFailed();
|
||||
void onValidationStarted();
|
||||
void onValidationStatusObtained(@NonNull AdsRemovalValidationStatus status);
|
||||
void onValidationFinish(boolean success);
|
||||
}
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -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);
|
||||
|
|
Reference in a new issue