diff options
author | Dmitry Donskoy <donskdmitry@mail.ru> | 2018-09-25 14:39:04 +0300 |
---|---|---|
committer | Aleksandr Zatsepin <alexzatsepin@users.noreply.github.com> | 2018-09-27 15:40:37 +0300 |
commit | f1d9578140fa22ee38508e8070dd632db590d18f (patch) | |
tree | ab8548b04147fe2d3ea8e2c661d08ff9b11ea8ab /partners_api | |
parent | eafd554af589cd572f511711caa0ca3b468d4ecf (diff) |
[android] Added excluding/including banners provider from platform runtime
Diffstat (limited to 'partners_api')
-rw-r--r-- | partners_api/ads_engine.cpp | 49 | ||||
-rw-r--r-- | partners_api/ads_engine.hpp | 5 | ||||
-rw-r--r-- | partners_api/banner.hpp | 6 |
3 files changed, 59 insertions, 1 deletions
diff --git a/partners_api/ads_engine.cpp b/partners_api/ads_engine.cpp index dc22872ebd..a3173636e1 100644 --- a/partners_api/ads_engine.cpp +++ b/partners_api/ads_engine.cpp @@ -14,7 +14,6 @@ namespace ads Engine::Engine() { // The banner systems are placed by priority. First has a top priority. - m_banners.emplace_back(Banner::Type::RB, std::make_unique<Rb>()); m_banners.emplace_back(Banner::Type::Mopub, std::make_unique<Mopub>()); m_searchBanners.emplace_back(Banner::Type::Facebook, std::make_unique<Facebook>()); @@ -84,4 +83,52 @@ std::vector<Banner> Engine::GetSearchBanners() const return result; } + +void Engine::ExcludeAdProvider(Banner::Type const type) +{ + ExcludeAdProviderInternal(m_banners, type); + ExcludeAdProviderInternal(m_searchBanners, type); +} + +void Engine::IncludeAdProvider(Banner::Type const type, Banner::Place place) +{ + IncludeAdProviderInternal(place == Banner::Place::Search ? m_searchBanners : m_banners, type); +} + +void Engine::ExcludeAdProviderInternal(std::vector<Engine::ContainerItem> & banners, Banner::Type const type) +{ + banners.erase(std::remove_if(banners.begin(), banners.end(), [type](ContainerItem const & each) + { + return each.m_type == type; + }), banners.end()); +} + +void Engine::IncludeAdProviderInternal(std::vector<ContainerItem> & banners, Banner::Type const type) +{ + auto const hasItemIterator = std::find_if(std::begin(banners), std::end(banners), [type](ContainerItem const & each) + { + return each.m_type == type; + }); + + if (hasItemIterator != std::end(banners)) + return; + + switch (type) + { + case Banner::Type::Facebook : + banners.emplace_back(Banner::Type::Facebook, std::make_unique<Facebook>()); + break; + case Banner::Type::RB : + banners.emplace_back(Banner::Type::RB, std::make_unique<Rb>()); + break; + case Banner::Type::Mopub : + banners.emplace_back(Banner::Type::Mopub, std::make_unique<Mopub>()); + break; + case Banner::Type::Google : + banners.emplace_back(Banner::Type::None, std::make_unique<Google>()); + break; + case Banner::Type::None : + break; + } +} } // namespace ads diff --git a/partners_api/ads_engine.hpp b/partners_api/ads_engine.hpp index e07578a8c4..c99f98e367 100644 --- a/partners_api/ads_engine.hpp +++ b/partners_api/ads_engine.hpp @@ -25,6 +25,8 @@ public: std::vector<Banner> GetBanners(feature::TypesHolder const & types, storage::TCountriesVec const & countryIds, std::string const & userLanguage) const; + void IncludeAdProvider(Banner::Type const type, Banner::Place const bannerPlace); + void ExcludeAdProvider(Banner::Type type); bool HasSearchBanner() const; std::vector<Banner> GetSearchBanners() const; @@ -42,6 +44,9 @@ private: ContainerPtr m_container; }; + void ExcludeAdProviderInternal(std::vector<ContainerItem> & banners, Banner::Type const type); + void IncludeAdProviderInternal(std::vector<ContainerItem> & banners, Banner::Type const type); + std::vector<ContainerItem> m_banners; std::vector<ContainerItem> m_searchBanners; }; diff --git a/partners_api/banner.hpp b/partners_api/banner.hpp index 099b38651e..653da797bb 100644 --- a/partners_api/banner.hpp +++ b/partners_api/banner.hpp @@ -8,6 +8,12 @@ namespace ads { struct Banner { + enum class Place : uint8_t + { + Search = 0, + Default = 1 + }; + enum class Type : uint8_t { None = 0, |