diff --git a/android/src/com/mapswithme/maps/news/OnboardingStep.java b/android/src/com/mapswithme/maps/news/OnboardingStep.java index 8432b9bcde..60694d50d7 100644 --- a/android/src/com/mapswithme/maps/news/OnboardingStep.java +++ b/android/src/com/mapswithme/maps/news/OnboardingStep.java @@ -1,47 +1,105 @@ package com.mapswithme.maps.news; import androidx.annotation.DrawableRes; +import androidx.annotation.NonNull; import androidx.annotation.StringRes; import com.mapswithme.maps.R; import com.mapswithme.util.UiUtils; +import com.mapswithme.util.statistics.StatisticValueConverter; -public enum OnboardingStep +public enum OnboardingStep implements StatisticValueConverter { CHECK_OUT_SIGHTS(R.string.visible, R.string.visible, R.string.view_campaign_button, R.string.visible, - R.drawable.img_check_sights_out), + R.drawable.img_check_sights_out) + { + @NonNull + @Override + public String toStatisticValue() + { + return "sample_discovery"; + } + }, SUBSCRIBE_TO_CATALOG(R.string.visible, R.string.visible, R.string.view_campaign_button, R.string.visible, - R.drawable.img_discover_guides), + R.drawable.img_discover_guides) + { + @NonNull + @Override + public String toStatisticValue() + { + return "buy_subscription"; + } + }, DISCOVER_GUIDES(R.string.visible, R.string.visible, R.string.view_campaign_button, R.string.visible, - R.drawable.img_discover_guides), + R.drawable.img_discover_guides) + { + @NonNull + @Override + public String toStatisticValue() + { + return "catalog_discovery"; + } + }, SHARE_EMOTIONS(R.string.visible, UiUtils.NO_ID, R.string.view_campaign_button, R.string.visible, - R.drawable.img_share_emptions, false), + R.drawable.img_share_emptions, false) + { + @NonNull + @Override + public String toStatisticValue() + { + return "share_emotions"; + } + }, EXPERIENCE(R.string.visible, UiUtils.NO_ID, R.string.view_campaign_button, R.string.visible, - R.drawable.img_experience, false), + R.drawable.img_experience, false) + { + @NonNull + @Override + public String toStatisticValue() + { + return "experience"; + } + }, DREAM_AND_PLAN(R.string.visible, UiUtils.NO_ID, R.string.view_campaign_button, R.string.visible, - R.drawable.img_dream_and_plan, false), + R.drawable.img_dream_and_plan, false) + { + @NonNull + @Override + public String toStatisticValue() + { + return "dream_and_plan"; + } + }, PERMISSION_EXPLANATION(R.string.visible, R.string.visible, R.string.view_campaign_button, R.string.visible, - R.drawable.img_welcome); + R.drawable.img_welcome) + { + @NonNull + @Override + public String toStatisticValue() + { + return "permissions"; + } + }; @StringRes private final int mAcceptButtonResId; @@ -75,7 +133,6 @@ public enum OnboardingStep mDeclinedButton = hasDeclinedButton; } - @StringRes public int getAcceptButtonResId() { diff --git a/android/src/com/mapswithme/maps/onboarding/BaseNewsFragment.java b/android/src/com/mapswithme/maps/onboarding/BaseNewsFragment.java index 739e68e3fe..c95e8690ce 100644 --- a/android/src/com/mapswithme/maps/onboarding/BaseNewsFragment.java +++ b/android/src/com/mapswithme/maps/onboarding/BaseNewsFragment.java @@ -25,12 +25,14 @@ import android.widget.ImageView; import android.widget.LinearLayout; import android.widget.TextView; +import com.mapswithme.maps.BuildConfig; import com.mapswithme.maps.MwmApplication; import com.mapswithme.maps.R; import com.mapswithme.maps.base.BaseMwmDialogFragment; import com.mapswithme.util.ThemeUtils; import com.mapswithme.util.UiUtils; import com.mapswithme.util.Utils; +import com.mapswithme.util.statistics.Statistics; import java.util.ArrayList; import java.util.List; @@ -348,6 +350,7 @@ public abstract class BaseNewsFragment extends BaseMwmDialogFragment @Override public void onClick(View v) { + trackStatistic(Statistics.ParamValue.NEXT); mPager.setCurrentItem(mPager.getCurrentItem() + 1, true); } }); @@ -362,15 +365,27 @@ public abstract class BaseNewsFragment extends BaseMwmDialogFragment }); update(); + + trackStatistic(Statistics.ParamValue.OPEN); return res; } + private void trackStatistic(@NonNull String value) + { + Statistics.ParameterBuilder builder = Statistics + .params() + .add(Statistics.EventParam.ACTION, value) + .add(Statistics.EventParam.VERSION, BuildConfig.VERSION_NAME); + Statistics.INSTANCE.trackEvent(Statistics.EventName.WHATS_NEW_ACTION, builder); + } + @CallSuper protected void onDoneClick() { dismissAllowingStateLoss(); if (mListener != null) mListener.onDialogDone(); + trackStatistic(Statistics.ParamValue.CLOSE); } @SuppressWarnings("TryWithIdenticalCatches") diff --git a/android/src/com/mapswithme/maps/onboarding/WelcomeDialogFragment.java b/android/src/com/mapswithme/maps/onboarding/WelcomeDialogFragment.java index 8c64570f40..81777e85e0 100644 --- a/android/src/com/mapswithme/maps/onboarding/WelcomeDialogFragment.java +++ b/android/src/com/mapswithme/maps/onboarding/WelcomeDialogFragment.java @@ -26,6 +26,7 @@ import com.mapswithme.util.Counters; import com.mapswithme.util.SharedPropertiesUtils; import com.mapswithme.util.ThemeUtils; import com.mapswithme.util.UiUtils; +import com.mapswithme.util.statistics.Statistics; import java.util.Stack; @@ -33,6 +34,7 @@ public class WelcomeDialogFragment extends BaseMwmDialogFragment implements View { private static final String ARG_HAS_SPECIFIC_STEP = "welcome_screen_type"; private static final String ARG_HAS_MANY_STEPS = "show_onboarding_steps"; + private static final String DEF_STATISTICS_VALUE = "agreement"; @NonNull private final Stack mOnboardingSteps = new Stack<>(); @@ -175,7 +177,7 @@ public class WelcomeDialogFragment extends BaseMwmDialogFragment implements View initUserAgreementViews(); bindWelcomeScreenType(); - + trackStatisticEvent(Statistics.EventName.ONBOARDING_SCREEN_SHOW); return res; } @@ -255,6 +257,8 @@ public class WelcomeDialogFragment extends BaseMwmDialogFragment implements View if (!isAgreementGranted) return; + trackStatisticEvent(Statistics.EventName.ONBOARDING_SCREEN_ACCEPT); + if (mPolicyAgreementListener != null) mPolicyAgreementListener.onPolicyAgreementApplied(); dismissAllowingStateLoss(); @@ -282,18 +286,36 @@ public class WelcomeDialogFragment extends BaseMwmDialogFragment implements View mTitle.setText(mOnboardinStep.getTitle()); mImage.setImageResource(mOnboardinStep.getImage()); mAcceptBtn.setText(mOnboardinStep.getAcceptButtonResId()); - declineBtn.setOnClickListener(v -> {}); + declineBtn.setOnClickListener(v -> onDeclineBtnClicked()); mSubtitle.setText(mOnboardinStep.getSubtitle()); } + private void onDeclineBtnClicked() + { + Counters.setFirstStartDialogSeen(requireContext()); + trackStatisticEvent(Statistics.EventName.ONBOARDING_SCREEN_DECLINE); + } + + private void trackStatisticEvent(@NonNull String event) + { + Statistics.ParameterBuilder builder = Statistics + .params().add(Statistics.EventParam.TYPE, getModeStatsValue()); + Statistics.INSTANCE.trackEvent(event, builder); + } + + @NonNull + private String getModeStatsValue() + { + return mOnboardinStep == null ? DEF_STATISTICS_VALUE : mOnboardinStep.toStatisticValue(); + } + @Override public void onClick(View v) { if (v.getId() != R.id.accept_btn) - { - Counters.setFirstStartDialogSeen(requireContext()); return; - } + + trackStatisticEvent(Statistics.EventName.ONBOARDING_SCREEN_ACCEPT); if (!mOnboardingSteps.isEmpty()) { diff --git a/android/src/com/mapswithme/util/statistics/Statistics.java b/android/src/com/mapswithme/util/statistics/Statistics.java index d7edc88b90..797ac0bcbb 100644 --- a/android/src/com/mapswithme/util/statistics/Statistics.java +++ b/android/src/com/mapswithme/util/statistics/Statistics.java @@ -369,6 +369,7 @@ public enum Statistics public static final String DOWNLOADER_BANNER_CLICK = "Downloader_Banner_click"; public static final String DOWNLOADER_FAB_CLICK = "Downloader_AddMap_click"; public static final String DOWNLOADER_SEARCH_CLICK = "Downloader_Search_click"; + public static final String WHATS_NEW_ACTION = "WhatsNew_action"; static final String DOWNLOADER_DIALOG_ERROR = "Downloader_OnStartScreen_error"; // bookmarks @@ -544,6 +545,10 @@ public enum Statistics static final String INAPP_PURCHASE_VALIDATION_ERROR = "InAppPurchase_Validation_error"; static final String INAPP_PURCHASE_PRODUCT_DELIVERED = "InAppPurchase_Product_delivered"; + public static final String ONBOARDING_SCREEN_SHOW = "OnboardingScreen_show"; + public static final String ONBOARDING_SCREEN_ACCEPT = "OnboardingScreen_accept"; + public static final String ONBOARDING_SCREEN_DECLINE = "OnboardingScreen_decline"; + public static final String ONBOARDING_DEEPLINK_SCREEN_SHOW = "OnboardingDeeplinkScreen_show"; public static final String ONBOARDING_DEEPLINK_SCREEN_ACCEPT = "OnboardingDeeplinkScreen_accept"; public static final String ONBOARDING_DEEPLINK_SCREEN_DECLINE = "OnboardingDeeplinkScreen_decline"; @@ -606,6 +611,7 @@ public enum Statistics public static final String SCENARIO = "scenario"; public static final String BUTTON = "button"; public static final String SCREEN = "screen"; + public static final String VERSION = "version"; static final String TARGET = "target"; static final String CATEGORY = "category"; public static final String TAB = "tab"; @@ -701,9 +707,13 @@ public enum Statistics public static final String SPONSORED_BUTTON = "sponsored_button"; public static final String POPUP = "popup"; public static final String WEBVIEW = "webview"; + public static final String ONBOARDING_GUIDES_SUBSCRIPTION = "onboarding_guides_subscription"; public static final String PLUS = "plus"; public static final String DOWNLOAD = "download"; - static final String GUIDES_SUBSCRIPTION = "GuidesSubscription"; + public static final String OPEN = "open"; + public static final String CLOSE = "close"; + public static final String NEXT = "next"; + static final String GUIDES_SUBSCRIPTION = "OnboardingGuidesSubscription"; static final String SEARCH_BOOKING_COM = "Search.Booking.Com"; static final String OPENTABLE = "OpenTable"; static final String LOCALS_EXPERTS = "Locals.Maps.Me";