From cf21430055d8162970748c62d9860ded1a9419b1 Mon Sep 17 00:00:00 2001 From: "r.kuznetsov" Date: Thu, 18 Jan 2018 13:50:15 +0300 Subject: [PATCH] Added new partners system --- android/jni/com/mapswithme/maps/Sponsored.cpp | 9 ++-- .../drawable-hdpi/ic_24px_logo_partner1.png | Bin 0 -> 473 bytes .../res/drawable-hdpi/ic_24px_logo_thor.png | Bin 331 -> 0 bytes .../drawable-mdpi/ic_24px_logo_partner1.png | Bin 0 -> 341 bytes .../res/drawable-mdpi/ic_24px_logo_thor.png | Bin 227 -> 0 bytes .../{button_thor.xml => button_partner1.xml} | 4 +- .../drawable-xhdpi/ic_24px_logo_partner1.png | Bin 0 -> 574 bytes .../res/drawable-xhdpi/ic_24px_logo_thor.png | Bin 387 -> 0 bytes .../drawable-xxhdpi/ic_24px_logo_partner1.png | Bin 0 -> 824 bytes .../res/drawable-xxhdpi/ic_24px_logo_thor.png | Bin 569 -> 0 bytes .../ic_24px_logo_partner1.png | Bin 0 -> 1087 bytes .../drawable-xxxhdpi/ic_24px_logo_thor.png | Bin 744 -> 0 bytes .../{button_thor.xml => button_partner1.xml} | 4 +- android/res/values/colors.xml | 4 +- .../maps/search/CategoriesAdapter.java | 4 +- .../maps/search/SearchFragment.java | 4 +- .../widget/placepage/PlacePageButtons.java | 38 +++++++++++++--- .../maps/widget/placepage/PlacePageView.java | 26 ++++++----- .../maps/widget/placepage/Sponsored.java | 38 ++++++++++------ .../util/statistics/PlacePageTracker.java | 2 +- .../util/statistics/Statistics.java | 25 ++++++----- configure.sh | 11 +++++ indexer/ftypes_sponsored.cpp | 28 ++++++++++++ indexer/ftypes_sponsored.hpp | 12 ++++- iphone/Maps/Categories/UIColor+MapsMeColor.h | 2 +- iphone/Maps/Categories/UIColor+MapsMeColor.mm | 4 +- .../Common/Statistics/StatisticsStrings.h | 1 - .../Contents.json | 15 +++++++ .../ic_28px_logo_partner1.pdf | Bin 0 -> 5862 bytes .../ic_28px_logo_thor.imageset/Contents.json | 26 ----------- .../ic_28px_logo_thor.png | Bin 229 -> 0 bytes .../ic_28px_logo_thor@2x.png | Bin 394 -> 0 bytes .../ic_28px_logo_thor@3x.png | Bin 591 -> 0 bytes iphone/Maps/UI/PlacePage/MWMPlacePageData.h | 6 ++- iphone/Maps/UI/PlacePage/MWMPlacePageData.mm | 18 ++++++-- .../Maps/UI/PlacePage/MWMPlacePageManager.mm | 12 ++--- .../Maps/UI/PlacePage/MWMPlacePageProtocol.h | 2 +- .../ActionBar/MWMActionBarButton.h | 7 +-- .../ActionBar/MWMActionBarButton.mm | 42 ++++++++++++++---- .../ActionBar/MWMPlacePageActionBar.h | 4 +- .../ActionBar/MWMPlacePageActionBar.mm | 14 +++--- map/framework.cpp | 14 +++--- map/place_page_info.cpp | 17 +++++++ map/place_page_info.hpp | 12 ++++- partners_api/mopub_ads.cpp | 19 ++++++++ platform/marketing_service.cpp | 3 +- platform/marketing_service.hpp | 1 - 47 files changed, 301 insertions(+), 127 deletions(-) create mode 100644 android/res/drawable-hdpi/ic_24px_logo_partner1.png delete mode 100644 android/res/drawable-hdpi/ic_24px_logo_thor.png create mode 100644 android/res/drawable-mdpi/ic_24px_logo_partner1.png delete mode 100644 android/res/drawable-mdpi/ic_24px_logo_thor.png rename android/res/drawable-v21/{button_thor.xml => button_partner1.xml} (62%) create mode 100644 android/res/drawable-xhdpi/ic_24px_logo_partner1.png delete mode 100644 android/res/drawable-xhdpi/ic_24px_logo_thor.png create mode 100644 android/res/drawable-xxhdpi/ic_24px_logo_partner1.png delete mode 100644 android/res/drawable-xxhdpi/ic_24px_logo_thor.png create mode 100644 android/res/drawable-xxxhdpi/ic_24px_logo_partner1.png delete mode 100644 android/res/drawable-xxxhdpi/ic_24px_logo_thor.png rename android/res/drawable/{button_thor.xml => button_partner1.xml} (58%) create mode 100644 iphone/Maps/Images.xcassets/Place Page/ic_28px_logo_partner1.imageset/Contents.json create mode 100644 iphone/Maps/Images.xcassets/Place Page/ic_28px_logo_partner1.imageset/ic_28px_logo_partner1.pdf delete mode 100644 iphone/Maps/Images.xcassets/Place Page/ic_28px_logo_thor.imageset/Contents.json delete mode 100644 iphone/Maps/Images.xcassets/Place Page/ic_28px_logo_thor.imageset/ic_28px_logo_thor.png delete mode 100644 iphone/Maps/Images.xcassets/Place Page/ic_28px_logo_thor.imageset/ic_28px_logo_thor@2x.png delete mode 100644 iphone/Maps/Images.xcassets/Place Page/ic_28px_logo_thor.imageset/ic_28px_logo_thor@3x.png diff --git a/android/jni/com/mapswithme/maps/Sponsored.cpp b/android/jni/com/mapswithme/maps/Sponsored.cpp index 8fe4dfe142..fcf62da9a7 100644 --- a/android/jni/com/mapswithme/maps/Sponsored.cpp +++ b/android/jni/com/mapswithme/maps/Sponsored.cpp @@ -61,7 +61,8 @@ void PrepareClassRefs(JNIEnv * env, jclass sponsoredClass) // Sponsored(String rating, String price, String urlBook, String urlDescription) g_sponsoredClassConstructor = jni::GetConstructorID( env, g_sponsoredClass, - "(Ljava/lang/String;ILjava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;I)V"); + "(Ljava/lang/String;ILjava/lang/String;Ljava/lang/String;Ljava/lang/String;" + "Ljava/lang/String;IILjava/lang/String;)V"); // static void onPriceReceived(final String id, final String price, final String currency) g_priceCallback = jni::GetStaticMethodID(env, g_sponsoredClass, "onPriceReceived", @@ -120,12 +121,14 @@ JNIEXPORT jobject JNICALL Java_com_mapswithme_maps_widget_placepage_Sponsored_na std::string rating = place_page::rating::GetRatingFormatted(ppInfo.GetRatingRawValue()); return env->NewObject(g_sponsoredClass, g_sponsoredClassConstructor, jni::ToJavaString(env, rating), - static_cast(place_page::rating::GetImpress(ppInfo.GetRatingRawValue())), + static_cast(place_page::rating::GetImpress(ppInfo.GetRatingRawValue())), jni::ToJavaString(env, ppInfo.GetApproximatePricing()), jni::ToJavaString(env, ppInfo.GetSponsoredUrl()), jni::ToJavaString(env, ppInfo.GetSponsoredDescriptionUrl()), jni::ToJavaString(env, ppInfo.GetSponsoredReviewUrl()), - (jint)ppInfo.GetSponsoredType()); + static_cast(ppInfo.GetSponsoredType()), + static_cast(ppInfo.GetPartnerIndex()), + jni::ToJavaString(env, ppInfo.GetPartnerName())); } // static void nativeRequestPrice(String id, String currencyCode); diff --git a/android/res/drawable-hdpi/ic_24px_logo_partner1.png b/android/res/drawable-hdpi/ic_24px_logo_partner1.png new file mode 100644 index 0000000000000000000000000000000000000000..6433af94f5597ec6dbc2f2d2db1964be09e18701 GIT binary patch literal 473 zcmV;~0Ve*5P)Dt-ZQHi(U~OE_>L%7kZACSr8bNK_PtCV;@SRgW$uBycnSbZaOd4%XG#M?> zQYBWR8hYA|cxY-0v^EcSptq+W)q{v$LT^v39CQ;)p|$67)gl8LY4*ffg^%$(rm||wo6nxWlHu=|8hu34ASr|O~oAauNmL0 z9P}M}3POgJgHjO&t$hKhA0(emt_uI`81xH`aFi1&?HE)5KRD_$$m&5vUoli!2(WXI z3#uUX4b65As)DojbEzMs=WH>EGy0j+@E%gdkn+bHOhxYkA;)06$LOdP1Yk{?t?F>N P00000NkvXXu0mjfrLxw( literal 0 HcmV?d00001 diff --git a/android/res/drawable-hdpi/ic_24px_logo_thor.png b/android/res/drawable-hdpi/ic_24px_logo_thor.png deleted file mode 100644 index 8f67c9d82801b5d5d7dc75fab5fd8090a1ba5fb1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 331 zcmV-R0kr;!P)JfAA^B5%0fMRu(1X;IgxE?_1VR!7QbIUz5(*qBMd_|DY{r<~ z#_U30K7jN4-|WD@FF_wgZDAK>ZDR*!DazW!U#)^-0}B{MQ8SpXGLT{|`g%POIa4hI zbC`l|7L$>IJLkVxfvk&1&p-#)kZm~5bAV6JK#B~q3AB(mk8#NMka`D>@Ktgq{rWa; z+ym(1+_-rI36_o5lXrlOGc~b@7RHd*M-~}4!>e&7eV!{kMFu`_0@)JQ&GQ5XtTPRx ziM)3lR~fj(3yM0$Ta|%t973nh6B^KG(mms%j)7aWq07*V4(Kw+c`6O;Lw1h`&u<$T nf~*H!2ZKn&$F~|mg5Q1sYC1IXLou@M00000NkvXXu0mjfoydyD literal 0 HcmV?d00001 diff --git a/android/res/drawable-mdpi/ic_24px_logo_thor.png b/android/res/drawable-mdpi/ic_24px_logo_thor.png deleted file mode 100644 index c1648892d0ac1f64740da8c6f698c50985c0fada..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 227 zcmV<90382`P)|^xsW7nHPM_uOL13tH>AG?TE(mV9tf*LgLkn8Mx0SVu?GfZ{@EP8 z#RV56s4On1koXbB9_W$#=Q0cy7Zf;Qw78%_H|q^o + android:color="@color/bg_brand_partner1_pressed"> - + diff --git a/android/res/drawable-xhdpi/ic_24px_logo_partner1.png b/android/res/drawable-xhdpi/ic_24px_logo_partner1.png new file mode 100644 index 0000000000000000000000000000000000000000..72d7b8968806e46464e0a4850f04003d1b0c1f4d GIT binary patch literal 574 zcmV-E0>S->P)YN+vW@8l~RmtyA<2DZF|L<+2^!&pNm!Xl?VUrJ%LDY! zXrc=P`lAy3))w_$7?2MWHO@yKpnpaaT^i5{^vc!5hL{fGp2wEDGb_@?jjLE@5Y!12*G6q)K5J z{;fAELTU~^$2s5w7QxiCkmnQA0HS#?H58@sv-}tfshzl}F<=iaLaNX|_udcXAT=8l z{{Y*kFwMvLyv1VI2J}KT6vP-vt;Q400q1Z4Qh6~M15p}Mb3l3nY=0(9!(>R^$A%;Z zEW}4hwZSwkW{9LzVl4d8z{g`?>-s>!as$Z*q+J*=Hio!1J2?= zi1Sex5dJ9~#3^?Nn14f^6ZJoy^P@OSy@ySAP!b+;>NRYu2M_7p7hP{-|D0R!wEzGB M07*qoM6N<$g1(seL;wH) literal 0 HcmV?d00001 diff --git a/android/res/drawable-xhdpi/ic_24px_logo_thor.png b/android/res/drawable-xhdpi/ic_24px_logo_thor.png deleted file mode 100644 index 1f68e053a87b050441ae5dd2c310edd8aabbe561..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 387 zcmV-}0et?6P)NklUvwl+Tx@K9O7u}8Ev>nEa7eihlsn|H@t$o+_U#P=acWdfB(OT zu%5fSyJ+O038PrTHcoMgTjLU^*uo-)QHQ`^7f8dG#uj*GaY?AbUr!a1KDu}(=J8)< z4$k*3-j5Ufw>g3D9R>dPC=^)6fMS6&l%ZJh40Iw50o*DTSVpGF_25S39ymh~2_`cV zA?&FX=!WZ=>}0ekT|!llvP+fjfj&4)W-Ka|-UF40HF*y7sl3Q;QSvCSO6g79g5+m1 zUFcT1g!T|Zq{&M_5N9d{Zs0LlnOFv+a}NZNiVnrE(c;IKi&B9BEbIRd*aF%GZr@YD z_fLQ7_mQKztul#p)s3wRBt+N=m-*A(Xj{M*umx-ZTfi2u1#AIZz!o^iOLMMJz>PL+ h;LO-SE8O3mcMsnGOKuVEbNK)O002ovPDHLkV1kQ%uY3Ri diff --git a/android/res/drawable-xxhdpi/ic_24px_logo_partner1.png b/android/res/drawable-xxhdpi/ic_24px_logo_partner1.png new file mode 100644 index 0000000000000000000000000000000000000000..5d5e467d247c5b73ff77dcc427788d620f283521 GIT binary patch literal 824 zcmV-81IPS{P)IQbKcsvZQHin!~5uk^aiR?ZQHhO+s^c<-RaKC{F0rOXRXh_#dl?&nVkQ^ z)D{*N78Yh91-CnZ_ApfwoP_H|kcrx%DNL0E(lQWH0Zf&xaiDyds0E;Jp!(>l?7ZXy zDLAui%>!lQe`KmQXrg(b${48NyaWU3Ill!v5e zSm5pEg3FLL0h1vqg_-zUS$-SH=^K7&w1A|oxPZT9`E4NL%*-?cr0K+nj^Yq9 z*-OmPGm!bGXb~Q19w-6ZzOgta_k% zf;ap(NP0Dpg>rDxQ@nxG${>Pt*?0tU_3sJ`GthfyUY6w7>LI%T0000t z@elJ-U$kG@F*TxjxAhd09o77znH#l4^F%MTa!voi9p8Aw_Q1Z+_Qw1FoiVR|e=P2L zz0s@~J@F$VEgKn5ZxEZkfp_qU(Kmc<)H`j|xJmcO(wkMCIXZo#3)PyX)wUb3Xb^SSKu zJ#!CtyxxD~{Ns=<`TFY)Zj{lOT|P(at*xB;$D^;}FL1AE*njLF_nP~T?+Z5^dZ#^M zo18{lz{PX67EGU~e^KVq{k+!G<^9o)hJ=gjoE=T}M%p&bTV%WZ(b})&pEK92*znwO z&vv;CN7?yx>ke?QZrt}s)p&JqV_e*#JJ~QTzC24ZT{Fxg)N`UWICl2zD&&K zy8OBCa@~=G8UbS5r{&dIi#CWX7I3_%apBsjdfDyF8l=El#iv~yzMo&q zo{w+g_Nnqgy2s3Simj&gvRh zj^j9v<2a7vWJd#gDwm&eE&N_-aUou;l4+`Zmcdh$9%rI*2p~95X|Xl#m{Wkma4n_7 zS*V->wD7FV=jY!5na|MnxNVLB_QcKeouBvt1n1@*zys`pTjU&IE8H#iH{YBC2+s2W zaXCBE?_&?#RPq4p;34t8`FemDGt|H{Jix!4ic70J_Qnl8z`v}7$H$u=4gtBV*g>6ZT08=M8)$^#C%Qp*8Rbg>w|Hq;Rf6 zRUyDV_@Vs_MV+4>4p$|>UpOioPR3;e-^4yq;oOIBS0aG%3@sP9-^b$e3g>E6l>$72 zFWJvfl-tiQI9;^>f+5*(UsVk7Eq&N0QNJq%0fP5 zt$~MHJ^R-&z|#d^NKeC-!gvqwt!n_we+9?m3I#m)R2Md^?(+&PCkK!x!4PZY*hvM4C^P?OBOyKW^KXYh3+)rWrj$^q5u)L6-j~8G= zVcdvcW)Q%9hIYrxte*XI3UD2Mr!@EqZ_F*gFF2z#7{lLk3t;xziq-t&7r@{`YQXFG zXs!YN!m$*-`g08sdxm;AlzV`u@nyx~K71$l0D|Gj^Wy;`{RsUj1P|~IKBRJ)!|y!6 zzYN8l9}h5zzpETR!P`B+|M?PcQ8|p@pB}(qhHU4@16+^at5}}HXFb5e9}Q2Cbq~-~7U|R3#;uuoF_+}1sk8HMt!~EVC zKc@!vZrGN4yJK?i>IHqVy9y~1-2h4OeZYw$k#KRJo0nKGi`;s zvV_<<9jt5}{lzz)fBkdV;C{8kp4ZRXuW$Z-P$vJ7;kwyL#pQ>5?z0}<_4!}<^HK^imkJf?<|bXUt2h_#P$F|I|Mbj_e0ksH1a$c~ zR9eojdY-t<{9#6Am+s;ib2bh&VQbbkvpWnO_`Y#QmL)G)Np^NMd02$dh0^_SkrhOcC>K)#8xGln3`e%3o7t-C=Q6 zKmXzymCA;{lPouQ_9fp<>C>4!b^a5@4N6K%^LnxyCcup7VB}E%#w)};9GsxD#&hLs z6|eGL;MGq|-Pv+?9|x;)P4C=7y?2K$SI8P~%(%bsO?JRes})ht7Cta%*q3aqo%wmK R5- - - + diff --git a/android/res/values/colors.xml b/android/res/values/colors.xml index a207a45aa4..6e550c4dad 100644 --- a/android/res/values/colors.xml +++ b/android/res/values/colors.xml @@ -158,8 +158,8 @@ #FF1B549E #FFDA3743 #FFFC5965 - #FFD74313 - #FFF65822 + #FFFFDA00 + #FFF2CE00 #FFFFFBF3 diff --git a/android/src/com/mapswithme/maps/search/CategoriesAdapter.java b/android/src/com/mapswithme/maps/search/CategoriesAdapter.java index a5410c1336..e85ec97d37 100644 --- a/android/src/com/mapswithme/maps/search/CategoriesAdapter.java +++ b/android/src/com/mapswithme/maps/search/CategoriesAdapter.java @@ -52,8 +52,8 @@ class CategoriesAdapter extends RecyclerView.Adapter= PARTNERS_ITEMS.length) + throw new AssertionError("Wrong partner index: " + partnerIndex); + return PARTNERS_ITEMS[partnerIndex]; + } + private @NonNull List collectButtons(List items) { List res = new ArrayList<>(items); diff --git a/android/src/com/mapswithme/maps/widget/placepage/PlacePageView.java b/android/src/com/mapswithme/maps/widget/placepage/PlacePageView.java index 833e3db442..70cd583965 100644 --- a/android/src/com/mapswithme/maps/widget/placepage/PlacePageView.java +++ b/android/src/com/mapswithme/maps/widget/placepage/PlacePageView.java @@ -469,9 +469,9 @@ public class PlacePageView extends RelativeLayout color = Color.WHITE; break; - case THOR: - frame.setBackgroundResource(R.drawable.button_thor); - color = Color.WHITE; + case PARTNER1: + frame.setBackgroundResource(R.drawable.button_partner1); + color = Color.BLACK; break; case BOOKMARK: @@ -575,7 +575,11 @@ public class PlacePageView extends RelativeLayout case BOOKING: case OPENTABLE: - case THOR: + case PARTNER1: + case PARTNER2: + case PARTNER3: + case PARTNER4: + case PARTNER5: onSponsoredClick(true /* book */, false); break; @@ -992,14 +996,12 @@ public class PlacePageView extends RelativeLayout Statistics.INSTANCE.trackHotelEvent(event, info, mMapObject); } break; - case Sponsored.TYPE_GEOCHAT: - break; case Sponsored.TYPE_OPENTABLE: if (mMapObject != null) Statistics.INSTANCE.trackRestaurantEvent(PP_SPONSORED_OPENTABLE, info, mMapObject); break; - case Sponsored.TYPE_THOR: - if (mMapObject != null) + case Sponsored.TYPE_PARTNER: + if (mMapObject != null && !info.getPartnerName().isEmpty()) Statistics.INSTANCE.trackSponsoredObjectEvent(PP_SPONSORED_ACTION, info, mMapObject); break; case Sponsored.TYPE_NONE: @@ -1637,13 +1639,13 @@ public class PlacePageView extends RelativeLayout case Sponsored.TYPE_BOOKING: buttons.add(PlacePageButtons.Item.BOOKING); break; - case Sponsored.TYPE_GEOCHAT: - break; case Sponsored.TYPE_OPENTABLE: buttons.add(PlacePageButtons.Item.OPENTABLE); break; - case Sponsored.TYPE_THOR: - buttons.add(PlacePageButtons.Item.THOR); + case Sponsored.TYPE_PARTNER: + int partnerIndex = mSponsored.getPartnerIndex(); + if (partnerIndex >= 0 && !mSponsored.getUrl().isEmpty()) + buttons.add(PlacePageButtons.getPartnerItem(partnerIndex)); break; case Sponsored.TYPE_NONE: break; diff --git a/android/src/com/mapswithme/maps/widget/placepage/Sponsored.java b/android/src/com/mapswithme/maps/widget/placepage/Sponsored.java index e449f2fe81..c4f588e423 100644 --- a/android/src/com/mapswithme/maps/widget/placepage/Sponsored.java +++ b/android/src/com/mapswithme/maps/widget/placepage/Sponsored.java @@ -25,15 +25,14 @@ public final class Sponsored public static final int TYPE_NONE = 0; public static final int TYPE_BOOKING = 1; public static final int TYPE_OPENTABLE = 2; - public static final int TYPE_GEOCHAT = 3; - public static final int TYPE_VIATOR = 4; - public static final int TYPE_CIAN = 5; - public static final int TYPE_THOR = 6; - public static final int TYPE_HOLIDAY = 7; + public static final int TYPE_VIATOR = 3; + public static final int TYPE_CIAN = 4; + public static final int TYPE_PARTNER = 5; + public static final int TYPE_HOLIDAY = 6; @Retention(RetentionPolicy.SOURCE) - @IntDef({ TYPE_NONE, TYPE_BOOKING, TYPE_OPENTABLE, TYPE_GEOCHAT, - TYPE_VIATOR, TYPE_CIAN, TYPE_THOR, TYPE_HOLIDAY }) + @IntDef({ TYPE_NONE, TYPE_BOOKING, TYPE_OPENTABLE, + TYPE_VIATOR, TYPE_CIAN, TYPE_PARTNER, TYPE_HOLIDAY }) public @interface SponsoredType {} private static class Price @@ -209,10 +208,13 @@ public final class Sponsored private final String mReviewUrl; @SponsoredType private final int mType; + private final int mPartnerIndex; + @NonNull + private final String mPartnerName; - public Sponsored(@NonNull String rating, @UGC.Impress int impress, @NonNull String price, @NonNull String url, - @NonNull String descriptionUrl, @NonNull String reviewUrl, - @SponsoredType int type) + public Sponsored(@NonNull String rating, @UGC.Impress int impress, @NonNull String price, + @NonNull String url, @NonNull String descriptionUrl, @NonNull String reviewUrl, + @SponsoredType int type, int partnerIndex, @NonNull String partnerName) { mRating = rating; mImpress = impress; @@ -221,6 +223,8 @@ public final class Sponsored mDescriptionUrl = descriptionUrl; mReviewUrl = reviewUrl; mType = type; + mPartnerIndex = partnerIndex; + mPartnerName = partnerName; } void updateId(MapObject point) @@ -276,6 +280,17 @@ public final class Sponsored return mType; } + public int getPartnerIndex() + { + return mPartnerIndex; + } + + @NonNull + public String getPartnerName() + { + return mPartnerName; + } + static void setPriceListener(@NonNull OnPriceReceivedListener listener) { sPriceListener = new WeakReference<>(listener); @@ -317,9 +332,6 @@ public final class Sponsored case TYPE_BOOKING: requestHotelInfo(id, locale, policy); break; - case TYPE_GEOCHAT: -// TODO: request geochat info - break; case TYPE_OPENTABLE: // TODO: request opentable info break; diff --git a/android/src/com/mapswithme/util/statistics/PlacePageTracker.java b/android/src/com/mapswithme/util/statistics/PlacePageTracker.java index d571dc3fe5..938ab03ffe 100644 --- a/android/src/com/mapswithme/util/statistics/PlacePageTracker.java +++ b/android/src/com/mapswithme/util/statistics/PlacePageTracker.java @@ -55,7 +55,7 @@ public class PlacePageTracker { Sponsored sponsored = mPlacePageView.getSponsored(); if (sponsored != null) - Statistics.INSTANCE.trackSponsoredOpenEvent(sponsored.getType()); + Statistics.INSTANCE.trackSponsoredOpenEvent(sponsored); } } diff --git a/android/src/com/mapswithme/util/statistics/Statistics.java b/android/src/com/mapswithme/util/statistics/Statistics.java index 35d8714708..0a3e11d372 100644 --- a/android/src/com/mapswithme/util/statistics/Statistics.java +++ b/android/src/com/mapswithme/util/statistics/Statistics.java @@ -96,11 +96,9 @@ import static com.mapswithme.util.statistics.Statistics.EventParam.TYPE; import static com.mapswithme.util.statistics.Statistics.EventParam.VALUE; import static com.mapswithme.util.statistics.Statistics.ParamValue.BOOKING_COM; import static com.mapswithme.util.statistics.Statistics.ParamValue.CIAN; -import static com.mapswithme.util.statistics.Statistics.ParamValue.GEOCHAT; import static com.mapswithme.util.statistics.Statistics.ParamValue.HOLIDAY; import static com.mapswithme.util.statistics.Statistics.ParamValue.OPENTABLE; import static com.mapswithme.util.statistics.Statistics.ParamValue.SEARCH_BOOKING_COM; -import static com.mapswithme.util.statistics.Statistics.ParamValue.THOR; import static com.mapswithme.util.statistics.Statistics.ParamValue.VIATOR; public enum Statistics @@ -360,9 +358,7 @@ public enum Statistics static final String LOCALS_EXPERTS = "Locals.Maps.Me"; static final String SEARCH_RESTAURANTS = "Search.Restaurants"; static final String SEARCH_ATTRACTIONS = "Search.Attractions"; - static final String GEOCHAT = "Geochat"; static final String CIAN = "Cian.Ru"; - static final String THOR = "Thor"; static final String HOLIDAY = "Holiday"; public static final String NO_PRODUCTS = "no_products"; static final String ADD = "add"; @@ -762,11 +758,11 @@ public enum Statistics return network; } - public void trackSponsoredOpenEvent(@Sponsored.SponsoredType int type) + public void trackSponsoredOpenEvent(@NonNull Sponsored sponsored) { Statistics.ParameterBuilder builder = Statistics.params(); builder.add(NETWORK, getConnectionState()) - .add(PROVIDER, convertToSponsor(type)); + .add(PROVIDER, convertToSponsor(sponsored)); trackEvent(PP_SPONSORED_OPEN, builder.get()); } @@ -811,13 +807,22 @@ public enum Statistics .get()); } - public void trackSponsoredEvent(@NonNull String eventName, @Sponsored.SponsoredType int type) + public void trackSponsoredEventByType(@NonNull String eventName, @Sponsored.SponsoredType int type) { String provider = convertToSponsor(type); trackEvent(eventName, Statistics.params().add(PROVIDER, provider).get()); MyTracker.trackEvent(eventName + "_" + provider); } + @NonNull + private static String convertToSponsor(@NonNull Sponsored sponsored) + { + if (sponsored.getType() == Sponsored.TYPE_PARTNER) + return sponsored.getPartnerName(); + + return convertToSponsor(sponsored.getType()); + } + @NonNull private static String convertToSponsor(@Sponsored.SponsoredType int type) { @@ -827,14 +832,10 @@ public enum Statistics return BOOKING_COM; case Sponsored.TYPE_VIATOR: return VIATOR; - case Sponsored.TYPE_GEOCHAT: - return GEOCHAT; case Sponsored.TYPE_OPENTABLE: return OPENTABLE; case Sponsored.TYPE_CIAN: return CIAN; - case Sponsored.TYPE_THOR: - return THOR; case Sponsored.TYPE_HOLIDAY: return HOLIDAY; case Sponsored.TYPE_NONE: @@ -896,7 +897,7 @@ public enum Statistics { // Here we code category by means of rating. Statistics.INSTANCE.trackEvent(eventName, LocationHelper.INSTANCE.getLastKnownLocation(), - Statistics.params().add(PROVIDER, convertToSponsor(sponsoredObj.getType())) + Statistics.params().add(PROVIDER, convertToSponsor(sponsoredObj)) .add(CATEGORY, sponsoredObj.getRating()) .add(OBJECT_LAT, mapObject.getLat()) .add(OBJECT_LON, mapObject.getLon()).get()); diff --git a/configure.sh b/configure.sh index 1d2b2d72a6..c1b6fe616e 100755 --- a/configure.sh +++ b/configure.sh @@ -92,6 +92,17 @@ else #define PASSPORT_URL "" #define PASSPORT_APP_NAME "" #define UGC_URL "" +#define MAX_PARTNERS_COUNT 0 +#define PARTNER1_NAME "" +#define PARTNER1_BANNER_PLACEMENT_ID "" +#define PARTNER2_NAME "" +#define PARTNER2_BANNER_PLACEMENT_ID "" +#define PARTNER3_NAME "" +#define PARTNER3_BANNER_PLACEMENT_ID "" +#define PARTNER4_NAME "" +#define PARTNER4_BANNER_PLACEMENT_ID "" +#define PARTNER5_NAME "" +#define PARTNER5_BANNER_PLACEMENT_ID "" ' > "$PRIVATE_HEADER" echo 'ext { diff --git a/indexer/ftypes_sponsored.cpp b/indexer/ftypes_sponsored.cpp index 5ac582c696..07f2eb2cb4 100644 --- a/indexer/ftypes_sponsored.cpp +++ b/indexer/ftypes_sponsored.cpp @@ -1,6 +1,14 @@ #include "indexer/ftypes_sponsored.hpp" #include "indexer/classificator.hpp" +#include "indexer/feature.hpp" +#include "indexer/feature_data.hpp" + +#include "base/string_utils.hpp" + +#include "private.h" + +#include namespace ftypes { @@ -8,4 +16,24 @@ BaseSponsoredChecker::BaseSponsoredChecker(std::string const & sponsoredType) { m_types.push_back(classif().GetTypeByPath({"sponsored", sponsoredType})); } + +SponsoredPartnerChecker::SponsoredPartnerChecker() +{ + Classificator const & c = classif(); + for (size_t i = 1; i <= MAX_PARTNERS_COUNT; i++) + m_types.push_back(c.GetTypeByPath({"sponsored", "partner" + strings::to_string(i)})); +} + +int SponsoredPartnerChecker::GetPartnerIndex(FeatureType const & ft) const +{ + auto const types = feature::TypesHolder(ft); + int index = 0; + for (auto t : m_types) + { + if (std::find(types.begin(), types.end(), PrepareToMatch(t, 2 /* level */)) != types.end()) + return index; + index++; + } + return -1; +} } // namespace ftypes diff --git a/indexer/ftypes_sponsored.hpp b/indexer/ftypes_sponsored.hpp index 1bf51ff3d0..ad9ee026e9 100644 --- a/indexer/ftypes_sponsored.hpp +++ b/indexer/ftypes_sponsored.hpp @@ -21,8 +21,18 @@ protected: SPONSORED_CHECKER(IsBookingChecker, "booking"); SPONSORED_CHECKER(IsOpentableChecker, "opentable"); SPONSORED_CHECKER(IsViatorChecker, "viator"); -SPONSORED_CHECKER(IsThorChecker, "thor"); SPONSORED_CHECKER(IsHolidayChecker, "holiday"); #undef SPONSORED_CHECKER + +class SponsoredPartnerChecker : public BaseChecker +{ +protected: + SponsoredPartnerChecker(); + +public: + int GetPartnerIndex(FeatureType const & ft) const; + + DECLARE_CHECKER_INSTANCE(SponsoredPartnerChecker); +}; } // namespace ftypes diff --git a/iphone/Maps/Categories/UIColor+MapsMeColor.h b/iphone/Maps/Categories/UIColor+MapsMeColor.h index 8a99a088ad..c474b1bdc4 100644 --- a/iphone/Maps/Categories/UIColor+MapsMeColor.h +++ b/iphone/Maps/Categories/UIColor+MapsMeColor.h @@ -44,7 +44,7 @@ + (UIColor *)ratingYellow; + (UIColor *)ratingLightGreen; + (UIColor *)ratingGreen; -+ (UIColor *)thorBackground; ++ (UIColor *)partner1Background; + (UIColor *)colorWithName:(NSString *)colorName; diff --git a/iphone/Maps/Categories/UIColor+MapsMeColor.mm b/iphone/Maps/Categories/UIColor+MapsMeColor.mm index 47317e5b9f..07797cbfc7 100644 --- a/iphone/Maps/Categories/UIColor+MapsMeColor.mm +++ b/iphone/Maps/Categories/UIColor+MapsMeColor.mm @@ -344,9 +344,9 @@ UIColor * color(SEL cmd) return [UIColor colorWithRed:scaled(67) green:scaled(160) blue:scaled(71) alpha:alpha100]; } -+ (UIColor *)thorBackground ++ (UIColor *)partner1Background { - return [UIColor colorWithRed:scaled(215) green:scaled(67) blue:scaled(19) alpha:alpha100]; + return [UIColor colorWithRed:scaled(255) green:scaled(218) blue:scaled(0) alpha:alpha100]; } + (UIColor *)bannerBackground diff --git a/iphone/Maps/Common/Statistics/StatisticsStrings.h b/iphone/Maps/Common/Statistics/StatisticsStrings.h index 501f0f4cd5..434a059e0d 100644 --- a/iphone/Maps/Common/Statistics/StatisticsStrings.h +++ b/iphone/Maps/Common/Statistics/StatisticsStrings.h @@ -314,7 +314,6 @@ static NSString * const kStatTTSSettings = @"TTS settings"; static NSString * const kStatTable = @"Table"; static NSString * const kStatTags = @"tags"; static NSString * const kStatTaxi = @"Taxi"; -static NSString * const kStatThor = @"Thor"; static NSString * const kStatThingsToDo = @"Things to do"; static NSString * const kStatToLocation = @"to_location"; static NSString * const kStatToMyPosition = @"To my position"; diff --git a/iphone/Maps/Images.xcassets/Place Page/ic_28px_logo_partner1.imageset/Contents.json b/iphone/Maps/Images.xcassets/Place Page/ic_28px_logo_partner1.imageset/Contents.json new file mode 100644 index 0000000000..f20f4fa5f9 --- /dev/null +++ b/iphone/Maps/Images.xcassets/Place Page/ic_28px_logo_partner1.imageset/Contents.json @@ -0,0 +1,15 @@ +{ + "images" : [ + { + "idiom" : "universal", + "filename" : "ic_28px_logo_partner1.pdf" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + }, + "properties" : { + "template-rendering-intent" : "template" + } +} \ No newline at end of file diff --git a/iphone/Maps/Images.xcassets/Place Page/ic_28px_logo_partner1.imageset/ic_28px_logo_partner1.pdf b/iphone/Maps/Images.xcassets/Place Page/ic_28px_logo_partner1.imageset/ic_28px_logo_partner1.pdf new file mode 100644 index 0000000000000000000000000000000000000000..3b4a499c8c0e6f3702c6018db4d71c760356632b GIT binary patch literal 5862 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 diff --git a/iphone/Maps/Images.xcassets/Place Page/ic_28px_logo_thor.imageset/ic_28px_logo_thor@2x.png b/iphone/Maps/Images.xcassets/Place Page/ic_28px_logo_thor.imageset/ic_28px_logo_thor@2x.png deleted file mode 100644 index 81b8cf006f6198b7983c8074a1198d09af63507d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 394 zcmeAS@N?(olHy`uVBq!ia0vp^79h;Q1|(OsS<5jnFa~?H#*s^X_jt{pJ6;-}647?C17*TrzE@-}36p zN>3L~D}!EMnMYFJE6m;%_A;+Y7SjE2v?_tGX%<`C$M*9M!i)B@rLkB<{DlCCN zbdGp<$JW?`!c7Nm%xgK|+vCZz$B|b{^&ji+iOllzR9W+s?%yeW=y@vn16$panX^A~ zJaF-Ppdd5<&N-LqOX@GSm2Y3IYRl%HU~E1)Q2%A=2Dy{Z=J6geVr)FWqN;p7qmNsH zxRL$Nmj@P1slO=9B9Q-X>A`+!%|`!%nbALQuuT3e@kLR(R>dTVep#}fztlUg@=lj8FpL>IUHx3vIVCg!04t5HN&o-= diff --git a/iphone/Maps/Images.xcassets/Place Page/ic_28px_logo_thor.imageset/ic_28px_logo_thor@3x.png b/iphone/Maps/Images.xcassets/Place Page/ic_28px_logo_thor.imageset/ic_28px_logo_thor@3x.png deleted file mode 100644 index 99091779b51554e0a28992f53b1dfae9c813afe5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 591 zcmV-V0)-59rHfgn3es& z+HJ*riXLWdJ#6~K^WO)QrxCP`d0BfJLFZ})O}8_g7&QC(*u%DeLbI=hDjJ9ln(cW< zquVzy@bA!U&$~3bJHmzkC}nuwV>j2(2Qz5!^G@8mj8BLSntp@v=RM)>RUG1vLDQ{+ zCdyabUpHvj&apq?_9iY38n!Oh6E`p60D&{;cdR7tt)PX#8MK8;;?@-qIdld+z*6GQ zhxmnn8T1m(33u+}+@N8rr}*E6COQU9x4(Fc)&JaE!X5?&O}`kQv7ERy!WjZ*&^~Ho zH{Qb+Tw?~kKs5HeU!#v}%%B5o8q}Z$HK;)i>I`a7gBtW0X?JX~tAj2g!Vyl)8x!Dir_#002ovPDHLkV1j{|91H*e diff --git a/iphone/Maps/UI/PlacePage/MWMPlacePageData.h b/iphone/Maps/UI/PlacePage/MWMPlacePageData.h index b72cc9377c..e4bfa3651e 100644 --- a/iphone/Maps/UI/PlacePage/MWMPlacePageData.h +++ b/iphone/Maps/UI/PlacePage/MWMPlacePageData.h @@ -190,6 +190,10 @@ using CianIsReady = void (^)(NSArray * items); - (NSURL *)URLToAllReviews; - (NSArray *)photos; +// Partners +- (NSString *)partnerName; +- (int)partnerIndex; + // UGC - (ftraits::UGCRatingCategories)ugcRatingCategories; - (void)setUGCUpdateFrom:(MWMUGCReviewModel *)reviewModel; @@ -248,7 +252,7 @@ using CianIsReady = void (^)(NSArray * items); - (BOOL)isOpentable; - (BOOL)isViator; - (BOOL)isCian; -- (BOOL)isThor; +- (BOOL)isPartner; - (BOOL)isHolidayObject; - (BOOL)isBookingSearch; - (BOOL)isHTMLDescription; diff --git a/iphone/Maps/UI/PlacePage/MWMPlacePageData.mm b/iphone/Maps/UI/PlacePage/MWMPlacePageData.mm index ba02c4fde6..aba6ec5bbf 100644 --- a/iphone/Maps/UI/PlacePage/MWMPlacePageData.mm +++ b/iphone/Maps/UI/PlacePage/MWMPlacePageData.mm @@ -583,7 +583,7 @@ NSString * const kUserDefaultsLatLonAsDMSKey = @"UserDefaultsLatLonAsDMS"; - (NSString *)bookingApproximatePricing { return self.isBooking ? @(m_info.GetApproximatePricing().c_str()) : nil; } - (NSURL *)sponsoredURL { - if (m_info.IsSponsored()) + if (m_info.IsSponsored() && !m_info.GetSponsoredUrl().empty()) { auto urlString = [@(m_info.GetSponsoredUrl().c_str()) stringByAddingPercentEncodingWithAllowedCharacters:NSCharacterSet @@ -702,6 +702,18 @@ NSString * const kUserDefaultsLatLonAsDMSKey = @"UserDefaultsLatLonAsDMS"; return _photos; } +#pragma mark - Partners + +- (NSString *)partnerName +{ + return m_info.IsSponsored() ? @(m_info.GetPartnerName().c_str()) : nil; +} + +- (int)partnerIndex +{ + return m_info.IsSponsored() ? m_info.GetPartnerIndex() : -1; +} + #pragma mark - UGC - (ftraits::UGCRatingCategories)ugcRatingCategories { return m_info.GetRatingCategories(); } @@ -824,7 +836,7 @@ NSString * const kUserDefaultsLatLonAsDMSKey = @"UserDefaultsLatLonAsDMS"; } } -#pragma mark - Helpres +#pragma mark - Helpers - (NSString *)phoneNumber { return @(m_info.GetPhone().c_str()); } - (BOOL)isBookmark { return m_info.IsBookmark(); } @@ -833,7 +845,7 @@ NSString * const kUserDefaultsLatLonAsDMSKey = @"UserDefaultsLatLonAsDMS"; - (BOOL)isOpentable { return m_info.GetSponsoredType() == SponsoredType::Opentable; } - (BOOL)isViator { return m_info.GetSponsoredType() == SponsoredType::Viator; } - (BOOL)isCian { return m_info.GetSponsoredType() == SponsoredType::Cian; } -- (BOOL)isThor { return m_info.GetSponsoredType() == SponsoredType::Thor; } +- (BOOL)isPartner { return m_info.GetSponsoredType() == SponsoredType::Partner; } - (BOOL)isHolidayObject { return m_info.GetSponsoredType() == SponsoredType::Holiday; } - (BOOL)isBookingSearch { return !m_info.GetBookingSearchUrl().empty(); } - (BOOL)isMyPosition { return m_info.IsMyPosition(); } diff --git a/iphone/Maps/UI/PlacePage/MWMPlacePageManager.mm b/iphone/Maps/UI/PlacePage/MWMPlacePageManager.mm index 615153f243..da0f44975c 100644 --- a/iphone/Maps/UI/PlacePage/MWMPlacePageManager.mm +++ b/iphone/Maps/UI/PlacePage/MWMPlacePageManager.mm @@ -46,9 +46,9 @@ void logSponsoredEvent(MWMPlacePageData * data, NSString * eventName) stat[kStatRestaurant] = data.sponsoredId; stat[kStatRestaurantLocation] = makeLocationEventValue(latLon.lat, latLon.lon); } - else if (data.isThor) + else if (data.isPartner) { - stat[kStatProvider] = kStatThor; + stat[kStatProvider] = data.partnerName; stat[kStatCategory] = @(data.ratingRawValue); stat[kStatObjectLat] = @(latLon.lat); stat[kStatObjectLon] = @(latLon.lon); @@ -255,8 +255,8 @@ void logSponsoredEvent(MWMPlacePageData * data, NSString * eventName) parameters[kStatProvider] = kStatBooking; else if (data.isCian) parameters[kStatProvider] = kStatCian; - else if (data.isThor) - parameters[kStatProvider] = kStatThor; + else if (data.isPartner) + parameters[kStatProvider] = data.partnerName; else if (data.isHolidayObject) parameters[kStatProvider] = kStatHoliday; @@ -500,14 +500,14 @@ void logSponsoredEvent(MWMPlacePageData * data, NSString * eventName) [self.ownerViewController openUrl:url]; } -- (void)openThor +- (void)openPartner { auto data = self.data; if (!data) return; logSponsoredEvent(data, kStatPlacePageSponsoredActionButtonClick); NSURL * url = data.sponsoredURL; - NSAssert(url, @"Thor url can't be nil!"); + NSAssert(url, @"Partner url can't be nil!"); [self.ownerViewController openUrl:url]; } diff --git a/iphone/Maps/UI/PlacePage/MWMPlacePageProtocol.h b/iphone/Maps/UI/PlacePage/MWMPlacePageProtocol.h index 491a9087ae..472d8a8d77 100644 --- a/iphone/Maps/UI/PlacePage/MWMPlacePageProtocol.h +++ b/iphone/Maps/UI/PlacePage/MWMPlacePageProtocol.h @@ -19,7 +19,7 @@ - (void)book:(BOOL)isDecription; - (void)searchBookingHotels; -- (void)openThor; +- (void)openPartner; - (void)apiBack; - (void)downloadSelectedArea; diff --git a/iphone/Maps/UI/PlacePage/PlacePageLayout/ActionBar/MWMActionBarButton.h b/iphone/Maps/UI/PlacePage/PlacePageLayout/ActionBar/MWMActionBarButton.h index 548ce197d8..1655ddb108 100644 --- a/iphone/Maps/UI/PlacePage/PlacePageLayout/ActionBar/MWMActionBarButton.h +++ b/iphone/Maps/UI/PlacePage/PlacePageLayout/ActionBar/MWMActionBarButton.h @@ -13,11 +13,11 @@ enum class EButton // Required button's order More, AddStop, RemoveStop, - Thor, + Partner, Spacer }; -NSString * titleForButton(EButton type, BOOL isSelected); +NSString * titleForButton(EButton type, int partnerIndex, BOOL isSelected); @class MWMActionBarButton; @class MWMCircularProgress; @@ -35,10 +35,11 @@ NSString * titleForButton(EButton type, BOOL isSelected); + (void)addButtonToSuperview:(UIView *)view delegate:(id)delegate buttonType:(EButton)type + partnerIndex:(int)partnerIndex isSelected:(BOOL)isSelected; - (EButton)type; - (MWMCircularProgress *)mapDownloadProgress; - +- (int)partnerIndex; @end diff --git a/iphone/Maps/UI/PlacePage/PlacePageLayout/ActionBar/MWMActionBarButton.mm b/iphone/Maps/UI/PlacePage/PlacePageLayout/ActionBar/MWMActionBarButton.mm index 59c6f82d38..9e8108eb0c 100644 --- a/iphone/Maps/UI/PlacePage/PlacePageLayout/ActionBar/MWMActionBarButton.mm +++ b/iphone/Maps/UI/PlacePage/PlacePageLayout/ActionBar/MWMActionBarButton.mm @@ -3,7 +3,13 @@ #import "MWMButton.h" #import "MWMCircularProgress.h" -NSString * titleForButton(EButton type, BOOL isSelected) +NSString * titleForPartner(int partnerIndex) +{ + NSString * str = [NSString stringWithFormat:@"sponsored_partner%d_action", partnerIndex + 1]; + return L(str); +} + +NSString * titleForButton(EButton type, int partnerIndex, BOOL isSelected) { switch (type) { @@ -32,13 +38,28 @@ NSString * titleForButton(EButton type, BOOL isSelected) return L(@"placepage_add_stop"); case EButton::RemoveStop: return L(@"placepage_remove_stop"); - case EButton::Thor: - return L(@"sponsored_thor_gather"); + case EButton::Partner: + return titleForPartner(partnerIndex); case EButton::Spacer: return nil; } } +NSString * imageNameForPartner(int partnerIndex) +{ + return [NSString stringWithFormat:@"ic_28px_logo_partner%d", partnerIndex + 1]; +} + +UIColor * textColorForPartner(int partnerIndex) +{ + return UIColor.blackColor; +} + +UIColor * backgroundColorForPartner(int partnerIndex) +{ + return UIColor.partner1Background; +} + @interface MWMActionBarButton () @property (weak, nonatomic) IBOutlet MWMButton * button; @@ -47,6 +68,7 @@ NSString * titleForButton(EButton type, BOOL isSelected) @property (weak, nonatomic) id delegate; @property (nonatomic) EButton type; @property(nonatomic) MWMCircularProgress * mapDownloadProgress; +@property (nonatomic) int partnerIndex; @property(nonatomic) UIView * progressWrapper; @property(weak, nonatomic) IBOutlet UIView * extraBackground; @@ -63,7 +85,7 @@ NSString * titleForButton(EButton type, BOOL isSelected) - (void)configButton:(BOOL)isSelected { - self.label.text = titleForButton(self.type, isSelected); + self.label.text = titleForButton(self.type, self.partnerIndex, isSelected); self.extraBackground.hidden = YES; switch (self.type) { @@ -146,18 +168,19 @@ NSString * titleForButton(EButton type, BOOL isSelected) [self.button removeFromSuperview]; [self.label removeFromSuperview]; break; - case EButton::Thor: - [self.button setImage:[UIImage imageNamed:@"ic_28px_logo_thor"] forState:UIControlStateNormal]; - self.label.textColor = UIColor.whiteColor; - self.backgroundColor = UIColor.thorBackground; + case EButton::Partner: + [self.button setImage:[UIImage imageNamed:imageNameForPartner(self.partnerIndex)] + forState:UIControlStateNormal]; + self.label.textColor = textColorForPartner(self.partnerIndex); + self.backgroundColor = backgroundColorForPartner(self.partnerIndex); break; - } } + (void)addButtonToSuperview:(UIView *)view delegate:(id)delegate buttonType:(EButton)type + partnerIndex:(int)partnerIndex isSelected:(BOOL)isSelected { if (view.subviews.count) @@ -166,6 +189,7 @@ NSString * titleForButton(EButton type, BOOL isSelected) [NSBundle.mainBundle loadNibNamed:[self className] owner:nil options:nil].firstObject; button.delegate = delegate; button.type = type; + button.partnerIndex = partnerIndex; [view addSubview:button]; [button configButton:isSelected]; } diff --git a/iphone/Maps/UI/PlacePage/PlacePageLayout/ActionBar/MWMPlacePageActionBar.h b/iphone/Maps/UI/PlacePage/PlacePageLayout/ActionBar/MWMPlacePageActionBar.h index 3f5050516e..51df3c2cfd 100644 --- a/iphone/Maps/UI/PlacePage/PlacePageLayout/ActionBar/MWMPlacePageActionBar.h +++ b/iphone/Maps/UI/PlacePage/PlacePageLayout/ActionBar/MWMPlacePageActionBar.h @@ -6,7 +6,7 @@ - (BOOL)isBookmark; - (BOOL)isOpentable; -- (BOOL)isThor; +- (BOOL)isPartner; - (BOOL)isBooking; - (BOOL)isBookingSearch; - (BOOL)isApi; @@ -15,6 +15,8 @@ - (NSString *)title; - (NSString *)subtitle; - (NSString *)phoneNumber; +- (int)partnerIndex; +- (NSURL *)sponsoredURL; @end diff --git a/iphone/Maps/UI/PlacePage/PlacePageLayout/ActionBar/MWMPlacePageActionBar.mm b/iphone/Maps/UI/PlacePage/PlacePageLayout/ActionBar/MWMPlacePageActionBar.mm index e8d33787cf..a2d7770c71 100644 --- a/iphone/Maps/UI/PlacePage/PlacePageLayout/ActionBar/MWMPlacePageActionBar.mm +++ b/iphone/Maps/UI/PlacePage/PlacePageLayout/ActionBar/MWMPlacePageActionBar.mm @@ -53,8 +53,9 @@ extern NSString * const kAlohalyticsTapEventKey; BOOL const isBooking = [data isBooking]; BOOL const isOpentable = [data isOpentable]; BOOL const isBookingSearch = [data isBookingSearch]; - BOOL const isThor = [data isThor]; - BOOL const isSponsored = isBooking || isOpentable || isBookingSearch || isThor; + BOOL const isPartner = [data isPartner] && [data sponsoredURL] != nil; + int const partnerIndex = isPartner ? [data partnerIndex] : -1; + BOOL const isSponsored = isBooking || isOpentable || isBookingSearch || isPartner; BOOL const isPhoneCallAvailable = [AppInfo sharedInfo].canMakeCalls && [data phoneNumber].length > 0; BOOL const isApi = [data isApi]; @@ -70,8 +71,8 @@ extern NSString * const kAlohalyticsTapEventKey; sponsoredButton = EButton::Booking; else if (isOpentable) sponsoredButton = EButton::Opentable; - else if (isThor) - sponsoredButton = EButton::Thor; + else if (isPartner) + sponsoredButton = EButton::Partner; BOOL thereAreExtraButtons = true; if (isRoutePoint) @@ -219,6 +220,7 @@ extern NSString * const kAlohalyticsTapEventKey; [MWMActionBarButton addButtonToSuperview:v delegate:self buttonType:type + partnerIndex:partnerIndex isSelected:type == EButton::Bookmark ? self.isBookmark : NO]; } } @@ -299,7 +301,7 @@ extern NSString * const kAlohalyticsTapEventKey; case EButton::More: [self showActionSheet]; break; case EButton::AddStop: [delegate addStop]; break; case EButton::RemoveStop: [delegate removeStop]; break; - case EButton::Thor: [delegate openThor]; break; + case EButton::Partner: [delegate openPartner]; break; case EButton::Spacer: break; } } @@ -319,7 +321,7 @@ extern NSString * const kAlohalyticsTapEventKey; for (auto const buttonType : m_additionalButtons) { BOOL const isSelected = buttonType == EButton::Bookmark ? [data isBookmark] : NO; - if (NSString * title = titleForButton(buttonType, isSelected)) + if (NSString * title = titleForButton(buttonType, [data partnerIndex], isSelected)) [titles addObject:title]; else NSAssert(false, @"Title can't be nil!"); diff --git a/map/framework.cpp b/map/framework.cpp index 903acd0b57..3a9212f003 100644 --- a/map/framework.cpp +++ b/map/framework.cpp @@ -899,14 +899,13 @@ void Framework::FillInfoFromFeatureType(FeatureType const & ft, place_page::Info info.SetSponsoredType(SponsoredType::Cian); info.SetSponsoredUrl(cian::Api::GetMainPageUrl()); } - else if (ftypes::IsThorChecker::Instance()(ft) && - !info.GetMetadata().Get(feature::Metadata::FMD_RATING).empty()) + else if (ftypes::SponsoredPartnerChecker::Instance()(ft)) { - info.SetSponsoredType(place_page::SponsoredType::Thor); - auto const & url = info.GetMetadata().Get(feature::Metadata::FMD_WEBSITE); + info.SetSponsoredType(place_page::SponsoredType::Partner); + auto const & url = info.GetMetadata().Get(feature::Metadata::FMD_BANNER_URL); info.SetSponsoredUrl(url); info.SetSponsoredDescriptionUrl(url); - GetPlatform().GetMarketingService().SendPushWooshTag(marketing::kSponsoredThorDiscovered); + info.SetPartnerIndex(ftypes::SponsoredPartnerChecker::Instance().GetPartnerIndex(ft)); } else if (ftypes::IsHolidayChecker::Instance()(ft) && !info.GetMetadata().Get(feature::Metadata::FMD_RATING).empty()) @@ -2243,6 +2242,11 @@ void Framework::OnTapEvent(TapEvent const & tapEvent) if (mwmInfo) kv["mwmVersion"] = strings::to_string(mwmInfo->GetVersion()); } + else if (info.GetSponsoredType() == SponsoredType::Partner) + { + if (!info.GetPartnerName().empty()) + kv["partner"] = info.GetPartnerName(); + } // Older version of statistics used "$GetUserMark" event. alohalytics::Stats::Instance().LogEvent("$SelectMapObject", kv, diff --git a/map/place_page_info.cpp b/map/place_page_info.cpp index 41ab2e85ed..37fd32361c 100644 --- a/map/place_page_info.cpp +++ b/map/place_page_info.cpp @@ -13,11 +13,22 @@ #include +#include "private.h" + namespace place_page { namespace { auto constexpr kTopRatingBound = 10.0f; + +std::string GetPartnerNameByIndex(int partnerIndex) +{ + static std::vector kIds = {PARTNER1_NAME, PARTNER2_NAME, PARTNER3_NAME, + PARTNER4_NAME, PARTNER5_NAME}; + if (partnerIndex < 0 || partnerIndex >= kIds.size()) + return {}; + return kIds[partnerIndex]; +} } // namespace char const * const Info::kSubtitleSeparator = " • "; @@ -274,6 +285,12 @@ vector Info::GetBanners() const return m_adsEngine->GetBanners(m_types, m_topmostCountryIds, languages::GetCurrentNorm()); } +void Info::SetPartnerIndex(int index) +{ + m_partnerIndex = index; + m_partnerName = GetPartnerNameByIndex(m_partnerIndex); +} + namespace rating { namespace diff --git a/map/place_page_info.hpp b/map/place_page_info.hpp index bf449c0eb0..b7e11cb96a 100644 --- a/map/place_page_info.hpp +++ b/map/place_page_info.hpp @@ -37,10 +37,9 @@ enum class SponsoredType None, Booking, Opentable, - Geochat, Viator, Cian, - Thor, + Partner, Holiday }; @@ -143,6 +142,11 @@ public: SponsoredType GetSponsoredType() const { return m_sponsoredType; } bool IsPreviewExtended() const { return m_sponsoredType == SponsoredType::Viator; } + /// Partners + int GetPartnerIndex() const { return m_partnerIndex; } + std::string const & GetPartnerName() const { return m_partnerName; } + void SetPartnerIndex(int index); + /// Feature status void SetFeatureStatus(osm::Editor::FeatureStatus const status) { m_featureStatus = status; } @@ -276,6 +280,10 @@ private: std::string m_localsUrl; LocalsStatus m_localsStatus = LocalsStatus::NotAvailable; + /// Partners + int m_partnerIndex = -1; + std::string m_partnerName; + feature::TypesHolder m_sortedTypes; }; diff --git a/partners_api/mopub_ads.cpp b/partners_api/mopub_ads.cpp index 5487536ee3..e407df5830 100644 --- a/partners_api/mopub_ads.cpp +++ b/partners_api/mopub_ads.cpp @@ -1,5 +1,9 @@ #include "partners_api/mopub_ads.hpp" +#include "base/string_utils.hpp" + +#include "private.h" + namespace { #if defined(OMIM_OS_IPHONE) @@ -13,6 +17,14 @@ namespace auto const kNonTourismPlacementId = "94b8d70370a643929aa4c8c764d25e5b"; auto const kSponsoredBannerPlacementId = "2bab47102d38485996788ab9b602ce2c"; #endif + +bool IsValidPlacementId(std::string const & placementId) +{ + return !placementId.empty(); +} + +#define APPEND_PARTNER(type, placementId) \ + if (IsValidPlacementId(placementId)) AppendEntry({{"sponsored", type}}, placementId); } // namespace namespace ads @@ -73,6 +85,13 @@ Mopub::Mopub() kNonTourismPlacementId); AppendEntry({{"sponsored", "banner"}}, kSponsoredBannerPlacementId); + + // Partners. + APPEND_PARTNER("partner1", PARTNER1_BANNER_PLACEMENT_ID); + APPEND_PARTNER("partner2", PARTNER2_BANNER_PLACEMENT_ID); + APPEND_PARTNER("partner3", PARTNER3_BANNER_PLACEMENT_ID); + APPEND_PARTNER("partner4", PARTNER4_BANNER_PLACEMENT_ID); + APPEND_PARTNER("partner5", PARTNER5_BANNER_PLACEMENT_ID); } std::string Mopub::GetBannerIdForOtherTypes() const diff --git a/platform/marketing_service.cpp b/platform/marketing_service.cpp index 1ae4538b2a..5b02fa75ea 100644 --- a/platform/marketing_service.cpp +++ b/platform/marketing_service.cpp @@ -22,7 +22,6 @@ char const * const kRoutingTransitDiscovered = "routing_transit_discovered"; char const * const kEditorAddDiscovered = "editor_add_discovered"; char const * const kEditorEditDiscovered = "editor_edit_discovered"; char const * const kTrafficDiscovered = "traffic_discovered"; -char const * const kSponsoredThorDiscovered = "sponsored_thor_discovered"; // Events. char const * const kDownloaderMapActionFinished = "Downloader_Map_action_finished"; @@ -57,7 +56,7 @@ void MarketingService::ProcessFirstLaunch() kEditorAddDiscovered, kEditorEditDiscovered, - kTrafficDiscovered, kSponsoredThorDiscovered + kTrafficDiscovered }; for (auto const & tag : tags) diff --git a/platform/marketing_service.hpp b/platform/marketing_service.hpp index 8bfec5f379..bac4604c80 100644 --- a/platform/marketing_service.hpp +++ b/platform/marketing_service.hpp @@ -27,7 +27,6 @@ extern char const * const kRoutingTransitDiscovered; extern char const * const kEditorAddDiscovered; extern char const * const kEditorEditDiscovered; extern char const * const kTrafficDiscovered; -extern char const * const kSponsoredThorDiscovered; // Events. extern char const * const kDownloaderMapActionFinished;