Skip to content

Commit 4cf848e

Browse files
authored
Route Origin handling (#3945)
* vk-1655-route-origin: added internal router origin value to IndexedRouteResponse to forward it to NN when setting a route.
1 parent a743bd1 commit 4cf848e

File tree

5 files changed

+40
-14
lines changed

5 files changed

+40
-14
lines changed

Sources/MapboxCoreNavigation/AlternativeRoute.swift

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -47,8 +47,9 @@ public struct AlternativeRoute: Identifiable {
4747
}
4848

4949
self.indexedRouteResponse = .init(routeResponse: decoded.routeResponse,
50-
routeIndex: Int(nativeRouteAlternative.route.getRouteIndex()))
51-
50+
routeIndex: Int(nativeRouteAlternative.route.getRouteIndex()),
51+
responseOrigin: nativeRouteAlternative.route.getRouterOrigin())
52+
5253
var legIndex = Int(nativeRouteAlternative.mainRouteFork.legIndex)
5354
var segmentIndex = Int(nativeRouteAlternative.mainRouteFork.segmentIndex)
5455

Sources/MapboxCoreNavigation/RerouteController.swift

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -94,7 +94,8 @@ extension RerouteController: RerouteObserver {
9494
delegate?.rerouteControllerWantsSwitchToAlternative(self,
9595
response: decoded.routeResponse,
9696
routeIndex: Int(route.getRouteIndex()),
97-
options: decoded.routeOptions)
97+
options: decoded.routeOptions,
98+
routeOrigin: route.getRouterOrigin())
9899
}
99100

100101
func onRerouteDetected(forRouteRequest routeRequest: String) -> Bool {
@@ -116,7 +117,8 @@ extension RerouteController: RerouteObserver {
116117
decodedRequest.routeOptions == latestRouteResponse.options {
117118
delegate?.rerouteControllerDidRecieveReroute(self,
118119
response: latestRouteResponse.response,
119-
options: latestRouteResponse.options)
120+
options: latestRouteResponse.options,
121+
routeOrigin: origin)
120122
self.latestRouteResponse = nil
121123
} else {
122124
guard let decodedResponse = Self.decode(routeResponse: routeResponse,
@@ -128,7 +130,8 @@ extension RerouteController: RerouteObserver {
128130

129131
delegate?.rerouteControllerDidRecieveReroute(self,
130132
response: decodedResponse,
131-
options: decodedRequest.routeOptions)
133+
options: decodedRequest.routeOptions,
134+
routeOrigin: origin)
132135
}
133136
}
134137

Sources/MapboxCoreNavigation/RerouteControllerDelegate.swift

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,9 +7,10 @@ protocol ReroutingControllerDelegate: AnyObject {
77
func rerouteControllerWantsSwitchToAlternative(_ rerouteController: RerouteController,
88
response: RouteResponse,
99
routeIndex: Int,
10-
options: RouteOptions)
10+
options: RouteOptions,
11+
routeOrigin: RouterOrigin)
1112
func rerouteControllerDidDetectReroute(_ rerouteController: RerouteController) -> Bool
12-
func rerouteControllerDidRecieveReroute(_ rerouteController: RerouteController, response: RouteResponse, options: RouteOptions)
13+
func rerouteControllerDidRecieveReroute(_ rerouteController: RerouteController, response: RouteResponse, options: RouteOptions, routeOrigin: RouterOrigin)
1314
func rerouteControllerDidCancelReroute(_ rerouteController: RerouteController)
1415
func rerouteControllerDidFailToReroute(_ rerouteController: RerouteController, with error: DirectionsError)
1516
}

Sources/MapboxCoreNavigation/RouteController.swift

Lines changed: 11 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -287,7 +287,8 @@ open class RouteController: NSObject {
287287
}
288288

289289
let parsedRoutes = RouteParser.parseDirectionsResponse(forResponse: routeJSONString,
290-
request: routeRequest, routeOrigin: RouterOrigin.custom)
290+
request: routeRequest,
291+
routeOrigin: indexedRouteResponse.responseOrigin)
291292
if parsedRoutes.isValue(),
292293
var routes = parsedRoutes.value as? [RouteInterface],
293294
routes.count > indexedRouteResponse.routeIndex {
@@ -875,10 +876,11 @@ extension RouteController: ReroutingControllerDelegate {
875876
func rerouteControllerWantsSwitchToAlternative(_ rerouteController: RerouteController,
876877
response: RouteResponse,
877878
routeIndex: Int,
878-
options: RouteOptions) {
879+
options: RouteOptions,
880+
routeOrigin: RouterOrigin) {
879881
let newRouteResponse = IndexedRouteResponse(routeResponse: response,
880-
routeIndex: routeIndex)
881-
882+
routeIndex: routeIndex,
883+
responseOrigin: routeOrigin)
882884
guard let newMainRoute = newRouteResponse.currentRoute else {
883885
return
884886
}
@@ -927,9 +929,11 @@ extension RouteController: ReroutingControllerDelegate {
927929
}
928930
}
929931

930-
func rerouteControllerDidRecieveReroute(_ rerouteController: RerouteController, response: RouteResponse, options: RouteOptions) {
931-
updateRoute(with: IndexedRouteResponse(routeResponse: response,
932-
routeIndex: 0),
932+
func rerouteControllerDidRecieveReroute(_ rerouteController: RerouteController, response: RouteResponse, options: RouteOptions, routeOrigin: RouterOrigin) {
933+
let indexedRouteResponse = IndexedRouteResponse(routeResponse: response,
934+
routeIndex: 0,
935+
responseOrigin: routeOrigin)
936+
updateRoute(with: indexedRouteResponse,
933937
routeOptions: options,
934938
isProactive: false) { [weak self] _ in
935939
self?.isRerouting = false

Sources/MapboxCoreNavigation/Router.swift

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
import Foundation
22
import CoreLocation
33
import MapboxDirections
4+
import MapboxNavigationNative
45

56
/**
67
A router data source, also known as a location manager, supplies location data to a `Router` instance. For example, a `MapboxNavigationService` supplies location data to a `RouteController` or `LegacyRouteController`.
@@ -43,8 +44,24 @@ public struct IndexedRouteResponse {
4344
- parameter routeIndex: Selected route index in an array.
4445
*/
4546
public init(routeResponse: RouteResponse, routeIndex: Int) {
47+
self.init(routeResponse: routeResponse,
48+
routeIndex: routeIndex,
49+
responseOrigin: .custom)
50+
}
51+
52+
/**
53+
Describes the origin of current route response.
54+
55+
Used by `Navigator` for better understanding current state and various features functioning.
56+
*/
57+
internal let responseOrigin: RouterOrigin
58+
59+
init(routeResponse: RouteResponse,
60+
routeIndex: Int,
61+
responseOrigin: RouterOrigin) {
4662
self.routeResponse = routeResponse
4763
self.routeIndex = routeIndex
64+
self.responseOrigin = responseOrigin
4865
}
4966
}
5067

0 commit comments

Comments
 (0)