diff options
author | VladiMihaylenko <vxmihaylenko@gmail.com> | 2016-10-20 17:15:55 +0300 |
---|---|---|
committer | Arsentiy Milchakov <milcars@mapswithme.com> | 2016-10-21 20:34:02 +0300 |
commit | 0d5a084579ab2e1d9ad4340799148b6dc2f083bc (patch) | |
tree | 4c4fb5b726cadce949ca11d2fc1156271ba3443e | |
parent | ac813860e6bcd61cd31b07a328f3603e338ae7cb (diff) |
[ios] Opentable.
-rw-r--r-- | iphone/Maps/Classes/MWMActionBarButton.h | 1 | ||||
-rw-r--r-- | iphone/Maps/Classes/MWMActionBarButton.mm | 6 | ||||
-rw-r--r-- | iphone/Maps/Classes/MWMPlacePageActionBar.h | 1 | ||||
-rw-r--r-- | iphone/Maps/Classes/MWMPlacePageActionBar.mm | 17 | ||||
-rw-r--r-- | iphone/Maps/Classes/MWMPlacePageData.h | 7 | ||||
-rw-r--r-- | iphone/Maps/Classes/MWMPlacePageData.mm | 29 | ||||
-rw-r--r-- | iphone/Maps/Classes/MWMPlacePageEntity.h | 7 | ||||
-rw-r--r-- | iphone/Maps/Classes/MWMPlacePageEntity.mm | 18 | ||||
-rw-r--r-- | iphone/Maps/Classes/MWMPlacePageManager.mm | 29 | ||||
-rw-r--r-- | iphone/Maps/Classes/MWMPlacePageViewManager.mm | 32 | ||||
-rw-r--r-- | iphone/Maps/Classes/Share/MWMShareActivityItem.h | 2 | ||||
-rw-r--r-- | iphone/Maps/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<NSObject> - (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<MWMPlacePageCellType, string>; - (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<UIViewController *>([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<UIViewController *>([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) |