Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/mapsme/omim.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorArsentiy Milchakov <milcars@mapswithme.com>2016-09-20 16:41:31 +0300
committerVladimir Byko-Ianko <v.bykoianko@corp.mail.ru>2016-09-26 15:05:10 +0300
commitd8d0890bc263714901507ce946cc7de25acd82b9 (patch)
treeb9b83f7d34132504775d29fcea888839c62beeae
parent44bad8203061005ca12c002fcd8bf52b45b4fb01 (diff)
added marketing events into core and android
-rw-r--r--android/jni/Android.mk1
-rw-r--r--android/jni/com/mapswithme/core/ScopedEnv.hpp38
-rw-r--r--android/jni/com/mapswithme/core/jni_helper.cpp3
-rw-r--r--android/jni/com/mapswithme/core/jni_helper.hpp1
-rw-r--r--android/jni/com/mapswithme/platform/Platform.cpp18
-rw-r--r--android/src/com/mapswithme/maps/MwmApplication.java12
-rw-r--r--map/framework.cpp9
-rw-r--r--search/processor.cpp1
-rw-r--r--storage/storage.cpp1
9 files changed, 83 insertions, 1 deletions
diff --git a/android/jni/Android.mk b/android/jni/Android.mk
index 5d72693732..54f8106310 100644
--- a/android/jni/Android.mk
+++ b/android/jni/Android.mk
@@ -61,6 +61,7 @@ TARGET_PLATFORM := android-15
LOCAL_HEADER_FILES := \
../../private.h \
com/mapswithme/core/jni_helper.hpp \
+ com/mapswithme/core/ScopedEnv.hpp \
com/mapswithme/core/ScopedLocalRef.hpp \
com/mapswithme/core/logging.hpp \
com/mapswithme/maps/Framework.hpp \
diff --git a/android/jni/com/mapswithme/core/ScopedEnv.hpp b/android/jni/com/mapswithme/core/ScopedEnv.hpp
new file mode 100644
index 0000000000..6d517066f2
--- /dev/null
+++ b/android/jni/com/mapswithme/core/ScopedEnv.hpp
@@ -0,0 +1,38 @@
+#include <jni.h>
+
+// Scoped environment which can attach to any thread and automatically detach
+class ScopedEnv final
+{
+public:
+ ScopedEnv(JavaVM * vm)
+ {
+ JNIEnv * env;
+ auto result = vm->GetEnv(reinterpret_cast<void **>(&env), JNI_VERSION_1_6);
+ if (result == JNI_EDETACHED)
+ {
+ result = vm->AttachCurrentThread(&env, nullptr);
+ m_needToDetach = (result == JNI_OK);
+ }
+
+ if (result == JNI_OK)
+ {
+ m_env = env;
+ m_vm = vm;
+ }
+ }
+
+ ~ScopedEnv()
+ {
+ if (m_vm != nullptr && m_needToDetach)
+ m_vm->DetachCurrentThread();
+ }
+
+ JNIEnv * operator->() { return m_env; }
+ operator bool() const { return m_env != nullptr; }
+ JNIEnv * get() { return m_env; }
+
+private:
+ bool m_needToDetach = false;
+ JNIEnv * m_env = nullptr;
+ JavaVM * m_vm = nullptr;
+};
diff --git a/android/jni/com/mapswithme/core/jni_helper.cpp b/android/jni/com/mapswithme/core/jni_helper.cpp
index 5bf37b0ae0..0524197558 100644
--- a/android/jni/com/mapswithme/core/jni_helper.cpp
+++ b/android/jni/com/mapswithme/core/jni_helper.cpp
@@ -16,6 +16,7 @@ extern JavaVM * GetJVM()
// caching is necessary to create class from native threads
jclass g_mapObjectClazz;
jclass g_bookmarkClazz;
+jclass g_myTrackerClazz;
extern "C"
{
@@ -29,6 +30,7 @@ JNI_OnLoad(JavaVM * jvm, void *)
JNIEnv * env = jni::GetEnv();
g_mapObjectClazz = jni::GetGlobalClassRef(env, "com/mapswithme/maps/bookmarks/data/MapObject");
g_bookmarkClazz = jni::GetGlobalClassRef(env, "com/mapswithme/maps/bookmarks/data/Bookmark");
+ g_myTrackerClazz = jni::GetGlobalClassRef(env, "com/my/tracker/MyTracker");
return JNI_VERSION_1_6;
}
@@ -40,6 +42,7 @@ JNI_OnUnload(JavaVM *, void *)
JNIEnv * env = jni::GetEnv();
env->DeleteGlobalRef(g_mapObjectClazz);
env->DeleteGlobalRef(g_bookmarkClazz);
+ env->DeleteGlobalRef(g_myTrackerClazz);
}
} // extern "C"
diff --git a/android/jni/com/mapswithme/core/jni_helper.hpp b/android/jni/com/mapswithme/core/jni_helper.hpp
index 6ac621c37c..5e507d0bcc 100644
--- a/android/jni/com/mapswithme/core/jni_helper.hpp
+++ b/android/jni/com/mapswithme/core/jni_helper.hpp
@@ -11,6 +11,7 @@
extern jclass g_mapObjectClazz;
extern jclass g_bookmarkClazz;
+extern jclass g_myTrackerClazz;
namespace jni
{
diff --git a/android/jni/com/mapswithme/platform/Platform.cpp b/android/jni/com/mapswithme/platform/Platform.cpp
index 16793dcccc..291b925e47 100644
--- a/android/jni/com/mapswithme/platform/Platform.cpp
+++ b/android/jni/com/mapswithme/platform/Platform.cpp
@@ -1,6 +1,7 @@
#include "Platform.hpp"
#include "../core/jni_helper.hpp"
+#include "../core/ScopedEnv.hpp"
#include "platform/settings.hpp"
@@ -86,7 +87,22 @@ void Platform::SendPushWooshTag(string const & tag, vector<string> const & value
void Platform::SendMarketingEvent(string const & tag, map<string, string> const & params)
{
- // TODO: Add implementation.
+ ScopedEnv env(jni::GetJVM());
+ if (!env)
+ return;
+
+ string eventData = tag;
+
+ for (auto const & item : params)
+ {
+ eventData.append("_" + item.first + ": " + item.second);
+ }
+
+ static jmethodID const myTrackerTrackEvent =
+ env->GetStaticMethodID(g_myTrackerClazz, "trackEvent", "(Ljava/lang/String;)V");
+
+ env->CallStaticVoidMethod(g_myTrackerClazz, myTrackerTrackEvent,
+ jni::ToJavaString(env.get(), eventData));
}
Platform::EConnectionType Platform::ConnectionStatus()
diff --git a/android/src/com/mapswithme/maps/MwmApplication.java b/android/src/com/mapswithme/maps/MwmApplication.java
index d59f48c5b7..f7120e6a1b 100644
--- a/android/src/com/mapswithme/maps/MwmApplication.java
+++ b/android/src/com/mapswithme/maps/MwmApplication.java
@@ -33,6 +33,8 @@ import com.mapswithme.util.UiUtils;
import com.mapswithme.util.Utils;
import com.mapswithme.util.statistics.PushwooshHelper;
import com.mapswithme.util.statistics.Statistics;
+import com.my.tracker.MyTracker;
+import com.my.tracker.MyTrackerParams;
import com.pushwoosh.PushManager;
import io.fabric.sdk.android.Fabric;
import net.hockeyapp.android.CrashManager;
@@ -112,6 +114,7 @@ public class MwmApplication extends Application
initHockeyApp();
initCrashlytics();
initPushWoosh();
+ initTracker();
String settingsPath = getSettingsPath();
new File(settingsPath).mkdirs();
@@ -287,6 +290,15 @@ public class MwmApplication extends Application
}
}
+ private void initTracker()
+ {
+ MyTracker.setDebugMode(BuildConfig.DEBUG);
+ MyTracker.createTracker(PrivateVariables.myTrackerKey(), this);
+ final MyTrackerParams myParams = MyTracker.getTrackerParams();
+ myParams.setDefaultVendorAppPackage();
+ MyTracker.initTracker();
+ }
+
public void initCounters()
{
if (!mAreCountersInitialized)
diff --git a/map/framework.cpp b/map/framework.cpp
index 7290d056d1..b51102dbb5 100644
--- a/map/framework.cpp
+++ b/map/framework.cpp
@@ -375,6 +375,7 @@ Framework::Framework()
auto const routingStatisticsFn = [](map<string, string> const & statistics)
{
alohalytics::LogEvent("Routing_CalculatingRoute", statistics);
+ GetPlatform().SendMarketingEvent("Routing_CalculatingRoute", {});
};
#ifdef DEBUG
auto const routingVisualizerFn = [this](m2::PointD const & pt)
@@ -636,6 +637,7 @@ void Framework::LoadBookmarks()
size_t Framework::AddBookmark(size_t categoryIndex, const m2::PointD & ptOrg, BookmarkData & bm)
{
+ GetPlatform().SendMarketingEvent("Bookmarks_Bookmark_action", {{"action", "create"}});
return m_bmManager.AddBookmark(categoryIndex, ptOrg, bm);
}
@@ -1985,6 +1987,9 @@ void Framework::OnTapEvent(TapEvent const & tapEvent)
kv["types"] = DebugPrint(info.GetTypes());
// Older version of statistics used "$GetUserMark" event.
alohalytics::Stats::Instance().LogEvent("$SelectMapObject", kv, alohalytics::Location::FromLatLon(ll.lat, ll.lon));
+
+ if (info.IsHotel())
+ GetPlatform().SendMarketingEvent("Placepage_Hotel_book", {{"provider", "booking.com"}});
}
ActivateMapSelection(true, selection, info);
@@ -2787,6 +2792,8 @@ bool Framework::CreateMapObject(m2::PointD const & mercator, uint32_t const feat
if (!mwmId.IsAlive())
return false;
+ GetPlatform().SendMarketingEvent("EditorAdd_start", {});
+
search::ReverseGeocoder const coder(m_model.GetIndex());
vector<search::ReverseGeocoder::Street> streets;
@@ -2808,6 +2815,8 @@ bool Framework::GetEditableMapObject(FeatureID const & fid, osm::EditableMapObje
if (!GetFeatureByID(fid, ft))
return false;
+ GetPlatform().SendMarketingEvent("EditorEdit_start", {});
+
emo.SetFromFeatureType(ft);
emo.SetHouseNumber(ft.GetHouseNumber());
auto const & editor = osm::Editor::Instance();
diff --git a/search/processor.cpp b/search/processor.cpp
index a2851c4987..9dd4deaf98 100644
--- a/search/processor.cpp
+++ b/search/processor.cpp
@@ -127,6 +127,7 @@ void SendStatistics(SearchParams const & params, m2::RectD const & viewport, Res
{"results", resultString},
};
alohalytics::LogEvent("searchEmitResultsAndCoords", stats);
+ GetPlatform().SendMarketingEvent("searchEmitResultsAndCoords", {});
}
} // namespace
diff --git a/storage/storage.cpp b/storage/storage.cpp
index 82358cb482..57210b0411 100644
--- a/storage/storage.cpp
+++ b/storage/storage.cpp
@@ -830,6 +830,7 @@ void Storage::OnMapDownloadFinished(TCountryId const & countryId, bool success,
{"status", success ? "ok" : "failed"},
{"version", strings::to_string(GetCurrentDataVersion())},
{"option", DebugPrint(files)}}));
+ GetPlatform().SendMarketingEvent("Downloader_Map_action_finished", {{"action", "download"}});
}
success = success && RegisterDownloadedFiles(countryId, files);