From b5a9c7f49f98a207bc9a405852525d6b16166333 Mon Sep 17 00:00:00 2001 From: Arsentiy Milchakov Date: Mon, 3 Feb 2020 14:04:22 +0300 Subject: [PATCH] [android][statistics] Url params from deep links are sent into statistics --- .../src/com/mapswithme/maps/MwmActivity.java | 12 ++- .../maps/intent/BackUrlMapTaskWrapper.java | 7 -- .../com/mapswithme/maps/intent/Factory.java | 88 ++++++++++--------- .../com/mapswithme/maps/intent/MapTask.java | 2 +- .../maps/intent/MapTaskWithStatistics.java | 16 ++++ .../maps/intent/RegularMapTask.java | 15 ---- .../maps/intent/StatisticMapTaskWrapper.java | 17 ++-- .../util/statistics/Statistics.java | 31 ++++++- 8 files changed, 103 insertions(+), 85 deletions(-) create mode 100644 android/src/com/mapswithme/maps/intent/MapTaskWithStatistics.java delete mode 100644 android/src/com/mapswithme/maps/intent/RegularMapTask.java diff --git a/android/src/com/mapswithme/maps/MwmActivity.java b/android/src/com/mapswithme/maps/MwmActivity.java index 67fb217a33..b4770c8291 100644 --- a/android/src/com/mapswithme/maps/MwmActivity.java +++ b/android/src/com/mapswithme/maps/MwmActivity.java @@ -64,7 +64,6 @@ import com.mapswithme.maps.editor.ReportFragment; import com.mapswithme.maps.gallery.Items; import com.mapswithme.maps.intent.Factory; import com.mapswithme.maps.intent.MapTask; -import com.mapswithme.maps.intent.RegularMapTask; import com.mapswithme.maps.location.CompassData; import com.mapswithme.maps.location.LocationHelper; import com.mapswithme.maps.maplayer.MapLayerCompositeController; @@ -1035,7 +1034,7 @@ public class MwmActivity extends BaseMwmFragmentActivity if (category == null) throw new IllegalArgumentException("Category not found in bundle"); - MapTask mapTask = new RegularMapTask() + addTask(new MapTask() { private static final long serialVersionUID = -7417385158050827655L; @@ -1045,8 +1044,7 @@ public class MwmActivity extends BaseMwmFragmentActivity target.showBookmarkCategory(category); return true; } - }; - addTask(mapTask); + }); closePlacePage(); } @@ -1133,7 +1131,7 @@ public class MwmActivity extends BaseMwmFragmentActivity @Override public void onRouteToDiscoveredObject(@NonNull final MapObject object) { - addTask(new RegularMapTask() + addTask(new MapTask() { private static final long serialVersionUID = -219799471997583494L; @@ -1151,7 +1149,7 @@ public class MwmActivity extends BaseMwmFragmentActivity @Override public void onShowDiscoveredObject(@NonNull final MapObject object) { - addTask(new RegularMapTask() + addTask(new MapTask() { private static final long serialVersionUID = 7499190617762270631L; @@ -1967,7 +1965,7 @@ public class MwmActivity extends BaseMwmFragmentActivity private void adjustCompassAndTraffic(final int offsetY) { - addTask(new RegularMapTask() + addTask(new MapTask() { private static final long serialVersionUID = 9177064181621376624L; diff --git a/android/src/com/mapswithme/maps/intent/BackUrlMapTaskWrapper.java b/android/src/com/mapswithme/maps/intent/BackUrlMapTaskWrapper.java index 30f831848a..7aa174346e 100644 --- a/android/src/com/mapswithme/maps/intent/BackUrlMapTaskWrapper.java +++ b/android/src/com/mapswithme/maps/intent/BackUrlMapTaskWrapper.java @@ -46,11 +46,4 @@ public class BackUrlMapTaskWrapper implements MapTask { return new BackUrlMapTaskWrapper(task, url); } - - @NonNull - @Override - public String toStatisticValue() - { - return mMapTask.toStatisticValue(); - } } diff --git a/android/src/com/mapswithme/maps/intent/Factory.java b/android/src/com/mapswithme/maps/intent/Factory.java index b35c0c0151..bacd4c87eb 100644 --- a/android/src/com/mapswithme/maps/intent/Factory.java +++ b/android/src/com/mapswithme/maps/intent/Factory.java @@ -760,21 +760,19 @@ public class Factory return value; } - public static class BookmarksSubscriptionTask implements MapTask + public static class BookmarksSubscriptionTask extends UrlTaskWithStatistics { private static final long serialVersionUID = 8378582625122063605L; - @NonNull - private final String mUrl; BookmarksSubscriptionTask(@NonNull String url) { - mUrl = url; + super(url); } @Override public boolean run(@NonNull MwmActivity target) { - Uri uri = Uri.parse(mUrl); + Uri uri = Uri.parse(getUrl()); String serverId = uri.getQueryParameter(PurchaseUtils.GROUPS); if (TextUtils.isEmpty(serverId)) return false; @@ -804,21 +802,19 @@ public class Factory } } - public static class ImportBookmarkCatalogueTask implements MapTask + public static class ImportBookmarkCatalogueTask extends UrlTaskWithStatistics { private static final long serialVersionUID = 5363722491377575159L; - @NonNull - private final String mUrl; ImportBookmarkCatalogueTask(@NonNull String url) { - mUrl = url; + super(url); } @Override public boolean run(@NonNull MwmActivity target) { - BookmarkCategoriesActivity.startForResult(target, BookmarksPageFactory.DOWNLOADED.ordinal(), mUrl); + BookmarkCategoriesActivity.startForResult(target, BookmarksPageFactory.DOWNLOADED.ordinal(), getUrl()); return true; } @@ -830,7 +826,7 @@ public class Factory } } - public static class GuidesPageToOpenTask extends BaseUrlTask + public static class GuidesPageToOpenTask extends UrlTaskWithStatistics { private static final long serialVersionUID = 8388101038319062165L; @@ -870,13 +866,6 @@ public class Factory target.showIntroductionScreenForDeeplink(getUrl(), IntroductionScreenFactory.FREE_GUIDE); return true; } - - @NonNull - @Override - public String toStatisticValue() - { - throw new UnsupportedOperationException("This task not statistic tracked!"); - } } public static class GuidesPageToOpenIntroductionTask extends BaseUrlTask @@ -895,13 +884,6 @@ public class Factory target.showIntroductionScreenForDeeplink(deeplink, IntroductionScreenFactory.GUIDES_PAGE); return true; } - - @NonNull - @Override - public String toStatisticValue() - { - throw new UnsupportedOperationException("This task not statistic tracked!"); - } } abstract static class BaseUrlTask implements MapTask @@ -922,34 +904,58 @@ public class Factory } } - public static class OpenUrlTask implements MapTask + abstract static class UrlTaskWithStatistics extends MapTaskWithStatistics + { + private static final long serialVersionUID = -8661639898700431066L; + @NonNull + private final String mUrl; + + UrlTaskWithStatistics(@NonNull String url) + { + Utils.checkNotNull(url); + mUrl = url; + } + + @Override + @NonNull + public Statistics.ParameterBuilder toStatisticParams() + { + return Statistics.makeParametersFromTypeAndUrl(toStatisticValue(), mUrl); + } + + @NonNull + String getUrl() + { + return mUrl; + } + } + + public static class OpenUrlTask extends UrlTaskWithStatistics { private static final long serialVersionUID = -7257820771228127413L; private static final int SEARCH_IN_VIEWPORT_ZOOM = 16; - @NonNull - private final String mUrl; + @NonNull private final String mStatisticValue; OpenUrlTask(@NonNull String url, @NonNull String statisticValue) { - Utils.checkNotNull(url); - mUrl = url; + super(url); mStatisticValue = statisticValue; } @Override public boolean run(@NonNull MwmActivity target) { - final @ParsedUrlMwmRequest.ParsingResult int result = Framework.nativeParseAndSetApiUrl(mUrl); + final @ParsedUrlMwmRequest.ParsingResult int result = Framework.nativeParseAndSetApiUrl(getUrl()); switch (result) { case ParsedUrlMwmRequest.RESULT_INCORRECT: // TODO: Kernel recognizes "mapsme://", "mwm://" and "mapswithme://" schemas only!!! - return MapFragment.nativeShowMapForUrl(mUrl); + return MapFragment.nativeShowMapForUrl(getUrl()); case ParsedUrlMwmRequest.RESULT_MAP: - return MapFragment.nativeShowMapForUrl(mUrl); + return MapFragment.nativeShowMapForUrl(getUrl()); case ParsedUrlMwmRequest.RESULT_ROUTE: final ParsedRoutingData data = Framework.nativeGetParsedRoutingData(); @@ -991,7 +997,7 @@ public class Factory } } - public static class ShowCountryTask implements MapTask + public static class ShowCountryTask extends MapTaskWithStatistics { private static final long serialVersionUID = 256630934543189768L; private final String mCountryId; @@ -1016,7 +1022,7 @@ public class Factory } } - public static class ShowBookmarkCategoryTask extends RegularMapTask + public static class ShowBookmarkCategoryTask implements MapTask { private static final long serialVersionUID = 8285565041410550281L; final long mCategoryId; @@ -1033,7 +1039,7 @@ public class Factory } } - static abstract class BaseUserMarkTask extends RegularMapTask + static abstract class BaseUserMarkTask implements MapTask { private static final long serialVersionUID = -3348320422813422144L; final long mCategoryId; @@ -1080,7 +1086,7 @@ public class Factory } } - public static class ShowPointTask implements MapTask + public static class ShowPointTask extends MapTaskWithStatistics { private static final long serialVersionUID = -2467635346469323664L; private final double mLat; @@ -1108,7 +1114,7 @@ public class Factory } } - public static class BuildRouteTask implements MapTask + public static class BuildRouteTask extends MapTaskWithStatistics { private static final long serialVersionUID = 5301468481040195957L; private final double mLatTo; @@ -1213,7 +1219,7 @@ public class Factory } } - public static class RestoreRouteTask extends RegularMapTask + public static class RestoreRouteTask implements MapTask { private static final long serialVersionUID = 6123893958975977040L; @@ -1225,7 +1231,7 @@ public class Factory } } - public static class ShowUGCEditorTask extends RegularMapTask + public static class ShowUGCEditorTask implements MapTask { private static final long serialVersionUID = 1636712824900113568L; // Nullable because of possible serialization from previous incompatible version of class. @@ -1256,7 +1262,7 @@ public class Factory } } - public static class ShowDialogTask extends RegularMapTask + public static class ShowDialogTask implements MapTask { private static final long serialVersionUID = 1548931513812565018L; @NonNull diff --git a/android/src/com/mapswithme/maps/intent/MapTask.java b/android/src/com/mapswithme/maps/intent/MapTask.java index a7db9734f1..d62220d5c4 100644 --- a/android/src/com/mapswithme/maps/intent/MapTask.java +++ b/android/src/com/mapswithme/maps/intent/MapTask.java @@ -7,7 +7,7 @@ import com.mapswithme.util.statistics.StatisticValueConverter; import java.io.Serializable; -public interface MapTask extends Serializable, StatisticValueConverter +public interface MapTask extends Serializable { boolean run(@NonNull MwmActivity target); } diff --git a/android/src/com/mapswithme/maps/intent/MapTaskWithStatistics.java b/android/src/com/mapswithme/maps/intent/MapTaskWithStatistics.java new file mode 100644 index 0000000000..d6e4c52f50 --- /dev/null +++ b/android/src/com/mapswithme/maps/intent/MapTaskWithStatistics.java @@ -0,0 +1,16 @@ +package com.mapswithme.maps.intent; + +import androidx.annotation.NonNull; +import com.mapswithme.util.statistics.StatisticValueConverter; +import com.mapswithme.util.statistics.Statistics; + +abstract class MapTaskWithStatistics implements MapTask, StatisticValueConverter +{ + private static final long serialVersionUID = 3354057363011918229L; + + @NonNull + public Statistics.ParameterBuilder toStatisticParams() + { + return Statistics.makeParametersFromType(toStatisticValue()); + } +} diff --git a/android/src/com/mapswithme/maps/intent/RegularMapTask.java b/android/src/com/mapswithme/maps/intent/RegularMapTask.java deleted file mode 100644 index da155a26a8..0000000000 --- a/android/src/com/mapswithme/maps/intent/RegularMapTask.java +++ /dev/null @@ -1,15 +0,0 @@ -package com.mapswithme.maps.intent; - -import androidx.annotation.NonNull; - -public abstract class RegularMapTask implements MapTask -{ - private static final long serialVersionUID = -6799622370628032853L; - - @NonNull - @Override - public String toStatisticValue() - { - throw new UnsupportedOperationException("This task '" + this + "' not tracked in statistic!"); - } -} diff --git a/android/src/com/mapswithme/maps/intent/StatisticMapTaskWrapper.java b/android/src/com/mapswithme/maps/intent/StatisticMapTaskWrapper.java index 9b3ea25089..02cc6e7fa7 100644 --- a/android/src/com/mapswithme/maps/intent/StatisticMapTaskWrapper.java +++ b/android/src/com/mapswithme/maps/intent/StatisticMapTaskWrapper.java @@ -9,9 +9,9 @@ public class StatisticMapTaskWrapper implements MapTask { private static final long serialVersionUID = 7604577952712453816L; @NonNull - private final MapTask mMapTask; + private final MapTaskWithStatistics mMapTask; - private StatisticMapTaskWrapper(@NonNull MapTask mapTask) + private StatisticMapTaskWrapper(@NonNull MapTaskWithStatistics mapTask) { mMapTask = mapTask; } @@ -23,22 +23,15 @@ public class StatisticMapTaskWrapper implements MapTask boolean firstLaunch = MwmApplication.from(target).isFirstLaunch(); if (success) Statistics.INSTANCE.trackDeeplinkEvent(Statistics.EventName.DEEPLINK_CALL, - mMapTask.toStatisticValue(), firstLaunch); + mMapTask.toStatisticParams(), firstLaunch); else Statistics.INSTANCE.trackDeeplinkEvent(Statistics.EventName.DEEPLINK_CALL_MISSED, - toStatisticValue(), firstLaunch); + mMapTask.toStatisticParams(), firstLaunch); return success; } @NonNull - @Override - public String toStatisticValue() - { - return mMapTask.toStatisticValue(); - } - - @NonNull - static MapTask wrap(@NonNull MapTask task) + static MapTask wrap(@NonNull MapTaskWithStatistics task) { return new StatisticMapTaskWrapper(task); } diff --git a/android/src/com/mapswithme/util/statistics/Statistics.java b/android/src/com/mapswithme/util/statistics/Statistics.java index 053c5e7699..055d7fa47b 100644 --- a/android/src/com/mapswithme/util/statistics/Statistics.java +++ b/android/src/com/mapswithme/util/statistics/Statistics.java @@ -5,6 +5,7 @@ import android.content.Context; import android.location.Location; import android.net.ConnectivityManager; import android.net.NetworkInfo; +import android.net.Uri; import android.os.Build; import android.text.TextUtils; import android.util.Pair; @@ -1770,9 +1771,35 @@ public enum Statistics trackEvent(GUIDES_TRACK_SELECT, params().add(SERVER_ID, serverId), STATISTICS_CHANNEL_REALTIME); } - public void trackDeeplinkEvent(@NonNull String event, @NonNull String type, boolean isFirstLaunch) + public void trackDeeplinkEvent(@NonNull String event, @NonNull ParameterBuilder params, + boolean isFirstLaunch) { - trackEvent(event, params().add(TYPE, type).add(FIRST_LAUNCH, isFirstLaunch ? TRUE : FALSE)); + trackEvent(event, params.add(FIRST_LAUNCH, isFirstLaunch ? TRUE : FALSE)); + } + + @NonNull + public static ParameterBuilder makeParametersFromType(@NonNull String type) + { + return params().add(TYPE, type); + } + + @NonNull + public static ParameterBuilder makeParametersFromTypeAndUrl(@NonNull String type, @NonNull String url) + { + Statistics.ParameterBuilder result = params(); + Uri uri = Uri.parse(url); + for (String name : uri.getQueryParameterNames()) + { + if (name.startsWith("utm_") || name.equals("booking_aid")) + { + String value = uri.getQueryParameter(name); + result.add(name, value == null ? "" : value); + } + } + + result.add(TYPE, type); + + return result; } public static ParameterBuilder params()