From 0b3644d4915e57fda504b5af4be33bd6a4fb33bb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=90=D0=BB=D0=B5=D0=BA=D1=81=D0=B0=D0=BD=D0=B4=D1=80=20?= =?UTF-8?q?=D0=97=D0=B0=D1=86=D0=B5=D0=BF=D0=B8=D0=BD?= Date: Fri, 16 Nov 2018 15:19:48 +0300 Subject: [PATCH] [android] Added paid routes statistics [android] Added purchase id parameter to ads removal and paid routes statistic --- .../bookmarks/BookmarksCatalogFragment.java | 2 +- .../maps/bookmarks/data/BookmarkManager.java | 3 ++ .../maps/purchase/AdsRemovalPaymentState.java | 3 +- .../AdsRemovalPurchaseController.java | 8 +-- .../purchase/AdsRemovalPurchaseDialog.java | 16 ++++-- .../purchase/BookmarkPaymentActivity.java | 8 +++ .../purchase/BookmarkPaymentFragment.java | 49 +++++++++++++++++-- .../purchase/BookmarkPurchaseController.java | 14 ++++++ .../util/statistics/Statistics.java | 44 +++++++++++------ 9 files changed, 118 insertions(+), 29 deletions(-) diff --git a/android/src/com/mapswithme/maps/bookmarks/BookmarksCatalogFragment.java b/android/src/com/mapswithme/maps/bookmarks/BookmarksCatalogFragment.java index dd94140ed5..a51fde9fc0 100644 --- a/android/src/com/mapswithme/maps/bookmarks/BookmarksCatalogFragment.java +++ b/android/src/com/mapswithme/maps/bookmarks/BookmarksCatalogFragment.java @@ -123,6 +123,7 @@ public class BookmarksCatalogFragment extends BaseWebViewMwmFragment { mFailedPurchaseController = PurchaseFactory.createFailedBookmarkPurchaseController(); mFailedPurchaseController.initialize(getActivity()); + mFailedPurchaseController.validateExistingPurchases(); mPurchaseChecker = new FailedBookmarkPurchaseChecker(); View root = inflater.inflate(R.layout.fragment_bookmarks_catalog, container, false); mWebView = root.findViewById(getWebViewResId()); @@ -130,7 +131,6 @@ public class BookmarksCatalogFragment extends BaseWebViewMwmFragment mProgressView = root.findViewById(R.id.progress); initWebView(mWebView); mRetryBtn.setOnClickListener(v -> onRetryClick()); - mFailedPurchaseController.validateExistingPurchases(); return root; } diff --git a/android/src/com/mapswithme/maps/bookmarks/data/BookmarkManager.java b/android/src/com/mapswithme/maps/bookmarks/data/BookmarkManager.java index af823fa65c..318ed2a133 100644 --- a/android/src/com/mapswithme/maps/bookmarks/data/BookmarkManager.java +++ b/android/src/com/mapswithme/maps/bookmarks/data/BookmarkManager.java @@ -4,6 +4,7 @@ import android.support.annotation.IntDef; import android.support.annotation.MainThread; import android.support.annotation.NonNull; +import com.mapswithme.maps.PrivateVariables; import com.mapswithme.maps.R; import com.mapswithme.util.statistics.Statistics; @@ -258,6 +259,8 @@ public enum BookmarkManager @MainThread public void onImportFinished(@NonNull String id, long catId, boolean successful) { + if (successful) + Statistics.INSTANCE.trackPurchaseProductDelivered(id, PrivateVariables.bookmarksVendor()); for (BookmarksCatalogListener listener : mCatalogListeners) listener.onImportFinished(id, catId, successful); } diff --git a/android/src/com/mapswithme/maps/purchase/AdsRemovalPaymentState.java b/android/src/com/mapswithme/maps/purchase/AdsRemovalPaymentState.java index fc506ca9e6..a346b56f6a 100644 --- a/android/src/com/mapswithme/maps/purchase/AdsRemovalPaymentState.java +++ b/android/src/com/mapswithme/maps/purchase/AdsRemovalPaymentState.java @@ -51,7 +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(), + Statistics.INSTANCE.trackPurchasePreviewShow(PrivateVariables.adsRemovalServerId(), + PrivateVariables.adsRemovalVendor(), PrivateVariables.adsRemovalYearlyProductId()); } }, diff --git a/android/src/com/mapswithme/maps/purchase/AdsRemovalPurchaseController.java b/android/src/com/mapswithme/maps/purchase/AdsRemovalPurchaseController.java index 200627ba75..cd80caf924 100644 --- a/android/src/com/mapswithme/maps/purchase/AdsRemovalPurchaseController.java +++ b/android/src/com/mapswithme/maps/purchase/AdsRemovalPurchaseController.java @@ -52,16 +52,18 @@ class AdsRemovalPurchaseController extends AbstractPurchaseControllercastTo(currentFragment).onBackPressed(); + } } diff --git a/android/src/com/mapswithme/maps/purchase/BookmarkPaymentFragment.java b/android/src/com/mapswithme/maps/purchase/BookmarkPaymentFragment.java index 3ad641b6b0..b3a1c10dc9 100644 --- a/android/src/com/mapswithme/maps/purchase/BookmarkPaymentFragment.java +++ b/android/src/com/mapswithme/maps/purchase/BookmarkPaymentFragment.java @@ -11,6 +11,7 @@ import android.view.ViewGroup; import android.widget.ImageView; import android.widget.TextView; +import com.android.billingclient.api.BillingClient; import com.android.billingclient.api.SkuDetails; import com.bumptech.glide.Glide; import com.mapswithme.maps.Framework; @@ -23,6 +24,7 @@ import com.mapswithme.maps.dialog.AlertDialogCallback; import com.mapswithme.util.Utils; import com.mapswithme.util.log.Logger; import com.mapswithme.util.log.LoggerFactory; +import com.mapswithme.util.statistics.Statistics; import java.util.Collections; import java.util.List; @@ -43,8 +45,9 @@ public class BookmarkPaymentFragment extends BaseMwmFragment @SuppressWarnings("NullableProblems") @NonNull private PurchaseController mPurchaseController; + @SuppressWarnings("NullableProblems") @NonNull - private BookmarkPurchaseCallback mPurchaseCallback = new BookmarkPurchaseCallback(); + private BookmarkPurchaseCallback mPurchaseCallback; @SuppressWarnings("NullableProblems") @NonNull private PaymentData mPaymentData; @@ -67,6 +70,7 @@ public class BookmarkPaymentFragment extends BaseMwmFragment throw new IllegalStateException("Payment data must be provided for payment fragment!"); mPaymentData = paymentData; + mPurchaseCallback = new BookmarkPurchaseCallback(mPaymentData.getServerId()); } @Nullable @@ -79,16 +83,44 @@ public class BookmarkPaymentFragment extends BaseMwmFragment mPurchaseController.initialize(getActivity()); View root = inflater.inflate(R.layout.fragment_bookmark_payment, container, false); TextView buyButton = root.findViewById(R.id.buy_btn); - buyButton.setOnClickListener(v -> startPurchaseTransaction()); + buyButton.setOnClickListener(v -> onBuyClicked()); TextView cancelButton = root.findViewById(R.id.cancel_btn); - cancelButton.setOnClickListener(v -> getActivity().finish()); + cancelButton.setOnClickListener(v -> onCancelClicked()); return root; } + private void onBuyClicked() + { + Statistics.INSTANCE.trackPurchasePreviewSelect(mPaymentData.getServerId(), + mPaymentData.getProductId()); + Statistics.INSTANCE.trackPurchaseEvent(Statistics.EventName.INAPP_PURCHASE_PREVIEW_PAY, + mPaymentData.getServerId()); + startPurchaseTransaction(); + } + + private void onCancelClicked() + { + Statistics.INSTANCE.trackPurchaseEvent(Statistics.EventName.INAPP_PURCHASE_PREVIEW_CANCEL, + mPaymentData.getServerId()); + getActivity().finish(); + } + + @Override + public boolean onBackPressed() + { + Statistics.INSTANCE.trackPurchaseEvent(Statistics.EventName.INAPP_PURCHASE_PREVIEW_CANCEL, + mPaymentData.getServerId()); + return super.onBackPressed(); + } + @Override public void onViewCreated(View view, @Nullable Bundle savedInstanceState) { super.onViewCreated(view, savedInstanceState); + if (savedInstanceState == null) + Statistics.INSTANCE.trackPurchasePreviewShow(mPaymentData.getServerId(), + PrivateVariables.bookmarksVendor(), + mPaymentData.getProductId()); LOGGER.d(TAG, "onViewCreated savedInstanceState = " + savedInstanceState); setInitialPaymentData(); loadImage(); @@ -257,6 +289,13 @@ public class BookmarkPaymentFragment extends BaseMwmFragment @Nullable private List mPendingDetails; private Boolean mPendingValidationResult; + @NonNull + private final String mServerId; + + private BookmarkPurchaseCallback(@NonNull String serverId) + { + mServerId = serverId; + } @Override public void onStartTransaction(boolean success, @NonNull String serverId, @NonNull String @@ -284,7 +323,7 @@ public class BookmarkPaymentFragment extends BaseMwmFragment } @Override - public void onPaymentFailure(int error) + public void onPaymentFailure(@BillingClient.BillingResponse int error) { activateStateSafely(BookmarkPaymentState.PAYMENT_FAILURE); } @@ -304,6 +343,8 @@ public class BookmarkPaymentFragment extends BaseMwmFragment @Override public void onValidationStarted() { + Statistics.INSTANCE.trackPurchaseEvent(Statistics.EventName.INAPP_PURCHASE_STORE_SUCCESS, + mServerId); activateStateSafely(BookmarkPaymentState.VALIDATION); } diff --git a/android/src/com/mapswithme/maps/purchase/BookmarkPurchaseController.java b/android/src/com/mapswithme/maps/purchase/BookmarkPurchaseController.java index 197a7791a2..c39732dcfd 100644 --- a/android/src/com/mapswithme/maps/purchase/BookmarkPurchaseController.java +++ b/android/src/com/mapswithme/maps/purchase/BookmarkPurchaseController.java @@ -10,6 +10,7 @@ import com.mapswithme.maps.PrivateVariables; import com.mapswithme.util.ConnectionState; import com.mapswithme.util.log.Logger; import com.mapswithme.util.log.LoggerFactory; +import com.mapswithme.util.statistics.Statistics; import java.util.List; @@ -56,11 +57,16 @@ class BookmarkPurchaseController extends AbstractPurchaseController details) { diff --git a/android/src/com/mapswithme/util/statistics/Statistics.java b/android/src/com/mapswithme/util/statistics/Statistics.java index b648bb7e5b..7d24a6e83b 100644 --- a/android/src/com/mapswithme/util/statistics/Statistics.java +++ b/android/src/com/mapswithme/util/statistics/Statistics.java @@ -118,6 +118,7 @@ import static com.mapswithme.util.statistics.Statistics.EventParam.OBJECT_LON; import static com.mapswithme.util.statistics.Statistics.EventParam.PLACEMENT; import static com.mapswithme.util.statistics.Statistics.EventParam.PRODUCT; import static com.mapswithme.util.statistics.Statistics.EventParam.PROVIDER; +import static com.mapswithme.util.statistics.Statistics.EventParam.PURCHASE; import static com.mapswithme.util.statistics.Statistics.EventParam.RESTAURANT; import static com.mapswithme.util.statistics.Statistics.EventParam.RESTAURANT_LAT; import static com.mapswithme.util.statistics.Statistics.EventParam.RESTAURANT_LON; @@ -328,15 +329,15 @@ public enum Statistics public static final String MAP_LAYERS_ACTIVATE = "Map_Layers_activate"; // Purchases. - public static final String INAPP_PURCHASE_PREVIEW_SHOW = "InAppPurchase_Preview_show"; - public static final String INAPP_PURCHASE_PREVIEW_SELECT = "InAppPurchase_Preview_select"; + static final String INAPP_PURCHASE_PREVIEW_SHOW = "InAppPurchase_Preview_show"; + static final String INAPP_PURCHASE_PREVIEW_SELECT = "InAppPurchase_Preview_select"; public static final String INAPP_PURCHASE_PREVIEW_PAY = "InAppPurchase_Preview_pay"; public static final String INAPP_PURCHASE_PREVIEW_CANCEL = "InAppPurchase_Preview_cancel"; public static final String INAPP_PURCHASE_STORE_SUCCESS = "InAppPurchase_Store_success"; - public static final String INAPP_PURCHASE_STORE_ERROR = "InAppPurchase_Store_error"; + static final String INAPP_PURCHASE_STORE_ERROR = "InAppPurchase_Store_error"; public static final String INAPP_PURCHASE_VALIDATION_SUCCESS = "InAppPurchase_Validation_success"; - public static final String INAPP_PURCHASE_VALIDATION_ERROR = "InAppPurchase_Validation_error"; - public static final String INAPP_PURCHASE_PRODUCT_DELIVERED = "InAppPurchase_Product_delivered"; + static final String INAPP_PURCHASE_VALIDATION_ERROR = "InAppPurchase_Validation_error"; + static final String INAPP_PURCHASE_PRODUCT_DELIVERED = "InAppPurchase_Product_delivered"; public static class Settings { @@ -428,6 +429,7 @@ public enum Statistics static final String BUTTON = "button"; static final String VENDOR = "vendor"; static final String PRODUCT = "product"; + static final String PURCHASE = "purchase"; private EventParam() {} } @@ -1315,23 +1317,33 @@ public enum Statistics .add(BUTTON, isCross ? 0 : 1)); } - public void trackPurchasePreviewShow(@NonNull String vendor, @NonNull String productId) + public void trackPurchasePreviewShow(@NonNull String purchaseId, @NonNull String vendor, + @NonNull String productId) { trackEvent(INAPP_PURCHASE_PREVIEW_SHOW, params().add(VENDOR, vendor) - .add(PRODUCT, productId)); + .add(PRODUCT, productId) + .add(PURCHASE, purchaseId)); } - public void trackPurchasePreviewSelect(@NonNull String productId) + public void trackPurchaseEvent(@NonNull String event, @NonNull String purchaseId) { - trackEvent(INAPP_PURCHASE_PREVIEW_SELECT, params().add(PRODUCT, productId)); + trackEvent(event, params().add(PURCHASE, purchaseId)); } - public void trackPurchaseStoreError(@BillingClient.BillingResponse int error) + public void trackPurchasePreviewSelect(@NonNull String purchaseId, @NonNull String productId) { - trackEvent(INAPP_PURCHASE_STORE_ERROR, params().add(ERROR, "Billing error: " + error)); + trackEvent(INAPP_PURCHASE_PREVIEW_SELECT, params().add(PRODUCT, productId) + .add(PURCHASE, productId)); } - public void trackPurchaseValidationError(@NonNull ValidationStatus status) + public void trackPurchaseStoreError(@NonNull String purchaseId, + @BillingClient.BillingResponse int error) + { + trackEvent(INAPP_PURCHASE_STORE_ERROR, params().add(ERROR, "Billing error: " + error) + .add(PURCHASE, purchaseId)); + } + + public void trackPurchaseValidationError(@NonNull String purchaseId, @NonNull ValidationStatus status) { if (status == ValidationStatus.VERIFIED) return; @@ -1344,12 +1356,14 @@ public enum Statistics else return; - trackEvent(INAPP_PURCHASE_VALIDATION_ERROR, params().add(ERROR_CODE, errorCode)); + trackEvent(INAPP_PURCHASE_VALIDATION_ERROR, params().add(ERROR_CODE, errorCode) + .add(PURCHASE, purchaseId)); } - public void trackPurchaseProductDelivered(@NonNull String vendor) + public void trackPurchaseProductDelivered(@NonNull String purchaseId, @NonNull String vendor) { - trackEvent(INAPP_PURCHASE_PRODUCT_DELIVERED, params().add(VENDOR, vendor)); + trackEvent(INAPP_PURCHASE_PRODUCT_DELIVERED, params().add(VENDOR, vendor) + .add(PURCHASE, purchaseId)); } public static ParameterBuilder params()