forked from organicmaps/organicmaps
[iOS] fix flashing maneuvers on carplay
https://jira.mail.ru/browse/MAPSME-14919
This commit is contained in:
parent
bd08cd1979
commit
f990aa7e03
5 changed files with 43 additions and 19 deletions
|
@ -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:
|
||||
|
|
|
@ -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)
|
||||
}
|
||||
|
|
|
@ -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")));
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Add table
Reference in a new issue