diff --git a/iphone/Maps/Classes/CustomViews/NavigationDashboard/MWMNavigationDashboardManager+Entity.h b/iphone/Maps/Classes/CustomViews/NavigationDashboard/MWMNavigationDashboardManager+Entity.h index 154a1c98c3..acabbc7173 100644 --- a/iphone/Maps/Classes/CustomViews/NavigationDashboard/MWMNavigationDashboardManager+Entity.h +++ b/iphone/Maps/Classes/CustomViews/NavigationDashboard/MWMNavigationDashboardManager+Entity.h @@ -1,4 +1,5 @@ #import "MWMNavigationDashboardManager.h" +#import "MWMRouterType.h" namespace routing { @@ -9,7 +10,7 @@ struct TransitRouteInfo; @interface MWMNavigationDashboardManager (Entity) -- (void)updateFollowingInfo:(routing::FollowingInfo const &)info; +- (void)updateFollowingInfo:(routing::FollowingInfo const &)info type:(MWMRouterType)type; - (void)updateTransitInfo:(TransitRouteInfo const &)info; @end diff --git a/iphone/Maps/Classes/CustomViews/NavigationDashboard/MWMNavigationDashboardManager+Entity.mm b/iphone/Maps/Classes/CustomViews/NavigationDashboard/MWMNavigationDashboardManager+Entity.mm index b1f633b001..b7e4deec7d 100644 --- a/iphone/Maps/Classes/CustomViews/NavigationDashboard/MWMNavigationDashboardManager+Entity.mm +++ b/iphone/Maps/Classes/CustomViews/NavigationDashboard/MWMNavigationDashboardManager+Entity.mm @@ -20,9 +20,7 @@ UIImage * image(routing::turns::CarDirection t, bool isNextTurn) { if (![MWMLocationManager lastLocation]) return nil; - if ([MWMRouter type] == MWMRouterTypePedestrian) - return [UIImage imageNamed:@"ic_direction"]; - + using namespace routing::turns; NSString * imageName; switch (t) @@ -51,6 +49,27 @@ UIImage * image(routing::turns::CarDirection t, bool isNextTurn) return [UIImage imageNamed:isNextTurn ? [imageName stringByAppendingString:@"_then"] : imageName]; } +UIImage * image(routing::turns::PedestrianDirection t) +{ + if (![MWMLocationManager lastLocation]) + return nil; + + using namespace routing::turns; + NSString * imageName; + switch (t) + { + case PedestrianDirection::TurnRight: imageName = @"simple_right"; break; + case PedestrianDirection::TurnLeft: imageName = @"simple_left"; break; + case PedestrianDirection::ReachedYourDestination: imageName = @"finish_point"; break; + case PedestrianDirection::GoStraight: + case PedestrianDirection::Count: + case PedestrianDirection::None: imageName = @"straight"; break; + } + if (!imageName) + return nil; + return [UIImage imageNamed:imageName]; +} + NSAttributedString * estimate(NSTimeInterval time, NSAttributedString * dot, NSString * distance, NSString * distanceUnits, NSDictionary * primaryAttributes, NSDictionary * secondaryAttributes, BOOL isWalk) @@ -122,8 +141,7 @@ NSAttributedString * estimate(NSTimeInterval time, NSAttributedString * dot, NSS @implementation MWMNavigationDashboardManager (Entity) -- (void)updateFollowingInfo:(routing::FollowingInfo const &)info -{ +- (void)updateFollowingInfo:(routing::FollowingInfo const &)info type:(MWMRouterType)type { if ([MWMRouter isRouteFinished]) { [MWMRouter stopRouting]; @@ -141,22 +159,26 @@ NSAttributedString * estimate(NSTimeInterval time, NSAttributedString * dot, NSS entity.distanceToTurn = @(info.m_distToTurn.c_str()); entity.turnUnits = [self localizedUnitLength:@(info.m_turnUnitsSuffix.c_str())]; entity.streetName = @(info.m_displayedStreetName.c_str()); - entity.nextTurnImage = image(info.m_nextTurn, true); entity.estimate = estimate(entity.timeToTarget, entity.estimateDot, entity.targetDistance, entity.targetUnits, self.etaAttributes, self.etaSecondaryAttributes, NO); - using namespace routing::turns; - CarDirection const turn = info.m_turn; - entity.turnImage = image(turn, false); - BOOL const isRound = turn == CarDirection::EnterRoundAbout || - turn == CarDirection::StayOnRoundAbout || - turn == CarDirection::LeaveRoundAbout; - if (isRound) - entity.roundExitNumber = info.m_exitNum; - else - entity.roundExitNumber = 0; + if (type == MWMRouterTypePedestrian) { + entity.turnImage = image(info.m_pedestrianTurn); + } else { + using namespace routing::turns; + CarDirection const turn = info.m_turn; + entity.turnImage = image(turn, false); + entity.nextTurnImage = image(info.m_nextTurn, true); + BOOL const isRound = turn == CarDirection::EnterRoundAbout || + turn == CarDirection::StayOnRoundAbout || + turn == CarDirection::LeaveRoundAbout; + if (isRound) + entity.roundExitNumber = info.m_exitNum; + else + entity.roundExitNumber = 0; + } } [self onNavigationInfoUpdated]; diff --git a/iphone/Maps/Classes/CustomViews/NavigationDashboard/Views/MWMNavigationInfoView.mm b/iphone/Maps/Classes/CustomViews/NavigationDashboard/Views/MWMNavigationInfoView.mm index 5cf310bc1b..5feebdc22f 100644 --- a/iphone/Maps/Classes/CustomViews/NavigationDashboard/Views/MWMNavigationInfoView.mm +++ b/iphone/Maps/Classes/CustomViews/NavigationDashboard/Views/MWMNavigationInfoView.mm @@ -274,10 +274,9 @@ BOOL defaultOrientation(CGSize const & size) - (void)onNavigationInfoUpdated:(MWMNavigationDashboardEntity *)info { self.navigationInfo = info; - BOOL const isPedestrianRouting = [MWMRouter type] == MWMRouterTypePedestrian; if (self.state != MWMNavigationInfoViewStateNavigation) return; - if (!isPedestrianRouting && info.streetName.length != 0) + if (info.streetName.length != 0) { [self setStreetNameVisible:YES]; self.streetNameLabel.text = info.streetName; @@ -319,7 +318,7 @@ BOOL defaultOrientation(CGSize const & size) attributes:turnLegendAttributes]]; self.distanceToNextTurnLabel.attributedText = distance; - if (!isPedestrianRouting && info.nextTurnImage) + if (info.nextTurnImage) { self.secondTurnView.hidden = NO; self.secondTurnImageView.image = info.nextTurnImage; @@ -345,21 +344,6 @@ BOOL defaultOrientation(CGSize const & size) [self updateToastView]; } -- (void)onHeadingUpdate:(CLHeading *)heading -{ - auto transform = CATransform3DIdentity; - auto lastLocation = [MWMLocationManager lastLocation]; - if (lastLocation && self.state == MWMNavigationInfoViewStateNavigation && - [MWMRouter type] == MWMRouterTypePedestrian) - { - auto const info = location_util::compassInfoFromHeading(heading); - auto const angle = ang::AngleTo(lastLocation.mercator, - self.navigationInfo.pedestrianDirectionPosition.mercator); - transform = CATransform3DMakeRotation(M_PI_2 - angle - info.m_bearing, 0, 0, 1); - } - self.nextTurnImageView.layer.transform = transform; -} - #pragma mark - SolidTouchView - (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event diff --git a/iphone/Maps/Classes/CustomViews/NavigationDashboard/Views/NavigationControlView.swift b/iphone/Maps/Classes/CustomViews/NavigationDashboard/Views/NavigationControlView.swift index cce0faa647..51ef544d8d 100644 --- a/iphone/Maps/Classes/CustomViews/NavigationDashboard/Views/NavigationControlView.swift +++ b/iphone/Maps/Classes/CustomViews/NavigationDashboard/Views/NavigationControlView.swift @@ -258,8 +258,7 @@ final class NavigationControlView: SolidTouchView, MWMTextToSpeechObserver, MapO func onTTSStatusUpdated() { guard MWMRouter.isRoutingActive() else { return } - let isPedestrianRouting = MWMRouter.type() == .pedestrian - ttsButton.isHidden = isPedestrianRouting || !MWMTextToSpeech.isTTSEnabled() + ttsButton.isHidden = !MWMTextToSpeech.isTTSEnabled() if !ttsButton.isHidden { ttsButton.isSelected = MWMTextToSpeech.tts().active } @@ -274,6 +273,12 @@ final class NavigationControlView: SolidTouchView, MWMTextToSpeechObserver, MapO refreshDiminishTimer() } + override func applyTheme() { + super.applyTheme() + onTrafficStateUpdated() + onTTSStatusUpdated() + } + override var sideButtonsAreaAffectDirections: MWMAvailableAreaAffectDirections { return .bottom } diff --git a/iphone/Maps/Classes/CustomViews/NavigationDashboard/Views/NavigationControlView.xib b/iphone/Maps/Classes/CustomViews/NavigationDashboard/Views/NavigationControlView.xib index 273a0bbffc..e5541a9f33 100644 --- a/iphone/Maps/Classes/CustomViews/NavigationDashboard/Views/NavigationControlView.xib +++ b/iphone/Maps/Classes/CustomViews/NavigationDashboard/Views/NavigationControlView.xib @@ -1,9 +1,9 @@ - - + + - + @@ -85,7 +85,7 @@ - + @@ -166,7 +166,7 @@ - - - - + + + + + + + + + +