From a6d2e97434ae09d3d7972ec6d79411270fdacb94 Mon Sep 17 00:00:00 2001 From: VladiMihaylenko Date: Thu, 8 Dec 2016 19:12:12 +0300 Subject: [PATCH] [ios] Uber from place page. --- iphone/Maps/Classes/MWMPlacePageData.h | 5 +- iphone/Maps/Classes/MWMPlacePageData.mm | 13 +++ iphone/Maps/Classes/MWMPlacePageInfoCell.mm | 6 +- iphone/Maps/Classes/MWMPlacePageLayout.mm | 12 ++- iphone/Maps/Classes/MWMPlacePageManager.mm | 10 +++ iphone/Maps/Classes/MWMPlacePageProtocol.h | 1 + iphone/Maps/Classes/MWMPlacePageTaxiCell.h | 9 ++ iphone/Maps/Classes/MWMPlacePageTaxiCell.mm | 14 +++ iphone/Maps/Classes/MWMPlacePageTaxiCell.xib | 82 ++++++++++++++++++ iphone/Maps/Classes/Routing/MWMRouter.mm | 6 +- .../ic_placepage_taxi.imageset/Contents.json | 26 ++++++ .../ic_placepage_taxi.png | Bin 0 -> 167 bytes .../ic_placepage_taxi@2x.png | Bin 0 -> 199 bytes .../ic_placepage_taxi@3x.png | Bin 0 -> 363 bytes iphone/Maps/Maps.xcodeproj/project.pbxproj | 18 ++++ iphone/Maps/Statistics/StatisticsStrings.h | 2 + 16 files changed, 195 insertions(+), 9 deletions(-) create mode 100644 iphone/Maps/Classes/MWMPlacePageTaxiCell.h create mode 100644 iphone/Maps/Classes/MWMPlacePageTaxiCell.mm create mode 100644 iphone/Maps/Classes/MWMPlacePageTaxiCell.xib create mode 100644 iphone/Maps/Images.xcassets/Place Page/ic_placepage_taxi.imageset/Contents.json create mode 100644 iphone/Maps/Images.xcassets/Place Page/ic_placepage_taxi.imageset/ic_placepage_taxi.png create mode 100644 iphone/Maps/Images.xcassets/Place Page/ic_placepage_taxi.imageset/ic_placepage_taxi@2x.png create mode 100644 iphone/Maps/Images.xcassets/Place Page/ic_placepage_taxi.imageset/ic_placepage_taxi@3x.png diff --git a/iphone/Maps/Classes/MWMPlacePageData.h b/iphone/Maps/Classes/MWMPlacePageData.h index 4c1b6ef4af..2995ec0d82 100644 --- a/iphone/Maps/Classes/MWMPlacePageData.h +++ b/iphone/Maps/Classes/MWMPlacePageData.h @@ -35,7 +35,8 @@ enum class MetainfoRows Cuisine, Operator, Internet, - Coordinate + Coordinate, + Taxi }; enum class ButtonsRows @@ -118,6 +119,8 @@ enum class OpeningHours - (m2::PointD const &)mercator; - (ms::LatLon)latLon; +- (NSArray *)statisticsTags; + // TODO(Vlad): Use MWMSettings to store coordinate format. + (void)toggleCoordinateSystem; diff --git a/iphone/Maps/Classes/MWMPlacePageData.mm b/iphone/Maps/Classes/MWMPlacePageData.mm index 37299b848c..bd3338101b 100644 --- a/iphone/Maps/Classes/MWMPlacePageData.mm +++ b/iphone/Maps/Classes/MWMPlacePageData.mm @@ -110,6 +110,8 @@ using namespace place_page; m_metainfoRows.push_back(MetainfoRows::Address); m_metainfoRows.push_back(MetainfoRows::Coordinate); + if (m_info.IsReachableByTaxi()) + m_metainfoRows.push_back(MetainfoRows::Taxi); } - (void)fillButtonsSection @@ -331,6 +333,7 @@ using namespace place_page; { switch (row) { + case MetainfoRows::Taxi: case MetainfoRows::ExtendedOpeningHours: return nil; case MetainfoRows::OpeningHours: return @(m_info.GetOpeningHours().c_str()); case MetainfoRows::Phone: return @(m_info.GetPhone().c_str()); @@ -371,4 +374,14 @@ using namespace place_page; [ud synchronize]; } +#pragma mark - Stats + +- (NSArray *)statisticsTags +{ + NSMutableArray * result = [@[] mutableCopy]; + for (auto const & s : m_info.GetRawTypes()) + [result addObject:@(s.c_str())]; + return result.copy; +} + @end diff --git a/iphone/Maps/Classes/MWMPlacePageInfoCell.mm b/iphone/Maps/Classes/MWMPlacePageInfoCell.mm index 3f153e4c9e..504cd8b362 100644 --- a/iphone/Maps/Classes/MWMPlacePageInfoCell.mm +++ b/iphone/Maps/Classes/MWMPlacePageInfoCell.mm @@ -79,7 +79,8 @@ name = @"coordinate"; break; case MetainfoRows::ExtendedOpeningHours: - case MetainfoRows::OpeningHours: NSAssert(false, @"Incorrect cell type!"); break; + case MetainfoRows::OpeningHours: + case MetainfoRows::Taxi: NSAssert(false, @"Incorrect cell type!"); break; } [self configWithIconName:name data:[data stringForRow:row]]; } @@ -152,7 +153,8 @@ case MetainfoRows::Operator: case MetainfoRows::OpeningHours: case MetainfoRows::Address: - case MetainfoRows::Internet: break; + case MetainfoRows::Internet: + case MetainfoRows::Taxi: break; } } diff --git a/iphone/Maps/Classes/MWMPlacePageLayout.mm b/iphone/Maps/Classes/MWMPlacePageLayout.mm index 4f93d3e0fa..0241e8a1c0 100644 --- a/iphone/Maps/Classes/MWMPlacePageLayout.mm +++ b/iphone/Maps/Classes/MWMPlacePageLayout.mm @@ -3,12 +3,13 @@ #import "MWMCircularProgress.h" #import "MWMiPadPlacePageLayoutImpl.h" #import "MWMiPhonePlacePageLayoutImpl.h" +#import "MWMOpeningHoursLayoutHelper.h" #import "MWMPlacePageButtonCell.h" #import "MWMPlacePageCellUpdateProtocol.h" #import "MWMPlacePageData.h" #import "MWMPlacePageInfoCell.h" #import "MWMPlacePageLayoutImpl.h" -#import "MWMOpeningHoursLayoutHelper.h" +#import "MWMPlacePageTaxiCell.h" #import "MWMPPPreviewLayoutHelper.h" #import "UIColor+MapsMeColor.h" @@ -31,7 +32,8 @@ map const kMetaInfoCells = { {MetainfoRows::Cuisine, @"PlacePageInfoCell"}, {MetainfoRows::Operator, @"PlacePageInfoCell"}, {MetainfoRows::Coordinate, @"PlacePageInfoCell"}, - {MetainfoRows::Internet, @"PlacePageInfoCell"}}; + {MetainfoRows::Internet, @"PlacePageInfoCell"}, + {MetainfoRows::Taxi, @"MWMPlacePageTaxiCell"}}; array const kButtonsCells = {{@"MWMPlacePageButtonCell"}}; @@ -340,6 +342,12 @@ array const kButtonsCells = {{@"MWMPlacePageButtonCell"}}; [c configWithRow:row data:data]; return c; } + case MetainfoRows::Taxi: + { + MWMPlacePageTaxiCell * c = [tableView dequeueReusableCellWithIdentifier:kMetaInfoCells.at(row)]; + c.delegate = delegate; + return c; + } } } case Sections::Buttons: diff --git a/iphone/Maps/Classes/MWMPlacePageManager.mm b/iphone/Maps/Classes/MWMPlacePageManager.mm index a1bbe01bf4..2801ef6452 100644 --- a/iphone/Maps/Classes/MWMPlacePageManager.mm +++ b/iphone/Maps/Classes/MWMPlacePageManager.mm @@ -175,6 +175,16 @@ [self closePlacePage]; } +- (void)taxiTo +{ + [Statistics logEvent:kStatPlacePageTaxiClick + withParameters:@{kStatProvider : kStatUber, kStatTags : self.data.statisticsTags}]; + auto router = [MWMRouter router]; + router.type = routing::RouterType::Taxi; + [router buildToPoint:self.target bestRouter:NO]; + [self closePlacePage]; +} + - (MWMRoutePoint)target { NSString * name = nil; diff --git a/iphone/Maps/Classes/MWMPlacePageProtocol.h b/iphone/Maps/Classes/MWMPlacePageProtocol.h index 8a5a4c2835..82dc518086 100644 --- a/iphone/Maps/Classes/MWMPlacePageProtocol.h +++ b/iphone/Maps/Classes/MWMPlacePageProtocol.h @@ -29,6 +29,7 @@ - (void)addBusiness; - (void)book:(BOOL)isDescription; - (void)editBookmark; +- (void)taxiTo; @end diff --git a/iphone/Maps/Classes/MWMPlacePageTaxiCell.h b/iphone/Maps/Classes/MWMPlacePageTaxiCell.h new file mode 100644 index 0000000000..8d3292f415 --- /dev/null +++ b/iphone/Maps/Classes/MWMPlacePageTaxiCell.h @@ -0,0 +1,9 @@ +#import "MWMTableViewCell.h" + +@protocol MWMPlacePageButtonsProtocol; + +@interface MWMPlacePageTaxiCell : MWMTableViewCell + +- (void)setDelegate:(id)delegate; + +@end diff --git a/iphone/Maps/Classes/MWMPlacePageTaxiCell.mm b/iphone/Maps/Classes/MWMPlacePageTaxiCell.mm new file mode 100644 index 0000000000..ccf3e84bf6 --- /dev/null +++ b/iphone/Maps/Classes/MWMPlacePageTaxiCell.mm @@ -0,0 +1,14 @@ +#import "MWMPlacePageTaxiCell.h" +#import "MWMPlacePageProtocol.h" + +@interface MWMPlacePageTaxiCell() + +@property(weak, nonatomic) id delegate; + +@end + +@implementation MWMPlacePageTaxiCell + +- (IBAction)orderTaxi { [self.delegate taxiTo]; } + +@end diff --git a/iphone/Maps/Classes/MWMPlacePageTaxiCell.xib b/iphone/Maps/Classes/MWMPlacePageTaxiCell.xib new file mode 100644 index 0000000000..cf9981eb29 --- /dev/null +++ b/iphone/Maps/Classes/MWMPlacePageTaxiCell.xib @@ -0,0 +1,82 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/iphone/Maps/Classes/Routing/MWMRouter.mm b/iphone/Maps/Classes/Routing/MWMRouter.mm index d4f0aa5dc9..820ac5e844 100644 --- a/iphone/Maps/Classes/Routing/MWMRouter.mm +++ b/iphone/Maps/Classes/Routing/MWMRouter.mm @@ -162,9 +162,6 @@ bool isMarkerPoint(MWMRoutePoint const & point) { return point.IsValid() && !poi - (void)rebuildWithBestRouter:(BOOL)bestRouter { [self clearAltitudeImagesData]; - // Taxi can't be used as best router. - if ([MWMRouter isTaxi]) - bestRouter = NO; bool isP2P = false; if (self.startPoint.IsMyPosition()) @@ -193,7 +190,8 @@ bool isMarkerPoint(MWMRoutePoint const & point) { return point.IsValid() && !poi auto & f = GetFramework(); auto const & startPoint = self.startPoint.Point(); auto const & finishPoint = self.finishPoint.Point(); - if (bestRouter) + // Taxi can't be used as best router. + if (bestRouter && ![MWMRouter isTaxi]) self.type = GetFramework().GetBestRouter(startPoint, finishPoint); f.BuildRoute(startPoint, finishPoint, isP2P, 0 /* timeoutSec */); f.SetRouteStartPoint(startPoint, isMarkerPoint(self.startPoint)); diff --git a/iphone/Maps/Images.xcassets/Place Page/ic_placepage_taxi.imageset/Contents.json b/iphone/Maps/Images.xcassets/Place Page/ic_placepage_taxi.imageset/Contents.json new file mode 100644 index 0000000000..513dad0d26 --- /dev/null +++ b/iphone/Maps/Images.xcassets/Place Page/ic_placepage_taxi.imageset/Contents.json @@ -0,0 +1,26 @@ +{ + "images" : [ + { + "idiom" : "universal", + "filename" : "ic_placepage_taxi.png", + "scale" : "1x" + }, + { + "idiom" : "universal", + "filename" : "ic_placepage_taxi@2x.png", + "scale" : "2x" + }, + { + "idiom" : "universal", + "filename" : "ic_placepage_taxi@3x.png", + "scale" : "3x" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + }, + "properties" : { + "template-rendering-intent" : "template" + } +} \ No newline at end of file diff --git a/iphone/Maps/Images.xcassets/Place Page/ic_placepage_taxi.imageset/ic_placepage_taxi.png b/iphone/Maps/Images.xcassets/Place Page/ic_placepage_taxi.imageset/ic_placepage_taxi.png new file mode 100644 index 0000000000000000000000000000000000000000..54a64703c61341f2f428938e517fcd3bbf70c62c GIT binary patch literal 167 zcmeAS@N?(olHy`uVBq!ia0vp^G9b*s1|*Ak?@s|zd7dtgAr*|t4b6cDTy6(7e*FJ$ z&o6NQXFtRJMhltlT`>y(dY8Q85ip*dyzpbakAZOauCozWJo}bP0l+XkKFbzGq literal 0 HcmV?d00001 diff --git a/iphone/Maps/Images.xcassets/Place Page/ic_placepage_taxi.imageset/ic_placepage_taxi@2x.png b/iphone/Maps/Images.xcassets/Place Page/ic_placepage_taxi.imageset/ic_placepage_taxi@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..f908857a1beaa69f0ffe95a27fd632333d35c2f8 GIT binary patch literal 199 zcmeAS@N?(olHy`uVBq!ia0vp^79h;Q1|(OsS<3;bK2I0NkP61PS2uDpISQ~|*vjnu zdqcPOkvmK}E*peTU%Yd{MN)nDlMCE!tw+B@%vLds6$)Y}~Z^ z`vJ|m>h!Xyv9|1TNpoxGuVZ49%2?2Nuf^Ry{)^b@xS82$);ZT>K3!e8RB?CG++uI$ ulBwd7Kox9N!oknte$4q@&ImNM`8Pwrx=YLwlWy7pc?_PeelF{r5}E*8YD{MU literal 0 HcmV?d00001 diff --git a/iphone/Maps/Images.xcassets/Place Page/ic_placepage_taxi.imageset/ic_placepage_taxi@3x.png b/iphone/Maps/Images.xcassets/Place Page/ic_placepage_taxi.imageset/ic_placepage_taxi@3x.png new file mode 100644 index 0000000000000000000000000000000000000000..0c87a5096d8b59e542fa7092e25a1b023011f0ab GIT binary patch literal 363 zcmeAS@N?(olHy`uVBq!ia0vp^At21b1|(&&1r9PWFdBKfIEGX(zP+L7QJg5k_Tb~^ z0Ej{CzCV5x(d&Ot1UDc=l z$U7~39#|Y)ldrwGXVzau5v%@L?T@N&2bM1hXw?c?$Q8Q6NpuyEd1cuayWM-TFYo!e zb>)ZkCZ~0hw$4A3n|A5*+2%8MXVpK{pSk(We#bKsg5nqNMyK6*eEg~LE^FDPz4Hx~ z#B}Q|m6L9Lc)j3nPoR13pVAEyq9!u}!DefVfD8{=$jX(w%k{>Tw2ODM`(x|WKVL1L zo^PN0Q0Vi$heDgL|Gy>jop+tDZrU1Vm