[iOS] fix flashing maneuvers on carplay

https://jira.mail.ru/browse/MAPSME-14919
This commit is contained in:
Aleksey Belousov 2020-09-28 08:21:39 +03:00 committed by mpimenov
parent bd08cd1979
commit f990aa7e03
5 changed files with 43 additions and 19 deletions

View file

@ -211,24 +211,48 @@ extension CarPlayRouter {
routeSession = template.startNavigationSession(for: trip)
routeSession?.pauseTrip(for: .loading, description: nil)
updateUpcomingManeuvers()
RoutingManager.routingManager.setOnNewTurnCallback { [weak self] in
self?.updateUpcomingManeuvers()
}
}
func cancelTrip() {
routeSession?.cancelTrip()
routeSession = nil
completeRouteAndRemovePoints()
RoutingManager.routingManager.resetOnNewTurnCallback()
}
func finishTrip() {
routeSession?.finishTrip()
routeSession = nil
completeRouteAndRemovePoints()
RoutingManager.routingManager.resetOnNewTurnCallback()
}
func updateUpcomingManeuvers() {
let maneuvers = createUpcomingManeuvers()
routeSession?.upcomingManeuvers = maneuvers
}
func updateEstimates() {
guard let routeSession = routeSession,
let routeInfo = RoutingManager.routingManager.routeInfo,
let primaryManeuver = routeSession.upcomingManeuvers.first,
let estimates = createEstimates(routeInfo) else {
return
}
routeSession.updateEstimates(estimates, for: primaryManeuver)
}
private func createEstimates(_ routeInfo: RouteInfo) -> CPTravelEstimates? {
guard let distance = Double(routeInfo.distanceToTurn) else {
return nil
}
let measurement = Measurement(value: distance, unit: routeInfo.turnUnits)
return CPTravelEstimates(distanceRemaining: measurement, timeRemaining: 0.0)
}
private func createUpcomingManeuvers() -> [CPManeuver] {
guard let routeInfo = RoutingManager.routingManager.routeInfo else {
@ -251,11 +275,7 @@ extension CarPlayRouter {
primaryManeuver.symbolSet = CPImageSet(lightContentImage: symbol,
darkContentImage: symbol)
}
if let distance = Double(routeInfo.distanceToTurn) {
let measurement = Measurement(value: distance,
unit: routeInfo.turnUnits)
let estimates = CPTravelEstimates(distanceRemaining: measurement,
timeRemaining: 0.0)
if let estimates = createEstimates(routeInfo) {
primaryManeuver.initialTravelEstimates = estimates
}
maneuvers.append(primaryManeuver)
@ -321,6 +341,7 @@ extension CarPlayRouter: RoutingManagerListener {
listenerContainer.forEach({
$0.didUpdateRouteInfo(info, forTrip: trip)
})
updateUpcomingManeuvers()
}
}
default:

View file

@ -518,7 +518,7 @@ extension CarPlayService: CarPlayRouterListener {
let template = rootMapTemplate else {
return
}
router.updateUpcomingManeuvers()
router.updateEstimates()
if let estimates = createEstimates(routeInfo: routeInfo) {
template.updateEstimates(estimates, for: trip)
}

View file

@ -36,6 +36,8 @@ NS_SWIFT_NAME(RoutingManager)
- (void)addRoutePoint:(MWMRoutePoint *)point NS_SWIFT_NAME(add(routePoint:));
- (void)buildRouteWithDidFailError:(NSError **)errorPtr __attribute__((swift_error(nonnull_error))) NS_SWIFT_NAME(buildRoute());
- (void)startRoute;
- (void)setOnNewTurnCallback:(MWMVoidBlock)callback;
- (void)resetOnNewTurnCallback;
- (instancetype)init __attribute__((unavailable("call +routingManager instead")));
- (instancetype)copy __attribute__((unavailable("call +routingManager instead")));

View file

@ -198,6 +198,16 @@
}
}
- (void)setOnNewTurnCallback:(MWMVoidBlock)callback {
self.rm.RoutingSession().SetOnNewTurnCallback([callback] {
callback();
});
}
- (void)resetOnNewTurnCallback {
self.rm.RoutingSession().SetOnNewTurnCallback(nullptr);
}
#pragma mark - MWMFrameworkRouteBuilderObserver implementation
- (void)processRouteBuilderEvent:(routing::RouterResultCode)code

View file

@ -1,21 +1,12 @@
{
"images" : [
{
"idiom" : "universal",
"filename" : "ic_cp_uturn_right_then.pdf",
"scale" : "1x"
},
{
"idiom" : "universal",
"scale" : "2x"
},
{
"idiom" : "universal",
"scale" : "3x"
"idiom" : "universal"
}
],
"info" : {
"version" : 1,
"author" : "xcode"
"author" : "xcode",
"version" : 1
}
}
}