forked from organicmaps/organicmaps
[MAPSME-4183] [ios] Added Booking search button. (#5760)
* [MAPSME-4183] [ios] Added Booking search button. * [MAPSME-4183] Review fixes.
This commit is contained in:
parent
f8c55c90ac
commit
516699a6f6
14 changed files with 103 additions and 30 deletions
|
@ -71,6 +71,7 @@ static NSString * const kStatDownloaderMigrationError = @"Downloader_Migration_e
|
|||
static NSString * const kStatDownloaderMigrationProhibitedDialogue = @"Downloader_Migration_Prohibited_dialogue";
|
||||
static NSString * const kStatDownloaderMigrationStarted = @"Downloader_Migration_started";
|
||||
static NSString * const kStatEdit = @"Edit";
|
||||
static NSString * const kStatEditTime = @"Edit time";
|
||||
static NSString * const kStatEditorAddCancel = @"Editor_Add_cancel";
|
||||
static NSString * const kStatEditorAddClick = @"Editor_Add_click";
|
||||
static NSString * const kStatEditorAddError = @"Editor_Add_error";
|
||||
|
@ -89,7 +90,6 @@ static NSString * const kStatEditorProblemReport = @"Editor_Problem_report";
|
|||
static NSString * const kStatEditorRegRequest = @"Editor_Reg_request";
|
||||
static NSString * const kStatEditorSecondTimeShareClick = @"Editor_SecondTimeShare_click";
|
||||
static NSString * const kStatEditorSecondTimeShareShow = @"Editor_SecondTimeShare_show";
|
||||
static NSString * const kStatEditTime = @"Edit time";
|
||||
static NSString * const kStatError = @"Error";
|
||||
static NSString * const kStatErrorCode = @"error_code";
|
||||
static NSString * const kStatErrorData = @"err_data";
|
||||
|
@ -132,8 +132,8 @@ static NSString * const kStatMiles = @"Miles";
|
|||
static NSString * const kStatMobileInternet = @"Mobile Internet";
|
||||
static NSString * const kStatMoreApps = @"More apps";
|
||||
static NSString * const kStatMyPosition = @"My position";
|
||||
static NSString * const kStatMyTargetAppsDisplayed = @"MyTargetAppsDisplayed";
|
||||
static NSString * const kStatMyTargetAppsClicked = @"MyTargetAppsClicked";
|
||||
static NSString * const kStatMyTargetAppsDisplayed = @"MyTargetAppsDisplayed";
|
||||
static NSString * const kStatName = @"Name";
|
||||
static NSString * const kStatNavigationDashboard = @"Navigation dashboard";
|
||||
static NSString * const kStatNever = @"Never";
|
||||
|
@ -148,8 +148,8 @@ 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";
|
||||
static NSString * const kStatOpenSite = @"Open site";
|
||||
static NSString * const kStatOpentable = @"OpenTable";
|
||||
static NSString * const kStatOrientation = @"Orientation";
|
||||
static NSString * const kStatOther = @"Other";
|
||||
static NSString * const kStatOut = @"Out";
|
||||
|
@ -159,14 +159,14 @@ static NSString * const kStatPlacePageBannerBlank = @"Placepage_Banner_blank";
|
|||
static NSString * const kStatPlacePageBannerClick = @"Placepage_Banner_click";
|
||||
static NSString * const kStatPlacePageBannerError = @"Placepage_Banner_error";
|
||||
static NSString * const kStatPlacePageBannerShow = @"Placepage_Banner_show";
|
||||
static NSString * const kStatRB = @"RB";
|
||||
static NSString * const kPlacePageHotelBook = @"Placepage_Hotel_book";
|
||||
static NSString * const kPlacePageHotelDetails = @"Placepage_Hotel_details";
|
||||
static NSString * const kPlacePageHotelFacilities = @"PlacePage_Hotel_Facilities_open";
|
||||
static NSString * const kPlacePageHotelGallery = @"PlacePage_Hotel_Gallery_open";
|
||||
static NSString * const kPlacePageHotelReviews = @"PlacePage_Hotel_Reviews_land";
|
||||
static NSString * const kStatPlacePageHotelBook = @"Placepage_Hotel_book";
|
||||
static NSString * const kStatPlacePageHotelDetails = @"Placepage_Hotel_details";
|
||||
static NSString * const kStatPlacePageHotelFacilities = @"PlacePage_Hotel_Facilities_open";
|
||||
static NSString * const kStatPlacePageHotelGallery = @"PlacePage_Hotel_Gallery_open";
|
||||
static NSString * const kStatPlacePageHotelReviews = @"PlacePage_Hotel_Reviews_land";
|
||||
static NSString * const kStatPlacePageHotelSearch = @"Search.Booking.Com";
|
||||
static NSString * const kStatPlacePageNonBuilding = @"placepage_nonbuilding";
|
||||
static NSString * const kPlacePageRestaurantBook = @"Placepage_Restaurant_book";
|
||||
static NSString * const kStatPlacePageRestaurantBook = @"Placepage_Restaurant_book";
|
||||
static NSString * const kStatPlacePageTaxiClick = @"Placepage_Taxi_click";
|
||||
static NSString * const kStatPointToPoint = @"Point to point";
|
||||
static NSString * const kStatPortrait = @"Portrait";
|
||||
|
@ -175,6 +175,7 @@ static NSString * const kStatProfile = @"Profile";
|
|||
static NSString * const kStatProgress = @"Progress";
|
||||
static NSString * const kStatProvider = @"Provider";
|
||||
static NSString * const kStatPushReceived = @"Push received";
|
||||
static NSString * const kStatRB = @"RB";
|
||||
static NSString * const kStatRate = @"Rate";
|
||||
static NSString * const kStatReason = @"Reason";
|
||||
static NSString * const kStatRecentTrack = @"Recent track";
|
||||
|
|
23
iphone/Maps/Images.xcassets/Place Page/ic_booking_search.imageset/Contents.json
vendored
Normal file
23
iphone/Maps/Images.xcassets/Place Page/ic_booking_search.imageset/Contents.json
vendored
Normal file
|
@ -0,0 +1,23 @@
|
|||
{
|
||||
"images" : [
|
||||
{
|
||||
"idiom" : "universal",
|
||||
"filename" : "ic_booking_search.png",
|
||||
"scale" : "1x"
|
||||
},
|
||||
{
|
||||
"idiom" : "universal",
|
||||
"filename" : "ic_booking_search@2x.png",
|
||||
"scale" : "2x"
|
||||
},
|
||||
{
|
||||
"idiom" : "universal",
|
||||
"filename" : "ic_booking_search@3x.png",
|
||||
"scale" : "3x"
|
||||
}
|
||||
],
|
||||
"info" : {
|
||||
"version" : 1,
|
||||
"author" : "xcode"
|
||||
}
|
||||
}
|
BIN
iphone/Maps/Images.xcassets/Place Page/ic_booking_search.imageset/ic_booking_search.png
vendored
Normal file
BIN
iphone/Maps/Images.xcassets/Place Page/ic_booking_search.imageset/ic_booking_search.png
vendored
Normal file
Binary file not shown.
After Width: | Height: | Size: 345 B |
BIN
iphone/Maps/Images.xcassets/Place Page/ic_booking_search.imageset/ic_booking_search@2x.png
vendored
Normal file
BIN
iphone/Maps/Images.xcassets/Place Page/ic_booking_search.imageset/ic_booking_search@2x.png
vendored
Normal file
Binary file not shown.
After Width: | Height: | Size: 653 B |
BIN
iphone/Maps/Images.xcassets/Place Page/ic_booking_search.imageset/ic_booking_search@3x.png
vendored
Normal file
BIN
iphone/Maps/Images.xcassets/Place Page/ic_booking_search.imageset/ic_booking_search@3x.png
vendored
Normal file
Binary file not shown.
After Width: | Height: | Size: 943 B |
|
@ -129,6 +129,7 @@ using BannerIsReady = void (^)();
|
|||
- (NSString *)bookingApproximatePricing;
|
||||
- (NSURL *)sponsoredURL;
|
||||
- (NSURL *)sponsoredDescriptionURL;
|
||||
- (NSURL *)bookingSearchURL;
|
||||
- (NSString *)sponsoredId;
|
||||
- (void)assignOnlinePriceToLabel:(UILabel *)label;
|
||||
- (NSString *)hotelDescription;
|
||||
|
@ -170,6 +171,7 @@ using BannerIsReady = void (^)();
|
|||
- (BOOL)isApi;
|
||||
- (BOOL)isBooking;
|
||||
- (BOOL)isOpentable;
|
||||
- (BOOL)isBookingSearch;
|
||||
- (BOOL)isHTMLDescription;
|
||||
- (BOOL)isMyPosition;
|
||||
|
||||
|
|
|
@ -349,6 +349,12 @@ using namespace place_page;
|
|||
: nil;
|
||||
}
|
||||
|
||||
- (NSURL *)bookingSearchURL
|
||||
{
|
||||
auto const & url = m_info.GetBookingSearchUrl();
|
||||
return url.empty() ? nil : [NSURL URLWithString:@(url.c_str())];
|
||||
}
|
||||
|
||||
- (NSString *)sponsoredId
|
||||
{
|
||||
return m_info.IsSponsored()
|
||||
|
@ -511,6 +517,7 @@ using namespace place_page;
|
|||
- (BOOL)isApi { return m_info.HasApiUrl(); }
|
||||
- (BOOL)isBooking { return m_info.m_sponsoredType == SponsoredType::Booking; }
|
||||
- (BOOL)isOpentable { return m_info.m_sponsoredType == SponsoredType::Opentable; }
|
||||
- (BOOL)isBookingSearch { return !m_info.GetBookingSearchUrl().empty(); }
|
||||
- (BOOL)isMyPosition { return m_info.IsMyPosition(); }
|
||||
- (BOOL)isHTMLDescription { return strings::IsHTML(m_info.m_bookmarkDescription); }
|
||||
|
||||
|
|
|
@ -30,21 +30,25 @@ namespace
|
|||
void logSponsoredEvent(MWMPlacePageData * data, NSString * eventName)
|
||||
{
|
||||
auto const & latLon = data.latLon;
|
||||
BOOL const isBooking = data.isBooking;
|
||||
|
||||
NSMutableDictionary * stat = [@{} mutableCopy];
|
||||
if (isBooking)
|
||||
if (data.isBooking)
|
||||
{
|
||||
stat[kStatProvider] = kStatBooking;
|
||||
stat[kStatHotel] = data.sponsoredId;
|
||||
stat[kStatHotelLocation] = makeLocationEventValue(latLon.lat, latLon.lon);
|
||||
}
|
||||
else
|
||||
else if (data.isOpentable)
|
||||
{
|
||||
stat[kStatProvider] = kStatOpentable;
|
||||
stat[kStatRestaurant] = data.sponsoredId;
|
||||
stat[kStatRestaurantLocation] = makeLocationEventValue(latLon.lat, latLon.lon);
|
||||
}
|
||||
else
|
||||
{
|
||||
stat[kStatProvider] = kStatPlacePageHotelSearch;
|
||||
stat[kStatHotelLocation] = makeLocationEventValue(latLon.lat, latLon.lon);
|
||||
}
|
||||
|
||||
[Statistics logEvent:eventName withParameters:stat atLocation:[MWMLocationManager lastLocation]];
|
||||
}
|
||||
|
@ -166,7 +170,7 @@ void logSponsoredEvent(MWMPlacePageData * data, NSString * eventName)
|
|||
|
||||
- (void)onPlacePageTopBoundChanged:(CGFloat)bound
|
||||
{
|
||||
[MapViewController controller].visibleAreaBottomOffset = bound;
|
||||
self.ownerViewController.visibleAreaBottomOffset = bound;
|
||||
[[MWMSideButtons buttons] setBottomBound:self.ownerViewController.view.height - bound];
|
||||
}
|
||||
|
||||
|
@ -254,7 +258,7 @@ void logSponsoredEvent(MWMPlacePageData * data, NSString * eventName)
|
|||
{
|
||||
[Statistics logEvent:kStatEventName(kStatPlacePage, kStatEdit)];
|
||||
GetPlatform().GetMarketingService().SendPushWooshTag(marketing::kEditorEditDiscovered);
|
||||
[(MapViewController *)self.ownerViewController openEditor];
|
||||
[self.ownerViewController openEditor];
|
||||
}
|
||||
|
||||
- (void)addBusiness
|
||||
|
@ -285,17 +289,37 @@ void logSponsoredEvent(MWMPlacePageData * data, NSString * eventName)
|
|||
[self.layout reloadBookmarkSection:NO];
|
||||
}
|
||||
|
||||
- (void)editBookmark { [[MapViewController controller] openBookmarkEditorWithData:self.data]; }
|
||||
- (void)editBookmark { [self.ownerViewController openBookmarkEditorWithData:self.data]; }
|
||||
- (void)book:(BOOL)isDescription
|
||||
{
|
||||
MWMPlacePageData * data = self.data;
|
||||
BOOL const isBooking = data.isBooking;
|
||||
NSString * eventName = isBooking ? kPlacePageHotelBook : kPlacePageRestaurantBook;
|
||||
NSString * eventName = nil;
|
||||
if (data.isBooking)
|
||||
{
|
||||
eventName = kStatPlacePageHotelBook;
|
||||
}
|
||||
else if (data.isOpentable)
|
||||
{
|
||||
eventName = kStatPlacePageRestaurantBook;
|
||||
}
|
||||
else
|
||||
{
|
||||
NSAssert(false, @"Invalid book case!");
|
||||
return;
|
||||
}
|
||||
logSponsoredEvent(data, eventName);
|
||||
UIViewController * vc = static_cast<UIViewController *>([MapViewController controller]);
|
||||
NSURL * url = isDescription ? data.sponsoredDescriptionURL : data.sponsoredURL;
|
||||
NSAssert(url, @"Sponsored url can't be nil!");
|
||||
[vc openUrl:url];
|
||||
[self.ownerViewController openUrl:url];
|
||||
}
|
||||
|
||||
- (void)searchBookingHotels
|
||||
{
|
||||
MWMPlacePageData * data = self.data;
|
||||
logSponsoredEvent(data, kStatPlacePageHotelSearch);
|
||||
NSURL * url = data.bookingSearchURL;
|
||||
NSAssert(url, @"Search url can't be nil!");
|
||||
[self.ownerViewController openUrl:url];
|
||||
}
|
||||
|
||||
- (void)call
|
||||
|
@ -312,20 +336,20 @@ void logSponsoredEvent(MWMPlacePageData * data, NSString * eventName)
|
|||
[Statistics logEvent:kStatEventName(kStatPlacePage, kStatAPI)];
|
||||
NSURL * url = [NSURL URLWithString:self.data.apiURL];
|
||||
[[UIApplication sharedApplication] openURL:url];
|
||||
[[MapViewController controller].apiBar back];
|
||||
[self.ownerViewController.apiBar back];
|
||||
}
|
||||
|
||||
- (void)showAllReviews
|
||||
{
|
||||
logSponsoredEvent(self.data, kPlacePageHotelReviews);
|
||||
[[MapViewController controller] openUrl:self.data.URLToAllReviews];
|
||||
logSponsoredEvent(self.data, kStatPlacePageHotelReviews);
|
||||
[self.ownerViewController openUrl:self.data.URLToAllReviews];
|
||||
}
|
||||
|
||||
- (void)showPhotoAtIndex:(NSInteger)index
|
||||
referenceView:(UIView *)referenceView
|
||||
referenceViewWhenDismissingHandler:(MWMPlacePageButtonsDismissBlock)referenceViewWhenDismissingHandler
|
||||
{
|
||||
logSponsoredEvent(self.data, kPlacePageHotelGallery);
|
||||
logSponsoredEvent(self.data, kStatPlacePageHotelGallery);
|
||||
auto galleryModel = [[MWMGalleryModel alloc] initWithTitle:self.hotelName items:self.data.photos];
|
||||
auto initialPhoto = galleryModel.items[index];
|
||||
auto photoVC = [[MWMPhotosViewController alloc] initWithPhotos:galleryModel
|
||||
|
@ -340,7 +364,7 @@ void logSponsoredEvent(MWMPlacePageData * data, NSString * eventName)
|
|||
|
||||
- (void)showGalery
|
||||
{
|
||||
logSponsoredEvent(self.data, kPlacePageHotelGallery);
|
||||
logSponsoredEvent(self.data, kStatPlacePageHotelGallery);
|
||||
auto galleryModel = [[MWMGalleryModel alloc] initWithTitle:self.hotelName items:self.data.photos];
|
||||
auto galleryVc = [MWMGalleryViewController instanceWithModel:galleryModel];
|
||||
[[MapViewController controller].navigationController pushViewController:galleryVc animated:YES];
|
||||
|
@ -348,8 +372,8 @@ void logSponsoredEvent(MWMPlacePageData * data, NSString * eventName)
|
|||
|
||||
- (void)showAllFacilities
|
||||
{
|
||||
logSponsoredEvent(self.data, kPlacePageHotelFacilities);
|
||||
[[MapViewController controller] openHotelFacilities];
|
||||
logSponsoredEvent(self.data, kStatPlacePageHotelFacilities);
|
||||
[self.ownerViewController openHotelFacilities];
|
||||
}
|
||||
|
||||
- (void)viewWillTransitionToSize:(CGSize)size
|
||||
|
|
|
@ -17,6 +17,7 @@
|
|||
|
||||
- (void)call;
|
||||
- (void)book:(BOOL)isDecription;
|
||||
- (void)searchBookingHotels;
|
||||
|
||||
- (void)apiBack;
|
||||
- (void)downloadSelectedArea;
|
||||
|
|
|
@ -3,6 +3,7 @@ enum class EButton // Required button's order
|
|||
Api,
|
||||
Download,
|
||||
Booking,
|
||||
BookingSearch,
|
||||
Opentable,
|
||||
Call,
|
||||
Bookmark,
|
||||
|
|
|
@ -14,6 +14,8 @@ NSString * titleForButton(EButton type, BOOL isSelected)
|
|||
case EButton::Booking:
|
||||
case EButton::Opentable:
|
||||
return L(@"book_button");
|
||||
case EButton::BookingSearch:
|
||||
return L(@"booking_search");
|
||||
case EButton::Call:
|
||||
return L(@"placepage_call_button");
|
||||
case EButton::Bookmark:
|
||||
|
@ -83,6 +85,11 @@ NSString * titleForButton(EButton type, BOOL isSelected)
|
|||
self.label.textColor = [UIColor whiteColor];
|
||||
self.backgroundColor = [UIColor bookingBackground];
|
||||
break;
|
||||
case EButton::BookingSearch:
|
||||
[self.button setImage:[UIImage imageNamed:@"ic_booking_search"] forState:UIControlStateNormal];
|
||||
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];
|
||||
|
|
|
@ -7,6 +7,7 @@
|
|||
- (BOOL)isBookmark;
|
||||
- (BOOL)isOpentable;
|
||||
- (BOOL)isBooking;
|
||||
- (BOOL)isBookingSearch;
|
||||
- (BOOL)isApi;
|
||||
- (BOOL)isMyPosition;
|
||||
- (NSString *)title;
|
||||
|
|
|
@ -56,13 +56,18 @@ extern NSString * const kAlohalyticsTapEventKey;
|
|||
BOOL const isPhoneNotEmpty = phone.length > 0;
|
||||
BOOL const isBooking = data.isBooking;
|
||||
BOOL const isOpentable = data.isOpentable;
|
||||
BOOL const isSponsored = isBooking || isOpentable;
|
||||
BOOL const isBookingSearch = data.isBookingSearch;
|
||||
BOOL const isSponsored = isBooking || isOpentable || isBookingSearch;
|
||||
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;
|
||||
EButton sponsoredButton = EButton::BookingSearch;
|
||||
if (isBooking)
|
||||
sponsoredButton = EButton::Booking;
|
||||
else if (isOpentable)
|
||||
sponsoredButton = EButton::Opentable;
|
||||
|
||||
if (self.isAreaNotDownloaded)
|
||||
{
|
||||
|
@ -219,6 +224,7 @@ extern NSString * const kAlohalyticsTapEventKey;
|
|||
case EButton::Download: [delegate downloadSelectedArea]; break;
|
||||
case EButton::Opentable:
|
||||
case EButton::Booking: [delegate book:NO]; break;
|
||||
case EButton::BookingSearch: [delegate searchBookingHotels]; break;
|
||||
case EButton::Call: [delegate call]; break;
|
||||
case EButton::Bookmark:
|
||||
if (self.isBookmark)
|
||||
|
|
|
@ -58,6 +58,6 @@ ENABLE_STRICT_OBJC_MSGSEND = YES
|
|||
GCC_NO_COMMON_BLOCKS = YES
|
||||
GCC_PRECOMPILE_PREFIX_HEADER = YES
|
||||
ONLY_ACTIVE_ARCH = YES
|
||||
OTHER_SWIFT_FLAGS = -Xfrontend -warn-long-function-bodies=100
|
||||
OTHER_SWIFT_FLAGS = -Xfrontend -warn-long-function-bodies=200
|
||||
PRODUCT_NAME = $(TARGET_NAME)
|
||||
VALID_ARCHS = i386 x86_64 armv7 armv7s arm64
|
||||
|
|
Loading…
Add table
Reference in a new issue