Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/mapsme/omim.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDmitry Donskoy <donskdmitry@mail.ru>2018-09-25 14:39:04 +0300
committerAleksandr Zatsepin <alexzatsepin@users.noreply.github.com>2018-09-27 15:40:37 +0300
commitf1d9578140fa22ee38508e8070dd632db590d18f (patch)
treeab8548b04147fe2d3ea8e2c661d08ff9b11ea8ab
parenteafd554af589cd572f511711caa0ca3b468d4ecf (diff)
[android] Added excluding/including banners provider from platform runtime
-rw-r--r--android/jni/com/mapswithme/maps/Framework.cpp8
-rw-r--r--android/src/com/mapswithme/maps/Framework.java9
-rw-r--r--android/src/com/mapswithme/maps/ads/Banner.java32
-rw-r--r--android/src/com/mapswithme/maps/analytics/EventLoggerAggregator.java1
-rw-r--r--android/src/com/mapswithme/maps/content/MyTargetEventLogger.java16
-rw-r--r--map/framework.cpp6
-rw-r--r--map/framework.hpp2
-rw-r--r--partners_api/ads_engine.cpp49
-rw-r--r--partners_api/ads_engine.hpp5
-rw-r--r--partners_api/banner.hpp6
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,