diff --git a/map/framework.cpp b/map/framework.cpp index ac9c911a2b..fc48f03536 100644 --- a/map/framework.cpp +++ b/map/framework.cpp @@ -1567,7 +1567,7 @@ void Framework::FillSearchResultsMarks(bool clear, search::Results const & resul void Framework::FillSearchResultsMarks(bool clear, search::Results::ConstIter begin, search::Results::ConstIter end, - SearchMarkPostProcesing fn /* = nullptr */) + SearchMarkPostProcessing fn /* = nullptr */) { auto editSession = GetBookmarkManager().GetEditSession(); if (clear) @@ -1588,16 +1588,7 @@ void Framework::FillSearchResultsMarks(bool clear, search::Results::ConstIter be // TODO: Remove after FC2018 finishing. if (r.m_metadata.m_isFootballCupObject) - { mark->SetMarkType(SearchMarkType::Fc2018); - continue; - } - - if (isFeature && m_localAdsManager.Contains(r.GetFeatureID())) - { - mark->SetMarkType(SearchMarkType::LocalAds); - continue; - } if (r.m_metadata.m_isSponsoredHotel) { @@ -1606,6 +1597,12 @@ void Framework::FillSearchResultsMarks(bool clear, search::Results::ConstIter be mark->SetPricing(r.m_metadata.m_hotelPricing); } + if (isFeature && m_localAdsManager.Contains(r.GetFeatureID())) + { + mark->SetMarkType(r.m_metadata.m_isSponsoredHotel ? SearchMarkType::LocalAdsBooking + : SearchMarkType::LocalAds); + } + if (fn) fn(*mark); } diff --git a/map/framework.hpp b/map/framework.hpp index 15bcf15fc5..5cdc825a43 100644 --- a/map/framework.hpp +++ b/map/framework.hpp @@ -545,11 +545,11 @@ public: size_t ShowSearchResults(search::Results const & results); - using SearchMarkPostProcesing = function; + using SearchMarkPostProcessing = function; void FillSearchResultsMarks(bool clear, search::Results const & results); void FillSearchResultsMarks(bool clear, search::Results::ConstIter begin, - search::Results::ConstIter end, SearchMarkPostProcesing fn = nullptr); + search::Results::ConstIter end, SearchMarkPostProcessing fn = nullptr); list const & GetLastSearchQueries() const { return m_searchQuerySaver.Get(); } void SaveSearchQuery(TSearchRequest const & query) { m_searchQuerySaver.Add(query); } void ClearSearchHistory() { m_searchQuerySaver.Clear(); } diff --git a/map/search_mark.cpp b/map/search_mark.cpp index 9b7f8d31bb..52beffa17f 100644 --- a/map/search_mark.cpp +++ b/map/search_mark.cpp @@ -13,25 +13,26 @@ namespace { std::vector const kSymbols = { - "search-result", // Default. - "searchbooking-default-l", // Booking. - "search-adv", // LocalAds. - "search-football", // FC 2018. + "search-result", // Default. + "searchbooking-default-l", // Booking. + "search-adv", // Local Ads. + "searchbookingadv-default-l", // Local Ads + Booking. + "search-football", // FC 2018. - "non-found-search-result", // NotFound. + "non-found-search-result", // NotFound. }; std::vector const kPreparingSymbols = { - "search-result", // Default. - "searchbooking-inactive", // Booking. - "search-adv", // LocalAds. - "search-football", // FC 2018. + "search-result", // Default. + "searchbooking-inactive", // Booking. + "search-adv", // Local Ads. + "searchbookingadv-default-l", // Local Ads + Booking. + "search-football", // FC 2018. - "non-found-search-result", // NotFound. + "non-found-search-result", // NotFound. }; -std::string const kBookingSmallIcon = "searchbooking-default-s"; float const kRatingThreshold = 6.0f; float const kMetricThreshold = 0.38f; @@ -65,6 +66,15 @@ bool NeedShowBookingBadge(float rating, int pricing) auto const metric = CalculateAggregateMetric(rating, pricing); return metric >= kMetricThreshold; } + +std::string GetBookingSmallIcon(SearchMarkType type) +{ + if (type == SearchMarkType::Booking) + return "searchbooking-default-s"; + if (type == SearchMarkType::LocalAdsBooking) + return "search-adv"; + return {}; +} } // namespace SearchMarkPoint::SearchMarkPoint(m2::PointD const & ptOrg) @@ -97,7 +107,7 @@ drape_ptr SearchMarkPoint::GetSymbolNames if (IsBookingSpecialMark()) { symbol->insert(std::make_pair(1 /* zoomLevel */, m_rating < kRatingThreshold ? - kBookingSmallIcon : name)); + GetBookingSmallIcon(m_type) : name)); symbol->insert(std::make_pair(17 /* zoomLevel */, name)); } else @@ -151,6 +161,9 @@ df::ColorConstant SearchMarkPoint::GetColorConstant() const if (!IsBookingSpecialMark()) return {}; + if (m_type == SearchMarkType::LocalAdsBooking) + return "RatingLocalAds"; + if (HasNoRating(m_rating)) return "RatingNone"; if (m_rating < 2.0f) @@ -219,7 +232,8 @@ void SearchMarkPoint::SetPricing(int pricing) bool SearchMarkPoint::IsBookingSpecialMark() const { - return m_type == SearchMarkType::Booking && !m_isPreparing; + return (m_type == SearchMarkType::Booking || m_type == SearchMarkType::LocalAdsBooking) && + !m_isPreparing; } // static diff --git a/map/search_mark.hpp b/map/search_mark.hpp index e3b9b04f7d..a7246432dd 100644 --- a/map/search_mark.hpp +++ b/map/search_mark.hpp @@ -20,6 +20,7 @@ enum class SearchMarkType Default = 0, Booking, LocalAds, + LocalAdsBooking, Fc2018, NotFound, // Service value used in developer tools. Count