diff --git a/android/jni/com/mapswithme/maps/Framework.cpp b/android/jni/com/mapswithme/maps/Framework.cpp index b01987e55d..6124b2c9ef 100644 --- a/android/jni/com/mapswithme/maps/Framework.cpp +++ b/android/jni/com/mapswithme/maps/Framework.cpp @@ -810,6 +810,15 @@ void Framework::GetPromoCityGallery(JNIEnv * env, jobject policy, api->GetCityGallery(point, languages::GetCurrentNorm(), utm, onSuccess, onError); } +promo::AfterBooking Framework::GetPromoAfterBooking(JNIEnv * env, jobject policy) +{ + auto api = NativeFramework()->GetPromoApi(ToNativeNetworkPolicy(env, policy)); + if (api == nullptr) + return {}; + + return api->GetAfterBooking(languages::GetCurrentNorm()); +} + void Framework::LogLocalAdsEvent(local_ads::EventType type, double lat, double lon, uint16_t accuracy) { auto const & info = g_framework->GetPlacePageInfo(); diff --git a/android/jni/com/mapswithme/maps/Framework.hpp b/android/jni/com/mapswithme/maps/Framework.hpp index 651bbad727..2e4fdb3f71 100644 --- a/android/jni/com/mapswithme/maps/Framework.hpp +++ b/android/jni/com/mapswithme/maps/Framework.hpp @@ -224,6 +224,7 @@ namespace android m2::PointD const & point, UTM utm, promo::CityGalleryCallback const & onSuccess, promo::OnError const & onError); + promo::AfterBooking GetPromoAfterBooking(JNIEnv * env, jobject policy); void LogLocalAdsEvent(local_ads::EventType event, double lat, double lon, uint16_t accuracy); diff --git a/android/jni/com/mapswithme/maps/promo/CityGallery.cpp b/android/jni/com/mapswithme/maps/promo/CityGallery.cpp index 3e0f90a38d..b8d888b51e 100644 --- a/android/jni/com/mapswithme/maps/promo/CityGallery.cpp +++ b/android/jni/com/mapswithme/maps/promo/CityGallery.cpp @@ -24,6 +24,8 @@ jclass g_promoClass = nullptr; jfieldID g_promoInstanceField = nullptr; jmethodID g_onGalleryReceived = nullptr; jmethodID g_onErrorReceived = nullptr; +jclass g_afterBooking = nullptr; +jmethodID g_afterBookingConstructor = nullptr; uint64_t g_lastRequestId = 0; void PrepareClassRefs(JNIEnv * env) @@ -59,6 +61,9 @@ void PrepareClassRefs(JNIEnv * env) g_onGalleryReceived = jni::GetMethodID(env, promoInstance, "onCityGalleryReceived", "(Lcom/mapswithme/maps/promo/PromoCityGallery;)V"); g_onErrorReceived = jni::GetMethodID(env, promoInstance, "onErrorReceived", "()V"); + g_afterBooking = jni::GetGlobalClassRef(env, "com/mapswithme/maps/promo/PromoAfterBooking"); + g_afterBookingConstructor = jni::GetConstructorID(env, g_afterBooking, + "(Ljava/lang/String;Ljava/lang/String;)V"); } void OnSuccess(uint64_t requestId, promo::CityGallery const & gallery) @@ -136,4 +141,21 @@ Java_com_mapswithme_maps_promo_Promo_nativeRequestCityGallery(JNIEnv * env, jcla std::bind(OnSuccess, g_lastRequestId, _1), std::bind(OnError, g_lastRequestId)); } + +JNIEXPORT jobject JNICALL +Java_com_mapswithme_maps_promo_Promo_nativeGetPromoAfterBooking(JNIEnv * env, jclass, + jobject policy) +{ + PrepareClassRefs(env); + + auto const result = g_framework->GetPromoAfterBooking(env, policy); + + if (result.IsEmpty()) + return nullptr; + + jni::TScopedLocalRef promoUrl(env, jni::ToJavaString(env, result.m_promoUrl)); + jni::TScopedLocalRef pictureUrl(env, jni::ToJavaString(env, result.m_pictureUrl)); + jni::TScopedLocalRef author(env, + env->NewObject(g_afterBooking, g_afterBookingConstructor, promoUrl.get(), pictureUrl.get())); +} } // extern "C" diff --git a/android/src/com/mapswithme/maps/promo/Promo.java b/android/src/com/mapswithme/maps/promo/Promo.java index 97460dab68..a533cf254b 100644 --- a/android/src/com/mapswithme/maps/promo/Promo.java +++ b/android/src/com/mapswithme/maps/promo/Promo.java @@ -52,4 +52,6 @@ public enum Promo public native void nativeRequestCityGallery(@NonNull NetworkPolicy policy, double lat, double lon, @UTM.UTMType int utm); + @Nullable + public static native PromoAfterBooking nativeGetPromoAfterBooking(@NonNull NetworkPolicy policy); } diff --git a/android/src/com/mapswithme/maps/promo/PromoAfterBooking.java b/android/src/com/mapswithme/maps/promo/PromoAfterBooking.java new file mode 100644 index 0000000000..54d02808cb --- /dev/null +++ b/android/src/com/mapswithme/maps/promo/PromoAfterBooking.java @@ -0,0 +1,31 @@ +package com.mapswithme.maps.promo; + +import android.support.annotation.NonNull; + +public class PromoAfterBooking +{ + @NonNull + private String mGuidesUrl; + @NonNull + private String mImageUrl; + + // Called from JNI. + @SuppressWarnings("unused") + public PromoAfterBooking(@NonNull String guidesUrl, @NonNull String imageUrl) + { + mGuidesUrl = guidesUrl; + mImageUrl = imageUrl; + } + + @NonNull + public String getGuidesUrl() + { + return mGuidesUrl; + } + + @NonNull + public String getImageUrl() + { + return mImageUrl; + } +} diff --git a/partners_api/promo_api.hpp b/partners_api/promo_api.hpp index 12820bea54..ce7d352452 100644 --- a/partners_api/promo_api.hpp +++ b/partners_api/promo_api.hpp @@ -46,6 +46,11 @@ struct CityGallery struct AfterBooking { + bool IsEmpty() const + { + return m_promoUrl.empty() || m_pictureUrl.empty(); + } + std::string m_promoUrl; std::string m_pictureUrl; };