From c22ccfca4543d62fe423969c76370d619a451329 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, 8 Dec 2017 20:36:43 +0300 Subject: [PATCH] [android] Added statistics for galleries in discovery Refactored statistics code to make it reusable for PP and discovery --- .../src/com/mapswithme/maps/MwmActivity.java | 1 + .../maps/discovery/DiscoveryFragment.java | 98 +++++++++-- .../com/mapswithme/maps/gallery/Holders.java | 26 +-- .../maps/gallery/ItemSelectedListener.java | 4 +- .../impl/BaseItemSelectedListener.java | 4 +- .../mapswithme/maps/gallery/impl/Factory.java | 52 ++++-- .../impl/ViatorOfflineAdapterStrategy.java | 6 + .../maps/widget/placepage/PlacePageView.java | 80 +++++---- .../util/statistics/Destination.java | 9 + .../util/statistics/GalleryPlacement.java | 7 + .../util/statistics/GalleryState.java | 7 + .../util/statistics/GalleryType.java | 55 ++++++ .../util/statistics/PlacePageTracker.java | 18 -- .../util/statistics/Statistics.java | 161 ++++++++++-------- 14 files changed, 362 insertions(+), 166 deletions(-) create mode 100644 android/src/com/mapswithme/util/statistics/Destination.java create mode 100644 android/src/com/mapswithme/util/statistics/GalleryPlacement.java create mode 100644 android/src/com/mapswithme/util/statistics/GalleryState.java create mode 100644 android/src/com/mapswithme/util/statistics/GalleryType.java diff --git a/android/src/com/mapswithme/maps/MwmActivity.java b/android/src/com/mapswithme/maps/MwmActivity.java index c4df889710..3d16ea195a 100644 --- a/android/src/com/mapswithme/maps/MwmActivity.java +++ b/android/src/com/mapswithme/maps/MwmActivity.java @@ -924,6 +924,7 @@ public class MwmActivity extends BaseMwmFragmentActivity Intent i = new Intent(MwmActivity.this, DiscoveryActivity.class); startActivityForResult(i, REQ_CODE_DISCOVERY); } + Statistics.INSTANCE.trackDiscoveryOpen(); } private void initOnmapDownloader() diff --git a/android/src/com/mapswithme/maps/discovery/DiscoveryFragment.java b/android/src/com/mapswithme/maps/discovery/DiscoveryFragment.java index 451f07a277..6efdbfbeee 100644 --- a/android/src/com/mapswithme/maps/discovery/DiscoveryFragment.java +++ b/android/src/com/mapswithme/maps/discovery/DiscoveryFragment.java @@ -3,6 +3,7 @@ package com.mapswithme.maps.discovery; import android.app.Activity; import android.content.Context; import android.os.Bundle; +import android.support.annotation.CallSuper; import android.support.annotation.IdRes; import android.support.annotation.MainThread; import android.support.annotation.NonNull; @@ -33,6 +34,17 @@ import com.mapswithme.util.Language; import com.mapswithme.util.NetworkPolicy; import com.mapswithme.util.UiUtils; import com.mapswithme.util.Utils; +import com.mapswithme.util.statistics.GalleryType; +import com.mapswithme.util.statistics.Statistics; + +import static com.mapswithme.util.statistics.Destination.EXTERNAL; +import static com.mapswithme.util.statistics.Destination.PLACEPAGE; +import static com.mapswithme.util.statistics.Destination.ROUTING; +import static com.mapswithme.util.statistics.GalleryPlacement.DISCOVERY; +import static com.mapswithme.util.statistics.GalleryType.LOCAL_EXPERTS; +import static com.mapswithme.util.statistics.GalleryType.SEARCH_ATTRACTIONS; +import static com.mapswithme.util.statistics.GalleryType.SEARCH_RESTAURANTS; +import static com.mapswithme.util.statistics.GalleryType.VIATOR; public class DiscoveryFragment extends BaseMwmToolbarFragment implements UICallback { @@ -146,6 +158,8 @@ public class DiscoveryFragment extends BaseMwmToolbarFragment implements UICallb public void onClick(View v) { Utils.openUrl(getActivity(), DiscoveryManager.nativeGetViatorUrl()); + Statistics.INSTANCE.trackGalleryEvent(Statistics.EventName.PP_SPONSOR_LOGO_SELECTED, + VIATOR, DISCOVERY); } }); initViatorGallery(); @@ -203,7 +217,7 @@ public class DiscoveryFragment extends BaseMwmToolbarFragment implements UICallb UiUtils.show(getView(), R.id.thingsToDoLayout, R.id.thingsToDo); RecyclerView thinsToDo = getGallery(R.id.thingsToDo); thinsToDo.setAdapter(Factory.createViatorOfflineAdapter(new ViatorOfflineSelectedListener - (getActivity()))); + (getActivity()), DISCOVERY)); } } @@ -229,8 +243,11 @@ public class DiscoveryFragment extends BaseMwmToolbarFragment implements UICallb public void onAttractionsReceived(@NonNull SearchResult[] results) { updateViewsVisibility(results, R.id.attractionsTitle, R.id.attractions); - ItemSelectedListener listener = new SearchBasedListener(this); - getGallery(R.id.attractions).setAdapter(Factory.createSearchBasedAdapter(results, listener)); + ItemSelectedListener listener + = createSearchProductItemListener(SEARCH_ATTRACTIONS); + getGallery(R.id.attractions).setAdapter(Factory.createSearchBasedAdapter(results, listener, + SEARCH_ATTRACTIONS, + DISCOVERY)); } @MainThread @@ -238,8 +255,11 @@ public class DiscoveryFragment extends BaseMwmToolbarFragment implements UICallb public void onCafesReceived(@NonNull SearchResult[] results) { updateViewsVisibility(results, R.id.eatAndDrinkTitle, R.id.food); - ItemSelectedListener listener = new SearchBasedListener(this); - getGallery(R.id.food).setAdapter(Factory.createSearchBasedAdapter(results, listener)); + ItemSelectedListener listener = + createSearchProductItemListener(SEARCH_RESTAURANTS); + getGallery(R.id.food).setAdapter(Factory.createSearchBasedAdapter(results, listener, + SEARCH_RESTAURANTS, + DISCOVERY)); } @MainThread @@ -248,8 +268,10 @@ public class DiscoveryFragment extends BaseMwmToolbarFragment implements UICallb { updateViewsVisibility(products, R.id.thingsToDoLayout, R.id.thingsToDo); String url = DiscoveryManager.nativeGetViatorUrl(); - ItemSelectedListener listener = new BaseItemSelectedListener<>(getActivity()); - getGallery(R.id.thingsToDo).setAdapter(Factory.createViatorAdapter(products, url, listener)); + ItemSelectedListener listener + = createOnlineProductItemListener(VIATOR); + getGallery(R.id.thingsToDo).setAdapter(Factory.createViatorAdapter(products, url, listener, + DISCOVERY)); } @MainThread @@ -258,8 +280,10 @@ public class DiscoveryFragment extends BaseMwmToolbarFragment implements UICallb { updateViewsVisibility(experts, R.id.localGuidesTitle, R.id.localGuides); String url = DiscoveryManager.nativeGetLocalExpertsUrl(); - ItemSelectedListener listener = new BaseItemSelectedListener<>(getActivity()); - getGallery(R.id.localGuides).setAdapter(Factory.createLocalExpertsAdapter(experts, url, listener)); + ItemSelectedListener listener + = createOnlineProductItemListener(LOCAL_EXPERTS); + getGallery(R.id.localGuides).setAdapter(Factory.createLocalExpertsAdapter(experts, url, listener, + DISCOVERY)); } @Override @@ -270,15 +294,19 @@ public class DiscoveryFragment extends BaseMwmToolbarFragment implements UICallb case VIATOR: String url = DiscoveryManager.nativeGetViatorUrl(); getGallery(R.id.thingsToDo).setAdapter(Factory.createViatorErrorAdapter(url, mDefaultListener)); + Statistics.INSTANCE.trackGalleryError(VIATOR, DISCOVERY, null); break; case ATTRACTIONS: getGallery(R.id.attractions).setAdapter(Factory.createSearchBasedErrorAdapter()); + Statistics.INSTANCE.trackGalleryError(SEARCH_ATTRACTIONS, DISCOVERY, null); break; case CAFES: getGallery(R.id.food).setAdapter(Factory.createSearchBasedErrorAdapter()); + Statistics.INSTANCE.trackGalleryError(SEARCH_RESTAURANTS, DISCOVERY, null); break; case LOCAL_EXPERTS: getGallery(R.id.localGuides).setAdapter(Factory.createLocalExpertsErrorAdapter()); + Statistics.INSTANCE.trackGalleryError(LOCAL_EXPERTS, DISCOVERY, null); break; default: throw new AssertionError("Unknown item type: " + type); @@ -352,6 +380,50 @@ public class DiscoveryFragment extends BaseMwmToolbarFragment implements UICallb }; } + private ItemSelectedListener createOnlineProductItemListener + (final @NonNull GalleryType type) + { + return new BaseItemSelectedListener(getActivity()) + { + @Override + public void onItemSelected(@NonNull Item item, int position) + { + super.onItemSelected(item, position); + Statistics.INSTANCE.trackGalleryProductItemSelected(type, DISCOVERY, position, EXTERNAL); + } + + @Override + public void onMoreItemSelected(@NonNull Item item) + { + super.onMoreItemSelected(item); + Statistics.INSTANCE.trackGalleryEvent(Statistics.EventName.PP_SPONSOR_MORE_SELECTED, type, + DISCOVERY); + } + }; + } + + private ItemSelectedListener createSearchProductItemListener + (final @NonNull GalleryType type) + { + return new SearchBasedListener(this) + { + @Override + public void onItemSelected(@NonNull Items.SearchItem item, int position) + { + super.onItemSelected(item, position); + Statistics.INSTANCE.trackGalleryProductItemSelected(type, DISCOVERY, position, PLACEPAGE); + } + + @Override + public void onActionButtonSelected(@NonNull Items.SearchItem item, int position) + { + super.onActionButtonSelected(item, position); + Statistics.INSTANCE.trackGalleryProductItemSelected(type, DISCOVERY, position, + ROUTING); + } + }; + } + private static class ViatorOfflineSelectedListener extends BaseItemSelectedListener { private ViatorOfflineSelectedListener(@NonNull Activity context) @@ -360,7 +432,7 @@ public class DiscoveryFragment extends BaseMwmToolbarFragment implements UICallb } @Override - public void onActionButtonSelected(@NonNull Items.Item item) + public void onActionButtonSelected(@NonNull Items.Item item, int position) { Utils.showWirelessSettings(getContext()); } @@ -378,13 +450,15 @@ public class DiscoveryFragment extends BaseMwmToolbarFragment implements UICallb } @Override - public void onItemSelected(@NonNull Items.SearchItem item) + @CallSuper + public void onItemSelected(@NonNull Items.SearchItem item, int position) { mFragment.showOnMap(item); } @Override - public void onActionButtonSelected(@NonNull Items.SearchItem item) + @CallSuper + public void onActionButtonSelected(@NonNull Items.SearchItem item, int position) { mFragment.routeTo(item); } diff --git a/android/src/com/mapswithme/maps/gallery/Holders.java b/android/src/com/mapswithme/maps/gallery/Holders.java index 1ee36f87c0..b50cd82bea 100644 --- a/android/src/com/mapswithme/maps/gallery/Holders.java +++ b/android/src/com/mapswithme/maps/gallery/Holders.java @@ -87,7 +87,7 @@ public class Holders } @Override - protected void onItemSelected(@NonNull Items.ViatorItem item) + protected void onItemSelected(@NonNull Items.ViatorItem item, int position) { ItemSelectedListener listener = mAdapter.getListener(); if (listener == null || TextUtils.isEmpty(item.getUrl())) @@ -131,7 +131,7 @@ public class Holders } @Override - protected void onItemSelected(@NonNull T item) + protected void onItemSelected(@NonNull T item, int position) { ItemSelectedListener listener = mAdapter.getListener(); if (listener == null || TextUtils.isEmpty(item.getUrl())) @@ -212,7 +212,7 @@ public class Holders } @Override - protected void onItemSelected(@NonNull Items.LocalExpertItem item) + protected void onItemSelected(@NonNull Items.LocalExpertItem item, int position) { ItemSelectedListener listener = mAdapter.getListener(); if (listener == null || TextUtils.isEmpty(item.getUrl())) @@ -268,10 +268,10 @@ public class Holders switch (v.getId()) { case R.id.infoLayout: - listener.onItemSelected(item); + listener.onItemSelected(item, position); break; case R.id.button: - listener.onActionButtonSelected(item); + listener.onActionButtonSelected(item, position); break; } } @@ -310,16 +310,16 @@ public class Holders if (position == RecyclerView.NO_POSITION || mItems.isEmpty()) return; - onItemSelected(mItems.get(position)); + onItemSelected(mItems.get(position), position); } - protected void onItemSelected(@NonNull I item) + protected void onItemSelected(@NonNull I item, int position) { ItemSelectedListener listener = mAdapter.getListener(); if (listener == null || TextUtils.isEmpty(item.getUrl())) return; - listener.onItemSelected(item); + listener.onItemSelected(item, position); } } @@ -357,16 +357,16 @@ public class Holders if (position == RecyclerView.NO_POSITION) return; - onItemSelected(mItems.get(position)); + onItemSelected(mItems.get(position), position); } @Override - protected void onItemSelected(@NonNull Items.Item item) + protected void onItemSelected(@NonNull Items.Item item, int position) { if (mAdapter.getListener() == null || TextUtils.isEmpty(item.getUrl())) return; - mAdapter.getListener().onActionButtonSelected(item); + mAdapter.getListener().onActionButtonSelected(item, position); } } @@ -409,12 +409,12 @@ public class Holders } @Override - protected void onItemSelected(@NonNull Items.Item item) + protected void onItemSelected(@NonNull Items.Item item, int position) { if (mAdapter.getListener() == null) return; - mAdapter.getListener().onActionButtonSelected(item); + mAdapter.getListener().onActionButtonSelected(item, position); } } } diff --git a/android/src/com/mapswithme/maps/gallery/ItemSelectedListener.java b/android/src/com/mapswithme/maps/gallery/ItemSelectedListener.java index aa50d9eb3c..13caa5736c 100644 --- a/android/src/com/mapswithme/maps/gallery/ItemSelectedListener.java +++ b/android/src/com/mapswithme/maps/gallery/ItemSelectedListener.java @@ -4,9 +4,9 @@ import android.support.annotation.NonNull; public interface ItemSelectedListener { - void onItemSelected(@NonNull I item); + void onItemSelected(@NonNull I item, int position); void onMoreItemSelected(@NonNull I item); - void onActionButtonSelected(@NonNull I item); + void onActionButtonSelected(@NonNull I item, int position); } diff --git a/android/src/com/mapswithme/maps/gallery/impl/BaseItemSelectedListener.java b/android/src/com/mapswithme/maps/gallery/impl/BaseItemSelectedListener.java index fd5c4701d5..88c2e4b29f 100644 --- a/android/src/com/mapswithme/maps/gallery/impl/BaseItemSelectedListener.java +++ b/android/src/com/mapswithme/maps/gallery/impl/BaseItemSelectedListener.java @@ -25,7 +25,7 @@ public class BaseItemSelectedListener } @Override - public void onItemSelected(@NonNull I item) + public void onItemSelected(@NonNull I item, int position) { Utils.openUrl(mContext, item.getUrl()); } @@ -37,7 +37,7 @@ public class BaseItemSelectedListener } @Override - public void onActionButtonSelected(@NonNull I item) + public void onActionButtonSelected(@NonNull I item, int position) { Utils.openUrl(mContext, item.getUrl()); } diff --git a/android/src/com/mapswithme/maps/gallery/impl/Factory.java b/android/src/com/mapswithme/maps/gallery/impl/Factory.java index 12cec1b9cd..d605eb681b 100644 --- a/android/src/com/mapswithme/maps/gallery/impl/Factory.java +++ b/android/src/com/mapswithme/maps/gallery/impl/Factory.java @@ -10,20 +10,31 @@ import com.mapswithme.maps.gallery.ItemSelectedListener; import com.mapswithme.maps.gallery.Items; import com.mapswithme.maps.search.SearchResult; import com.mapswithme.maps.viator.ViatorProduct; +import com.mapswithme.util.statistics.GalleryPlacement; +import com.mapswithme.util.statistics.GalleryState; +import com.mapswithme.util.statistics.GalleryType; +import com.mapswithme.util.statistics.Statistics; + +import static com.mapswithme.util.statistics.GalleryState.OFFLINE; +import static com.mapswithme.util.statistics.GalleryState.ONLINE; +import static com.mapswithme.util.statistics.GalleryType.CIAN; +import static com.mapswithme.util.statistics.GalleryType.LOCAL_EXPERTS; +import static com.mapswithme.util.statistics.GalleryType.VIATOR; public class Factory { @NonNull - public static GalleryAdapter createViatorLoadingAdapter(@Nullable String cityUrl, - @Nullable ItemSelectedListener - listener) + public static GalleryAdapter createViatorLoadingAdapter + (@Nullable String cityUrl, @Nullable ItemSelectedListener listener) { return new GalleryAdapter<>(new ViatorLoadingAdapterStrategy(cityUrl), listener); } @NonNull - public static GalleryAdapter createViatorOfflineAdapter(@Nullable ItemSelectedListener listener) + public static GalleryAdapter createViatorOfflineAdapter + (@Nullable ItemSelectedListener listener, @NonNull GalleryPlacement placement) { + Statistics.INSTANCE.trackGalleryShown(VIATOR, OFFLINE, placement); return new GalleryAdapter<>(new ViatorOfflineAdapterStrategy(null), listener); } @@ -36,9 +47,8 @@ public class Factory } @NonNull - public static GalleryAdapter createCianLoadingAdapter(@Nullable String url, - @Nullable ItemSelectedListener - listener) + public static GalleryAdapter createCianLoadingAdapter + (@Nullable String url, @Nullable ItemSelectedListener listener) { return new GalleryAdapter<>(new CianLoadingAdapterStrategy(url), listener); } @@ -55,23 +65,30 @@ public class Factory public static GalleryAdapter createViatorAdapter(@NonNull ViatorProduct[] products, @Nullable String cityUrl, @Nullable ItemSelectedListener - listener) + listener, + @NonNull GalleryPlacement placement) { + trackProductGalleryShownOrError(products, VIATOR, ONLINE, placement); return new GalleryAdapter<>(new ViatorAdapterStrategy(products, cityUrl), listener); } @NonNull public static GalleryAdapter createCianAdapter(@NonNull RentPlace[] products, @NonNull String url, - @Nullable ItemSelectedListener listener) + @Nullable ItemSelectedListener listener, + @NonNull GalleryPlacement placement) { + trackProductGalleryShownOrError(products, CIAN, ONLINE, placement); return new GalleryAdapter<>(new CianAdapterStrategy(products, url), listener); } @NonNull public static GalleryAdapter createSearchBasedAdapter(@NonNull SearchResult[] results, @Nullable ItemSelectedListener listener) + .SearchItem> listener, + @NonNull GalleryType type, + @NonNull GalleryPlacement placement) { + trackProductGalleryShownOrError(results, type, OFFLINE, placement); return new GalleryAdapter<>(new SearchBasedAdapterStrategy(results), listener); } @@ -91,8 +108,10 @@ public class Factory public static GalleryAdapter createLocalExpertsAdapter(@NonNull LocalExpert[] experts, @Nullable String expertsUrl, @Nullable ItemSelectedListener listener) + .LocalExpertItem> listener, + @NonNull GalleryPlacement placement) { + trackProductGalleryShownOrError(experts, LOCAL_EXPERTS, ONLINE, placement); return new GalleryAdapter<>(new LocalExpertsAdapterStrategy(experts, expertsUrl), listener); } @@ -107,4 +126,15 @@ public class Factory { return new GalleryAdapter<>(new LocalExpertsErrorAdapterStrategy(), null); } + + private static void trackProductGalleryShownOrError(@NonNull Product[] products, + @NonNull GalleryType type, + @NonNull GalleryState state, + @NonNull GalleryPlacement placement) + { + if (products.length == 0) + Statistics.INSTANCE.trackGalleryError(type, placement, Statistics.ParamValue.NO_PRODUCTS); + else + Statistics.INSTANCE.trackGalleryShown(type, state, placement); + } } diff --git a/android/src/com/mapswithme/maps/gallery/impl/ViatorOfflineAdapterStrategy.java b/android/src/com/mapswithme/maps/gallery/impl/ViatorOfflineAdapterStrategy.java index 4fc1fbb46e..82cbfc7b41 100644 --- a/android/src/com/mapswithme/maps/gallery/impl/ViatorOfflineAdapterStrategy.java +++ b/android/src/com/mapswithme/maps/gallery/impl/ViatorOfflineAdapterStrategy.java @@ -28,6 +28,12 @@ public class ViatorOfflineAdapterStrategy extends OfflineAdapterStrategy return R.string.common_check_internet_connection_dialog; } + @Override + protected int getLabelForDetailsView() + { + return R.string.settings; + } + @NonNull @Override protected View inflateView(@NonNull LayoutInflater inflater, @NonNull ViewGroup parent) diff --git a/android/src/com/mapswithme/maps/widget/placepage/PlacePageView.java b/android/src/com/mapswithme/maps/widget/placepage/PlacePageView.java index eaf0f82335..2d8b870919 100644 --- a/android/src/com/mapswithme/maps/widget/placepage/PlacePageView.java +++ b/android/src/com/mapswithme/maps/widget/placepage/PlacePageView.java @@ -96,6 +96,8 @@ import com.mapswithme.util.log.Logger; import com.mapswithme.util.log.LoggerFactory; import com.mapswithme.util.sharing.ShareOption; import com.mapswithme.util.statistics.AlohaHelper; +import com.mapswithme.util.statistics.GalleryPlacement; +import com.mapswithme.util.statistics.GalleryType; import com.mapswithme.util.statistics.Statistics; import java.util.ArrayList; @@ -105,6 +107,8 @@ import java.util.Collections; import java.util.List; import java.util.Locale; +import static com.mapswithme.util.statistics.Destination.EXTERNAL; +import static com.mapswithme.util.statistics.GalleryPlacement.PLACEPAGE; import static com.mapswithme.util.statistics.Statistics.EventName.PP_HOTEL_DESCRIPTION_LAND; import static com.mapswithme.util.statistics.Statistics.EventName.PP_HOTEL_FACILITIES; import static com.mapswithme.util.statistics.Statistics.EventName.PP_HOTEL_GALLERY_OPEN; @@ -299,7 +303,7 @@ public class PlacePageView extends RelativeLayout public PlacePageView(Context context, AttributeSet attrs, int defStyleAttr) { super(context, attrs); - mDefaultGalleryItemListener = new SponsoredItemSelectedListener<>((Activity) context); + mDefaultGalleryItemListener = new BaseItemSelectedListener<>((Activity) context); mIsLatLonDms = MwmApplication.prefs().getBoolean(PREF_USE_DMS, false); mGalleryAdapter = new com.mapswithme.maps.widget.placepage.GalleryAdapter(context); mMarginBase = (int) getResources().getDimension(R.dimen.margin_base); @@ -840,7 +844,8 @@ public class PlacePageView extends RelativeLayout { String url = mSponsored != null ? mSponsored.getUrl() : ""; mRvSponsoredProducts.setAdapter(Factory.createCianErrorAdapter(url, mDefaultGalleryItemListener)); - Statistics.INSTANCE.trackSponsoredGalleryError(Sponsored.TYPE_CIAN, String.valueOf(errorCode)); + Statistics.INSTANCE.trackGalleryError(GalleryType.CIAN, GalleryPlacement.PLACEPAGE, + String.valueOf(errorCode)); } private void initSponsoredGalleryView() @@ -864,14 +869,15 @@ public class PlacePageView extends RelativeLayout { mRvSponsoredProducts.setAdapter(Factory.createViatorErrorAdapter(cityUrl, mDefaultGalleryItemListener)); - Statistics.INSTANCE.trackSponsoredGalleryError(Sponsored.TYPE_VIATOR, - Statistics.ParamValue.NO_PRODUCTS); + Statistics.INSTANCE.trackGalleryError(GalleryType.VIATOR, GalleryPlacement.PLACEPAGE, + Statistics.ParamValue.NO_PRODUCTS); } else { ItemSelectedListener listener - = new SponsoredItemSelectedListener<>(getActivity()); - mRvSponsoredProducts.setAdapter(Factory.createViatorAdapter(products, cityUrl, listener)); + = createSponsoredProductItemListener(GalleryType.VIATOR); + mRvSponsoredProducts.setAdapter(Factory.createViatorAdapter(products, cityUrl, listener, + GalleryPlacement.PLACEPAGE)); } } @@ -880,13 +886,15 @@ public class PlacePageView extends RelativeLayout if (products.length == 0) { mRvSponsoredProducts.setAdapter(Factory.createCianErrorAdapter(url, mDefaultGalleryItemListener)); - Statistics.INSTANCE.trackSponsoredGalleryError(Sponsored.TYPE_CIAN, - Statistics.ParamValue.NO_PRODUCTS); + Statistics.INSTANCE.trackGalleryError(GalleryType.CIAN, GalleryPlacement.PLACEPAGE, + Statistics.ParamValue.NO_PRODUCTS); } else { - ItemSelectedListener listener = new SponsoredItemSelectedListener<>(getActivity()); - mRvSponsoredProducts.setAdapter(Factory.createCianAdapter(products, url, listener)); + ItemSelectedListener listener + = createSponsoredProductItemListener(GalleryType.CIAN); + mRvSponsoredProducts.setAdapter(Factory.createCianAdapter(products, url, listener, + GalleryPlacement.PLACEPAGE)); } } @@ -1924,8 +1932,10 @@ public class PlacePageView extends RelativeLayout if (!TextUtils.isEmpty(url)) { Utils.openUrl(getContext(), url); - Statistics.INSTANCE.trackSponsoredEvent(Statistics.EventName.PP_SPONSOR_LOGO_SELECTED, - mSponsored.getType()); + GalleryType type = mSponsored.getType() == Sponsored.TYPE_CIAN ? GalleryType.CIAN + : GalleryType.VIATOR; + Statistics.INSTANCE.trackGalleryEvent(Statistics.EventName.PP_SPONSOR_LOGO_SELECTED, + type, GalleryPlacement.PLACEPAGE); } break; } @@ -2163,37 +2173,25 @@ public class PlacePageView extends RelativeLayout } } - private class SponsoredItemSelectedListener - extends BaseItemSelectedListener + private ItemSelectedListener + createSponsoredProductItemListener(final @NonNull GalleryType type) { - - SponsoredItemSelectedListener(@NonNull Activity context) + return new BaseItemSelectedListener(getActivity()) { - super(context); - } + @Override + public void onItemSelected(@NonNull Item item, int position) + { + super.onItemSelected(item, position); + Statistics.INSTANCE.trackGalleryProductItemSelected(type, PLACEPAGE, position, EXTERNAL); + } - @Override - public void onItemSelected(@NonNull I item) - { - Utils.openUrl(getActivity(), item.getUrl()); - if (mSponsored != null) - Statistics.INSTANCE.trackSponsoredEvent(Statistics.EventName.PP_SPONSOR_ITEM_SELECTED, - mSponsored.getType()); - } - - @Override - public void onMoreItemSelected(@NonNull I item) - { - Utils.openUrl(getActivity(), item.getUrl()); - if (mSponsored != null) - Statistics.INSTANCE.trackSponsoredEvent(Statistics.EventName.PP_SPONSOR_MORE_SELECTED, - mSponsored.getType()); - } - - @Override - public void onActionButtonSelected(@NonNull I item) - { - Utils.openUrl(getActivity(), item.getUrl()); - } + @Override + public void onMoreItemSelected(@NonNull Item item) + { + super.onMoreItemSelected(item); + Statistics.INSTANCE.trackGalleryEvent(Statistics.EventName.PP_SPONSOR_MORE_SELECTED, type, + PLACEPAGE); + } + }; } } diff --git a/android/src/com/mapswithme/util/statistics/Destination.java b/android/src/com/mapswithme/util/statistics/Destination.java new file mode 100644 index 0000000000..e37a93c146 --- /dev/null +++ b/android/src/com/mapswithme/util/statistics/Destination.java @@ -0,0 +1,9 @@ +package com.mapswithme.util.statistics; + +public enum Destination +{ + ROUTING, + PLACEPAGE, + SEARCH, + EXTERNAL; +} diff --git a/android/src/com/mapswithme/util/statistics/GalleryPlacement.java b/android/src/com/mapswithme/util/statistics/GalleryPlacement.java new file mode 100644 index 0000000000..a5e30e0310 --- /dev/null +++ b/android/src/com/mapswithme/util/statistics/GalleryPlacement.java @@ -0,0 +1,7 @@ +package com.mapswithme.util.statistics; + +public enum GalleryPlacement +{ + PLACEPAGE, + DISCOVERY; +} diff --git a/android/src/com/mapswithme/util/statistics/GalleryState.java b/android/src/com/mapswithme/util/statistics/GalleryState.java new file mode 100644 index 0000000000..053c614372 --- /dev/null +++ b/android/src/com/mapswithme/util/statistics/GalleryState.java @@ -0,0 +1,7 @@ +package com.mapswithme.util.statistics; + +public enum GalleryState +{ + ONLINE, + OFFLINE, +} diff --git a/android/src/com/mapswithme/util/statistics/GalleryType.java b/android/src/com/mapswithme/util/statistics/GalleryType.java new file mode 100644 index 0000000000..4278accc3c --- /dev/null +++ b/android/src/com/mapswithme/util/statistics/GalleryType.java @@ -0,0 +1,55 @@ +package com.mapswithme.util.statistics; + +import android.support.annotation.NonNull; + +public enum GalleryType +{ + VIATOR + { + @NonNull + @Override + public String getProvider() + { + return Statistics.ParamValue.VIATOR; + } + }, + CIAN + { + @NonNull + @Override + public String getProvider() + { + return Statistics.ParamValue.CIAN; + } + }, + LOCAL_EXPERTS + { + @NonNull + @Override + public String getProvider() + { + return Statistics.ParamValue.LOCALS_EXPERTS; + } + }, + SEARCH_RESTAURANTS + { + @NonNull + @Override + public String getProvider() + { + return Statistics.ParamValue.SEARCH_RESTAURANTS; + } + }, + SEARCH_ATTRACTIONS + { + @NonNull + @Override + public String getProvider() + { + return Statistics.ParamValue.SEARCH_ATTRACTIONS; + } + }; + + @NonNull + public abstract String getProvider(); +} diff --git a/android/src/com/mapswithme/util/statistics/PlacePageTracker.java b/android/src/com/mapswithme/util/statistics/PlacePageTracker.java index 0c003c06ab..78ed328b00 100644 --- a/android/src/com/mapswithme/util/statistics/PlacePageTracker.java +++ b/android/src/com/mapswithme/util/statistics/PlacePageTracker.java @@ -24,20 +24,15 @@ public class PlacePageTracker private final View mBottomButtons; @NonNull private final View mTaxi; - @NonNull - private final View mSponsoredGallery; @Nullable private MapObject mMapObject; - private boolean mTaxiTracked; - private boolean mSponsoredTracked; public PlacePageTracker(@NonNull PlacePageView placePageView) { mPlacePageView = placePageView; mBottomButtons = mPlacePageView.findViewById(R.id.pp__buttons); mTaxi = mPlacePageView.findViewById(R.id.ll__place_page_taxi); - mSponsoredGallery = mPlacePageView.findViewById(R.id.ll__place_sponsored_gallery); } public void setMapObject(@Nullable MapObject mapObject) @@ -48,13 +43,11 @@ public class PlacePageTracker public void onMove() { trackTaxiVisibility(); - trackSponsoredGalleryVisibility(); } public void onHidden() { mTaxiTracked = false; - mSponsoredTracked = false; } public void onOpened() @@ -82,17 +75,6 @@ public class PlacePageTracker } } - private void trackSponsoredGalleryVisibility() - { - if (!mSponsoredTracked && isViewOnScreen(mSponsoredGallery, VISIBILITY_RATIO_SPONSORED_GALLERY) - && mPlacePageView.getSponsored() != null) - { - Sponsored sponsored = mPlacePageView.getSponsored(); - Statistics.INSTANCE.trackSponsoredGalleryShown(sponsored.getType()); - mSponsoredTracked = true; - } - } - /** * * @param visibilityRatio Describes what the portion of view should be visible before diff --git a/android/src/com/mapswithme/util/statistics/Statistics.java b/android/src/com/mapswithme/util/statistics/Statistics.java index 35529bfbd6..35d8714708 100644 --- a/android/src/com/mapswithme/util/statistics/Statistics.java +++ b/android/src/com/mapswithme/util/statistics/Statistics.java @@ -49,6 +49,7 @@ import static com.mapswithme.util.BatteryState.CHARGING_STATUS_PLUGGED; import static com.mapswithme.util.BatteryState.CHARGING_STATUS_UNKNOWN; import static com.mapswithme.util.BatteryState.CHARGING_STATUS_UNPLUGGED; import static com.mapswithme.util.statistics.Statistics.EventName.APPLICATION_COLD_STARTUP_INFO; +import static com.mapswithme.util.statistics.Statistics.EventName.DISCOVERY_OPEN; import static com.mapswithme.util.statistics.Statistics.EventName.DOWNLOADER_DIALOG_ERROR; import static com.mapswithme.util.statistics.Statistics.EventName.PP_BANNER_BLANK; import static com.mapswithme.util.statistics.Statistics.EventName.PP_BANNER_ERROR; @@ -58,16 +59,17 @@ import static com.mapswithme.util.statistics.Statistics.EventName.PP_SPONSORED_B import static com.mapswithme.util.statistics.Statistics.EventName.PP_SPONSORED_ERROR; import static com.mapswithme.util.statistics.Statistics.EventName.PP_SPONSORED_OPEN; import static com.mapswithme.util.statistics.Statistics.EventName.PP_SPONSORED_SHOWN; +import static com.mapswithme.util.statistics.Statistics.EventName.PP_SPONSOR_ITEM_SELECTED; import static com.mapswithme.util.statistics.Statistics.EventName.ROUTING_PLAN_TOOLTIP_CLICK; import static com.mapswithme.util.statistics.Statistics.EventName.UGC_AUTH_ERROR; import static com.mapswithme.util.statistics.Statistics.EventName.UGC_AUTH_EXTERNAL_REQUEST_SUCCESS; import static com.mapswithme.util.statistics.Statistics.EventName.UGC_AUTH_SHOWN; import static com.mapswithme.util.statistics.Statistics.EventName.UGC_REVIEW_START; import static com.mapswithme.util.statistics.Statistics.EventParam.BANNER; -import static com.mapswithme.util.statistics.Statistics.EventParam.BANNER_STATE; import static com.mapswithme.util.statistics.Statistics.EventParam.BATTERY; import static com.mapswithme.util.statistics.Statistics.EventParam.CATEGORY; import static com.mapswithme.util.statistics.Statistics.EventParam.CHARGING; +import static com.mapswithme.util.statistics.Statistics.EventParam.DESTINATION; import static com.mapswithme.util.statistics.Statistics.EventParam.ERROR; import static com.mapswithme.util.statistics.Statistics.EventParam.ERROR_CODE; import static com.mapswithme.util.statistics.Statistics.EventParam.ERROR_MESSAGE; @@ -75,6 +77,7 @@ import static com.mapswithme.util.statistics.Statistics.EventParam.FEATURE_ID; import static com.mapswithme.util.statistics.Statistics.EventParam.HOTEL; import static com.mapswithme.util.statistics.Statistics.EventParam.HOTEL_LAT; import static com.mapswithme.util.statistics.Statistics.EventParam.HOTEL_LON; +import static com.mapswithme.util.statistics.Statistics.EventParam.ITEM; import static com.mapswithme.util.statistics.Statistics.EventParam.MAP_DATA_SIZE; import static com.mapswithme.util.statistics.Statistics.EventParam.METHOD; import static com.mapswithme.util.statistics.Statistics.EventParam.MODE; @@ -83,19 +86,21 @@ import static com.mapswithme.util.statistics.Statistics.EventParam.MWM_VERSION; import static com.mapswithme.util.statistics.Statistics.EventParam.NETWORK; import static com.mapswithme.util.statistics.Statistics.EventParam.OBJECT_LAT; 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.PROVIDER; 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; +import static com.mapswithme.util.statistics.Statistics.EventParam.STATE; import static com.mapswithme.util.statistics.Statistics.EventParam.TYPE; import static com.mapswithme.util.statistics.Statistics.EventParam.VALUE; import static com.mapswithme.util.statistics.Statistics.ParamValue.BOOKING_COM; import static com.mapswithme.util.statistics.Statistics.ParamValue.CIAN; import static com.mapswithme.util.statistics.Statistics.ParamValue.GEOCHAT; +import static com.mapswithme.util.statistics.Statistics.ParamValue.HOLIDAY; import static com.mapswithme.util.statistics.Statistics.ParamValue.OPENTABLE; import static com.mapswithme.util.statistics.Statistics.ParamValue.SEARCH_BOOKING_COM; import static com.mapswithme.util.statistics.Statistics.ParamValue.THOR; -import static com.mapswithme.util.statistics.Statistics.ParamValue.HOLIDAY; import static com.mapswithme.util.statistics.Statistics.ParamValue.VIATOR; public enum Statistics @@ -131,7 +136,6 @@ public enum Statistics static final String DOWNLOADER_DIALOG_ERROR = "Downloader_OnStartScreen_error"; // bookmarks - public static final String BMK_DESCRIPTION_CHANGED = "Bookmark. Description changed"; public static final String BMK_GROUP_CREATED = "Bookmark. Group created"; public static final String BMK_GROUP_CHANGED = "Bookmark. Group changed"; public static final String BMK_COLOR_CHANGED = "Bookmark. Color changed"; @@ -141,7 +145,6 @@ public enum Statistics public static final String SEARCH_CAT_CLICKED = "Search. Category clicked"; public static final String SEARCH_ITEM_CLICKED = "Search. Key clicked"; public static final String SEARCH_ON_MAP_CLICKED = "Search. View on map clicked."; - public static final String SEARCH_CANCEL = "Search. Cancel."; public static final String SEARCH_TAB_SELECTED = "Search_Tab_selected"; public static final String SEARCH_SPONSOR_CATEGORY_SHOWN = "Search_SponsoredCategory_shown"; public static final String SEARCH_SPONSOR_CATEGORY_SELECTED = "Search_SponsoredCategory_selected"; @@ -200,7 +203,6 @@ public enum Statistics public static final String ZOOM_OUT = "Zoom. Out"; public static final String PLACE_SHARED = "Place Shared"; public static final String API_CALLED = "API called"; - public static final String WIFI_CONNECTED = "Wifi connected"; public static final String DOWNLOAD_COUNTRY_NOTIFICATION_SHOWN = "Download country notification shown"; public static final String DOWNLOAD_COUNTRY_NOTIFICATION_CLICKED = "Download country notification clicked"; public static final String ACTIVE_CONNECTION = "Connection"; @@ -219,10 +221,7 @@ public enum Statistics public static final String ROUTING_TAXI_SET = "Routing. Set taxi"; public static final String ROUTING_TRANSIT_SET = "Routing. Set transit"; public static final String ROUTING_SWAP_POINTS = "Routing. Swap points"; - public static final String ROUTING_TOGGLE = "Routing. Toggle"; - public static final String ROUTING_SEARCH_POINT = "Routing. Search point"; public static final String ROUTING_SETTINGS = "Routing. Settings"; - public static final String ROUTING_TTS_SWITCH = "Routing. Switch tts"; public static final String ROUTING_TAXI_ORDER = "Routing_Taxi_order"; public static final String ROUTING_TAXI_INSTALL = "Routing_Taxi_install"; public static final String ROUTING_TAXI_SHOW_IN_PP = "Placepage_Taxi_show"; @@ -235,6 +234,8 @@ public enum Statistics public static final String ROUTING_BOOKMARKS_CLICK = "Routing_Bookmarks_click"; public static final String ROUTING_PLAN_TOOLTIP_CLICK = "Routing_PlanTooltip_click"; + public static final String DISCOVERY_OPEN = "DiscoveryButton_Open"; + // editor public static final String EDITOR_START_CREATE = "Editor_Add_start"; public static final String EDITOR_ADD_CLICK = "Editor_Add_click"; @@ -250,7 +251,6 @@ public enum Statistics public static final String EDITOR_LOST_PASSWORD = "Editor_Lost_password"; public static final String EDITOR_SHARE_SHOW = "Editor_SecondTimeShare_show"; public static final String EDITOR_SHARE_CLICK = "Editor_SecondTimeShare_click"; - public static final String EDITOR_REPORT = "Editor_Problem_report"; // Cold start public static final String APPLICATION_COLD_STARTUP_INFO = "Application_ColdStartup_info"; @@ -279,9 +279,6 @@ public enum Statistics public static final String ABOUT = "Settings. About."; public static final String OSM_PROFILE = "Settings. Profile."; public static final String COPYRIGHT = "Settings. Copyright."; - public static final String GROUP_MAP = "Settings. Group: map."; - public static final String GROUP_ROUTE = "Settings. Group: route."; - public static final String GROUP_MISC = "Settings. Group: misc."; public static final String UNITS = "Settings. Change units."; public static final String ZOOM = "Settings. Switch zoom."; public static final String MAP_STYLE = "Settings. Map style."; @@ -298,54 +295,44 @@ public enum Statistics { public static final String FROM = "from"; public static final String TO = "to"; - public static final String CATEGORY = "category"; + static final String CATEGORY = "category"; public static final String TAB = "tab"; - public static final String COUNT = "Count"; - public static final String CHANNEL = "Channel"; - public static final String CALLER_ID = "Caller ID"; + static final String COUNT = "Count"; + static final String CHANNEL = "Channel"; + static final String CALLER_ID = "Caller ID"; public static final String ENABLED = "Enabled"; - public static final String RATING = "Rating"; - public static final String CONNECTION_TYPE = "Connection name"; - public static final String CONNECTION_FAST = "Connection fast"; - public static final String CONNECTION_METERED = "Connection limit"; - public static final String MY_POSITION = "my position"; - public static final String POINT = "point"; + static final String RATING = "Rating"; + static final String CONNECTION_TYPE = "Connection name"; + static final String CONNECTION_FAST = "Connection fast"; + static final String CONNECTION_METERED = "Connection limit"; + static final String MY_POSITION = "my position"; + static final String POINT = "point"; public static final String LANGUAGE = "language"; public static final String NAME = "Name"; public static final String ACTION = "action"; public static final String TYPE = "type"; - public static final String IS_AUTHENTICATED = "is_authenticated"; - public static final String IS_ONLINE = "is_online"; + static final String IS_AUTHENTICATED = "is_authenticated"; + static final String IS_ONLINE = "is_online"; public static final String IS_SUCCESS = "is_success_message"; static final String FEATURE_ID = "feature_id"; static final String MWM_NAME = "mwm_name"; static final String MWM_VERSION = "mwm_version"; - public static final String ERR_TYPE = "error_type"; // (1 - No space left) public static final String ERR_MSG = "error_message"; - public static final String ERR_DATA = "err_data"; - public static final String EDITOR_ERR_MSG = "feature_number"; - public static final String SERVER_URL = "server_url"; - public static final String SERVER_PARAMS = "server_params_data"; - public static final String SERVER_RESPONSE = "server_response_data"; public static final String OSM = "OSM"; - public static final String OSM_USERNAME = "osm_username"; public static final String FACEBOOK = "Facebook"; - public static final String GOOGLE = "Google"; - public static final String UID = "uid"; - public static final String SHOWN = "shown"; - public static final String PROVIDER = "provider"; - public static final String HOTEL = "hotel"; - public static final String HOTEL_LAT = "hotel_lat"; - public static final String HOTEL_LON = "hotel_lon"; - public static final String RESTAURANT = "restaurant"; - public static final String RESTAURANT_LAT = "restaurant_lat"; - public static final String RESTAURANT_LON = "restaurant_lon"; - public static final String FROM_LAT = "from_lat"; - public static final String FROM_LON = "from_lon"; - public static final String TO_LAT = "to_lat"; - public static final String TO_LON = "to_lon"; + static final String PROVIDER = "provider"; + static final String HOTEL = "hotel"; + static final String HOTEL_LAT = "hotel_lat"; + static final String HOTEL_LON = "hotel_lon"; + static final String RESTAURANT = "restaurant"; + static final String RESTAURANT_LAT = "restaurant_lat"; + static final String RESTAURANT_LON = "restaurant_lon"; + static final String FROM_LAT = "from_lat"; + static final String FROM_LON = "from_lon"; + static final String TO_LAT = "to_lat"; + static final String TO_LON = "to_lon"; static final String BANNER = "banner"; - static final String BANNER_STATE = "state"; + static final String STATE = "state"; static final String ERROR_CODE = "error_code"; public static final String ERROR = "error"; static final String ERROR_MESSAGE = "error_message"; @@ -358,25 +345,31 @@ public enum Statistics static final String MODE = "mode"; static final String OBJECT_LAT = "object_lat"; static final String OBJECT_LON = "object_lon"; + static final String ITEM = "item"; + static final String DESTINATION = "destination"; + static final String PLACEMENT = "placement"; private EventParam() {} } public static class ParamValue { - public static final String BOOKING_COM = "Booking.Com"; - public static final String SEARCH_BOOKING_COM = "Search.Booking.Com"; - public static final String OPENTABLE = "OpenTable"; - public static final String VIATOR = "Viator.Com"; - public static final String GEOCHAT = "Geochat"; - public static final String CIAN = "Cian.Ru"; - public static final String THOR = "Thor"; - public static final String HOLIDAY = "Holiday"; + static final String BOOKING_COM = "Booking.Com"; + static final String SEARCH_BOOKING_COM = "Search.Booking.Com"; + static final String OPENTABLE = "OpenTable"; + static final String VIATOR = "Viator.Com"; + static final String LOCALS_EXPERTS = "Locals.Maps.Me"; + static final String SEARCH_RESTAURANTS = "Search.Restaurants"; + static final String SEARCH_ATTRACTIONS = "Search.Attractions"; + static final String GEOCHAT = "Geochat"; + static final String CIAN = "Cian.Ru"; + static final String THOR = "Thor"; + static final String HOLIDAY = "Holiday"; public static final String NO_PRODUCTS = "no_products"; - public static final String ADD = "add"; + static final String ADD = "add"; public static final String EDIT = "edit"; - public static final String AFTER_SAVE = "after_save"; - public static final String PLACEPAGE_PREVIEW = "placepage_preview"; - public static final String PLACEPAGE = "placepage"; + static final String AFTER_SAVE = "after_save"; + static final String PLACEPAGE_PREVIEW = "placepage_preview"; + static final String PLACEPAGE = "placepage"; public static final String FACEBOOK = "facebook"; } @@ -662,7 +655,7 @@ public enum Statistics trackEvent(eventName, Statistics.params() .add(BANNER, ad.getBannerId()) .add(PROVIDER, ad.getProvider()) - .add(BANNER_STATE, String.valueOf(state))); + .add(STATE, String.valueOf(state))); if (!eventName.equals(PP_BANNER_SHOW) || state == PP_BANNER_STATE_PREVIEW) MyTracker.trackEvent(eventName); @@ -678,7 +671,7 @@ public enum Statistics .add(ERROR_CODE, error != null ? String.valueOf(error.getCode()) : "N/A") .add(ERROR_MESSAGE, error != null ? error.getMessage() : "N/A") .add(PROVIDER, provider) - .add(BANNER_STATE, String.valueOf(state)); + .add(STATE, String.valueOf(state)); trackEvent(eventName, builder.get()); MyTracker.trackEvent(eventName); } @@ -777,17 +770,45 @@ public enum Statistics trackEvent(PP_SPONSORED_OPEN, builder.get()); } - public void trackSponsoredGalleryShown(@Sponsored.SponsoredType int type) + public void trackGalleryShown(@NonNull GalleryType type, @NonNull GalleryState state, + @NonNull GalleryPlacement placement) { - String provider = convertToSponsor(type); - trackEvent(PP_SPONSORED_SHOWN, Statistics.params().add(PROVIDER, provider).get()); - MyTracker.trackEvent(PP_SPONSORED_SHOWN + "_" + provider); + trackEvent(PP_SPONSORED_SHOWN, Statistics.params() + .add(PROVIDER, type.getProvider()) + .add(PLACEMENT, placement.toString()) + .add(STATE, state.toString())); + + if (type == GalleryType.CIAN && state == GalleryState.ONLINE) + MyTracker.trackEvent(PP_SPONSORED_SHOWN + "_" + type.getProvider()); } - public void trackSponsoredGalleryError(@Sponsored.SponsoredType int type, String errorCode) + public void trackGalleryError(@NonNull GalleryType type, + @NonNull GalleryPlacement placement, @Nullable String code) { - trackEvent(PP_SPONSORED_ERROR, Statistics.params().add(PROVIDER, convertToSponsor(type)) - .add(ERROR, errorCode).get()); + trackEvent(PP_SPONSORED_ERROR, Statistics.params() + .add(PROVIDER, type.getProvider()) + .add(PLACEMENT, placement.toString()) + .add(ERROR, code).get()); + } + + public void trackGalleryProductItemSelected(@NonNull GalleryType type, + @NonNull GalleryPlacement placement, int position, + @NonNull Destination destination) + { + trackEvent(PP_SPONSOR_ITEM_SELECTED, Statistics.params() + .add(PROVIDER, type.getProvider()) + .add(PLACEMENT, placement.toString()) + .add(ITEM, position) + .add(DESTINATION, destination.toString())); + } + + public void trackGalleryEvent(@NonNull String eventName, @NonNull GalleryType type, + @NonNull GalleryPlacement placement) + { + trackEvent(eventName, Statistics.params() + .add(PROVIDER, type.getProvider()) + .add(PLACEMENT,placement.toString()) + .get()); } public void trackSponsoredEvent(@NonNull String eventName, @Sponsored.SponsoredType int type) @@ -926,6 +947,12 @@ public enum Statistics .get()); } + public void trackDiscoveryOpen() + { + trackEvent(DISCOVERY_OPEN, params().add(NETWORK, getConnectionState())); + } + + public static ParameterBuilder params() { return new ParameterBuilder();