[MAPSME-4183] [ios] Added Booking search button. (#5760)

* [MAPSME-4183] [ios] Added Booking search button.

* [MAPSME-4183] Review fixes.
This commit is contained in:
Ilya Grechuhin 2017-04-05 12:33:07 +03:00 committed by Vladimir Byko-Ianko
parent f8c55c90ac
commit 516699a6f6
14 changed files with 103 additions and 30 deletions

View file

@ -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";

View 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"
}
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 345 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 653 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 943 B

View file

@ -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;

View file

@ -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); }

View file

@ -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

View file

@ -17,6 +17,7 @@
- (void)call;
- (void)book:(BOOL)isDecription;
- (void)searchBookingHotels;
- (void)apiBack;
- (void)downloadSelectedArea;

View file

@ -3,6 +3,7 @@ enum class EButton // Required button's order
Api,
Download,
Booking,
BookingSearch,
Opentable,
Call,
Bookmark,

View file

@ -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];

View file

@ -7,6 +7,7 @@
- (BOOL)isBookmark;
- (BOOL)isOpentable;
- (BOOL)isBooking;
- (BOOL)isBookingSearch;
- (BOOL)isApi;
- (BOOL)isMyPosition;
- (NSString *)title;

View file

@ -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)

View file

@ -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