From 6837b685335a30ab3861370926c17436d9e434c3 Mon Sep 17 00:00:00 2001 From: Arsentiy Milchakov Date: Tue, 18 Oct 2016 15:12:04 +0300 Subject: [PATCH 01/16] opentable is added into placepage --- indexer/ftypes_matcher.cpp | 12 ++++++++++++ indexer/ftypes_matcher.hpp | 8 ++++++++ map/framework.cpp | 17 +++++++++++------ map/place_page_info.cpp | 9 ++++----- map/place_page_info.hpp | 22 ++++++++++++++-------- 5 files changed, 49 insertions(+), 19 deletions(-) diff --git a/indexer/ftypes_matcher.cpp b/indexer/ftypes_matcher.cpp index dfe0a32004..59bac21c1c 100644 --- a/indexer/ftypes_matcher.cpp +++ b/indexer/ftypes_matcher.cpp @@ -476,6 +476,18 @@ IsFoodChecker const & IsFoodChecker::Instance() return instance; } +IsOpentableChecker::IsOpentableChecker() +{ + Classificator const & c = classif(); + m_types.push_back(c.GetTypeByPath({"sponsored", "opentable"})); +} + +IsOpentableChecker const & IsOpentableChecker::Instance() +{ + static IsOpentableChecker const inst; + return inst; +} + uint32_t GetPopulation(FeatureType const & ft) { uint32_t population = ft.GetPopulation(); diff --git a/indexer/ftypes_matcher.hpp b/indexer/ftypes_matcher.hpp index 17d1e77665..48d1dcfd97 100644 --- a/indexer/ftypes_matcher.hpp +++ b/indexer/ftypes_matcher.hpp @@ -184,6 +184,14 @@ public: static IsFoodChecker const & Instance(); }; +class IsOpentableChecker : public BaseChecker +{ + IsOpentableChecker(); + +public: + static IsOpentableChecker const & Instance(); +}; + /// Type of locality (do not change values and order - they have detalization order) /// COUNTRY < STATE < CITY < ... enum Type { NONE = -1, COUNTRY = 0, STATE, CITY, TOWN, VILLAGE, LOCALITY_COUNT }; diff --git a/map/framework.cpp b/map/framework.cpp index 110352c18a..2429def14d 100644 --- a/map/framework.cpp +++ b/map/framework.cpp @@ -789,17 +789,22 @@ void Framework::FillInfoFromFeatureType(FeatureType const & ft, place_page::Info if (ftypes::IsAddressObjectChecker::Instance()(ft)) info.m_address = GetAddressInfoAtPoint(feature::GetCenter(ft)).FormatHouseAndStreet(); - info.m_isHotel = ftypes::IsHotelChecker::Instance()(ft); if (ftypes::IsBookingChecker::Instance()(ft)) { - info.m_isSponsoredHotel = true; + info.m_sponsoredType = SponsoredType::Booking; string const & baseUrl = info.GetMetadata().Get(feature::Metadata::FMD_WEBSITE); - info.m_sponsoredBookingUrl = GetBookingApi().GetBookingUrl(baseUrl); + info.m_sponsoredUrl = GetBookingApi().GetBookingUrl(baseUrl); info.m_sponsoredDescriptionUrl = GetBookingApi().GetDescriptionUrl(baseUrl); } + else if (ftypes::IsOpentableChecker::Instance()(ft)) + { + info.m_sponsoredType = SponsoredType::Opentable; + info.m_sponsoredUrl = info.GetMetadata().Get(feature::Metadata::FMD_WEBSITE); + } + info.m_canEditOrAdd = featureStatus != osm::Editor::FeatureStatus::Obsolete && CanEditMap() && - !info.IsSponsoredHotel(); + !info.IsSponsored(); info.m_localizedWifiString = m_stringsBundle.GetString("wifi"); info.m_localizedRatingString = m_stringsBundle.GetString("place_page_booking_rating"); @@ -1979,7 +1984,7 @@ void Framework::ActivateMapSelection(bool needAnimation, df::SelectionShape::ESe CallDrapeFunction(bind(&df::DrapeEngine::SelectObject, _1, selectionType, info.GetMercator(), info.GetID(), needAnimation)); - SetDisplacementMode(DisplacementModeManager::SLOT_MAP_SELECTION, info.IsHotel() /* show */); + SetDisplacementMode(DisplacementModeManager::SLOT_MAP_SELECTION, ftypes::IsHotelChecker::Instance()(info.GetTypes()) /* show */); if (m_activateMapSelectionFn) m_activateMapSelectionFn(info); @@ -2055,7 +2060,7 @@ void Framework::OnTapEvent(TapEvent const & tapEvent) // Older version of statistics used "$GetUserMark" event. alohalytics::Stats::Instance().LogEvent("$SelectMapObject", kv, alohalytics::Location::FromLatLon(ll.lat, ll.lon)); - if (info.IsHotel()) + if (info.m_sponsoredType == SponsoredType::Booking) GetPlatform().SendMarketingEvent("Placepage_Hotel_book", {{"provider", "booking.com"}}); } diff --git a/map/place_page_info.cpp b/map/place_page_info.cpp index 8e63bc5803..2d5e30b1bf 100644 --- a/map/place_page_info.cpp +++ b/map/place_page_info.cpp @@ -16,8 +16,7 @@ char const * const Info::kPricingSymbol = "$"; bool Info::IsFeature() const { return m_featureID.IsValid(); } bool Info::IsBookmark() const { return m_bac.IsValid(); } bool Info::IsMyPosition() const { return m_isMyPosition; } -bool Info::IsSponsoredHotel() const { return m_isSponsoredHotel; } -bool Info::IsHotel() const { return m_isHotel; } +bool Info::IsSponsored() const { return m_sponsoredType != SponsoredType::None; } bool Info::ShouldShowAddPlace() const { auto const isPointOrBuilding = IsPointType() || IsBuilding(); @@ -116,12 +115,12 @@ BookmarkAndCategory Info::GetBookmarkAndCategory() const { return m_bac; } string Info::GetBookmarkCategoryName() const { return m_bookmarkCategoryName; } string const & Info::GetApiUrl() const { return m_apiUrl; } -string const & Info::GetSponsoredBookingUrl() const { return m_sponsoredBookingUrl; } +string const & Info::GetSponsoredUrl() const { return m_sponsoredUrl; } string const & Info::GetSponsoredDescriptionUrl() const {return m_sponsoredDescriptionUrl; } string Info::GetRatingFormatted() const { - if (!IsSponsoredHotel()) + if (!IsSponsored()) return string(); auto const r = GetMetadata().Get(feature::Metadata::FMD_RATING); @@ -140,7 +139,7 @@ string Info::GetRatingFormatted() const string Info::GetApproximatePricing() const { - if (!IsSponsoredHotel()) + if (!IsSponsored()) return string(); int pricing; diff --git a/map/place_page_info.hpp b/map/place_page_info.hpp index 2a150f4b43..29f9bc42be 100644 --- a/map/place_page_info.hpp +++ b/map/place_page_info.hpp @@ -14,6 +14,14 @@ #include "std/string.hpp" +enum class SponsoredType +{ + None, + Booking, + Opentable, + Geochat +}; + namespace place_page { class Info : public osm::MapObject @@ -28,8 +36,7 @@ public: bool IsFeature() const; bool IsBookmark() const; bool IsMyPosition() const; - bool IsSponsoredHotel() const; - bool IsHotel() const; + bool IsSponsored() const; bool ShouldShowAddPlace() const; bool ShouldShowAddBusiness() const; @@ -62,7 +69,7 @@ public: string GetBookmarkCategoryName() const; string const & GetApiUrl() const; - string const & GetSponsoredBookingUrl() const; + string const & GetSponsoredUrl() const; string const & GetSponsoredDescriptionUrl() const; /// @returns formatted rating string for booking object, or empty if it isn't booking object @@ -90,12 +97,11 @@ public: string m_apiUrl; /// Formatted feature address. string m_address; - /// Feature is a hotel. - bool m_isHotel = false; - /// Feature is a sponsored hotel. - bool m_isSponsoredHotel = false; + /// Sponsored type or None. + SponsoredType m_sponsoredType = SponsoredType::None; + /// Sponsored feature urls. - string m_sponsoredBookingUrl; + string m_sponsoredUrl; string m_sponsoredDescriptionUrl; /// Which country this MapObject is in. From 58d5238d1506e234491440e86d6ffcea5cf345ed Mon Sep 17 00:00:00 2001 From: Arsentiy Milchakov Date: Wed, 19 Oct 2016 14:16:49 +0300 Subject: [PATCH 02/16] generate opentable URL by using sponsored id --- configure.sh | 1 + generator/opentable_dataset.cpp | 1 - map/framework.cpp | 11 +++++++--- partners_api/booking_api.cpp | 2 +- partners_api/booking_api.hpp | 2 +- partners_api/opentable_api.cpp | 21 +++++++++++++++++++ partners_api/opentable_api.hpp | 12 +++++++++++ partners_api/partners_api.pro | 2 ++ .../partners_api_tests/booking_tests.cpp | 2 +- 9 files changed, 47 insertions(+), 7 deletions(-) create mode 100644 partners_api/opentable_api.cpp create mode 100644 partners_api/opentable_api.hpp diff --git a/configure.sh b/configure.sh index c764b0e5eb..973f91a1dd 100755 --- a/configure.sh +++ b/configure.sh @@ -52,6 +52,7 @@ else #define BOOKING_SECRET "" #define UBER_SERVER_TOKEN "" #define UBER_CLIENT_ID "" +#define OPENTABLE_AFFILATE_ID "" #define TRACKING_REALTIME_HOST "" #define TRACKING_REALTIME_PORT 0 #define TRACKING_HISTORICAL_HOST "" diff --git a/generator/opentable_dataset.cpp b/generator/opentable_dataset.cpp index 7892444bb0..499a2ef833 100644 --- a/generator/opentable_dataset.cpp +++ b/generator/opentable_dataset.cpp @@ -55,7 +55,6 @@ void OpentableDataset::PreprocessMatchedOsmObject(ObjectId const matchedObjId, F auto restaurant = GetObjectById(matchedObjId); auto & metadata = params.GetMetadata(); metadata.Set(feature::Metadata::FMD_SPONSORED_ID, strings::to_string(restaurant.m_id.Get())); - metadata.Set(feature::Metadata::FMD_WEBSITE, restaurant.m_descUrl); // params.AddAddress(restaurant.address); // TODO(mgsergio): addr:full ??? diff --git a/map/framework.cpp b/map/framework.cpp index 2429def14d..42f82a8551 100644 --- a/map/framework.cpp +++ b/map/framework.cpp @@ -74,6 +74,8 @@ #include "geometry/rect2d.hpp" #include "geometry/triangle2d.hpp" +#include "partners_api/opentable_api.hpp" + #include "base/logging.hpp" #include "base/math.hpp" #include "base/scope_guard.hpp" @@ -792,14 +794,17 @@ void Framework::FillInfoFromFeatureType(FeatureType const & ft, place_page::Info if (ftypes::IsBookingChecker::Instance()(ft)) { info.m_sponsoredType = SponsoredType::Booking; - string const & baseUrl = info.GetMetadata().Get(feature::Metadata::FMD_WEBSITE); - info.m_sponsoredUrl = GetBookingApi().GetBookingUrl(baseUrl); + auto const & baseUrl = info.GetMetadata().Get(feature::Metadata::FMD_WEBSITE); + info.m_sponsoredUrl = GetBookingApi().GetBookHotelUrl(baseUrl); info.m_sponsoredDescriptionUrl = GetBookingApi().GetDescriptionUrl(baseUrl); } else if (ftypes::IsOpentableChecker::Instance()(ft)) { info.m_sponsoredType = SponsoredType::Opentable; - info.m_sponsoredUrl = info.GetMetadata().Get(feature::Metadata::FMD_WEBSITE); + auto const & sponsoredId = info.GetMetadata().Get(feature::Metadata::FMD_SPONSORED_ID); + auto const & url = opentable::Api::GetBookTableUrl(sponsoredId); + info.m_sponsoredUrl = url; + info.m_sponsoredDescriptionUrl = url; } diff --git a/partners_api/booking_api.cpp b/partners_api/booking_api.cpp index 6bb2dc1a75..201f2cafbd 100644 --- a/partners_api/booking_api.cpp +++ b/partners_api/booking_api.cpp @@ -20,7 +20,7 @@ BookingApi::BookingApi() : m_affiliateId(BOOKING_AFFILIATE_ID), m_testingMode(fa m_apiUrl = "https://" + ss.str() + "@distribution-xml.booking.com/json/bookings."; } -string BookingApi::GetBookingUrl(string const & baseUrl, string const & /* lang */) const +string BookingApi::GetBookHotelUrl(string const & baseUrl, string const & /* lang */) const { return GetDescriptionUrl(baseUrl) + "#availability"; } diff --git a/partners_api/booking_api.hpp b/partners_api/booking_api.hpp index 4e92a8ca83..4804fefa7d 100644 --- a/partners_api/booking_api.hpp +++ b/partners_api/booking_api.hpp @@ -117,7 +117,7 @@ public: static constexpr const char kDefaultCurrency[1] = {0}; BookingApi(); - string GetBookingUrl(string const & baseUrl, string const & lang = string()) const; + string GetBookHotelUrl(string const & baseUrl, string const & lang = string()) const; string GetDescriptionUrl(string const & baseUrl, string const & lang = string()) const; inline void SetTestingMode(bool testing) { m_testingMode = testing; } diff --git a/partners_api/opentable_api.cpp b/partners_api/opentable_api.cpp new file mode 100644 index 0000000000..9454cef63b --- /dev/null +++ b/partners_api/opentable_api.cpp @@ -0,0 +1,21 @@ +#include "partners_api/opentable_api.hpp" + +#include "std/sstream.hpp" + +#include "private.h" + +namespace +{ + auto const kOpentableBaseUrl = "http://www.opentable.com/restaurant/profile/"; +} // namespace + +namespace opentable +{ +// static +string Api::GetBookTableUrl(string const & restaurantId) +{ + stringstream ss; + ss << kOpentableBaseUrl << restaurantId << "?ref=" << OPENTABLE_AFFILATE_ID; + return ss.str(); +} +} // namespace opentable diff --git a/partners_api/opentable_api.hpp b/partners_api/opentable_api.hpp new file mode 100644 index 0000000000..b298fafdd7 --- /dev/null +++ b/partners_api/opentable_api.hpp @@ -0,0 +1,12 @@ +#pragma once + +#include "std/string.hpp" + +namespace opentable +{ +class Api +{ +public: + static string GetBookTableUrl(string const & restaurantId); +}; +} // namespace opentable diff --git a/partners_api/partners_api.pro b/partners_api/partners_api.pro index e49f090dae..47cf571ac3 100644 --- a/partners_api/partners_api.pro +++ b/partners_api/partners_api.pro @@ -10,8 +10,10 @@ include($$ROOT_DIR/common.pri) SOURCES += \ booking_api.cpp \ + opentable_api.cpp \ uber_api.cpp \ HEADERS += \ booking_api.hpp \ + opentable_api.hpp \ uber_api.hpp \ diff --git a/partners_api/partners_api_tests/booking_tests.cpp b/partners_api/partners_api_tests/booking_tests.cpp index 05b28b25ae..86f3fcf54c 100644 --- a/partners_api/partners_api_tests/booking_tests.cpp +++ b/partners_api/partners_api_tests/booking_tests.cpp @@ -6,7 +6,7 @@ UNIT_TEST(Booking_SmokeTest) { BookingApi api; - string url = api.GetBookingUrl("http://someurl.com"); + string url = api.GetBookHotelUrl("http://someurl.com"); TEST(!url.empty(), ()); } From 9784492ae8db03a16bd94b7f6513bc94734bc766 Mon Sep 17 00:00:00 2001 From: VladiMihaylenko Date: Thu, 20 Oct 2016 17:13:55 +0300 Subject: [PATCH 03/16] [xcode] Fixed build. --- xcode/partners_api/partners_api.xcodeproj/project.pbxproj | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/xcode/partners_api/partners_api.xcodeproj/project.pbxproj b/xcode/partners_api/partners_api.xcodeproj/project.pbxproj index f251d085e7..db43d9a290 100644 --- a/xcode/partners_api/partners_api.xcodeproj/project.pbxproj +++ b/xcode/partners_api/partners_api.xcodeproj/project.pbxproj @@ -7,6 +7,8 @@ objects = { /* Begin PBXBuildFile section */ + F67E75251DB8F06F00D6741F /* opentable_api.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F67E75231DB8F06F00D6741F /* opentable_api.cpp */; }; + F67E75261DB8F06F00D6741F /* opentable_api.hpp in Headers */ = {isa = PBXBuildFile; fileRef = F67E75241DB8F06F00D6741F /* opentable_api.hpp */; }; F6B536401DA520E40067EEA5 /* booking_api.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F6B5363C1DA520E40067EEA5 /* booking_api.cpp */; }; F6B536411DA520E40067EEA5 /* booking_api.hpp in Headers */ = {isa = PBXBuildFile; fileRef = F6B5363D1DA520E40067EEA5 /* booking_api.hpp */; }; F6B536421DA520E40067EEA5 /* uber_api.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F6B5363E1DA520E40067EEA5 /* uber_api.cpp */; }; @@ -30,6 +32,8 @@ /* End PBXBuildFile section */ /* Begin PBXFileReference section */ + F67E75231DB8F06F00D6741F /* opentable_api.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = opentable_api.cpp; sourceTree = ""; }; + F67E75241DB8F06F00D6741F /* opentable_api.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = opentable_api.hpp; sourceTree = ""; }; F6B536341DA5209F0067EEA5 /* libpartners_api.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = libpartners_api.a; sourceTree = BUILT_PRODUCTS_DIR; }; F6B5363C1DA520E40067EEA5 /* booking_api.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = booking_api.cpp; sourceTree = ""; }; F6B5363D1DA520E40067EEA5 /* booking_api.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = booking_api.hpp; sourceTree = ""; }; @@ -102,6 +106,8 @@ F6B5363B1DA520B20067EEA5 /* partners_api */ = { isa = PBXGroup; children = ( + F67E75231DB8F06F00D6741F /* opentable_api.cpp */, + F67E75241DB8F06F00D6741F /* opentable_api.hpp */, F6B5363C1DA520E40067EEA5 /* booking_api.cpp */, F6B5363D1DA520E40067EEA5 /* booking_api.hpp */, F6B5363E1DA520E40067EEA5 /* uber_api.cpp */, @@ -153,6 +159,7 @@ isa = PBXHeadersBuildPhase; buildActionMask = 2147483647; files = ( + F67E75261DB8F06F00D6741F /* opentable_api.hpp in Headers */, F6B536411DA520E40067EEA5 /* booking_api.hpp in Headers */, F6B536431DA520E40067EEA5 /* uber_api.hpp in Headers */, ); @@ -252,6 +259,7 @@ F6B536421DA520E40067EEA5 /* uber_api.cpp in Sources */, F6B536471DA5213D0067EEA5 /* booking_tests.cpp in Sources */, F6B5366A1DA523060067EEA5 /* testingmain.cpp in Sources */, + F67E75251DB8F06F00D6741F /* opentable_api.cpp in Sources */, F6B536401DA520E40067EEA5 /* booking_api.cpp in Sources */, F6B536481DA5213D0067EEA5 /* uber_tests.cpp in Sources */, ); From c79a0ecc420d931b48235f25e072596a363896bf Mon Sep 17 00:00:00 2001 From: VladiMihaylenko Date: Thu, 20 Oct 2016 17:14:24 +0300 Subject: [PATCH 04/16] [ios] Opentable images. --- .../ic_opentable.imageset/Contents.json | 23 ++++++++++++++++++ .../ic_opentable.imageset/ic_opentable.png | Bin 0 -> 535 bytes .../ic_opentable.imageset/ic_opentable@2x.png | Bin 0 -> 1090 bytes .../ic_opentable.imageset/ic_opentable@3x.png | Bin 0 -> 1771 bytes 4 files changed, 23 insertions(+) create mode 100644 iphone/Maps/Images.xcassets/Place Page/ic_opentable.imageset/Contents.json create mode 100644 iphone/Maps/Images.xcassets/Place Page/ic_opentable.imageset/ic_opentable.png create mode 100644 iphone/Maps/Images.xcassets/Place Page/ic_opentable.imageset/ic_opentable@2x.png create mode 100644 iphone/Maps/Images.xcassets/Place Page/ic_opentable.imageset/ic_opentable@3x.png diff --git a/iphone/Maps/Images.xcassets/Place Page/ic_opentable.imageset/Contents.json b/iphone/Maps/Images.xcassets/Place Page/ic_opentable.imageset/Contents.json new file mode 100644 index 0000000000..13b56b543c --- /dev/null +++ b/iphone/Maps/Images.xcassets/Place Page/ic_opentable.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "idiom" : "universal", + "filename" : "ic_opentable.png", + "scale" : "1x" + }, + { + "idiom" : "universal", + "filename" : "ic_opentable@2x.png", + "scale" : "2x" + }, + { + "idiom" : "universal", + "filename" : "ic_opentable@3x.png", + "scale" : "3x" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + } +} \ No newline at end of file diff --git a/iphone/Maps/Images.xcassets/Place Page/ic_opentable.imageset/ic_opentable.png b/iphone/Maps/Images.xcassets/Place Page/ic_opentable.imageset/ic_opentable.png new file mode 100644 index 0000000000000000000000000000000000000000..dff6aa0a92d2f763bdcbaf2698a2da81e4f2deb8 GIT binary patch literal 535 zcmV+y0_gpTP)Px$(Md!>R7ef&mcL5_F%-vptx_EviY|gWxQGq~cXe_Q3Z;u%5u6;v!KMF&yWnak z5gb&|wSqb*2%X%zSOkAm94b^fKd)Zk2!zy%z^nd3MvKE5H8feO4rnB7pY6kCnKIXDkf(fU7$x2;7Pl!Z%e zGMms&l$m#JW;fKzN~3Krg?acgOk$goXBz$^rKoB8X;46`>7c9avXYwC5!mU=8{vef8ylTIs5b;JsEPXRN!|_=47_hnq@F zc?z!dB47L>TRN(WJwJladhKDYPY<8;1o5*Wr&2>ASXGhd4|yfYYf7y7<9dFU{XMKi zws+B=)7njkq5+ayumHEPqXg+2BYuSLj|*?IW0LzIwH26xUUm|CE)cCTTE5J0*hbJd zR|0#gk17p=@w~`mluBCq!4;6OoLR8N#*R#fc&RvgZ!tdbB;UszWvP( Zd;@U_ts~AOq?Z5y002ovPDHLkV1m4b>2Cl4 literal 0 HcmV?d00001 diff --git a/iphone/Maps/Images.xcassets/Place Page/ic_opentable.imageset/ic_opentable@2x.png b/iphone/Maps/Images.xcassets/Place Page/ic_opentable.imageset/ic_opentable@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..41dbe4d4271791d2131e3ed374b848bc99bbba48 GIT binary patch literal 1090 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 N002ovPDHLkV1f@dMfCsx literal 0 HcmV?d00001 From 197b5638d084e33a293bcd6d72a6efcf7d278105 Mon Sep 17 00:00:00 2001 From: VladiMihaylenko Date: Thu, 20 Oct 2016 17:14:55 +0300 Subject: [PATCH 05/16] [ios] Opentable color. --- iphone/Maps/UIColor+MapsMeColor.h | 1 + iphone/Maps/UIColor+MapsMeColor.mm | 5 +++++ 2 files changed, 6 insertions(+) diff --git a/iphone/Maps/UIColor+MapsMeColor.h b/iphone/Maps/UIColor+MapsMeColor.h index 4a097c165d..5c0c4810b7 100644 --- a/iphone/Maps/UIColor+MapsMeColor.h +++ b/iphone/Maps/UIColor+MapsMeColor.h @@ -33,6 +33,7 @@ + (UIColor *)alertBackground; + (UIColor *)blackOpaque; + (UIColor *)bookingBackground; ++ (UIColor *)opentableBackground; + (UIColor *)colorWithName:(NSString *)colorName; diff --git a/iphone/Maps/UIColor+MapsMeColor.mm b/iphone/Maps/UIColor+MapsMeColor.mm index 4b7670d31f..71945169c5 100644 --- a/iphone/Maps/UIColor+MapsMeColor.mm +++ b/iphone/Maps/UIColor+MapsMeColor.mm @@ -297,6 +297,11 @@ UIColor * color(SEL cmd) return [UIColor colorWithRed:scaled(25.) green:scaled(69.) blue:scaled(125.) alpha:alpha100]; } ++ (UIColor *)opentableBackground +{ + return [UIColor colorWithRed:scaled(218.) green:scaled(55) blue:scaled(67) alpha:alpha100]; +} + + (UIColor *)colorWithName:(NSString *)colorName { #pragma clang diagnostic push From ac813860e6bcd61cd31b07a328f3603e338ae7cb Mon Sep 17 00:00:00 2001 From: VladiMihaylenko Date: Thu, 20 Oct 2016 17:15:44 +0300 Subject: [PATCH 06/16] [ios] Statistic's keys for opentable. --- iphone/Maps/Statistics/StatisticsStrings.h | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/iphone/Maps/Statistics/StatisticsStrings.h b/iphone/Maps/Statistics/StatisticsStrings.h index f73cc36415..88ad207521 100644 --- a/iphone/Maps/Statistics/StatisticsStrings.h +++ b/iphone/Maps/Statistics/StatisticsStrings.h @@ -143,6 +143,7 @@ static NSString * const kStatOff = @"Off"; static NSString * const kStatOn = @"On"; static NSString * const kStatOpen = @"Open"; static NSString * const kStatOpenActionSheet = @"Open action sheet"; +static NSString * const kStatOpentable = @"Opentable.com"; static NSString * const kStatOpenSite = @"Open site"; static NSString * const kStatOrientation = @"Orientation"; static NSString * const kStatOther = @"Other"; @@ -152,6 +153,7 @@ static NSString * const kStatPlacePage = @"Place page"; static NSString * const kPlacePageHotelBook = @"Placepage_Hotel_book"; static NSString * const kPlacePageHotelDetails = @"Placepage_Hotel_details"; static NSString * const kStatPlacePageNonBuilding = @"placepage_nonbuilding"; +static NSString * const kPlacePageRestaurantBook = @"Placepage_Restaurant_book"; static NSString * const kStatPointToPoint = @"Point to point"; static NSString * const kStatPortrait = @"Portrait"; static NSString * const kStatProblem = @"Problem"; @@ -165,6 +167,9 @@ static NSString * const kStatRegular = @"Regular"; static NSString * const kStatRemove = @"Remove"; static NSString * const kStatRename = @"Rename"; static NSString * const kStatReport = @"Report"; +static NSString * const kStatRestaurant = @"restaurant"; +static NSString * const kStatRestaurantLat = @"restaurant_lat"; +static NSString * const kStatRestaurantLon = @"restaurant_lon"; static NSString * const kStatRetry = @"retry"; static NSString * const kStatRouting = @"routing"; static NSString * const kStatSave = @"Save"; From 0d5a084579ab2e1d9ad4340799148b6dc2f083bc Mon Sep 17 00:00:00 2001 From: VladiMihaylenko Date: Thu, 20 Oct 2016 17:15:55 +0300 Subject: [PATCH 07/16] [ios] Opentable. --- iphone/Maps/Classes/MWMActionBarButton.h | 1 + iphone/Maps/Classes/MWMActionBarButton.mm | 6 ++++ iphone/Maps/Classes/MWMPlacePageActionBar.h | 1 + iphone/Maps/Classes/MWMPlacePageActionBar.mm | 17 ++++++---- iphone/Maps/Classes/MWMPlacePageData.h | 7 ++-- iphone/Maps/Classes/MWMPlacePageData.mm | 29 +++++++++-------- iphone/Maps/Classes/MWMPlacePageEntity.h | 7 ++-- iphone/Maps/Classes/MWMPlacePageEntity.mm | 18 ++++++----- iphone/Maps/Classes/MWMPlacePageManager.mm | 29 +++++++++++++---- .../Maps/Classes/MWMPlacePageViewManager.mm | 32 +++++++++++++------ .../Maps/Classes/Share/MWMShareActivityItem.h | 2 +- .../Classes/Share/MWMShareActivityItem.mm | 2 +- 12 files changed, 99 insertions(+), 52 deletions(-) diff --git a/iphone/Maps/Classes/MWMActionBarButton.h b/iphone/Maps/Classes/MWMActionBarButton.h index b03175c775..5b5b56befd 100644 --- a/iphone/Maps/Classes/MWMActionBarButton.h +++ b/iphone/Maps/Classes/MWMActionBarButton.h @@ -2,6 +2,7 @@ enum class EButton // Required button's order { Api, Booking, + Opentable, Call, Bookmark, RouteFrom, diff --git a/iphone/Maps/Classes/MWMActionBarButton.mm b/iphone/Maps/Classes/MWMActionBarButton.mm index 1362d6b1ec..a34b9e242a 100644 --- a/iphone/Maps/Classes/MWMActionBarButton.mm +++ b/iphone/Maps/Classes/MWMActionBarButton.mm @@ -10,6 +10,7 @@ NSString * titleForButton(EButton type, BOOL isSelected) case EButton::Api: return L(@"back"); case EButton::Booking: + case EButton::Opentable: return L(@"bookingcom_book_button"); case EButton::Call: return L(@"placepage_call_button"); @@ -60,6 +61,11 @@ NSString * titleForButton(EButton type, BOOL isSelected) self.label.textColor = [UIColor whiteColor]; self.backgroundColor = [UIColor bookingBackground]; break; + case EButton::Opentable: + [self.button setImage:[UIImage imageNamed:@"ic_opentable"] forState:UIControlStateNormal]; + self.label.textColor = [UIColor whiteColor]; + self.backgroundColor = [UIColor opentableBackground]; + break; case EButton::Call: [self.button setImage:[UIImage imageNamed:@"ic_placepage_phone_number"] forState:UIControlStateNormal]; break; diff --git a/iphone/Maps/Classes/MWMPlacePageActionBar.h b/iphone/Maps/Classes/MWMPlacePageActionBar.h index 20c9cf9c11..599099a1d2 100644 --- a/iphone/Maps/Classes/MWMPlacePageActionBar.h +++ b/iphone/Maps/Classes/MWMPlacePageActionBar.h @@ -4,6 +4,7 @@ @protocol MWMActionBarSharedData - (BOOL)isBookmark; +- (BOOL)isOpentable; - (BOOL)isBooking; - (BOOL)isApi; - (BOOL)isMyPosition; diff --git a/iphone/Maps/Classes/MWMPlacePageActionBar.mm b/iphone/Maps/Classes/MWMPlacePageActionBar.mm index f18a1c5a18..992f3c5af6 100644 --- a/iphone/Maps/Classes/MWMPlacePageActionBar.mm +++ b/iphone/Maps/Classes/MWMPlacePageActionBar.mm @@ -77,11 +77,15 @@ extern NSString * const kAlohalyticsTapEventKey; BOOL const isIphone = [[UIDevice currentDevice].model isEqualToString:@"iPhone"]; BOOL const isPhoneNotEmpty = phone.length > 0; BOOL const isBooking = data.isBooking; + BOOL const isOpentable = data.isOpentable; + BOOL const isSponsored = isBooking || isOpentable; BOOL const itHasPhoneNumber = isIphone && isPhoneNotEmpty; BOOL const isApi = data.isApi; BOOL const isP2P = self.isPrepareRouteMode; BOOL const isMyPosition = data.isMyPosition; + EButton const sponsoredButton = isBooking ? EButton::Booking : EButton::Opentable; + if (isMyPosition) { m_visibleButtons.push_back(EButton::Spacer); @@ -89,10 +93,10 @@ extern NSString * const kAlohalyticsTapEventKey; m_visibleButtons.push_back(EButton::Share); m_visibleButtons.push_back(EButton::Spacer); } - else if (isApi && isBooking) + else if (isApi && isSponsored) { m_visibleButtons.push_back(EButton::Api); - m_visibleButtons.push_back(EButton::Booking); + m_visibleButtons.push_back(sponsoredButton); m_additionalButtons.push_back(EButton::Bookmark); m_additionalButtons.push_back(EButton::RouteFrom); m_additionalButtons.push_back(EButton::Share); @@ -119,11 +123,11 @@ extern NSString * const kAlohalyticsTapEventKey; m_additionalButtons.push_back(EButton::RouteFrom); m_additionalButtons.push_back(EButton::Share); } - else if (isBooking && isP2P) + else if (isSponsored && isP2P) { m_visibleButtons.push_back(EButton::Bookmark); m_visibleButtons.push_back(EButton::RouteFrom); - m_additionalButtons.push_back(EButton::Booking); + m_additionalButtons.push_back(sponsoredButton); m_additionalButtons.push_back(EButton::Share); } else if (itHasPhoneNumber && isP2P) @@ -133,9 +137,9 @@ extern NSString * const kAlohalyticsTapEventKey; m_additionalButtons.push_back(EButton::Call); m_additionalButtons.push_back(EButton::Share); } - else if (isBooking) + else if (isSponsored) { - m_visibleButtons.push_back(EButton::Booking); + m_visibleButtons.push_back(sponsoredButton); m_visibleButtons.push_back(EButton::Bookmark); m_additionalButtons.push_back(EButton::RouteFrom); m_additionalButtons.push_back(EButton::Share); @@ -191,6 +195,7 @@ extern NSString * const kAlohalyticsTapEventKey; switch (type) { case EButton::Api: [delegate apiBack]; break; + case EButton::Opentable: case EButton::Booking: [delegate book:NO]; break; case EButton::Call: [delegate call]; break; case EButton::Bookmark: diff --git a/iphone/Maps/Classes/MWMPlacePageData.h b/iphone/Maps/Classes/MWMPlacePageData.h index e1a7ee0c9b..de0d5a0837 100644 --- a/iphone/Maps/Classes/MWMPlacePageData.h +++ b/iphone/Maps/Classes/MWMPlacePageData.h @@ -64,9 +64,9 @@ enum class OpeningHours // Booking - (NSString *)bookingRating; - (NSString *)bookingApproximatePricing; -- (NSURL *)bookingURL; -- (NSURL *)bookingDescriptionURL; -- (NSString *)hotelId; +- (NSURL *)sponsoredURL; +- (NSURL *)sponsoredDescriptionURL; +- (NSString *)sponsoredId; - (void)assignOnlinePriceToLabel:(UILabel *)label; // API @@ -92,6 +92,7 @@ enum class OpeningHours - (BOOL)isBookmark; - (BOOL)isApi; - (BOOL)isBooking; +- (BOOL)isOpentable; - (BOOL)isHTMLDescription; - (BOOL)isMyPosition; diff --git a/iphone/Maps/Classes/MWMPlacePageData.mm b/iphone/Maps/Classes/MWMPlacePageData.mm index 223ee7693d..b323d98c88 100644 --- a/iphone/Maps/Classes/MWMPlacePageData.mm +++ b/iphone/Maps/Classes/MWMPlacePageData.mm @@ -53,7 +53,7 @@ using namespace place_page; // There is at least one of these buttons. if (m_info.ShouldShowAddPlace() || m_info.ShouldShowEditPlace() || - m_info.ShouldShowAddBusiness() || m_info.IsSponsoredHotel()) + m_info.ShouldShowAddBusiness() || m_info.IsSponsored()) { m_sections.push_back(Sections::Buttons); [self fillButtonsSection]; @@ -97,7 +97,7 @@ using namespace place_page; - (void)fillButtonsSection { // We don't have to show edit, add place or business if it's booking object. - if (m_info.IsSponsoredHotel()) + if (self.isBooking) { m_buttonsRows.push_back(ButtonsRows::HotelDescription); return; @@ -177,30 +177,30 @@ using namespace place_page; - (NSString *)bookingRating { - return m_info.IsSponsoredHotel() ? @(m_info.GetRatingFormatted().c_str()) : nil; + return self.isBooking ? @(m_info.GetRatingFormatted().c_str()) : nil; } - (NSString *)bookingApproximatePricing { - return m_info.IsSponsoredHotel() ? @(m_info.GetApproximatePricing().c_str()) : nil; + return self.isBooking ? @(m_info.GetApproximatePricing().c_str()) : nil; } -- (NSURL *)bookingURL +- (NSURL *)sponsoredURL { - return m_info.IsSponsoredHotel() ? [NSURL URLWithString:@(m_info.m_sponsoredBookingUrl.c_str())] + return m_info.IsSponsored() ? [NSURL URLWithString:@(m_info.GetSponsoredUrl().c_str())] : nil; } -- (NSURL *)bookingDescriptionURL +- (NSURL *)sponsoredDescriptionURL { - return m_info.IsSponsoredHotel() - ? [NSURL URLWithString:@(m_info.m_sponsoredDescriptionUrl.c_str())] + return m_info.IsSponsored() + ? [NSURL URLWithString:@(m_info.GetSponsoredDescriptionUrl().c_str())] : nil; } -- (NSString *)hotelId +- (NSString *)sponsoredId { - return m_info.IsSponsoredHotel() + return m_info.IsSponsored() ? @(m_info.GetMetadata().Get(feature::Metadata::FMD_SPONSORED_ID).c_str()) : nil; } @@ -208,7 +208,7 @@ using namespace place_page; - (void)assignOnlinePriceToLabel:(UILabel *)label { // TODO(Vlad): Remove similar code from MWMPlacePageEntity.mm when new iPAD place page will be finished. - NSAssert(m_info.IsSponsoredHotel(), @"Online price must be assigned to booking object!"); + NSAssert(self.isBooking, @"Online price must be assigned to booking object!"); if (Platform::ConnectionStatus() == Platform::EConnectionType::CONNECTION_NONE) return; @@ -247,7 +247,7 @@ using namespace place_page; }); }; - api.GetMinPrice(self.hotelId.UTF8String, currency, func); + api.GetMinPrice(self.sponsoredId.UTF8String, currency, func); } - (NSString *)address { return @(m_info.GetAddress().c_str()); } @@ -310,7 +310,8 @@ using namespace place_page; - (NSString *)phoneNumber { return @(m_info.GetPhone().c_str()); } - (BOOL)isBookmark { return m_info.IsBookmark(); } - (BOOL)isApi { return m_info.HasApiUrl(); } -- (BOOL)isBooking { return m_info.IsSponsoredHotel(); } +- (BOOL)isBooking { return m_info.m_sponsoredType == SponsoredType::Booking; } +- (BOOL)isOpentable { return m_info.m_sponsoredType == SponsoredType::Opentable; } - (BOOL)isMyPosition { return m_info.IsMyPosition(); } - (BOOL)isHTMLDescription { return strings::IsHTML(m_info.m_bookmarkDescription); } diff --git a/iphone/Maps/Classes/MWMPlacePageEntity.h b/iphone/Maps/Classes/MWMPlacePageEntity.h index 3f538c04b2..ade028658d 100644 --- a/iphone/Maps/Classes/MWMPlacePageEntity.h +++ b/iphone/Maps/Classes/MWMPlacePageEntity.h @@ -61,12 +61,13 @@ using MWMPlacePageCellTypeValueMap = map; - (BOOL)isBookmark; - (BOOL)isApi; - (BOOL)isBooking; +- (BOOL)isOpentable; - (ms::LatLon)latLon; - (m2::PointD const &)mercator; - (NSString *)apiURL; -- (NSURL *)bookingURL; -- (NSURL *)bookingDescriptionURL; -- (NSString * )hotelId; +- (NSURL *)sponsoredURL; +- (NSURL *)sponsoredDescriptionURL; +- (NSString *)sponsoredId; - (NSString *)phoneNumber; - (string)titleForNewBookmark; diff --git a/iphone/Maps/Classes/MWMPlacePageEntity.mm b/iphone/Maps/Classes/MWMPlacePageEntity.mm index 16bc21df9c..aadc989775 100644 --- a/iphone/Maps/Classes/MWMPlacePageEntity.mm +++ b/iphone/Maps/Classes/MWMPlacePageEntity.mm @@ -200,9 +200,9 @@ void initFieldsMap() case MWMPlacePageCellTypeAddBusinessButton: return navigationIsHidden && m_info.ShouldShowAddBusiness() ? @"" : nil; case MWMPlacePageCellTypeWebsite: - return m_info.IsSponsoredHotel() ? nil : [self getDefaultField:cellType]; + return self.isBooking ? nil : [self getDefaultField:cellType]; case MWMPlacePageCellTypeBookingMore: - return m_info.IsSponsoredHotel() ? @(m_info.GetSponsoredDescriptionUrl().c_str()) : nil; + return self.isBooking ? @(m_info.GetSponsoredDescriptionUrl().c_str()) : nil; default: return [self getDefaultField:cellType]; } } @@ -214,12 +214,12 @@ void initFieldsMap() return haveField ? @(it->second.c_str()) : nil; } -- (NSURL *)bookingURL { return [self sponsoredUrl:NO]; } -- (NSURL *)bookingDescriptionURL { return [self sponsoredUrl:YES]; } +- (NSURL *)sponsoredURL { return [self sponsoredUrl:NO]; } +- (NSURL *)sponsoredDescriptionURL { return [self sponsoredUrl:YES]; } - (NSURL *)sponsoredUrl:(BOOL)isDescription { auto const & url = - isDescription ? m_info.GetSponsoredDescriptionUrl() : m_info.GetSponsoredBookingUrl(); + isDescription ? m_info.GetSponsoredDescriptionUrl() : m_info.GetSponsoredUrl(); return url.empty() ? nil : [NSURL URLWithString:@(url.c_str())]; } @@ -229,10 +229,12 @@ void initFieldsMap() - (BOOL)isMyPosition { return m_info.IsMyPosition(); } - (BOOL)isBookmark { return m_info.IsBookmark(); } - (BOOL)isApi { return m_info.HasApiUrl(); } -- (BOOL)isBooking { return m_info.IsSponsoredHotel(); } -- (NSString *)hotelId +- (BOOL)isBooking { return m_info.m_sponsoredType == SponsoredType::Booking; } +- (BOOL)isOpentable { return m_info.m_sponsoredType == SponsoredType::Opentable; } +- (BOOL)isSponsored { return m_info.IsSponsored(); } +- (NSString *)sponsoredId { - return self.isBooking ? @(m_info.GetMetadata().Get(Metadata::FMD_SPONSORED_ID).c_str()) : nil; + return self.isSponsored ? @(m_info.GetMetadata().Get(Metadata::FMD_SPONSORED_ID).c_str()) : nil; } - (NSString *)phoneNumber { return [self getCellValue:MWMPlacePageCellTypePhoneNumber]; } diff --git a/iphone/Maps/Classes/MWMPlacePageManager.mm b/iphone/Maps/Classes/MWMPlacePageManager.mm index e57719c9e9..d3f508ce13 100644 --- a/iphone/Maps/Classes/MWMPlacePageManager.mm +++ b/iphone/Maps/Classes/MWMPlacePageManager.mm @@ -247,19 +247,34 @@ - (void)editBookmark { [[MapViewController controller] openBookmarkEditorWithData:self.data]; } - (void)book:(BOOL)isDescription { - NSMutableDictionary * stat = [@{ kStatProvider : kStatBooking } mutableCopy]; + // TODO(Vlad): remove the same code from MWMPlacePageViewManager.mm MWMPlacePageData * data = self.data; + BOOL const isBooking = data.isBooking; auto const & latLon = data.latLon; - stat[kStatHotel] = data.hotelId; - stat[kStatHotelLat] = @(latLon.lat); - stat[kStatHotelLon] = @(latLon.lon); - [Statistics logEvent:isDescription ? kPlacePageHotelDetails : kPlacePageHotelBook + NSMutableDictionary * stat = [@{} mutableCopy]; + if (isBooking) + { + stat[kStatProvider] = kStatBooking; + stat[kStatHotel] = data.sponsoredId; + stat[kStatHotelLat] = @(latLon.lat); + stat[kStatHotelLon] = @(latLon.lon); + } + else + { + stat[kStatProvider] = kStatOpentable; + stat[kStatRestaurant] = data.sponsoredId; + stat[kStatRestaurantLat] = @(latLon.lat); + stat[kStatRestaurantLon] = @(latLon.lon); + } + + NSString * eventName = isBooking ? kPlacePageHotelBook : kPlacePageRestaurantBook; + [Statistics logEvent:isDescription ? kPlacePageHotelDetails : eventName withParameters:stat atLocation:[MWMLocationManager lastLocation]]; UIViewController * vc = static_cast([MapViewController controller]); - NSURL * url = isDescription ? self.data.bookingDescriptionURL : self.data.bookingURL; - NSAssert(url, @"Booking url can't be nil!"); + NSURL * url = isDescription ? self.data.sponsoredDescriptionURL : self.data.sponsoredURL; + NSAssert(url, @"Sponsored url can't be nil!"); [vc openUrl:url]; } diff --git a/iphone/Maps/Classes/MWMPlacePageViewManager.mm b/iphone/Maps/Classes/MWMPlacePageViewManager.mm index 556b8c6f09..30777c62eb 100644 --- a/iphone/Maps/Classes/MWMPlacePageViewManager.mm +++ b/iphone/Maps/Classes/MWMPlacePageViewManager.mm @@ -210,19 +210,33 @@ extern NSString * const kBookmarksChangedNotification; - (void)book:(BOOL)isDescription { - NSMutableDictionary * stat = [@{ kStatProvider : kStatBooking } mutableCopy]; - MWMPlacePageEntity * en = self.entity; - auto const & latLon = en.latLon; - stat[kStatHotel] = en.hotelId; - stat[kStatHotelLat] = @(latLon.lat); - stat[kStatHotelLon] = @(latLon.lon); - [Statistics logEvent:isDescription ? kPlacePageHotelDetails : kPlacePageHotelBook + MWMPlacePageEntity * data = self.entity; + BOOL const isBooking = data.isBooking; + auto const & latLon = data.latLon; + NSMutableDictionary * stat = [@{} mutableCopy]; + if (isBooking) + { + stat[kStatProvider] = kStatBooking; + stat[kStatHotel] = data.sponsoredId; + stat[kStatHotelLat] = @(latLon.lat); + stat[kStatHotelLon] = @(latLon.lon); + } + else + { + stat[kStatProvider] = kStatOpentable; + stat[kStatRestaurant] = data.sponsoredId; + stat[kStatRestaurantLat] = @(latLon.lat); + stat[kStatRestaurantLon] = @(latLon.lon); + } + + NSString * eventName = isBooking ? kPlacePageHotelBook : kPlacePageRestaurantBook; + [Statistics logEvent:isDescription ? kPlacePageHotelDetails : eventName withParameters:stat atLocation:[MWMLocationManager lastLocation]]; UIViewController * vc = static_cast([MapViewController controller]); - NSURL * url = isDescription ? self.entity.bookingDescriptionURL : self.entity.bookingURL; - NSAssert(url, @"Booking url can't be nil!"); + NSURL * url = isDescription ? self.entity.sponsoredDescriptionURL : self.entity.sponsoredURL; + NSAssert(url, @"Sponsored url can't be nil!"); [vc openUrl:url]; } diff --git a/iphone/Maps/Classes/Share/MWMShareActivityItem.h b/iphone/Maps/Classes/Share/MWMShareActivityItem.h index 765b2ccfcb..fd66a31d41 100644 --- a/iphone/Maps/Classes/Share/MWMShareActivityItem.h +++ b/iphone/Maps/Classes/Share/MWMShareActivityItem.h @@ -10,7 +10,7 @@ class LatLon; - (NSString *)title; - (NSString *)subtitle; - (NSString *)address; -- (NSURL *)bookingDescriptionURL; +- (NSURL *)sponsoredDescriptionURL; - (NSString *)phoneNumber; - (ms::LatLon)latLon; diff --git a/iphone/Maps/Classes/Share/MWMShareActivityItem.mm b/iphone/Maps/Classes/Share/MWMShareActivityItem.mm index 9eada7509e..a1342349e7 100644 --- a/iphone/Maps/Classes/Share/MWMShareActivityItem.mm +++ b/iphone/Maps/Classes/Share/MWMShareActivityItem.mm @@ -130,7 +130,7 @@ NSString * httpGe0Url(NSString * shortUrl) if (self.object.isBooking) { strings.push_back(L(@"sharing_booking")); - strings.push_back(self.object.bookingDescriptionURL.absoluteString); + strings.push_back(self.object.sponsoredDescriptionURL.absoluteString); } for (auto const str : strings) From 906a24775fbebfd54272c437c5c6c6248101eddc Mon Sep 17 00:00:00 2001 From: Arsentiy Milchakov Date: Fri, 21 Oct 2016 10:53:39 +0300 Subject: [PATCH 08/16] return empty string in case when empty rating --- map/place_page_info.cpp | 11 ++++++----- map/place_page_info.hpp | 1 - 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/map/place_page_info.cpp b/map/place_page_info.cpp index 2d5e30b1bf..f1d2c4460b 100644 --- a/map/place_page_info.cpp +++ b/map/place_page_info.cpp @@ -10,7 +10,6 @@ namespace place_page char const * const Info::kSubtitleSeparator = " • "; char const * const Info::kStarSymbol = "★"; char const * const Info::kMountainSymbol = "▲"; -char const * const Info::kEmptyRatingSymbol = "-"; char const * const Info::kPricingSymbol = "$"; bool Info::IsFeature() const { return m_featureID.IsValid(); } @@ -123,9 +122,11 @@ string Info::GetRatingFormatted() const if (!IsSponsored()) return string(); - auto const r = GetMetadata().Get(feature::Metadata::FMD_RATING); - char const * rating = r.empty() ? kEmptyRatingSymbol : r.c_str(); - int const size = snprintf(nullptr, 0, m_localizedRatingString.c_str(), rating); + auto const rating = GetMetadata().Get(feature::Metadata::FMD_RATING); + if (rating.empty()) + return rating; + + int const size = snprintf(nullptr, 0, m_localizedRatingString.c_str(), rating.c_str()); if (size < 0) { LOG(LERROR, ("Incorrect size for string:", m_localizedRatingString, ", rating:", rating)); @@ -133,7 +134,7 @@ string Info::GetRatingFormatted() const } vector buf(size + 1); - snprintf(buf.data(), buf.size(), m_localizedRatingString.c_str(), rating); + snprintf(buf.data(), buf.size(), m_localizedRatingString.c_str(), rating.c_str()); return string(buf.begin(), buf.end()); } diff --git a/map/place_page_info.hpp b/map/place_page_info.hpp index 29f9bc42be..db316b300b 100644 --- a/map/place_page_info.hpp +++ b/map/place_page_info.hpp @@ -30,7 +30,6 @@ public: static char const * const kSubtitleSeparator; static char const * const kStarSymbol; static char const * const kMountainSymbol; - static char const * const kEmptyRatingSymbol; static char const * const kPricingSymbol; bool IsFeature() const; From 7353397a4fa41e3a62fc543668b870fa5120db26 Mon Sep 17 00:00:00 2001 From: Roman Romanov Date: Thu, 20 Oct 2016 12:09:53 +0400 Subject: [PATCH 09/16] [android] SponsoredHotel refactoring. Opentable booking. --- android/jni/Android.mk | 2 +- .../{SponsoredHotel.cpp => Sponsored.cpp} | 55 ++++---- .../res/drawable-hdpi/img_logo_opentable.png | Bin 0 -> 720 bytes .../res/drawable-mdpi/img_logo_opentable.png | Bin 0 -> 477 bytes android/res/drawable-v21/button_opentable.xml | 9 ++ .../res/drawable-xhdpi/img_logo_opentable.png | Bin 0 -> 1080 bytes .../drawable-xxhdpi/img_logo_opentable.png | Bin 0 -> 1832 bytes .../drawable-xxxhdpi/img_logo_opentable.png | Bin 0 -> 2695 bytes android/res/drawable/button_opentable.xml | 7 + android/res/values/colors.xml | 2 + .../maps/bookmarks/BookmarksListFragment.java | 8 +- .../widget/placepage/FacilitiesAdapter.java | 6 +- .../maps/widget/placepage/NearbyAdapter.java | 10 +- .../widget/placepage/PlacePageButtons.java | 15 +++ .../maps/widget/placepage/PlacePageView.java | 123 ++++++++++++------ .../{SponsoredHotel.java => Sponsored.java} | 66 ++++++++-- .../util/sharing/MapObjectShareable.java | 8 +- .../mapswithme/util/sharing/ShareOption.java | 8 +- .../util/statistics/Statistics.java | 1 + 19 files changed, 220 insertions(+), 100 deletions(-) rename android/jni/com/mapswithme/maps/{SponsoredHotel.cpp => Sponsored.cpp} (80%) create mode 100644 android/res/drawable-hdpi/img_logo_opentable.png create mode 100644 android/res/drawable-mdpi/img_logo_opentable.png create mode 100644 android/res/drawable-v21/button_opentable.xml create mode 100644 android/res/drawable-xhdpi/img_logo_opentable.png create mode 100644 android/res/drawable-xxhdpi/img_logo_opentable.png create mode 100644 android/res/drawable-xxxhdpi/img_logo_opentable.png create mode 100644 android/res/drawable/button_opentable.xml rename android/src/com/mapswithme/maps/widget/placepage/{SponsoredHotel.java => Sponsored.java} (80%) diff --git a/android/jni/Android.mk b/android/jni/Android.mk index 5b5014cf50..4b2c67c893 100644 --- a/android/jni/Android.mk +++ b/android/jni/Android.mk @@ -92,7 +92,7 @@ LOCAL_SRC_FILES := \ com/mapswithme/maps/SearchRecents.cpp \ com/mapswithme/maps/settings/UnitLocale.cpp \ com/mapswithme/maps/sound/tts.cpp \ - com/mapswithme/maps/SponsoredHotel.cpp \ + com/mapswithme/maps/Sponsored.cpp \ com/mapswithme/maps/uber/Uber.cpp \ com/mapswithme/maps/TrackRecorder.cpp \ com/mapswithme/maps/UserMarkHelper.cpp \ diff --git a/android/jni/com/mapswithme/maps/SponsoredHotel.cpp b/android/jni/com/mapswithme/maps/Sponsored.cpp similarity index 80% rename from android/jni/com/mapswithme/maps/SponsoredHotel.cpp rename to android/jni/com/mapswithme/maps/Sponsored.cpp index 986709c2ec..0b2b234470 100644 --- a/android/jni/com/mapswithme/maps/SponsoredHotel.cpp +++ b/android/jni/com/mapswithme/maps/Sponsored.cpp @@ -10,7 +10,7 @@ namespace { -jclass g_hotelClass; +jclass g_sponsoredClass; jclass g_facilityTypeClass; jclass g_nearbyObjectClass; jclass g_imageClass; @@ -21,22 +21,22 @@ jmethodID g_nearbyConstructor; jmethodID g_imageConstructor; jmethodID g_reviewConstructor; jmethodID g_hotelInfoConstructor; -jmethodID g_hotelClassConstructor; +jmethodID g_sponsoredClassConstructor; jmethodID g_priceCallback; jmethodID g_infoCallback; -void PrepareClassRefs(JNIEnv * env, jclass hotelClass) +void PrepareClassRefs(JNIEnv * env, jclass sponsoredClass) { - if (g_hotelClass) + if (g_sponsoredClass) return; - g_hotelClass = static_cast(env->NewGlobalRef(hotelClass)); + g_sponsoredClass = static_cast(env->NewGlobalRef(sponsoredClass)); g_hotelInfoClass = - jni::GetGlobalClassRef(env, "com/mapswithme/maps/widget/placepage/SponsoredHotel$HotelInfo"); + jni::GetGlobalClassRef(env, "com/mapswithme/maps/widget/placepage/Sponsored$HotelInfo"); g_facilityTypeClass = jni::GetGlobalClassRef( - env, "com/mapswithme/maps/widget/placepage/SponsoredHotel$FacilityType"); + env, "com/mapswithme/maps/widget/placepage/Sponsored$FacilityType"); g_nearbyObjectClass = jni::GetGlobalClassRef( - env, "com/mapswithme/maps/widget/placepage/SponsoredHotel$NearbyObject"); + env, "com/mapswithme/maps/widget/placepage/Sponsored$NearbyObject"); g_reviewClass = jni::GetGlobalClassRef(env, "com/mapswithme/maps/review/Review"); g_imageClass = jni::GetGlobalClassRef(env, "com/mapswithme/maps/gallery/Image"); @@ -52,46 +52,47 @@ void PrepareClassRefs(JNIEnv * env, jclass hotelClass) g_hotelInfoConstructor = jni::GetConstructorID( env, g_hotelInfoClass, "(Ljava/lang/String;[Lcom/mapswithme/maps/gallery/Image;[Lcom/mapswithme/maps/widget/" - "placepage/SponsoredHotel$FacilityType;[Lcom/mapswithme/maps/review/Review;[Lcom/mapswithme/" - "maps/widget/placepage/SponsoredHotel$NearbyObject;)V"); + "placepage/Sponsored$FacilityType;[Lcom/mapswithme/maps/review/Review;[Lcom/mapswithme/" + "maps/widget/placepage/Sponsored$NearbyObject;)V"); - // SponsoredHotel(String rating, String price, String urlBook, String urlDescription) - g_hotelClassConstructor = jni::GetConstructorID( - env, g_hotelClass, - "(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V"); + // Sponsored(String rating, String price, String urlBook, String urlDescription) + g_sponsoredClassConstructor = jni::GetConstructorID( + env, g_sponsoredClass, + "(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;I)V"); // static void onPriceReceived(final String id, final String price, final String currency) g_priceCallback = - jni::GetStaticMethodID(env, g_hotelClass, "onPriceReceived", + jni::GetStaticMethodID(env, g_sponsoredClass, "onPriceReceived", "(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V"); // static void onDescriptionReceived(final String id, final String description) g_infoCallback = jni::GetStaticMethodID( - env, g_hotelClass, "onInfoReceived", - "(Ljava/lang/String;Lcom/mapswithme/maps/widget/placepage/SponsoredHotel$HotelInfo;)V"); + env, g_sponsoredClass, "onInfoReceived", + "(Ljava/lang/String;Lcom/mapswithme/maps/widget/placepage/Sponsored$HotelInfo;)V"); } } // namespace extern "C" { -// static SponsoredHotel nativeGetCurrent(); -JNIEXPORT jobject JNICALL Java_com_mapswithme_maps_widget_placepage_SponsoredHotel_nativeGetCurrent( +// static Sponsored nativeGetCurrent(); +JNIEXPORT jobject JNICALL Java_com_mapswithme_maps_widget_placepage_Sponsored_nativeGetCurrent( JNIEnv * env, jclass clazz) { PrepareClassRefs(env, clazz); place_page::Info const & ppInfo = g_framework->GetPlacePageInfo(); - if (!ppInfo.m_isSponsoredHotel) + if (!ppInfo.IsSponsored()) return nullptr; - return env->NewObject(g_hotelClass, g_hotelClassConstructor, + return env->NewObject(g_sponsoredClass, g_sponsoredClassConstructor, jni::ToJavaString(env, ppInfo.GetRatingFormatted()), jni::ToJavaString(env, ppInfo.GetApproximatePricing()), - jni::ToJavaString(env, ppInfo.GetSponsoredBookingUrl()), - jni::ToJavaString(env, ppInfo.GetSponsoredDescriptionUrl())); + jni::ToJavaString(env, ppInfo.GetSponsoredUrl()), + jni::ToJavaString(env, ppInfo.GetSponsoredDescriptionUrl()), + (jint)ppInfo.m_sponsoredType); } // static void nativeRequestPrice(String id, String currencyCode); -JNIEXPORT void JNICALL Java_com_mapswithme_maps_widget_placepage_SponsoredHotel_nativeRequestPrice( +JNIEXPORT void JNICALL Java_com_mapswithme_maps_widget_placepage_Sponsored_nativeRequestPrice( JNIEnv * env, jclass clazz, jstring id, jstring currencyCode) { PrepareClassRefs(env, clazz); @@ -103,14 +104,14 @@ JNIEXPORT void JNICALL Java_com_mapswithme_maps_widget_placepage_SponsoredHotel_ string const & currency) { GetPlatform().RunOnGuiThread([=]() { JNIEnv * env = jni::GetEnv(); - env->CallStaticVoidMethod(g_hotelClass, g_priceCallback, jni::ToJavaString(env, hotelId), + env->CallStaticVoidMethod(g_sponsoredClass, g_priceCallback, jni::ToJavaString(env, hotelId), jni::ToJavaString(env, price), jni::ToJavaString(env, currency)); }); }); } // static void nativeRequestInfo(String id, String locale); -JNIEXPORT void JNICALL Java_com_mapswithme_maps_widget_placepage_SponsoredHotel_nativeRequestInfo( +JNIEXPORT void JNICALL Java_com_mapswithme_maps_widget_placepage_Sponsored_nativeRequestHotelInfo( JNIEnv * env, jclass clazz, jstring id, jstring locale) { PrepareClassRefs(env, clazz); @@ -151,7 +152,7 @@ JNIEXPORT void JNICALL Java_com_mapswithme_maps_widget_placepage_SponsoredHotel_ }); auto nearby = env->NewObjectArray(0, g_nearbyObjectClass, 0); - env->CallStaticVoidMethod(g_hotelClass, g_infoCallback, jni::ToJavaString(env, hotelId), + env->CallStaticVoidMethod(g_sponsoredClass, g_infoCallback, jni::ToJavaString(env, hotelId), env->NewObject(g_hotelInfoClass, g_hotelInfoConstructor, description, photos, facilities, reviews, nearby)); }); diff --git a/android/res/drawable-hdpi/img_logo_opentable.png b/android/res/drawable-hdpi/img_logo_opentable.png new file mode 100644 index 0000000000000000000000000000000000000000..fff32a337cd9f6342b826e47b4166024f34b24d4 GIT binary patch literal 720 zcmV;>0x$iEP)Px%ib+I4R9Fe!nK4TpK@^3vX>5c*QYh&(0SiGiNJt}sg@sM3_Z#9ruo47ovGs3Q zq_VV;5JCtxLTo~aRRVzo41v6SM|Nd=d&hNW-p;Oj;V|=N=AL`c%@C(G4{KYfb zx>q> zKPgRPyiTN9v$MKUyvIOs6i;y#Kg7<-^SS9rk{jRxxTfD5mILjx?!cP$w~U{5dG#Bp zJ=Dq*4AVTg^f0P@-c3Sv+EzW|tC~+4Ffq!Pb578w{t#Oo<&r>0` z&9?btIp*!#R^J`kO8H3Gs|rV}zeH5QQFNaa6;D~!?{T|&aJ|tdVIkJFr`u9K5>_=! zR{urFY~W+9zDrfr?~Zlr<$SnOdwFHNg>Q2a*$8Y6%jF}cXR_>^Q z>*g+$N4Kd7-iie&8R%r}+{>IIzo-&%oqPQjCCGI~T>oB}76K7B0D2YOgo!u(D{eNSP;rues{IcQVy=7(;=kPx$mq|oHR7efgmqAJcF&KrN3f*~t78ioY5$X-RK%v{Zb=Nz%D0l-G_AXrrE~E!& zSBho)9?lGZVoD~RjMN_zep zjEun}_yVyIN8H+MUSkMPz!s#2=1j7>L2w54sZI=Eb7xshA*9N5F;n}JMz=~KpgnWU zYpPB7Pig(yQ-g%kJ;1$4;K!)alBN@d(>u^%CHiW=f%5~DW7B&kUfCm|ZH08sI>aTe(=c+Laj|PAsenBWq_g+?m@sYD1fc zsZMt7%wtHE@k7Uc6AbQrLZCltCR7bLqX5rO?d-g^d&th|wJk$Wflu&rPQ?OzrS1ax zP|l~h+SD()so|{rItTh6ngq3#i^a-!8117tjj47RpIQU|^I)t_(xqKVruNdF z(n*@Ul0W%zO*M5o*N@scl{%dZnlYtH9dkFze}y%sdb#Ac`r6kfLQg7{^>5HOW9XCB TuAAey00000NkvXXu0mjfpNrbj literal 0 HcmV?d00001 diff --git a/android/res/drawable-v21/button_opentable.xml b/android/res/drawable-v21/button_opentable.xml new file mode 100644 index 0000000000..5a53fc2199 --- /dev/null +++ b/android/res/drawable-v21/button_opentable.xml @@ -0,0 +1,9 @@ + + + + + + + + \ No newline at end of file diff --git a/android/res/drawable-xhdpi/img_logo_opentable.png b/android/res/drawable-xhdpi/img_logo_opentable.png new file mode 100644 index 0000000000000000000000000000000000000000..1d7641a1efce4aa30b7852a48d2d6372c43d031e GIT binary patch literal 1080 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 W?Tz(POKda%0000M;% literal 0 HcmV?d00001 diff --git a/android/res/drawable-xxxhdpi/img_logo_opentable.png b/android/res/drawable-xxxhdpi/img_logo_opentable.png new file mode 100644 index 0000000000000000000000000000000000000000..1b1de05206088d049d5840620923a2b1bec0c68b GIT binary patch literal 2695 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 + + + + + \ No newline at end of file diff --git a/android/res/values/colors.xml b/android/res/values/colors.xml index 0e9f2bfe07..b383e9f656 100644 --- a/android/res/values/colors.xml +++ b/android/res/values/colors.xml @@ -141,5 +141,7 @@ #FF19457D #FF1B549E + #FFDA3743 + #FFFC5965 diff --git a/android/src/com/mapswithme/maps/bookmarks/BookmarksListFragment.java b/android/src/com/mapswithme/maps/bookmarks/BookmarksListFragment.java index 3b0500e7f9..9bfcac22b7 100644 --- a/android/src/com/mapswithme/maps/bookmarks/BookmarksListFragment.java +++ b/android/src/com/mapswithme/maps/bookmarks/BookmarksListFragment.java @@ -22,7 +22,7 @@ import com.mapswithme.maps.bookmarks.data.BookmarkCategory; import com.mapswithme.maps.bookmarks.data.BookmarkManager; import com.mapswithme.maps.bookmarks.data.Track; import com.mapswithme.maps.widget.placepage.EditBookmarkFragment; -import com.mapswithme.maps.widget.placepage.SponsoredHotel; +import com.mapswithme.maps.widget.placepage.Sponsored; import com.mapswithme.util.BottomSheetHelper; import com.mapswithme.util.sharing.ShareOption; import com.mapswithme.util.sharing.SharingHelper; @@ -162,15 +162,15 @@ public class BookmarksListFragment extends BaseMwmListFragment switch (menuItem.getItemId()) { case R.id.share_message: - ShareOption.SMS.shareMapObject(getActivity(), item, SponsoredHotel.nativeGetCurrent()); + ShareOption.SMS.shareMapObject(getActivity(), item, Sponsored.nativeGetCurrent()); break; case R.id.share_email: - ShareOption.EMAIL.shareMapObject(getActivity(), item, SponsoredHotel.nativeGetCurrent()); + ShareOption.EMAIL.shareMapObject(getActivity(), item, Sponsored.nativeGetCurrent()); break; case R.id.share: - ShareOption.ANY.shareMapObject(getActivity(), item, SponsoredHotel.nativeGetCurrent()); + ShareOption.ANY.shareMapObject(getActivity(), item, Sponsored.nativeGetCurrent()); break; case R.id.edit: diff --git a/android/src/com/mapswithme/maps/widget/placepage/FacilitiesAdapter.java b/android/src/com/mapswithme/maps/widget/placepage/FacilitiesAdapter.java index 3a5aa72e7e..220cde2007 100644 --- a/android/src/com/mapswithme/maps/widget/placepage/FacilitiesAdapter.java +++ b/android/src/com/mapswithme/maps/widget/placepage/FacilitiesAdapter.java @@ -18,7 +18,7 @@ class FacilitiesAdapter extends BaseAdapter static final int MAX_COUNT = 6; @NonNull - private List mItems = new ArrayList<>(); + private List mItems = new ArrayList<>(); private boolean isShowAll = false; @Override @@ -64,7 +64,7 @@ class FacilitiesAdapter extends BaseAdapter return convertView; } - public void setItems(@NonNull List items) + public void setItems(@NonNull List items) { this.mItems = items; notifyDataSetChanged(); @@ -87,7 +87,7 @@ class FacilitiesAdapter extends BaseAdapter mName = (TextView) view.findViewById(R.id.tv__facility); } - public void bind(SponsoredHotel.FacilityType facility) + public void bind(Sponsored.FacilityType facility) { // TODO map facility key to image resource id mIcon.setImageResource(R.drawable.ic_entrance); diff --git a/android/src/com/mapswithme/maps/widget/placepage/NearbyAdapter.java b/android/src/com/mapswithme/maps/widget/placepage/NearbyAdapter.java index 97bdca8995..7772cd9d32 100644 --- a/android/src/com/mapswithme/maps/widget/placepage/NearbyAdapter.java +++ b/android/src/com/mapswithme/maps/widget/placepage/NearbyAdapter.java @@ -19,7 +19,7 @@ import java.util.List; class NearbyAdapter extends BaseAdapter { @NonNull - private List mItems = new ArrayList<>(); + private List mItems = new ArrayList<>(); @Nullable private final OnItemClickListener mListener; @@ -30,7 +30,7 @@ class NearbyAdapter extends BaseAdapter interface OnItemClickListener { - void onItemClick(@NonNull SponsoredHotel.NearbyObject item); + void onItemClick(@NonNull Sponsored.NearbyObject item); } @Override @@ -71,7 +71,7 @@ class NearbyAdapter extends BaseAdapter return convertView; } - public void setItems(@NonNull List items) + public void setItems(@NonNull List items) { this.mItems = items; notifyDataSetChanged(); @@ -90,7 +90,7 @@ class NearbyAdapter extends BaseAdapter @NonNull TextView mDistance; @Nullable - SponsoredHotel.NearbyObject mItem; + Sponsored.NearbyObject mItem; public ViewHolder(View view, @Nullable OnItemClickListener listener) { @@ -109,7 +109,7 @@ class NearbyAdapter extends BaseAdapter mListener.onItemClick(mItem); } - public void bind(@NonNull SponsoredHotel.NearbyObject item) + public void bind(@NonNull Sponsored.NearbyObject item) { mItem = item; String packageName = mType.getContext().getPackageName(); diff --git a/android/src/com/mapswithme/maps/widget/placepage/PlacePageButtons.java b/android/src/com/mapswithme/maps/widget/placepage/PlacePageButtons.java index bb4160330e..6e3575db51 100644 --- a/android/src/com/mapswithme/maps/widget/placepage/PlacePageButtons.java +++ b/android/src/com/mapswithme/maps/widget/placepage/PlacePageButtons.java @@ -47,6 +47,21 @@ final class PlacePageButtons } }, + OPENTABLE + { + @Override + int getTitle() + { + return R.string.bookingcom_book_button; + } + + @Override + int getIcon() + { + return R.drawable.img_logo_opentable; + } + }, + BACK { @Override diff --git a/android/src/com/mapswithme/maps/widget/placepage/PlacePageView.java b/android/src/com/mapswithme/maps/widget/placepage/PlacePageView.java index 9e00e9897d..0d4380230d 100644 --- a/android/src/com/mapswithme/maps/widget/placepage/PlacePageView.java +++ b/android/src/com/mapswithme/maps/widget/placepage/PlacePageView.java @@ -88,8 +88,8 @@ import java.util.Map; public class PlacePageView extends RelativeLayout implements View.OnClickListener, View.OnLongClickListener, - SponsoredHotel.OnPriceReceivedListener, - SponsoredHotel.OnInfoReceivedListener, + Sponsored.OnPriceReceivedListener, + Sponsored.OnInfoReceivedListener, LineCountTextView.OnLineCountCalculatedListener, RecyclerClickListener, NearbyAdapter.OnItemClickListener @@ -164,8 +164,8 @@ public class PlacePageView extends RelativeLayout private MwmActivity.LeftAnimationTrackListener mLeftAnimationTrackListener; // Data private MapObject mMapObject; - private SponsoredHotel mSponsoredHotel; - private String mSponsoredHotelPrice; + private Sponsored mSponsored; + private String mSponsoredPrice; private boolean mIsLatLonDms; @NonNull private final FacilitiesAdapter mFacilitiesAdapter = new FacilitiesAdapter(); @@ -341,6 +341,11 @@ public class PlacePageView extends RelativeLayout color = Color.WHITE; break; + case OPENTABLE: + frame.setBackgroundResource(R.drawable.button_opentable); + color = Color.WHITE; + break; + case BOOKMARK: mBookmarkButtonIcon = icon; updateButtons(); @@ -370,7 +375,7 @@ public class PlacePageView extends RelativeLayout case SHARE: Statistics.INSTANCE.trackEvent(Statistics.EventName.PP_SHARE); AlohaHelper.logClick(AlohaHelper.PP_SHARE); - ShareOption.ANY.shareMapObject(getActivity(), mMapObject, mSponsoredHotel); + ShareOption.ANY.shareMapObject(getActivity(), mMapObject, mSponsored); break; case BACK: @@ -404,6 +409,7 @@ public class PlacePageView extends RelativeLayout break; case BOOKING: + case OPENTABLE: onBookingClick(true /* book */); break; } @@ -455,8 +461,8 @@ public class PlacePageView extends RelativeLayout if (UiUtils.isLandscape(getContext())) mDetails.setBackgroundResource(0); - SponsoredHotel.setPriceListener(this); - SponsoredHotel.setInfoListener(this); + Sponsored.setPriceListener(this); + Sponsored.setInfoListener(this); } private void initHotelRatingView() @@ -512,7 +518,7 @@ public class PlacePageView extends RelativeLayout public void onPriceReceived(@NonNull String id, @NonNull String price, @NonNull String currencyCode) { - if (mSponsoredHotel == null || !TextUtils.equals(id, mSponsoredHotel.getId())) + if (mSponsored == null || !TextUtils.equals(id, mSponsored.getId())) return; String text; @@ -525,14 +531,14 @@ public class PlacePageView extends RelativeLayout text = (price + " " + currencyCode); } - mSponsoredHotelPrice = getContext().getString(R.string.place_page_starting_from, text); + mSponsoredPrice = getContext().getString(R.string.place_page_starting_from, text); refreshPreview(); } @Override - public void onInfoReceived(@NonNull String id, @NonNull SponsoredHotel.HotelInfo info) + public void onInfoReceived(@NonNull String id, @NonNull Sponsored.HotelInfo info) { - if (mSponsoredHotel == null || !TextUtils.equals(id, mSponsoredHotel.getId())) + if (mSponsored == null || !TextUtils.equals(id, mSponsored.getId())) return; updateHotelDetails(info); @@ -542,7 +548,7 @@ public class PlacePageView extends RelativeLayout updateHotelRating(info); } - private void updateHotelRating(@NonNull SponsoredHotel.HotelInfo info) + private void updateHotelRating(@NonNull Sponsored.HotelInfo info) { if (info.mReviews == null || info.mReviews.length == 0) { @@ -552,13 +558,13 @@ public class PlacePageView extends RelativeLayout { UiUtils.show(mHotelReview); mReviewAdapter.setItems(new ArrayList<>(Arrays.asList(info.mReviews))); - mHotelRating.setText(mSponsoredHotel.mRating); + mHotelRating.setText(mSponsored.mRating); mHotelRatingBase.setText(getResources().getQuantityString(R.plurals.place_page_booking_rating_base, info.mReviews.length, info.mReviews.length)); } } - private void updateHotelNearby(@NonNull SponsoredHotel.HotelInfo info) + private void updateHotelNearby(@NonNull Sponsored.HotelInfo info) { if (info.mNearby == null || info.mNearby.length == 0) { @@ -571,7 +577,7 @@ public class PlacePageView extends RelativeLayout } } - private void updateHotelGallery(@NonNull SponsoredHotel.HotelInfo info) + private void updateHotelGallery(@NonNull Sponsored.HotelInfo info) { if (info.mPhotos == null || info.mPhotos.length == 0) { @@ -585,7 +591,7 @@ public class PlacePageView extends RelativeLayout } } - private void updateHotelFacilities(@NonNull SponsoredHotel.HotelInfo info) + private void updateHotelFacilities(@NonNull Sponsored.HotelInfo info) { if (info.mFacilities == null || info.mFacilities.length == 0) { @@ -601,7 +607,7 @@ public class PlacePageView extends RelativeLayout } } - private void updateHotelDetails(@NonNull SponsoredHotel.HotelInfo info) + private void updateHotelDetails(@NonNull Sponsored.HotelInfo info) { mTvHotelDescription.setMaxLines(getResources().getInteger(R.integer.pp_hotel_description_lines)); refreshMetadataOrHide(info.mDescription, mHotelDescription, mTvHotelDescription); @@ -628,7 +634,7 @@ public class PlacePageView extends RelativeLayout } @Override - public void onItemClick(@NonNull SponsoredHotel.NearbyObject item) + public void onItemClick(@NonNull Sponsored.NearbyObject item) { // TODO go to selected object on map } @@ -644,25 +650,41 @@ public class PlacePageView extends RelativeLayout if (!result) return; - SponsoredHotel info = mSponsoredHotel; + Sponsored info = mSponsored; if (info == null) return; + String event = Statistics.EventName.PP_SPONSORED_BOOK; Map params = new HashMap<>(); - params.put("provider", "Booking.Com"); - params.put("hotel_lat", (mMapObject == null ? "N/A" : String.valueOf(mMapObject.getLat()))); - params.put("hotel_lon", (mMapObject == null ? "N/A" : String.valueOf(mMapObject.getLon()))); - params.put("hotel", info.getId()); - - String event = (book ? Statistics.EventName.PP_SPONSORED_BOOK - : Statistics.EventName.PP_SPONSORED_DETAILS); + switch (info.getType()) + { + case Sponsored.TYPE_BOOKING: + params.put("provider", "Booking.Com"); + params.put("hotel_lat", (mMapObject == null ? "N/A" : String.valueOf(mMapObject.getLat()))); + params.put("hotel_lon", (mMapObject == null ? "N/A" : String.valueOf(mMapObject.getLon()))); + params.put("hotel", info.getId()); + event = (book ? Statistics.EventName.PP_SPONSORED_BOOK + : Statistics.EventName.PP_SPONSORED_DETAILS); + break; + case Sponsored.TYPE_GEOCHAT: + break; + case Sponsored.TYPE_OPENTABLE: + params.put("provider", "Opentable.Com"); + params.put("restaurant_lat", (mMapObject == null ? "N/A" : String.valueOf(mMapObject.getLat()))); + params.put("restaurant_lon", (mMapObject == null ? "N/A" : String.valueOf(mMapObject.getLon()))); + params.put("restaurant", info.getId()); + event = Statistics.EventName.PP_SPONSORED_OPENTABLE; + break; + case Sponsored.TYPE_NONE: + break; + } final Location location = LocationHelper.INSTANCE.getLastKnownLocation(); Statistics.INSTANCE.trackEvent(event, location, params); try { - followUrl(book ? info.mUrlBook : info.mUrlDescription); + followUrl(book ? info.mUrl : info.mUrlDescription); } catch (ActivityNotFoundException e) { AlohaHelper.logException(e); @@ -756,22 +778,23 @@ public class PlacePageView extends RelativeLayout return; mMapObject = mapObject; - mSponsoredHotel = (mMapObject == null ? null : SponsoredHotel.nativeGetCurrent()); + mSponsored = (mMapObject == null ? null : Sponsored.nativeGetCurrent()); detachCountry(); if (mMapObject != null) { - if (mSponsoredHotel != null) + if (mSponsored != null) { - mSponsoredHotel.updateId(mMapObject); - mSponsoredHotelPrice = mSponsoredHotel.mPrice; + mSponsored.updateId(mMapObject); + mSponsoredPrice = mSponsored.mPrice; Locale locale = Locale.getDefault(); Currency currency = Currency.getInstance(locale); - SponsoredHotel.requestPrice(mSponsoredHotel.getId(), currency.getCurrencyCode()); + if (mSponsored.getType() == Sponsored.TYPE_BOOKING) + Sponsored.requestPrice(mSponsored.getId(), currency.getCurrencyCode()); // TODO: remove this after booking_api.cpp will be done if (!USE_OLD_BOOKING) - SponsoredHotel.requestInfo(mSponsoredHotel.getId(), locale.toString()); + Sponsored.requestInfo(mSponsored, locale.toString()); } String country = MapManager.nativeGetSelectedCountry(); @@ -854,12 +877,12 @@ public class PlacePageView extends RelativeLayout UiUtils.hide(mAvDirection); UiUtils.setTextAndHideIfEmpty(mTvAddress, mMapObject.getAddress()); - boolean sponsored = (mSponsoredHotel != null); + boolean sponsored = (mSponsored != null); UiUtils.showIf(sponsored, mHotelInfo); if (sponsored) { - mTvHotelRating.setText(mSponsoredHotel.mRating); - UiUtils.setTextAndHideIfEmpty(mTvHotelPrice, mSponsoredHotelPrice); + mTvHotelRating.setText(mSponsored.mRating); + UiUtils.setTextAndHideIfEmpty(mTvHotelPrice, mSponsoredPrice); } } @@ -867,7 +890,7 @@ public class PlacePageView extends RelativeLayout { refreshLatLon(); - if (mSponsoredHotel == null) + if (mSponsored == null) { final String website = mMapObject.getMetadata(Metadata.MetadataType.FMD_WEBSITE); refreshMetadataOrHide(TextUtils.isEmpty(website) ? mMapObject.getMetadata(Metadata.MetadataType.FMD_URL) : website, mWebsite, mTvWebsite); @@ -885,6 +908,9 @@ public class PlacePageView extends RelativeLayout // TODO: remove this after booking_api.cpp will be done if (!USE_OLD_BOOKING) UiUtils.hide(mHotelMore); + + if (mSponsored.getType() != Sponsored.TYPE_BOOKING) + UiUtils.hide(mHotelMore); } refreshMetadataOrHide(mMapObject.getMetadata(Metadata.MetadataType.FMD_PHONE_NUMBER), mPhone, mTvPhone); @@ -989,8 +1015,23 @@ public class PlacePageView extends RelativeLayout if (showBackButton || ParsedMwmRequest.isPickPointMode()) buttons.add(PlacePageButtons.Item.BACK); - if (mSponsoredHotel != null) - buttons.add(PlacePageButtons.Item.BOOKING); + if (mSponsored != null) + { + switch (mSponsored.getType()) + { + + 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_NONE: + break; + } + } buttons.add(PlacePageButtons.Item.BOOKMARK); @@ -1185,8 +1226,8 @@ public class PlacePageView extends RelativeLayout break; case R.id.tv__place_hotel_reviews_more: ReviewActivity.start(getContext(), mReviewAdapter.getItems(), mMapObject.getTitle(), - mSponsoredHotel.mRating, mReviewAdapter.getItems() - .size(), mSponsoredHotel.mUrlBook); + mSponsored.mRating, mReviewAdapter.getItems() + .size(), mSponsored.mUrl); break; } } diff --git a/android/src/com/mapswithme/maps/widget/placepage/SponsoredHotel.java b/android/src/com/mapswithme/maps/widget/placepage/Sponsored.java similarity index 80% rename from android/src/com/mapswithme/maps/widget/placepage/SponsoredHotel.java rename to android/src/com/mapswithme/maps/widget/placepage/Sponsored.java index 1ef4c46d28..d3dd79efc5 100644 --- a/android/src/com/mapswithme/maps/widget/placepage/SponsoredHotel.java +++ b/android/src/com/mapswithme/maps/widget/placepage/Sponsored.java @@ -1,5 +1,6 @@ package com.mapswithme.maps.widget.placepage; +import android.support.annotation.IntDef; import android.support.annotation.NonNull; import android.support.annotation.Nullable; import android.support.annotation.UiThread; @@ -10,13 +11,24 @@ import com.mapswithme.maps.bookmarks.data.Metadata; import com.mapswithme.maps.gallery.Image; import com.mapswithme.maps.review.Review; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; import java.lang.ref.WeakReference; import java.util.HashMap; import java.util.Map; @UiThread -public final class SponsoredHotel +public final class Sponsored { + static final int TYPE_NONE = 0; + static final int TYPE_BOOKING = 1; + static final int TYPE_OPENTABLE = 2; + static final int TYPE_GEOCHAT = 3; + + @Retention(RetentionPolicy.SOURCE) + @IntDef({TYPE_NONE, TYPE_BOOKING, TYPE_OPENTABLE, TYPE_GEOCHAT}) + @interface SponsoredType {} + private static class Price { @NonNull @@ -178,17 +190,20 @@ public final class SponsoredHotel @NonNull final String mPrice; @NonNull - final String mUrlBook; + final String mUrl; @NonNull final String mUrlDescription; + @SponsoredType + private final int mType; - public SponsoredHotel(@NonNull String rating, @NonNull String price, @NonNull String urlBook, - @NonNull String urlDescription) + public Sponsored(@NonNull String rating, @NonNull String price, @NonNull String url, + @NonNull String urlDescription, @SponsoredType int type) { mRating = rating; mPrice = price; - mUrlBook = urlBook; + mUrl = url; mUrlDescription = urlDescription; + mType = type; } void updateId(MapObject point) @@ -215,9 +230,9 @@ public final class SponsoredHotel } @NonNull - public String getUrlBook() + public String getUrl() { - return mUrlBook; + return mUrl; } @NonNull @@ -226,6 +241,12 @@ public final class SponsoredHotel return mUrlDescription; } + @SponsoredType + public int getType() + { + return mType; + } + static void setPriceListener(@NonNull OnPriceReceivedListener listener) { sPriceListener = new WeakReference<>(listener); @@ -253,6 +274,29 @@ public final class SponsoredHotel nativeRequestPrice(id, currencyCode); } + + static void requestInfo(Sponsored sponsored, String locale) + { + String id = sponsored.getId(); + if (id == null) + return; + + switch (sponsored.getType()) + { + case TYPE_BOOKING: + requestHotelInfo(locale, id); + break; + case TYPE_GEOCHAT: +// TODO: request geochat info + break; + case TYPE_OPENTABLE: +// TODO: request opentable info + break; + case TYPE_NONE: + break; + } + } + /** * Make request to obtain hotel information. * This method also checks cache for requested hotel id @@ -261,13 +305,13 @@ public final class SponsoredHotel * @param id A Hotel id * @param locale A user locale */ - static void requestInfo(String id, String locale) + private static void requestHotelInfo(String id, String locale) { HotelInfo info = sInfoCache.get(id); if (info != null) onInfoReceived(id, info); - nativeRequestInfo(id, locale); + nativeRequestHotelInfo(id, locale); } private static void onPriceReceived(@NonNull String id, @NonNull String price, @@ -294,9 +338,9 @@ public final class SponsoredHotel } @Nullable - public static native SponsoredHotel nativeGetCurrent(); + public static native Sponsored nativeGetCurrent(); private static native void nativeRequestPrice(@NonNull String id, @NonNull String currencyCode); - private static native void nativeRequestInfo(@NonNull String id, @NonNull String locale); + private static native void nativeRequestHotelInfo(@NonNull String id, @NonNull String locale); } diff --git a/android/src/com/mapswithme/util/sharing/MapObjectShareable.java b/android/src/com/mapswithme/util/sharing/MapObjectShareable.java index de59c16923..b427e1e2f9 100644 --- a/android/src/com/mapswithme/util/sharing/MapObjectShareable.java +++ b/android/src/com/mapswithme/util/sharing/MapObjectShareable.java @@ -8,12 +8,12 @@ import android.text.TextUtils; import com.mapswithme.maps.Framework; import com.mapswithme.maps.R; import com.mapswithme.maps.bookmarks.data.MapObject; -import com.mapswithme.maps.widget.placepage.SponsoredHotel; +import com.mapswithme.maps.widget.placepage.Sponsored; import com.mapswithme.util.statistics.Statistics; class MapObjectShareable extends BaseShareable { - MapObjectShareable(Activity context, @NonNull MapObject mapObject, @Nullable SponsoredHotel sponsoredHotel) + MapObjectShareable(Activity context, @NonNull MapObject mapObject, @Nullable Sponsored sponsored) { super(context); @@ -40,10 +40,10 @@ class MapObjectShareable extends BaseShareable lineWithBreak(mapObject.getAddress()) + lineWithBreak(ge0Url); - if (sponsoredHotel != null) + if (sponsored != null) { text += lineWithBreak(activity.getString(R.string.sharing_booking)) + - sponsoredHotel.getUrlBook(); + sponsored.getUrl(); } } diff --git a/android/src/com/mapswithme/util/sharing/ShareOption.java b/android/src/com/mapswithme/util/sharing/ShareOption.java index 7b7ce2497b..ae34b022a2 100644 --- a/android/src/com/mapswithme/util/sharing/ShareOption.java +++ b/android/src/com/mapswithme/util/sharing/ShareOption.java @@ -10,7 +10,7 @@ import android.support.annotation.StringRes; import com.mapswithme.maps.Framework; import com.mapswithme.maps.R; import com.mapswithme.maps.bookmarks.data.MapObject; -import com.mapswithme.maps.widget.placepage.SponsoredHotel; +import com.mapswithme.maps.widget.placepage.Sponsored; import com.mapswithme.util.Utils; import com.mapswithme.util.statistics.Statistics; @@ -35,9 +35,9 @@ public abstract class ShareOption return Utils.isIntentSupported(context, mBaseIntent); } - public void shareMapObject(Activity activity, @NonNull MapObject mapObject, @Nullable SponsoredHotel sponsoredHotel) + public void shareMapObject(Activity activity, @NonNull MapObject mapObject, @Nullable Sponsored sponsored) { - SharingHelper.shareOutside(new MapObjectShareable(activity, mapObject, sponsoredHotel) + SharingHelper.shareOutside(new MapObjectShareable(activity, mapObject, sponsored) .setBaseIntent(new Intent(mBaseIntent)), mNameResId); } @@ -57,7 +57,7 @@ public abstract class ShareOption } @Override - public void shareMapObject(Activity activity, MapObject mapObject, SponsoredHotel sponsoredHotel) + public void shareMapObject(Activity activity, MapObject mapObject, Sponsored sponsored) { final String ge0Url = Framework.nativeGetGe0Url(mapObject.getLat(), mapObject.getLon(), mapObject.getScale(), ""); final String httpUrl = Framework.getHttpGe0Url(mapObject.getLat(), mapObject.getLon(), mapObject.getScale(), ""); diff --git a/android/src/com/mapswithme/util/statistics/Statistics.java b/android/src/com/mapswithme/util/statistics/Statistics.java index 0b77c7be9d..c4bff961b7 100644 --- a/android/src/com/mapswithme/util/statistics/Statistics.java +++ b/android/src/com/mapswithme/util/statistics/Statistics.java @@ -70,6 +70,7 @@ public enum Statistics public static final String PP_ROUTE = "PP. Route"; public static final String PP_SPONSORED_DETAILS = "Placepage_Hotel_details"; public static final String PP_SPONSORED_BOOK = "Placepage_Hotel_book"; + public static final String PP_SPONSORED_OPENTABLE = "Placepage_Restaurant_book"; public static final String PP_DIRECTION_ARROW = "PP. DirectionArrow"; public static final String PP_DIRECTION_ARROW_CLOSE = "PP. DirectionArrowClose"; public static final String PP_METADATA_COPY = "PP. CopyMetadata"; From c2feaa3387e53b56a38a0637194ab40d0bea3775 Mon Sep 17 00:00:00 2001 From: Roman Romanov Date: Fri, 21 Oct 2016 08:30:16 +0400 Subject: [PATCH 10/16] [android] Review fixes --- ...mg_logo_opentable.png => ic_opentable.png} | Bin ...mg_logo_opentable.png => ic_opentable.png} | Bin ...mg_logo_opentable.png => ic_opentable.png} | Bin ...mg_logo_opentable.png => ic_opentable.png} | Bin ...mg_logo_opentable.png => ic_opentable.png} | Bin .../widget/placepage/PlacePageButtons.java | 2 +- .../maps/widget/placepage/PlacePageView.java | 27 +++++++++--------- 7 files changed, 15 insertions(+), 14 deletions(-) rename android/res/drawable-hdpi/{img_logo_opentable.png => ic_opentable.png} (100%) rename android/res/drawable-mdpi/{img_logo_opentable.png => ic_opentable.png} (100%) rename android/res/drawable-xhdpi/{img_logo_opentable.png => ic_opentable.png} (100%) rename android/res/drawable-xxhdpi/{img_logo_opentable.png => ic_opentable.png} (100%) rename android/res/drawable-xxxhdpi/{img_logo_opentable.png => ic_opentable.png} (100%) diff --git a/android/res/drawable-hdpi/img_logo_opentable.png b/android/res/drawable-hdpi/ic_opentable.png similarity index 100% rename from android/res/drawable-hdpi/img_logo_opentable.png rename to android/res/drawable-hdpi/ic_opentable.png diff --git a/android/res/drawable-mdpi/img_logo_opentable.png b/android/res/drawable-mdpi/ic_opentable.png similarity index 100% rename from android/res/drawable-mdpi/img_logo_opentable.png rename to android/res/drawable-mdpi/ic_opentable.png diff --git a/android/res/drawable-xhdpi/img_logo_opentable.png b/android/res/drawable-xhdpi/ic_opentable.png similarity index 100% rename from android/res/drawable-xhdpi/img_logo_opentable.png rename to android/res/drawable-xhdpi/ic_opentable.png diff --git a/android/res/drawable-xxhdpi/img_logo_opentable.png b/android/res/drawable-xxhdpi/ic_opentable.png similarity index 100% rename from android/res/drawable-xxhdpi/img_logo_opentable.png rename to android/res/drawable-xxhdpi/ic_opentable.png diff --git a/android/res/drawable-xxxhdpi/img_logo_opentable.png b/android/res/drawable-xxxhdpi/ic_opentable.png similarity index 100% rename from android/res/drawable-xxxhdpi/img_logo_opentable.png rename to android/res/drawable-xxxhdpi/ic_opentable.png diff --git a/android/src/com/mapswithme/maps/widget/placepage/PlacePageButtons.java b/android/src/com/mapswithme/maps/widget/placepage/PlacePageButtons.java index 6e3575db51..c9e1335ce4 100644 --- a/android/src/com/mapswithme/maps/widget/placepage/PlacePageButtons.java +++ b/android/src/com/mapswithme/maps/widget/placepage/PlacePageButtons.java @@ -58,7 +58,7 @@ final class PlacePageButtons @Override int getIcon() { - return R.drawable.img_logo_opentable; + return R.drawable.ic_opentable; } }, diff --git a/android/src/com/mapswithme/maps/widget/placepage/PlacePageView.java b/android/src/com/mapswithme/maps/widget/placepage/PlacePageView.java index 0d4380230d..bb99e1d3cf 100644 --- a/android/src/com/mapswithme/maps/widget/placepage/PlacePageView.java +++ b/android/src/com/mapswithme/maps/widget/placepage/PlacePageView.java @@ -110,9 +110,9 @@ public class PlacePageView extends RelativeLayout private ArrowView mAvDirection; private TextView mTvDistance; private TextView mTvAddress; - private View mHotelInfo; - private TextView mTvHotelRating; - private TextView mTvHotelPrice; + private View mSponsoredInfo; + private TextView mTvSponsoredRating; + private TextView mTvSponsoredPrice; // Details. private ScrollView mDetails; private View mPhone; @@ -265,9 +265,9 @@ public class PlacePageView extends RelativeLayout mTvAddress = (TextView) mPreview.findViewById(R.id.tv__address); - mHotelInfo = mPreview.findViewById(R.id.hotel_info_frame); - mTvHotelRating = (TextView) mHotelInfo.findViewById(R.id.tv__hotel_rating); - mTvHotelPrice = (TextView) mHotelInfo.findViewById(R.id.tv__hotel_price); + mSponsoredInfo = mPreview.findViewById(R.id.hotel_info_frame); + mTvSponsoredRating = (TextView) mSponsoredInfo.findViewById(R.id.tv__hotel_rating); + mTvSponsoredPrice = (TextView) mSponsoredInfo.findViewById(R.id.tv__hotel_price); mDetails = (ScrollView) findViewById(R.id.pp__details); RelativeLayout address = (RelativeLayout) mDetails.findViewById(R.id.ll__place_name); @@ -410,7 +410,7 @@ public class PlacePageView extends RelativeLayout case BOOKING: case OPENTABLE: - onBookingClick(true /* book */); + onSponsoredClick(true /* book */); break; } } @@ -639,7 +639,7 @@ public class PlacePageView extends RelativeLayout // TODO go to selected object on map } - private void onBookingClick(final boolean book) + private void onSponsoredClick(final boolean book) { // TODO (trashkalmar): Set correct text Utils.checkConnection(getActivity(), R.string.common_check_internet_connection_dialog, new Utils.Proc() @@ -685,7 +685,8 @@ public class PlacePageView extends RelativeLayout try { followUrl(book ? info.mUrl : info.mUrlDescription); - } catch (ActivityNotFoundException e) + } + catch (ActivityNotFoundException e) { AlohaHelper.logException(e); } @@ -878,11 +879,11 @@ public class PlacePageView extends RelativeLayout UiUtils.setTextAndHideIfEmpty(mTvAddress, mMapObject.getAddress()); boolean sponsored = (mSponsored != null); - UiUtils.showIf(sponsored, mHotelInfo); + UiUtils.showIf(sponsored, mSponsoredInfo); if (sponsored) { - mTvHotelRating.setText(mSponsored.mRating); - UiUtils.setTextAndHideIfEmpty(mTvHotelPrice, mSponsoredPrice); + UiUtils.setTextAndHideIfEmpty(mTvSponsoredRating, mSponsored.mRating); + UiUtils.setTextAndHideIfEmpty(mTvSponsoredPrice, mSponsoredPrice); } } @@ -1176,7 +1177,7 @@ public class PlacePageView extends RelativeLayout addPlace(); break; case R.id.ll__more: - onBookingClick(false /* book */); + onSponsoredClick(false /* book */); break; case R.id.ll__place_latlon: mIsLatLonDms = !mIsLatLonDms; From af3ff28dc71b105ddb38e158a984f02db8bf5721 Mon Sep 17 00:00:00 2001 From: Roman Romanov Date: Fri, 21 Oct 2016 12:50:50 +0400 Subject: [PATCH 11/16] [android] Reformat code --- .../maps/widget/placepage/PlacePageView.java | 96 ++++++++++--------- 1 file changed, 50 insertions(+), 46 deletions(-) diff --git a/android/src/com/mapswithme/maps/widget/placepage/PlacePageView.java b/android/src/com/mapswithme/maps/widget/placepage/PlacePageView.java index bb99e1d3cf..8f589ebced 100644 --- a/android/src/com/mapswithme/maps/widget/placepage/PlacePageView.java +++ b/android/src/com/mapswithme/maps/widget/placepage/PlacePageView.java @@ -642,56 +642,60 @@ public class PlacePageView extends RelativeLayout private void onSponsoredClick(final boolean book) { // TODO (trashkalmar): Set correct text - Utils.checkConnection(getActivity(), R.string.common_check_internet_connection_dialog, new Utils.Proc() - { - @Override - public void invoke(Boolean result) - { - if (!result) - return; + Utils.checkConnection( + getActivity(), R.string.common_check_internet_connection_dialog, new Utils.Proc() { + @Override + public void invoke(Boolean result) + { + if (!result) + return; - Sponsored info = mSponsored; - if (info == null) - return; + Sponsored info = mSponsored; + if (info == null) + return; - String event = Statistics.EventName.PP_SPONSORED_BOOK; - Map params = new HashMap<>(); - switch (info.getType()) - { - case Sponsored.TYPE_BOOKING: - params.put("provider", "Booking.Com"); - params.put("hotel_lat", (mMapObject == null ? "N/A" : String.valueOf(mMapObject.getLat()))); - params.put("hotel_lon", (mMapObject == null ? "N/A" : String.valueOf(mMapObject.getLon()))); - params.put("hotel", info.getId()); - event = (book ? Statistics.EventName.PP_SPONSORED_BOOK - : Statistics.EventName.PP_SPONSORED_DETAILS); - break; - case Sponsored.TYPE_GEOCHAT: - break; - case Sponsored.TYPE_OPENTABLE: - params.put("provider", "Opentable.Com"); - params.put("restaurant_lat", (mMapObject == null ? "N/A" : String.valueOf(mMapObject.getLat()))); - params.put("restaurant_lon", (mMapObject == null ? "N/A" : String.valueOf(mMapObject.getLon()))); - params.put("restaurant", info.getId()); - event = Statistics.EventName.PP_SPONSORED_OPENTABLE; - break; - case Sponsored.TYPE_NONE: - break; - } + String event = Statistics.EventName.PP_SPONSORED_BOOK; + Map params = new HashMap<>(); + switch (info.getType()) + { + case Sponsored.TYPE_BOOKING: + params.put("provider", "Booking.Com"); + params.put("hotel_lat", + (mMapObject == null ? "N/A" : String.valueOf(mMapObject.getLat()))); + params.put("hotel_lon", + (mMapObject == null ? "N/A" : String.valueOf(mMapObject.getLon()))); + params.put("hotel", info.getId()); + event = (book ? Statistics.EventName.PP_SPONSORED_BOOK + : Statistics.EventName.PP_SPONSORED_DETAILS); + break; + case Sponsored.TYPE_GEOCHAT: + break; + case Sponsored.TYPE_OPENTABLE: + params.put("provider", "Opentable.Com"); + params.put("restaurant_lat", + (mMapObject == null ? "N/A" : String.valueOf(mMapObject.getLat()))); + params.put("restaurant_lon", + (mMapObject == null ? "N/A" : String.valueOf(mMapObject.getLon()))); + params.put("restaurant", info.getId()); + event = Statistics.EventName.PP_SPONSORED_OPENTABLE; + break; + case Sponsored.TYPE_NONE: + break; + } - final Location location = LocationHelper.INSTANCE.getLastKnownLocation(); - Statistics.INSTANCE.trackEvent(event, location, params); + final Location location = LocationHelper.INSTANCE.getLastKnownLocation(); + Statistics.INSTANCE.trackEvent(event, location, params); - try - { - followUrl(book ? info.mUrl : info.mUrlDescription); - } - catch (ActivityNotFoundException e) - { - AlohaHelper.logException(e); - } - } - }); + try + { + followUrl(book ? info.mUrl : info.mUrlDescription); + } + catch (ActivityNotFoundException e) + { + AlohaHelper.logException(e); + } + } + }); } private void init(AttributeSet attrs, int defStyleAttr) From 4dc1d18ca59710b3433a92b7d227598e89cfb310 Mon Sep 17 00:00:00 2001 From: Roman Romanov Date: Fri, 21 Oct 2016 16:32:46 +0400 Subject: [PATCH 12/16] [android] Review fixes --- android/res/drawable-v21/button_opentable.xml | 2 +- android/res/drawable/button_opentable.xml | 2 +- .../com/mapswithme/maps/widget/placepage/PlacePageView.java | 4 ++-- android/src/com/mapswithme/util/statistics/Statistics.java | 1 + 4 files changed, 5 insertions(+), 4 deletions(-) diff --git a/android/res/drawable-v21/button_opentable.xml b/android/res/drawable-v21/button_opentable.xml index 5a53fc2199..e1b31e63e2 100644 --- a/android/res/drawable-v21/button_opentable.xml +++ b/android/res/drawable-v21/button_opentable.xml @@ -6,4 +6,4 @@ - \ No newline at end of file + diff --git a/android/res/drawable/button_opentable.xml b/android/res/drawable/button_opentable.xml index c1a484c3de..fcbddd3705 100644 --- a/android/res/drawable/button_opentable.xml +++ b/android/res/drawable/button_opentable.xml @@ -4,4 +4,4 @@ android:state_pressed="true"/> - \ No newline at end of file + diff --git a/android/src/com/mapswithme/maps/widget/placepage/PlacePageView.java b/android/src/com/mapswithme/maps/widget/placepage/PlacePageView.java index 8f589ebced..a26dd2e0d3 100644 --- a/android/src/com/mapswithme/maps/widget/placepage/PlacePageView.java +++ b/android/src/com/mapswithme/maps/widget/placepage/PlacePageView.java @@ -654,7 +654,7 @@ public class PlacePageView extends RelativeLayout if (info == null) return; - String event = Statistics.EventName.PP_SPONSORED_BOOK; + String event = Statistics.EventName.PP_SPONSORED_NONE; Map params = new HashMap<>(); switch (info.getType()) { @@ -882,7 +882,7 @@ public class PlacePageView extends RelativeLayout UiUtils.hide(mAvDirection); UiUtils.setTextAndHideIfEmpty(mTvAddress, mMapObject.getAddress()); - boolean sponsored = (mSponsored != null); + boolean sponsored = (mSponsored != null && mSponsored.getType() != Sponsored.TYPE_NONE); UiUtils.showIf(sponsored, mSponsoredInfo); if (sponsored) { diff --git a/android/src/com/mapswithme/util/statistics/Statistics.java b/android/src/com/mapswithme/util/statistics/Statistics.java index c4bff961b7..7cd53af5ae 100644 --- a/android/src/com/mapswithme/util/statistics/Statistics.java +++ b/android/src/com/mapswithme/util/statistics/Statistics.java @@ -71,6 +71,7 @@ public enum Statistics public static final String PP_SPONSORED_DETAILS = "Placepage_Hotel_details"; public static final String PP_SPONSORED_BOOK = "Placepage_Hotel_book"; public static final String PP_SPONSORED_OPENTABLE = "Placepage_Restaurant_book"; + public static final String PP_SPONSORED_NONE = "Placepage_Sponsored_none"; public static final String PP_DIRECTION_ARROW = "PP. DirectionArrow"; public static final String PP_DIRECTION_ARROW_CLOSE = "PP. DirectionArrowClose"; public static final String PP_METADATA_COPY = "PP. CopyMetadata"; From 795cbd14c4071208b4c2f236d23413c8a972f5fb Mon Sep 17 00:00:00 2001 From: alexzatsepin Date: Fri, 21 Oct 2016 19:35:55 +0300 Subject: [PATCH 13/16] [android] Fixed the order of parameters in booking info request --- android/jni/com/mapswithme/maps/Sponsored.cpp | 2 +- .../maps/widget/placepage/PlacePageView.java | 12 +++++------ .../maps/widget/placepage/Sponsored.java | 20 +++++++++---------- 3 files changed, 17 insertions(+), 17 deletions(-) diff --git a/android/jni/com/mapswithme/maps/Sponsored.cpp b/android/jni/com/mapswithme/maps/Sponsored.cpp index 0b2b234470..ac8bb04fc5 100644 --- a/android/jni/com/mapswithme/maps/Sponsored.cpp +++ b/android/jni/com/mapswithme/maps/Sponsored.cpp @@ -65,7 +65,7 @@ void PrepareClassRefs(JNIEnv * env, jclass sponsoredClass) "(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V"); // static void onDescriptionReceived(final String id, final String description) g_infoCallback = jni::GetStaticMethodID( - env, g_sponsoredClass, "onInfoReceived", + env, g_sponsoredClass, "onHotelInfoReceived", "(Ljava/lang/String;Lcom/mapswithme/maps/widget/placepage/Sponsored$HotelInfo;)V"); } diff --git a/android/src/com/mapswithme/maps/widget/placepage/PlacePageView.java b/android/src/com/mapswithme/maps/widget/placepage/PlacePageView.java index a26dd2e0d3..61b9beaa62 100644 --- a/android/src/com/mapswithme/maps/widget/placepage/PlacePageView.java +++ b/android/src/com/mapswithme/maps/widget/placepage/PlacePageView.java @@ -89,7 +89,7 @@ public class PlacePageView extends RelativeLayout implements View.OnClickListener, View.OnLongClickListener, Sponsored.OnPriceReceivedListener, - Sponsored.OnInfoReceivedListener, + Sponsored.OnHotelInfoReceivedListener, LineCountTextView.OnLineCountCalculatedListener, RecyclerClickListener, NearbyAdapter.OnItemClickListener @@ -536,7 +536,7 @@ public class PlacePageView extends RelativeLayout } @Override - public void onInfoReceived(@NonNull String id, @NonNull Sponsored.HotelInfo info) + public void onHotelInfoReceived(@NonNull String id, @NonNull Sponsored.HotelInfo info) { if (mSponsored == null || !TextUtils.equals(id, mSponsored.getId())) return; @@ -654,7 +654,7 @@ public class PlacePageView extends RelativeLayout if (info == null) return; - String event = Statistics.EventName.PP_SPONSORED_NONE; + String event = null; Map params = new HashMap<>(); switch (info.getType()) { @@ -671,7 +671,7 @@ public class PlacePageView extends RelativeLayout case Sponsored.TYPE_GEOCHAT: break; case Sponsored.TYPE_OPENTABLE: - params.put("provider", "Opentable.Com"); + params.put("provider", "OpenTable"); params.put("restaurant_lat", (mMapObject == null ? "N/A" : String.valueOf(mMapObject.getLat()))); params.put("restaurant_lon", @@ -684,7 +684,8 @@ public class PlacePageView extends RelativeLayout } final Location location = LocationHelper.INSTANCE.getLastKnownLocation(); - Statistics.INSTANCE.trackEvent(event, location, params); + if (!TextUtils.isEmpty(event)) + Statistics.INSTANCE.trackEvent(event, location, params); try { @@ -1024,7 +1025,6 @@ public class PlacePageView extends RelativeLayout { switch (mSponsored.getType()) { - case Sponsored.TYPE_BOOKING: buttons.add(PlacePageButtons.Item.BOOKING); break; diff --git a/android/src/com/mapswithme/maps/widget/placepage/Sponsored.java b/android/src/com/mapswithme/maps/widget/placepage/Sponsored.java index d3dd79efc5..61296a9dce 100644 --- a/android/src/com/mapswithme/maps/widget/placepage/Sponsored.java +++ b/android/src/com/mapswithme/maps/widget/placepage/Sponsored.java @@ -158,7 +158,7 @@ public final class Sponsored void onPriceReceived(@NonNull String id, @NonNull String price, @NonNull String currency); } - interface OnInfoReceivedListener + interface OnHotelInfoReceivedListener { /** * This method is called from the native core on the UI thread @@ -168,7 +168,7 @@ public final class Sponsored * @param info A hotel info */ @UiThread - void onInfoReceived(@NonNull String id, @NonNull HotelInfo info); + void onHotelInfoReceived(@NonNull String id, @NonNull HotelInfo info); } // Hotel ID -> Price @@ -180,7 +180,7 @@ public final class Sponsored @NonNull private static WeakReference sPriceListener = new WeakReference<>(null); @NonNull - private static WeakReference sInfoListener = new WeakReference<>(null); + private static WeakReference sInfoListener = new WeakReference<>(null); @Nullable private String mId; @@ -252,7 +252,7 @@ public final class Sponsored sPriceListener = new WeakReference<>(listener); } - static void setInfoListener(@NonNull OnInfoReceivedListener listener) + static void setInfoListener(@NonNull OnHotelInfoReceivedListener listener) { sInfoListener = new WeakReference<>(listener); } @@ -284,7 +284,7 @@ public final class Sponsored switch (sponsored.getType()) { case TYPE_BOOKING: - requestHotelInfo(locale, id); + requestHotelInfo(id, locale); break; case TYPE_GEOCHAT: // TODO: request geochat info @@ -300,7 +300,7 @@ public final class Sponsored /** * Make request to obtain hotel information. * This method also checks cache for requested hotel id - * and if cache exists - call {@link #onInfoReceived(String, HotelInfo) onInfoReceived} immediately + * and if cache exists - call {@link #onHotelInfoReceived(String, HotelInfo) onHotelInfoReceived} immediately * * @param id A Hotel id * @param locale A user locale @@ -309,7 +309,7 @@ public final class Sponsored { HotelInfo info = sInfoCache.get(id); if (info != null) - onInfoReceived(id, info); + onHotelInfoReceived(id, info); nativeRequestHotelInfo(id, locale); } @@ -328,13 +328,13 @@ public final class Sponsored listener.onPriceReceived(id, price, currency); } - private static void onInfoReceived(@NonNull String id, @NonNull HotelInfo info) + private static void onHotelInfoReceived(@NonNull String id, @NonNull HotelInfo info) { sInfoCache.put(id, info); - OnInfoReceivedListener listener = sInfoListener.get(); + OnHotelInfoReceivedListener listener = sInfoListener.get(); if (listener != null) - listener.onInfoReceived(id, info); + listener.onHotelInfoReceived(id, info); } @Nullable From 5b4a5843fd783b497c25c980eaed62e7e25ece71 Mon Sep 17 00:00:00 2001 From: alexzatsepin Date: Fri, 21 Oct 2016 20:11:19 +0300 Subject: [PATCH 14/16] [android] Reverted the returning empty string when rating is absent --- map/place_page_info.cpp | 11 +++++------ map/place_page_info.hpp | 1 + 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/map/place_page_info.cpp b/map/place_page_info.cpp index f1d2c4460b..2d5e30b1bf 100644 --- a/map/place_page_info.cpp +++ b/map/place_page_info.cpp @@ -10,6 +10,7 @@ namespace place_page char const * const Info::kSubtitleSeparator = " • "; char const * const Info::kStarSymbol = "★"; char const * const Info::kMountainSymbol = "▲"; +char const * const Info::kEmptyRatingSymbol = "-"; char const * const Info::kPricingSymbol = "$"; bool Info::IsFeature() const { return m_featureID.IsValid(); } @@ -122,11 +123,9 @@ string Info::GetRatingFormatted() const if (!IsSponsored()) return string(); - auto const rating = GetMetadata().Get(feature::Metadata::FMD_RATING); - if (rating.empty()) - return rating; - - int const size = snprintf(nullptr, 0, m_localizedRatingString.c_str(), rating.c_str()); + auto const r = GetMetadata().Get(feature::Metadata::FMD_RATING); + char const * rating = r.empty() ? kEmptyRatingSymbol : r.c_str(); + int const size = snprintf(nullptr, 0, m_localizedRatingString.c_str(), rating); if (size < 0) { LOG(LERROR, ("Incorrect size for string:", m_localizedRatingString, ", rating:", rating)); @@ -134,7 +133,7 @@ string Info::GetRatingFormatted() const } vector buf(size + 1); - snprintf(buf.data(), buf.size(), m_localizedRatingString.c_str(), rating.c_str()); + snprintf(buf.data(), buf.size(), m_localizedRatingString.c_str(), rating); return string(buf.begin(), buf.end()); } diff --git a/map/place_page_info.hpp b/map/place_page_info.hpp index db316b300b..29f9bc42be 100644 --- a/map/place_page_info.hpp +++ b/map/place_page_info.hpp @@ -30,6 +30,7 @@ public: static char const * const kSubtitleSeparator; static char const * const kStarSymbol; static char const * const kMountainSymbol; + static char const * const kEmptyRatingSymbol; static char const * const kPricingSymbol; bool IsFeature() const; From 1e1110de8b438d20222340856c46b0f17ab1d83b Mon Sep 17 00:00:00 2001 From: alexzatsepin Date: Fri, 21 Oct 2016 20:12:27 +0300 Subject: [PATCH 15/16] [android] Changed the string key for book button --- android/res/values-de/strings.xml | 2 +- android/res/values-fi/strings.xml | 2 +- android/res/values-fr/strings.xml | 2 +- android/res/values-hu/strings.xml | 2 +- android/res/values-pt/strings.xml | 2 +- android/res/values-ru/strings.xml | 2 +- android/res/values-sk/strings.xml | 2 +- android/res/values-tr/strings.xml | 2 +- android/res/values-vi/strings.xml | 2 +- android/res/values-zh/strings.xml | 2 +- 10 files changed, 10 insertions(+), 10 deletions(-) diff --git a/android/res/values-de/strings.xml b/android/res/values-de/strings.xml index f01ad0ebd0..e73ab6395a 100644 --- a/android/res/values-de/strings.xml +++ b/android/res/values-de/strings.xml @@ -880,7 +880,7 @@ min Beschreibung Mehr - Buchen + Buchen Anruf Lesezeichen bearbeiten Name des Lesezeichens diff --git a/android/res/values-fi/strings.xml b/android/res/values-fi/strings.xml index 3bee475c60..095e1f20bd 100644 --- a/android/res/values-fi/strings.xml +++ b/android/res/values-fi/strings.xml @@ -862,7 +862,7 @@ min Kuvaus Lisää - Varaa + Varaa Soita Muokkaa kirjanmerkkiä Kirjanmerkin nimi diff --git a/android/res/values-fr/strings.xml b/android/res/values-fr/strings.xml index 6f04a8e04a..183099f785 100644 --- a/android/res/values-fr/strings.xml +++ b/android/res/values-fr/strings.xml @@ -879,7 +879,7 @@ min Description Plus - Réserver + Réserver Appeler Éditer les signets Nom du signet diff --git a/android/res/values-hu/strings.xml b/android/res/values-hu/strings.xml index 794139dd87..cd7c7738b7 100644 --- a/android/res/values-hu/strings.xml +++ b/android/res/values-hu/strings.xml @@ -862,7 +862,7 @@ p Leírás Még - Foglalás + Foglalás Hívás Könyvjelző szerkesztése Könyvjelző neve diff --git a/android/res/values-pt/strings.xml b/android/res/values-pt/strings.xml index bbc2e6287b..8ff49efe2f 100644 --- a/android/res/values-pt/strings.xml +++ b/android/res/values-pt/strings.xml @@ -861,7 +861,7 @@ min Descrição Mais - Livro + Livro Chamada Editar marcador Nome do marcador diff --git a/android/res/values-ru/strings.xml b/android/res/values-ru/strings.xml index 89f73ee115..1f305964b3 100644 --- a/android/res/values-ru/strings.xml +++ b/android/res/values-ru/strings.xml @@ -881,7 +881,7 @@ Описание Ещё Ещё отзывы - Забронировать + Забронировать Позвонить Редактировать метку Название метки diff --git a/android/res/values-sk/strings.xml b/android/res/values-sk/strings.xml index b3b3b9f89e..95585d1add 100644 --- a/android/res/values-sk/strings.xml +++ b/android/res/values-sk/strings.xml @@ -865,7 +865,7 @@ min Popis Viac - Rezervovať + Rezervovať Zavolať Upraviť záložku Názov záložky diff --git a/android/res/values-tr/strings.xml b/android/res/values-tr/strings.xml index e53d8a0013..532a52903c 100644 --- a/android/res/values-tr/strings.xml +++ b/android/res/values-tr/strings.xml @@ -868,7 +868,7 @@ dk Açıklama Diğer - Rezervasyon + Rezervasyon Çağrı Yer İmini Düzenle Yer İmi Adı diff --git a/android/res/values-vi/strings.xml b/android/res/values-vi/strings.xml index f7a949615a..64ba555112 100644 --- a/android/res/values-vi/strings.xml +++ b/android/res/values-vi/strings.xml @@ -862,7 +862,7 @@ phút Mô tả Bổ sung - Đặt trước + Đặt trước Gọi Sửa Dấu Trang Tên Dấu Trang diff --git a/android/res/values-zh/strings.xml b/android/res/values-zh/strings.xml index db7e231f50..0938b6292c 100644 --- a/android/res/values-zh/strings.xml +++ b/android/res/values-zh/strings.xml @@ -868,7 +868,7 @@ 分鐘 说明 更多 - 预約 + 预約 呼叫 编辑书签 书签名称 From 4b48bd3a366885bc36ef8178b94f7dd97f28192c Mon Sep 17 00:00:00 2001 From: alexzatsepin Date: Fri, 21 Oct 2016 20:14:28 +0300 Subject: [PATCH 16/16] [android] Changed the string key for book button --- android/res/values-ar/strings.xml | 2 +- android/res/values-cs/strings.xml | 2 +- android/res/values-da/strings.xml | 2 +- android/res/values-es/strings.xml | 2 +- android/res/values-in/strings.xml | 2 +- android/res/values-it/strings.xml | 2 +- android/res/values-ja/strings.xml | 2 +- android/res/values-ko/strings.xml | 2 +- android/res/values-nb/strings.xml | 2 +- android/res/values-nl/strings.xml | 2 +- android/res/values-pl/strings.xml | 2 +- android/res/values-ro/strings.xml | 2 +- android/res/values-sv/strings.xml | 2 +- android/res/values-th/strings.xml | 2 +- android/res/values-uk/strings.xml | 2 +- android/res/values-zh-rTW/strings.xml | 2 +- android/res/values/strings.xml | 2 +- .../mapswithme/maps/widget/placepage/PlacePageButtons.java | 4 ++-- .../com/mapswithme/maps/widget/placepage/PlacePageView.java | 4 +++- strings.txt | 2 +- 20 files changed, 23 insertions(+), 21 deletions(-) diff --git a/android/res/values-ar/strings.xml b/android/res/values-ar/strings.xml index e4b4480cc3..a85932d1d3 100644 --- a/android/res/values-ar/strings.xml +++ b/android/res/values-ar/strings.xml @@ -868,7 +868,7 @@ د الوصف المزيد - حجز + حجز اتصال تحرير العلامة المرجعية اسم العلامة المرجعية diff --git a/android/res/values-cs/strings.xml b/android/res/values-cs/strings.xml index 2879db6784..1419524638 100644 --- a/android/res/values-cs/strings.xml +++ b/android/res/values-cs/strings.xml @@ -869,7 +869,7 @@ min Popis Více - Rezervace + Rezervace Volat Upravit záložku Název záložky diff --git a/android/res/values-da/strings.xml b/android/res/values-da/strings.xml index 397e81f0e7..b02309a96a 100644 --- a/android/res/values-da/strings.xml +++ b/android/res/values-da/strings.xml @@ -866,7 +866,7 @@ min Beskrivelse Mere - Bog + Bog Ring Rediger bogmærke Bogmærke diff --git a/android/res/values-es/strings.xml b/android/res/values-es/strings.xml index 6faa1fee13..7cf5668e64 100644 --- a/android/res/values-es/strings.xml +++ b/android/res/values-es/strings.xml @@ -855,7 +855,7 @@ min Descripción Más - Reservar + Reservar Llamar Editar marcador Nombre del marcador diff --git a/android/res/values-in/strings.xml b/android/res/values-in/strings.xml index a40eb6ca59..7829c604a7 100644 --- a/android/res/values-in/strings.xml +++ b/android/res/values-in/strings.xml @@ -861,7 +861,7 @@ mnt Deskripsi Lainnya - Pesan + Pesan Hubungi Edit Bookmark Nama Bookmark diff --git a/android/res/values-it/strings.xml b/android/res/values-it/strings.xml index 85092082bb..549b48fb53 100644 --- a/android/res/values-it/strings.xml +++ b/android/res/values-it/strings.xml @@ -861,7 +861,7 @@ min Descrizione Altro - Prenota + Prenota Chiama Modifica segnalibro Nome segnalibro diff --git a/android/res/values-ja/strings.xml b/android/res/values-ja/strings.xml index 51688a48bd..bc8a43eed0 100644 --- a/android/res/values-ja/strings.xml +++ b/android/res/values-ja/strings.xml @@ -861,7 +861,7 @@ 説明 さらに詳しく - 予約 + 予約 コール ブックマークを編集 ブックマーク名 diff --git a/android/res/values-ko/strings.xml b/android/res/values-ko/strings.xml index 01009a0fab..3d85a9fd94 100644 --- a/android/res/values-ko/strings.xml +++ b/android/res/values-ko/strings.xml @@ -858,7 +858,7 @@ min 설명 자세히 - 예약 + 예약 전화 즐겨찾기 편집 즐겨찾기 이름 diff --git a/android/res/values-nb/strings.xml b/android/res/values-nb/strings.xml index 79a11af2fb..b5431626da 100644 --- a/android/res/values-nb/strings.xml +++ b/android/res/values-nb/strings.xml @@ -860,7 +860,7 @@ min Beskrivelse Mer - Bestill + Bestill Ring Rediger bokmerke Bokmerkenavn diff --git a/android/res/values-nl/strings.xml b/android/res/values-nl/strings.xml index 864332fd34..b7ef6b6d5f 100644 --- a/android/res/values-nl/strings.xml +++ b/android/res/values-nl/strings.xml @@ -862,7 +862,7 @@ min Beschrijving Meer - Boeken + Boeken Bellen Bladwijzer bewerken Bladwijzernaam diff --git a/android/res/values-pl/strings.xml b/android/res/values-pl/strings.xml index 292a06ffe6..549c09f27b 100644 --- a/android/res/values-pl/strings.xml +++ b/android/res/values-pl/strings.xml @@ -869,7 +869,7 @@ min Opis Więcej - Zarezerwuj + Zarezerwuj Zadzwoń Edytuj zakładkę Nazwa zakładki diff --git a/android/res/values-ro/strings.xml b/android/res/values-ro/strings.xml index 4613f70567..04479f0063 100644 --- a/android/res/values-ro/strings.xml +++ b/android/res/values-ro/strings.xml @@ -858,7 +858,7 @@ min Descriere Mai multe - Rezervare + Rezervare Apel Editare marcaj Nume marcaj diff --git a/android/res/values-sv/strings.xml b/android/res/values-sv/strings.xml index f1008bddc8..6870ac6d10 100644 --- a/android/res/values-sv/strings.xml +++ b/android/res/values-sv/strings.xml @@ -866,7 +866,7 @@ min Beskrivning Mer - Boka + Boka Ring Redigera bokmärke Namn bokmärke diff --git a/android/res/values-th/strings.xml b/android/res/values-th/strings.xml index 66bda98cbe..f13081e555 100644 --- a/android/res/values-th/strings.xml +++ b/android/res/values-th/strings.xml @@ -868,7 +868,7 @@ น. คำอธิบาย เพิ่มเติม - จอง + จอง โทร แก้ไข Bookmark ชื่อของ Bookmark diff --git a/android/res/values-uk/strings.xml b/android/res/values-uk/strings.xml index 11f03e2996..fc8290357a 100644 --- a/android/res/values-uk/strings.xml +++ b/android/res/values-uk/strings.xml @@ -866,7 +866,7 @@ хв Опис Ще - Забронювати + Забронювати Подзвонити Редагувати мiтку Назва мiтки diff --git a/android/res/values-zh-rTW/strings.xml b/android/res/values-zh-rTW/strings.xml index 79b1938e8a..73e1ac9494 100644 --- a/android/res/values-zh-rTW/strings.xml +++ b/android/res/values-zh-rTW/strings.xml @@ -874,7 +874,7 @@ 分鐘 說明 更多 - 預約 + 預約 呼叫 編輯書籤 書籤名稱 diff --git a/android/res/values/strings.xml b/android/res/values/strings.xml index b5b3538358..88981bb6da 100644 --- a/android/res/values/strings.xml +++ b/android/res/values/strings.xml @@ -885,7 +885,7 @@ Description More More Reviews - Book + Book Call Edit Bookmark Bookmark Name diff --git a/android/src/com/mapswithme/maps/widget/placepage/PlacePageButtons.java b/android/src/com/mapswithme/maps/widget/placepage/PlacePageButtons.java index c9e1335ce4..2ad4d585fb 100644 --- a/android/src/com/mapswithme/maps/widget/placepage/PlacePageButtons.java +++ b/android/src/com/mapswithme/maps/widget/placepage/PlacePageButtons.java @@ -37,7 +37,7 @@ final class PlacePageButtons @Override int getTitle() { - return R.string.bookingcom_book_button; + return R.string.book_button; } @Override @@ -52,7 +52,7 @@ final class PlacePageButtons @Override int getTitle() { - return R.string.bookingcom_book_button; + return R.string.book_button; } @Override diff --git a/android/src/com/mapswithme/maps/widget/placepage/PlacePageView.java b/android/src/com/mapswithme/maps/widget/placepage/PlacePageView.java index 61b9beaa62..6c7b313c7e 100644 --- a/android/src/com/mapswithme/maps/widget/placepage/PlacePageView.java +++ b/android/src/com/mapswithme/maps/widget/placepage/PlacePageView.java @@ -683,9 +683,11 @@ public class PlacePageView extends RelativeLayout break; } - final Location location = LocationHelper.INSTANCE.getLastKnownLocation(); if (!TextUtils.isEmpty(event)) + { + Location location = LocationHelper.INSTANCE.getLastKnownLocation(); Statistics.INSTANCE.trackEvent(event, location, params); + } try { diff --git a/strings.txt b/strings.txt index a61a752738..bde5f10f34 100644 --- a/strings.txt +++ b/strings.txt @@ -17875,7 +17875,7 @@ en = More Reviews ru = Ещё отзывы - [bookingcom_book_button] + [book_button] en = Book ru = Забронировать ar = حجز