diff --git a/map/bookmark.cpp b/map/bookmark.cpp index c0813075fa..f2bedb4f51 100644 --- a/map/bookmark.cpp +++ b/map/bookmark.cpp @@ -53,6 +53,13 @@ shared_ptr Bookmark::CreateAnimTask(Framework & fm) return CreateDefaultPinAnim(fm, m_animScaleFactor); } +void Bookmark::FillLogEvent(TEventContainer & details) const +{ + UserMark::FillLogEvent(details); + details.emplace("markType", "BOOKMARK"); + details.emplace("name", GetData().GetName()); +} + void BookmarkCategory::AddTrack(Track & track) { m_tracks.push_back(track.CreatePersistent()); diff --git a/map/bookmark.hpp b/map/bookmark.hpp index 8ded89d2c7..a43675e195 100644 --- a/map/bookmark.hpp +++ b/map/bookmark.hpp @@ -90,6 +90,7 @@ public: BookmarkData const & GetData() const { return m_data; } virtual Type GetMarkType() const { return UserMark::Type::BOOKMARK; } + virtual void FillLogEvent(TEventContainer & details) const override; string const & GetName() const { return m_data.GetName(); } void SetName(string const & name) { m_data.SetName(name); } diff --git a/map/framework.cpp b/map/framework.cpp index f1607f3cf6..ade83d627a 100644 --- a/map/framework.cpp +++ b/map/framework.cpp @@ -59,6 +59,7 @@ #include "../api/internal/c/api-client-internals.h" #include "../api/src/c/api-client.h" +#include "../3party/Alohalytics/src/alohalytics.h" #define KMZ_EXTENSION ".kmz" @@ -1864,6 +1865,17 @@ namespace } UserMark const * Framework::GetUserMark(m2::PointD const & pxPoint, bool isLongPress) +{ + // The main idea is to calculate POI rank based on the frequency users are clicking them. + UserMark const * mark = GetUserMarkWithoutLogging(pxPoint, isLongPress); + alohalytics::TStringMap details {{"isLongPress", isLongPress ? "1" : "0"}}; + if (mark) + mark->FillLogEvent(details); + alohalytics::Stats::Instance().LogEvent("$GetUserMark", details); + return mark; +} + +UserMark const * Framework::GetUserMarkWithoutLogging(m2::PointD const & pxPoint, bool isLongPress) { DisconnectMyPositionUpdate(); m2::AnyRectD rect; diff --git a/map/framework.hpp b/map/framework.hpp index b42f0ab817..f55bc8adfd 100644 --- a/map/framework.hpp +++ b/map/framework.hpp @@ -458,6 +458,7 @@ public: shared_ptr const & GetLocationState() const; void ActivateUserMark(UserMark const * mark, bool needAnim = true); bool HasActiveUserMark() const; + UserMark const * GetUserMarkWithoutLogging(m2::PointD const & pxPoint, bool isLongPress); UserMark const * GetUserMark(m2::PointD const & pxPoint, bool isLongPress); PoiMarkPoint * GetAddressMark(m2::PointD const & globalPoint) const; BookmarkAndCategory FindBookmark(UserMark const * mark) const; diff --git a/map/user_mark.hpp b/map/user_mark.hpp index caf7534448..7b0ee3e277 100644 --- a/map/user_mark.hpp +++ b/map/user_mark.hpp @@ -42,6 +42,15 @@ public: virtual bool IsCustomDrawable() const { return false;} virtual Type GetMarkType() const = 0; virtual unique_ptr Copy() const = 0; + // Need it to calculate POI rank from all taps to features via statistics. + typedef map TEventContainer; + virtual void FillLogEvent(TEventContainer & details) const + { + double lat, lon; + GetLatLon(lat, lon); + details.emplace("lat", strings::to_string(lat)); + details.emplace("lon", strings::to_string(lon)); + } protected: m2::PointD m_ptOrg; @@ -102,6 +111,13 @@ public: new UserMarkCopy(new ApiMarkPoint(m_name, m_id, m_ptOrg, m_container))); } + virtual void FillLogEvent(TEventContainer & details) const override + { + UserMark::FillLogEvent(details); + details.emplace("markType", "API"); + details.emplace("name", GetName()); + } + private: string m_name; string m_id; @@ -137,6 +153,15 @@ public: new UserMarkCopy(new SearchMarkPoint(m_info, m_ptOrg, m_container))); } + virtual void FillLogEvent(TEventContainer & details) const override + { + UserMark::FillLogEvent(details); + details.emplace("markType", "SEARCH"); + details.emplace("name", m_info.GetPinName()); + details.emplace("type", m_info.GetPinType()); + details.emplace("metaData", m_metadata.Empty() ? "0" : "1"); + } + protected: search::AddressInfo m_info; feature::FeatureMetadata m_metadata; @@ -153,6 +178,11 @@ public: { return unique_ptr(new UserMarkCopy(this, false)); } + virtual void FillLogEvent(TEventContainer & details) const override + { + SearchMarkPoint::FillLogEvent(details); + details.emplace("markType", "POI"); + } void SetPtOrg(m2::PointD const & ptOrg) { m_ptOrg = ptOrg; } void SetName(string const & name) { m_info.m_name = name; } @@ -166,6 +196,11 @@ public: : base_t(container) {} UserMark::Type GetMarkType() const { return UserMark::Type::MY_POSITION; } + virtual void FillLogEvent(TEventContainer & details) const override + { + PoiMarkPoint::FillLogEvent(details); + details.emplace("markType", "MY_POSITION"); + } }; class ICustomDrawable : public UserMark