diff options
-rw-r--r-- | android/jni/com/mapswithme/maps/Framework.cpp | 8 | ||||
-rw-r--r-- | android/src/com/mapswithme/maps/Framework.java | 9 | ||||
-rw-r--r-- | android/src/com/mapswithme/maps/ads/Banner.java | 32 | ||||
-rw-r--r-- | android/src/com/mapswithme/maps/analytics/EventLoggerAggregator.java | 1 | ||||
-rw-r--r-- | android/src/com/mapswithme/maps/content/MyTargetEventLogger.java | 16 | ||||
-rw-r--r-- | map/framework.cpp | 6 | ||||
-rw-r--r-- | map/framework.hpp | 2 | ||||
-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 |
10 files changed, 117 insertions, 17 deletions
diff --git a/android/jni/com/mapswithme/maps/Framework.cpp b/android/jni/com/mapswithme/maps/Framework.cpp index 49f88b7a64..10dd1bf3c3 100644 --- a/android/jni/com/mapswithme/maps/Framework.cpp +++ b/android/jni/com/mapswithme/maps/Framework.cpp @@ -1135,6 +1135,14 @@ Java_com_mapswithme_maps_Framework_nativeGetRouteFollowingInfo(JNIEnv * env, jcl return result; } +JNIEXPORT void JNICALL +Java_com_mapswithme_maps_Framework_nativeIncludeAdProvider(JNIEnv * env, jclass, jint type, jint place) +{ + auto const & bannerType = static_cast<ads::Banner::Type>(type); + auto const & bannerPlace = static_cast<ads::Banner::Place>(place); + frm()->IncludeAdProvider(bannerType, bannerPlace); +} + JNIEXPORT jintArray JNICALL Java_com_mapswithme_maps_Framework_nativeGenerateRouteAltitudeChartBits(JNIEnv * env, jclass, jint width, jint height, jobject routeAltitudeLimits) { diff --git a/android/src/com/mapswithme/maps/Framework.java b/android/src/com/mapswithme/maps/Framework.java index 2c49a6a485..bbe3d04d1b 100644 --- a/android/src/com/mapswithme/maps/Framework.java +++ b/android/src/com/mapswithme/maps/Framework.java @@ -224,6 +224,11 @@ public class Framework return FilterUtils.RATING_ANY; } + public static void addAdProvider(@NonNull Banner.Type type) + { + nativeIncludeAdProvider(type.ordinal(), Banner.Place.DEFAULT.ordinal()); + } + public static native void nativeShowTrackRect(long track); public static native int nativeGetDrawScale(); @@ -483,4 +488,8 @@ public class Framework public static native int nativeGetCurrentTipsApi(); private static native void nativeTipsShown(int tipType, int event); + + private static native void nativeIncludeAdProvider(int provider, int bannerPlace); + + } diff --git a/android/src/com/mapswithme/maps/ads/Banner.java b/android/src/com/mapswithme/maps/ads/Banner.java index 8ba69cbf3a..cb32715f9c 100644 --- a/android/src/com/mapswithme/maps/ads/Banner.java +++ b/android/src/com/mapswithme/maps/ads/Banner.java @@ -2,25 +2,10 @@ package com.mapswithme.maps.ads; import android.os.Parcel; import android.os.Parcelable; -import android.support.annotation.IntDef; import android.support.annotation.NonNull; -import java.lang.annotation.Retention; -import java.lang.annotation.RetentionPolicy; - public final class Banner implements Parcelable { - private static final int TYPE_NONE = 0; - private static final int TYPE_FACEBOOK = 1; - private static final int TYPE_RB = 2; - private static final int TYPE_MOPUB = 3; - private static final int TYPE_GOOGLE = 4; - - @Retention(RetentionPolicy.SOURCE) - @IntDef({ TYPE_NONE, TYPE_FACEBOOK, TYPE_RB, TYPE_MOPUB, TYPE_GOOGLE }) - - public @interface BannerType {} - public static final Creator<Banner> CREATOR = new Creator<Banner>() { @Override @@ -61,7 +46,7 @@ public final class Banner implements Parcelable @NonNull String getProvider() { - switch (mType) + switch (Type.values()[mType]) { case TYPE_FACEBOOK: return Providers.FACEBOOK; @@ -122,4 +107,19 @@ public final class Banner implements Parcelable result = 31 * result + mType; return result; } + + public enum Type + { + TYPE_NONE, + TYPE_FACEBOOK, + TYPE_RB, + TYPE_MOPUB, + TYPE_GOOGLE + } + + public enum Place + { + SEARCH, + DEFAULT + } } diff --git a/android/src/com/mapswithme/maps/analytics/EventLoggerAggregator.java b/android/src/com/mapswithme/maps/analytics/EventLoggerAggregator.java index d93523f901..d24243a691 100644 --- a/android/src/com/mapswithme/maps/analytics/EventLoggerAggregator.java +++ b/android/src/com/mapswithme/maps/analytics/EventLoggerAggregator.java @@ -20,6 +20,7 @@ class EventLoggerAggregator extends ContextDependentEventLogger mLoggers.put(LibnotifyEventLogger.class, new LibnotifyEventLogger(application)); mLoggers.put(PushWooshEventLogger.class, new PushWooshEventLogger(application)); mLoggers.put(MyTrackerEventLogger.class, new MyTrackerEventLogger(application)); + mLoggers.put(MyTargetEventLogger.class, new MyTargetEventLogger(application)); mLoggers.put(FlurryEventLogger.class, new FlurryEventLogger(application)); } diff --git a/android/src/com/mapswithme/maps/content/MyTargetEventLogger.java b/android/src/com/mapswithme/maps/content/MyTargetEventLogger.java new file mode 100644 index 0000000000..63f1962971 --- /dev/null +++ b/android/src/com/mapswithme/maps/content/MyTargetEventLogger.java @@ -0,0 +1,16 @@ +package com.mapswithme.maps.content; + +import android.app.Application; +import android.support.annotation.NonNull; + +import com.mapswithme.maps.Framework; +import com.mapswithme.maps.ads.Banner; + +class MyTargetEventLogger extends DefaultEventLogger +{ + MyTargetEventLogger(@NonNull Application application) + { + super(application); + Framework.addAdProvider(Banner.Type.TYPE_RB); + } +} diff --git a/map/framework.cpp b/map/framework.cpp index 14bcdf5c77..afca848890 100644 --- a/map/framework.cpp +++ b/map/framework.cpp @@ -3336,6 +3336,12 @@ ads::Engine const & Framework::GetAdsEngine() const return *m_adsEngine; } +void Framework::IncludeAdProvider(ads::Banner::Type const type, ads::Banner::Place const place) +{ + ASSERT(m_adsEngine, ()); + m_adsEngine.get()->IncludeAdProvider(type, place); +} + void Framework::RunUITask(function<void()> fn) { GetPlatform().RunTask(Platform::Thread::Gui, move(fn)); diff --git a/map/framework.hpp b/map/framework.hpp index e94ecd904f..477e0fa811 100644 --- a/map/framework.hpp +++ b/map/framework.hpp @@ -86,6 +86,7 @@ #include "std/vector.hpp" #include <boost/optional.hpp> +#include <partners_api/banner.hpp> namespace osm { @@ -351,6 +352,7 @@ public: void VisualizeCityBoundariesInRect(m2::RectD const & rect); ads::Engine const & GetAdsEngine() const; + void IncludeAdProvider(ads::Banner::Type const type, ads::Banner::Place const place); public: // SearchAPI::Delegate overrides: 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, |