#pragma once #include "metrics/eye_info.hpp" #include "geometry/point2d.hpp" #include #include #include #include #include #include class TipsApi { public: using Duration = std::chrono::hours; using Condition = std::function; using Conditions = std::array(eye::Tip::Type::Count)>; class Delegate { public: virtual ~Delegate() = default; virtual boost::optional GetCurrentPosition() const = 0; virtual bool IsCountryLoaded(m2::PointD const & pt) const = 0; virtual bool HaveTransit(m2::PointD const & pt) const = 0; virtual double GetLastBackgroundTime() const = 0; }; static Duration GetShowAnyTipPeriod(); static Duration GetShowSameTipPeriod(); static Duration ShowTipAfterCollapsingPeriod(); static size_t GetActionClicksCountToDisable(); static size_t GetGotitClicksCountToDisable(); explicit TipsApi(Delegate const & delegate); boost::optional GetTip() const; static boost::optional GetTipForTesting(Duration showAnyTipPeriod, Duration showSameTipPeriod, TipsApi::Delegate const & delegate, Conditions const & triggers); private: Delegate const & m_delegate; Conditions m_conditions; };