From 2daed343e7f6facb259be87a7dba09650d2b02eb Mon Sep 17 00:00:00 2001 From: VladiMihaylenko Date: Wed, 26 Oct 2016 15:44:37 +0300 Subject: [PATCH] [ios] Uber's error handling --- .../BottomMenu/MWMBottomMenuView.mm | 1 - .../BottomMenu/MWMBottomMenuViewController.h | 1 + .../BottomMenu/MWMBottomMenuViewController.mm | 8 ++++ .../MWMMapViewControlsManager.mm | 5 +++ .../MWMNavigationDashboardManager.h | 1 + .../MWMNavigationDashboardManager.mm | 27 +++++++++++-- .../RoutePreview/MWMTaxiPreviewDataSource.h | 2 +- .../RoutePreview/MWMTaxiPreviewDataSource.mm | 36 +++++++++++------- iphone/Maps/Classes/Routing/MWMRouter.mm | 4 +- .../ic_taxi.imageset/Contents.json | 6 +-- .../ic_taxi.imageset/ic_route_type_taxi.png | Bin 267 -> 0 bytes .../ic_route_type_taxi@2x.png | Bin 473 -> 0 bytes .../ic_route_type_taxi@3x.png | Bin 704 -> 0 bytes .../ic_taxi.imageset/ic_taxi.png | Bin 0 -> 189 bytes .../ic_taxi.imageset/ic_taxi@2x.png | Bin 0 -> 286 bytes .../ic_taxi.imageset/ic_taxi@3x.png | Bin 0 -> 448 bytes 16 files changed, 68 insertions(+), 23 deletions(-) delete mode 100644 iphone/Maps/Images.xcassets/NavigationDashboard/ic_taxi.imageset/ic_route_type_taxi.png delete mode 100644 iphone/Maps/Images.xcassets/NavigationDashboard/ic_taxi.imageset/ic_route_type_taxi@2x.png delete mode 100644 iphone/Maps/Images.xcassets/NavigationDashboard/ic_taxi.imageset/ic_route_type_taxi@3x.png create mode 100644 iphone/Maps/Images.xcassets/NavigationDashboard/ic_taxi.imageset/ic_taxi.png create mode 100644 iphone/Maps/Images.xcassets/NavigationDashboard/ic_taxi.imageset/ic_taxi@2x.png create mode 100644 iphone/Maps/Images.xcassets/NavigationDashboard/ic_taxi.imageset/ic_taxi@3x.png diff --git a/iphone/Maps/Classes/CustomViews/MapViewControls/BottomMenu/MWMBottomMenuView.mm b/iphone/Maps/Classes/CustomViews/MapViewControls/BottomMenu/MWMBottomMenuView.mm index ebe4d51099..6e53c6f3a7 100644 --- a/iphone/Maps/Classes/CustomViews/MapViewControls/BottomMenu/MWMBottomMenuView.mm +++ b/iphone/Maps/Classes/CustomViews/MapViewControls/BottomMenu/MWMBottomMenuView.mm @@ -691,7 +691,6 @@ CGFloat constexpr kTimeWidthRegular = 128; self.progressView.hidden = YES; self.routingView.hidden = NO; self.routingAdditionalView.hidden = YES; - self.estimateLabel.text = [MWMRouter isTaxi] ? L(@"taxi_not_found") : L(@"routing_planning_error"); break; case MWMBottomMenuStateRouting: self.menuButton.hidden = NO; diff --git a/iphone/Maps/Classes/CustomViews/MapViewControls/BottomMenu/MWMBottomMenuViewController.h b/iphone/Maps/Classes/CustomViews/MapViewControls/BottomMenu/MWMBottomMenuViewController.h index 0bb426ed0f..78f5fdd509 100644 --- a/iphone/Maps/Classes/CustomViews/MapViewControls/BottomMenu/MWMBottomMenuViewController.h +++ b/iphone/Maps/Classes/CustomViews/MapViewControls/BottomMenu/MWMBottomMenuViewController.h @@ -28,5 +28,6 @@ - (void)mwm_refreshUI; - (void)refreshLayout; - (MWMTaxiCollectionView *)taxiCollectionView; +- (void)setRoutingErrorMessage:(NSString *)routingErrorMessage; @end diff --git a/iphone/Maps/Classes/CustomViews/MapViewControls/BottomMenu/MWMBottomMenuViewController.mm b/iphone/Maps/Classes/CustomViews/MapViewControls/BottomMenu/MWMBottomMenuViewController.mm index f31b4b52d3..a0913dfa49 100644 --- a/iphone/Maps/Classes/CustomViews/MapViewControls/BottomMenu/MWMBottomMenuViewController.mm +++ b/iphone/Maps/Classes/CustomViews/MapViewControls/BottomMenu/MWMBottomMenuViewController.mm @@ -71,6 +71,8 @@ typedef NS_ENUM(NSUInteger, MWMBottomMenuViewCell) { @property(weak, nonatomic) MWMNavigationDashboardEntity * navigationInfo; +@property(copy, nonatomic) NSString * routingErrorMessage; + @property(weak, nonatomic) IBOutlet UILabel * speedLabel; @property(weak, nonatomic) IBOutlet UILabel * timeLabel; @property(weak, nonatomic) IBOutlet UILabel * distanceLabel; @@ -140,6 +142,9 @@ typedef NS_ENUM(NSUInteger, MWMBottomMenuViewCell) { - (void)updateNavigationInfo:(MWMNavigationDashboardEntity *)info { + if ([MWMRouter isTaxi]) + return; + NSDictionary * routingNumberAttributes = @{ NSForegroundColorAttributeName : [UIColor blackPrimaryText], NSFontAttributeName : [UIFont bold24] @@ -532,6 +537,9 @@ typedef NS_ENUM(NSUInteger, MWMBottomMenuViewCell) { self.restoreState = state; else view.state = state; + + if (state == MWMBottomMenuStateRoutingError) + self.estimateLabel.text = self.routingErrorMessage; } - (MWMBottomMenuState)state { return ((MWMBottomMenuView *)self.view).state; } diff --git a/iphone/Maps/Classes/CustomViews/MapViewControls/MWMMapViewControlsManager.mm b/iphone/Maps/Classes/CustomViews/MapViewControls/MWMMapViewControlsManager.mm index d018df6039..2c84f37d4f 100644 --- a/iphone/Maps/Classes/CustomViews/MapViewControls/MWMMapViewControlsManager.mm +++ b/iphone/Maps/Classes/CustomViews/MapViewControls/MWMMapViewControlsManager.mm @@ -510,6 +510,11 @@ extern NSString * const kAlohalyticsTapEventKey; self.menuController.state = self.hidden ? MWMBottomMenuStateHidden : menuState; } +- (void)setRoutingErrorMessage:(NSString *)message +{ + [self.menuController setRoutingErrorMessage:message]; +} + - (MWMBottomMenuState)menuState { MWMBottomMenuState const state = self.menuController.state; diff --git a/iphone/Maps/Classes/CustomViews/NavigationDashboard/MWMNavigationDashboardManager.h b/iphone/Maps/Classes/CustomViews/NavigationDashboard/MWMNavigationDashboardManager.h index 852befd74c..c74acb562e 100644 --- a/iphone/Maps/Classes/CustomViews/NavigationDashboard/MWMNavigationDashboardManager.h +++ b/iphone/Maps/Classes/CustomViews/NavigationDashboard/MWMNavigationDashboardManager.h @@ -24,6 +24,7 @@ typedef NS_ENUM(NSUInteger, MWMNavigationDashboardState) { - (void)didStartEditingRoutePoint:(BOOL)isSource; - (void)setMenuState:(MWMBottomMenuState)menuState; - (void)setMenuRestoreState:(MWMBottomMenuState)menuState; +- (void)setRoutingErrorMessage:(NSString *)errorMessage; - (MWMTaxiCollectionView *)taxiCollectionView; @end diff --git a/iphone/Maps/Classes/CustomViews/NavigationDashboard/MWMNavigationDashboardManager.mm b/iphone/Maps/Classes/CustomViews/NavigationDashboard/MWMNavigationDashboardManager.mm index ec7586181f..a4817c4c82 100644 --- a/iphone/Maps/Classes/CustomViews/NavigationDashboard/MWMNavigationDashboardManager.mm +++ b/iphone/Maps/Classes/CustomViews/NavigationDashboard/MWMNavigationDashboardManager.mm @@ -13,6 +13,8 @@ #import "MapsAppDelegate.h" #import "Statistics.h" +#include "platform/platform.hpp" + namespace { NSString * const kRoutePreviewXibName = @"MWMRoutePreview"; @@ -155,22 +157,33 @@ using TInfoDisplays = NSHashTable<__kindof TInfoDisplay>; if (![MWMRouter isTaxi]) return; + auto showError = ^(NSString * errorMessage) + { + [self.routePreview stateError]; + [self.routePreview router:routing::RouterType::Taxi setState:MWMCircularProgressStateFailed]; + [self setMenuErrorStateWithErrorMessage:errorMessage]; + }; + auto r = [MWMRouter router]; auto const & start = r.startPoint; auto const & finish = r.finishPoint; if (start.IsValid() && finish.IsValid()) { + if (!Platform::IsConnected()) + { + [[MapViewController controller].alertController presentNoConnectionAlert]; + showError(L(@"dialog_taxi_offline")); + return; + } [self.taxiDataSource requestTaxiFrom:start to:finish completion:^ { [self setMenuState:MWMBottomMenuStateGo]; [self.routePreview stateReady]; [self setRouteBuilderProgress:100.]; } - failure:^ + failure:^(NSString * errorMessage) { - [self.routePreview stateError]; - [self.routePreview router:routing::RouterType::Taxi setState:MWMCircularProgressStateFailed]; - [self setMenuState:MWMBottomMenuStateRoutingError]; + showError(errorMessage); }]; } } @@ -200,6 +213,12 @@ using TInfoDisplays = NSHashTable<__kindof TInfoDisplay>; [startButton setTitle:t forState:UIControlStateDisabled]; } +- (void)setMenuErrorStateWithErrorMessage:(NSString *)message +{ + [self.delegate setRoutingErrorMessage:message]; + [self setMenuState:MWMBottomMenuStateRoutingError]; +} + - (void)setMenuState:(MWMBottomMenuState)menuState { id delegate = self.delegate; diff --git a/iphone/Maps/Classes/CustomViews/NavigationDashboard/Views/RoutePreview/MWMTaxiPreviewDataSource.h b/iphone/Maps/Classes/CustomViews/NavigationDashboard/Views/RoutePreview/MWMTaxiPreviewDataSource.h index 6e33ec04a8..12f8bdded8 100644 --- a/iphone/Maps/Classes/CustomViews/NavigationDashboard/Views/RoutePreview/MWMTaxiPreviewDataSource.h +++ b/iphone/Maps/Classes/CustomViews/NavigationDashboard/Views/RoutePreview/MWMTaxiPreviewDataSource.h @@ -14,7 +14,7 @@ class MWMRoutePoint; - (void)requestTaxiFrom:(MWMRoutePoint const &)from to:(MWMRoutePoint const &)to completion:(TMWMVoidBlock)completion - failure:(TMWMVoidBlock)failure; + failure:(MWMStringBlock)failure; - (NSURL *)taxiURL; diff --git a/iphone/Maps/Classes/CustomViews/NavigationDashboard/Views/RoutePreview/MWMTaxiPreviewDataSource.mm b/iphone/Maps/Classes/CustomViews/NavigationDashboard/Views/RoutePreview/MWMTaxiPreviewDataSource.mm index 1fadf43776..b3ec86fe33 100644 --- a/iphone/Maps/Classes/CustomViews/NavigationDashboard/Views/RoutePreview/MWMTaxiPreviewDataSource.mm +++ b/iphone/Maps/Classes/CustomViews/NavigationDashboard/Views/RoutePreview/MWMTaxiPreviewDataSource.mm @@ -89,7 +89,7 @@ using namespace uber; - (void)requestTaxiFrom:(MWMRoutePoint const &)from to:(MWMRoutePoint const &)to completion:(TMWMVoidBlock)completion - failure:(TMWMVoidBlock)failure + failure:(MWMStringBlock)failure { NSAssert(completion && failure, @"Completion and failure blocks must be not nil!"); m_products.clear(); @@ -98,23 +98,15 @@ using namespace uber; auto cv = self.collectionView; cv.hidden = YES; cv.pageControl.hidden = YES; - - auto const errorCallback = [](uber::ErrorCode const code, uint64_t const requestId) {}; - - m_requestId = m_api.GetAvailableProducts(m_from, m_to, [self, completion, failure](vector const & products, + + m_requestId = m_api.GetAvailableProducts(m_from, m_to, [self, completion](vector const & products, uint64_t const requestId) { - dispatch_async(dispatch_get_main_queue(), [products, requestId, self, completion, failure] + dispatch_async(dispatch_get_main_queue(), [products, requestId, self, completion] { if (self->m_requestId != requestId) return; - if (products.empty()) - { - failure(); - return; - } - self->m_products = products; auto cv = self.collectionView; cv.hidden = NO; @@ -125,7 +117,25 @@ using namespace uber; cv.currentPage = 0; completion(); }); - }, errorCallback); + }, + [self, failure](uber::ErrorCode const code, uint64_t const requestId) + { + dispatch_async(dispatch_get_main_queue(), ^ + { + if (self->m_requestId != requestId) + return; + + switch (code) + { + case uber::ErrorCode::NoProducts: + failure(L(@"taxi_not_found")); + break; + case uber::ErrorCode::RemoteError: + failure(L(@"dialog_taxi_error")); + break; + } + }); + }); } - (BOOL)isTaxiInstalled diff --git a/iphone/Maps/Classes/Routing/MWMRouter.mm b/iphone/Maps/Classes/Routing/MWMRouter.mm index d2142b43b7..ae6b5504bf 100644 --- a/iphone/Maps/Classes/Routing/MWMRouter.mm +++ b/iphone/Maps/Classes/Routing/MWMRouter.mm @@ -374,7 +374,9 @@ bool isMarkerPoint(MWMRoutePoint const & point) { return point.IsValid() && !poi else [[MWMMapViewControlsManager manager] onRouteReady]; [self updateFollowingInfo]; - [[MWMNavigationDashboardManager manager] setRouteBuilderProgress:100]; + if (![MWMRouter isTaxi]) + [[MWMNavigationDashboardManager manager] setRouteBuilderProgress:100]; + [MWMMapViewControlsManager manager].searchHidden = YES; break; } diff --git a/iphone/Maps/Images.xcassets/NavigationDashboard/ic_taxi.imageset/Contents.json b/iphone/Maps/Images.xcassets/NavigationDashboard/ic_taxi.imageset/Contents.json index 50aa27d473..3c1bd37ef3 100644 --- a/iphone/Maps/Images.xcassets/NavigationDashboard/ic_taxi.imageset/Contents.json +++ b/iphone/Maps/Images.xcassets/NavigationDashboard/ic_taxi.imageset/Contents.json @@ -2,17 +2,17 @@ "images" : [ { "idiom" : "universal", - "filename" : "ic_route_type_taxi.png", + "filename" : "ic_taxi.png", "scale" : "1x" }, { "idiom" : "universal", - "filename" : "ic_route_type_taxi@2x.png", + "filename" : "ic_taxi@2x.png", "scale" : "2x" }, { "idiom" : "universal", - "filename" : "ic_route_type_taxi@3x.png", + "filename" : "ic_taxi@3x.png", "scale" : "3x" } ], diff --git a/iphone/Maps/Images.xcassets/NavigationDashboard/ic_taxi.imageset/ic_route_type_taxi.png b/iphone/Maps/Images.xcassets/NavigationDashboard/ic_taxi.imageset/ic_route_type_taxi.png deleted file mode 100644 index 22c41aa1ddcb5f7bc672b666ce537e60413450a3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 267 zcmeAS@N?(olHy`uVBq!ia0vp^5+KaM0wlfaz7_+iOP(%{Ar^vX4{ppo6u`iGz+F(Q zyN~gb0ekWRwG+x49HOGw98R)y^r>pB@SMsNo1?fy{QhP^C0Vq~jRc*Z~N zhmj}0aQuv?=gyt2X8TdF+55EolGLnslEs(rEDT%ub!BK)kkix^UseiEqnXrE1B-wjL2c*k>uHVP#m2e<>mb-ut P(02@;u6{1-oD!M zv919@6oyBH7eHhciY;|YorKE}h^$;s-~l8GrHAkW5}_20b|t)lh{S&jv*X@1 zcFwWm-o{_;?)?Axn4PmTLJ)*0beak~LKY`2;DoFlz?Tq00DyWTuWuu9%crn^3fLnR zAJDqZM^HF)-HH!bMgo?v7fzs!IgT*th&kFwaLX640!J$pIOQ|gf~zeubif3!XhJQY zQ;pRm`J1Zoax_3!2G-<%yq1YB&AyQKAsH}~i3P=6#8ui$WI#zKt|*$#J!#&tmi11i zdS+{|{zojpDCh^1(N&AC!U9xO&W$z>r0u|Kek5>^$$@UT0sqCOdET5p8uvl}p)2cb zK>eYHFMe(y@6aCta;Tz%v9-!$bWqiNnXLbEE#M3f4jgzmlPiWY(Ev}~d1OE+6Af_G zokIqMGXD(FOi`qtJw=+AYy_}gvQDny%gb7(IxSH~@|QD-a&YFe0kGO=9{>?>L7KJQ zq;cT^HtZd3!voCNfEf?aX9M~azm#BW*>2U$+H1@&2i8Hz9~e+U1yd-9aMxIbR9fW=XkjPTHYsdu#Lg}O5368v3icM(qM(JMegG|P zB!xCY1W}^THRs(sad(rMd9!!k?XL-p^FH%9nVnfCLEseTXqLGk$#B$E=qO2@DO$-? zazfvKega_pMYO#4YQN49Pb~>OF_etZ+OHwwg^|h5r{qS{cKOrPFw(4UIk*&TWC?xUdh@6mIdI2 z0dJuJUIcO39&jqk4+4d7Ac&{7#bdmAFT%Koc@);!9C_5h#TV zLA{Lc+D(aS#BsQ)CbSwcLX{HTX4g{8`TRvq=xfXXDD_JS#KW-Ybf?9vldc#%3}8+hYi+y zABxX-Q_6UfuBlKe^bZU52MVEIOXwz03O71J`)We_ zIzsDeLhCw0^J+r#Izp3bLX&Pn=G9D%4mF{UhMxkft(BRVS7(7@I5XI#){4yQy)9Lt mt>3fr;TkVZnlx$BgyjbnGssOoTY(J#0000`Ovt?KPQ;h(!-_q@!KQ~Wgl*QKk>Qx<3a m3$nfHUwkgrpJ~5x0Yf@>`pspZx0VB)z~JfX=d#Wzp$Pzid`Z>- literal 0 HcmV?d00001 diff --git a/iphone/Maps/Images.xcassets/NavigationDashboard/ic_taxi.imageset/ic_taxi@2x.png b/iphone/Maps/Images.xcassets/NavigationDashboard/ic_taxi.imageset/ic_taxi@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..33cf0023d00d65b90276141571f30980059d6aa3 GIT binary patch literal 286 zcmeAS@N?(olHy`uVBq!ia0vp^1|ZDA1|-9oezpTC#^NA%Cx&(BWL^R}H#}V&Lo!(3 zPD$iDq`>1gbNTJR{RaF^@^1eWwn>``oK;rj-Vz@zw^-9qfq{|3fq_Y&fq@0YoTD*{VREXi+V*d4`s#+I zwg0mIO>}?rugzH2;(*Vsy)k>GH&ks*UHws4{`5E5y>b^X*~y=c*Zj~5aTL^j|K=ZH ZzGCq*?~2@7CZHb~JYD@<);T3K0RX6LaR&eZ literal 0 HcmV?d00001 diff --git a/iphone/Maps/Images.xcassets/NavigationDashboard/ic_taxi.imageset/ic_taxi@3x.png b/iphone/Maps/Images.xcassets/NavigationDashboard/ic_taxi.imageset/ic_taxi@3x.png new file mode 100644 index 0000000000000000000000000000000000000000..720c53b8cc1439e3749970ac92b8976071ce80de GIT binary patch literal 448 zcmeAS@N?(olHy`uVBq!ia0vp^9w5xY1|&n@ZgvM!jKx9jP7LeL$-D%zt2|vCLn;{G zUQayNWWdvqXmD`xW6LY68?PTQJ0ySTnpx1}N#&d$xnF11&X}Kl-B7@Rfsq9daX@#2 z&S{0~8rN0AGtU?mPJaE$Zx7oksk7^|*Zzq*EO2(doW5&j;=RIdF_liy{M*mqaLkW^L&5pL zj5PMY0vew#|22ALHS65D`Y-eD&a{3}_=E4bx$?&7w&&m4AAfz<@iVt$PVly{#bpaF z@63vtXt8k&%+no3cI(uwR(QoC-L8kq8)$4 ze{a9{YR#|ne?+@0%!Iiod|bi6bV9&j*-giIhScwNzE9S_UGV1K^0$AA`XruQx}5j+ zz=~oi;diwqXLoHo`RADV