Skip to content

Commit 0eeb848

Browse files
authored
Incidents Options exposing (#4088)
* vk-1956-incidents-options: added NavigationSettings.liveIncidentsOptions and forwarded this confguration to NavigatorConfig; CHANGELOG updated
1 parent 7d1c163 commit 0eeb848

File tree

5 files changed

+60
-11
lines changed

5 files changed

+60
-11
lines changed

CHANGELOG.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,7 @@
3939
* A multi-leg route that crosses an international border can now have alternative routes. ([#4085](https://github.com/mapbox/mapbox-navigation-ios/pull/4085))
4040
* Curvy roads are penalized slightly more consistently. ([#4085](https://github.com/mapbox/mapbox-navigation-ios/pull/4085))
4141
* You can now set `Waypoint.allowsSnappingToStaticallyClosedRoad` to `true` to allow the waypoint to snap to a road that is fully closed for long-term construction. ([#4085](https://github.com/mapbox/mapbox-navigation-ios/pull/4085))
42+
* Added `NavigationSettings.liveIncidentsOptions` to configure how incidents data is fetched. ([#4088](https://github.com/mapbox/mapbox-navigation-ios/pull/4088))
4243

4344
### Other changes
4445

MapboxNavigation.xcodeproj/project.pbxproj

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,7 @@
3737
2B01E4B6274671550002A5F7 /* MapboxRoutingProvider.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2B01E4B3274671540002A5F7 /* MapboxRoutingProvider.swift */; };
3838
2B01E4B7274671550002A5F7 /* RoutingProvider.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2B01E4B4274671540002A5F7 /* RoutingProvider.swift */; };
3939
2B01E4B8274671550002A5F7 /* Directions+RoutingProvider.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2B01E4B5274671550002A5F7 /* Directions+RoutingProvider.swift */; };
40+
2B02397728B37E2200C348D0 /* IncidentsOptions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2B02397628B37E2200C348D0 /* IncidentsOptions.swift */; };
4041
2B07444124B4832400615E87 /* TokenTestViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2B07444024B4832400615E87 /* TokenTestViewController.swift */; };
4142
2B27557F2860B01A002D1CAD /* HistoryRecorder.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2B27557E2860B01A002D1CAD /* HistoryRecorder.swift */; };
4243
2B28AD7D284F68A1001CD1FB /* AlternativeRouteDetectionStrategy.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2B28AD7C284F68A1001CD1FB /* AlternativeRouteDetectionStrategy.swift */; };
@@ -609,6 +610,7 @@
609610
2B01E4B3274671540002A5F7 /* MapboxRoutingProvider.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = MapboxRoutingProvider.swift; sourceTree = "<group>"; };
610611
2B01E4B4274671540002A5F7 /* RoutingProvider.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = RoutingProvider.swift; sourceTree = "<group>"; };
611612
2B01E4B5274671550002A5F7 /* Directions+RoutingProvider.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "Directions+RoutingProvider.swift"; sourceTree = "<group>"; };
613+
2B02397628B37E2200C348D0 /* IncidentsOptions.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = IncidentsOptions.swift; sourceTree = "<group>"; };
612614
2B07444024B4832400615E87 /* TokenTestViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TokenTestViewController.swift; sourceTree = "<group>"; };
613615
2B27557E2860B01A002D1CAD /* HistoryRecorder.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = HistoryRecorder.swift; sourceTree = "<group>"; };
614616
2B28AD7C284F68A1001CD1FB /* AlternativeRouteDetectionStrategy.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AlternativeRouteDetectionStrategy.swift; sourceTree = "<group>"; };
@@ -2033,6 +2035,7 @@
20332035
353E68FB1EF0B7F8007B2AE5 /* NavigationLocationManager.swift */,
20342036
C5E7A31B1F4F6828001CB015 /* NavigationRouteOptions.swift */,
20352037
35375EC01F31FA86004CE727 /* NavigationSettings.swift */,
2038+
2B02397628B37E2200C348D0 /* IncidentsOptions.swift */,
20362039
351174F31EF1C0530065E248 /* ReplayLocationManager.swift */,
20372040
C5ADFBF91DDCC9580011824B /* LegacyRouteController.swift */,
20382041
8D2AA744211CDD4000EB7F72 /* NavigationService.swift */,
@@ -2968,6 +2971,7 @@
29682971
118D883426F8CA0700B2ED7B /* FeedbackEvent.swift in Sources */,
29692972
E2C623A726CBFCE1005769FA /* OnMainQueue.swift in Sources */,
29702973
C5C94C1C1DDCD2340097296A /* LegacyRouteController.swift in Sources */,
2974+
2B02397728B37E2200C348D0 /* IncidentsOptions.swift in Sources */,
29712975
3A8187C924BDAE9C00708F19 /* URLSession.swift in Sources */,
29722976
2B27557F2860B01A002D1CAD /* HistoryRecorder.swift in Sources */,
29732977
359574A81F28CC5A00838209 /* CLLocation.swift in Sources */,
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
2+
import Foundation
3+
4+
/**
5+
Configures how Electronic Horizon supports live incidents on a most probable path.
6+
7+
To enable live incidents `IncidentsOptions` should be provided to `NavigationSettings` before starting navigation.
8+
*/
9+
public struct IncidentsOptions {
10+
/**
11+
Incidents provider graph name.
12+
13+
If empty - incidents will be disabled.
14+
*/
15+
public var graph: String
16+
/**
17+
LTS incidents service API url.
18+
19+
If `nil` is supplied will use a default url.
20+
*/
21+
public var apiURL: URL?
22+
}

Sources/MapboxCoreNavigation/NativeHandlersFactory.swift

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -102,14 +102,20 @@ class NativeHandlersFactory {
102102
}()
103103

104104
static var navigatorConfig: NavigatorConfig {
105+
var nativeIncidentsOptions: MapboxNavigationNative.IncidentsOptions?
106+
if let incidentsOptions = NavigationSettings.shared.liveIncidentsOptions,
107+
!incidentsOptions.graph.isEmpty {
108+
nativeIncidentsOptions = .init(graph: incidentsOptions.graph,
109+
apiUrl: incidentsOptions.apiURL?.absoluteString ?? "")
110+
}
105111
return NavigatorConfig(voiceInstructionThreshold: nil,
106112
electronicHorizonOptions: nil,
107113
polling: NavigationSettings.shared.navigatorPredictionInterval.map {
108114
PollingConfig(lookAhead: NSNumber(value: $0),
109115
unconditionalPatience: nil,
110116
unconditionalInterval: nil)
111117
},
112-
incidentsOptions: nil,
118+
incidentsOptions: nativeIncidentsOptions,
113119
noSignalSimulationEnabled: nil,
114120
avoidManeuverSeconds: NSNumber(value: RerouteController.DefaultManeuverAvoidanceRadius),
115121
useSensors: NSNumber(booleanLiteral: NavigationSettings.shared.utilizeSensorData))

Sources/MapboxCoreNavigation/NavigationSettings.swift

Lines changed: 26 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ public typealias RoutingProviderSource = MapboxRoutingProvider.Source
1414
To customize the user experience during a particular turn-by-turn navigation session, use the `NavigationOptions` class
1515
when initializing a `NavigationViewController`.
1616

17-
To customize some global defaults use `NavigationSettings.initialize(directions:tileStoreConfiguration:routingProviderSource:alternativeRouteDetectionStrategy:utilizeSensorData:navigatorPredictionInterval:)` method.
17+
To customize some global defaults use `NavigationSettings.initialize(directions:tileStoreConfiguration:routingProviderSource:alternativeRouteDetectionStrategy:utilizeSensorData:navigatorPredictionInterval:liveIncidentsOptions:)` method.
1818
*/
1919
public class NavigationSettings {
2020

@@ -40,7 +40,8 @@ public class NavigationSettings {
4040
routingProviderSource: .hybrid,
4141
alternativeRouteDetectionStrategy: .init(),
4242
utilizeSensorData: false,
43-
navigatorPredictionInterval: nil)
43+
navigatorPredictionInterval: nil,
44+
liveIncidentsOptions: nil)
4445
}
4546

4647
var directions: Directions
@@ -49,6 +50,7 @@ public class NavigationSettings {
4950
var alternativeRouteDetectionStrategy: AlternativeRouteDetectionStrategy?
5051
var utilizeSensorData: Bool
5152
var navigatorPredictionInterval: TimeInterval?
53+
var liveIncidentsOptions: IncidentsOptions?
5254
}
5355

5456
/// Protects access to `_state`.
@@ -72,7 +74,7 @@ public class NavigationSettings {
7274
/**
7375
Default `Directions` instance. By default, `Directions.shared` is used.
7476

75-
You can override this property by using `NavigationSettings.initialize(directions:tileStoreConfiguration:navigationRouterType:alternativeRouteDetectionStrategy:utilizeSensorData:navigatorPredictionInterval:)` method.
77+
You can override this property by using `NavigationSettings.initialize(directions:tileStoreConfiguration:navigationRouterType:alternativeRouteDetectionStrategy:utilizeSensorData:navigatorPredictionInterval:liveIncidentsOptions:)` method.
7678
*/
7779
public var directions: Directions {
7880
state.directions
@@ -81,14 +83,14 @@ public class NavigationSettings {
8183
/**
8284
Global `TileStoreConfiguration` instance.
8385

84-
You can override this property by using `NavigationSettings.initialize(directions:tileStoreConfiguration:navigationRouterType:alternativeRouteDetectionStrategy:utilizeSensorData:navigatorPredictionInterval:)` method.
86+
You can override this property by using `NavigationSettings.initialize(directions:tileStoreConfiguration:navigationRouterType:alternativeRouteDetectionStrategy:utilizeSensorData:navigatorPredictionInterval:liveIncidentsOptions:)` method.
8587
*/
8688
public var tileStoreConfiguration: TileStoreConfiguration {
8789
state.tileStoreConfiguration
8890
}
8991

9092
/**
91-
You can override this property by using `NavigationSettings.initialize(directions:tileStoreConfiguration:navigationRouterType:alternativeRouteDetectionStrategy:utilizeSensorData:navigatorPredictionInterval:)` method.
93+
You can override this property by using `NavigationSettings.initialize(directions:tileStoreConfiguration:navigationRouterType:alternativeRouteDetectionStrategy:utilizeSensorData:navigatorPredictionInterval:liveIncidentsOptions:)` method.
9294
*/
9395
public var routingProviderSource: RoutingProviderSource {
9496
state.routingProviderSource
@@ -97,7 +99,7 @@ public class NavigationSettings {
9799
/**
98100
Configuration on how `AlternativeRoute`s will be detected during navigation process.
99101

100-
You can override this property by using `NavigationSettings.initialize(directions:tileStoreConfiguration:navigationRouterType:alternativeRouteDetectionStrategy:utilizeSensorData:navigatorPredictionInterval:)` method.
102+
You can override this property by using `NavigationSettings.initialize(directions:tileStoreConfiguration:navigationRouterType:alternativeRouteDetectionStrategy:utilizeSensorData:navigatorPredictionInterval:liveIncidentsOptions:)` method.
101103

102104
If set to `nil`, the detection is turned off.
103105
*/
@@ -123,12 +125,23 @@ public class NavigationSettings {
123125

124126
If not specified (`nilled`), default value will be used.
125127

126-
You can override this property by using `NavigationSettings.initialize(directions:tileStoreConfiguration:navigationRouterType:alternativeRouteDetectionStrategy:utilizeSensorData:navigatorPredictionInterval:)` method.
128+
You can override this property by using `NavigationSettings.initialize(directions:tileStoreConfiguration:navigationRouterType:alternativeRouteDetectionStrategy:utilizeSensorData:navigatorPredictionInterval:liveIncidentsOptions:)` method.
127129
*/
128130
public var navigatorPredictionInterval: TimeInterval? {
129131
state.navigatorPredictionInterval
130132
}
131133

134+
/**
135+
Configuration on how live incidents on a most probable path are detected.
136+
137+
You can override this property by using `NavigationSettings.initialize(directions:tileStoreConfiguration:navigationRouterType:alternativeRouteDetectionStrategy:utilizeSensorData:navigatorPredictionInterval:liveIncidentsOptions:)` method.
138+
139+
If set to `nil`, live incidents are turned off (by default).
140+
*/
141+
public var liveIncidentsOptions: IncidentsOptions? {
142+
state.liveIncidentsOptions
143+
}
144+
132145
/**
133146
Initializes the settings with custom instances of globally used types.
134147

@@ -146,25 +159,28 @@ public class NavigationSettings {
146159
- alternativeRouteDetectionStrategy: Configures how `AlternativeRoute`s will be detected during navigation process.
147160
- utilizeSensorData: Enables using sensors data to improve positioning.
148161
- navigatorPredictionInterval: Defines approximate navigator prediction between location ticks.
162+
- liveIncidentsOptions: Configures Electronic Horizon live incidents.
149163
*/
150164
public func initialize(directions: Directions,
151165
tileStoreConfiguration: TileStoreConfiguration,
152166
routingProviderSource: RoutingProviderSource = .hybrid,
153167
alternativeRouteDetectionStrategy: AlternativeRouteDetectionStrategy? = .init(),
154168
utilizeSensorData: Bool = false,
155-
navigatorPredictionInterval: TimeInterval? = nil) {
169+
navigatorPredictionInterval: TimeInterval? = nil,
170+
liveIncidentsOptions: IncidentsOptions? = nil) {
156171
lock.lock(); defer {
157172
lock.unlock()
158173
}
159174
if _state != nil {
160-
Log.warning("Warning: Using NavigationSettings.initialize(directions:tileStoreConfiguration:routingProviderSource:alternativeRouteDetectionStrategy:utilizeSensorData:navigatorPredictionInterval:) after corresponding variables was initialized. Possible reasons: Initialize called more than once, or the following properties was accessed before initialization: `tileStoreConfiguration`, `directions`, `routingProviderSource`, `alternativeRouteDetectionStrategy`, `utilizeSensorData`, `navigatorPredictionInterval`. This might result in an undefined behaviour.", category: .settings)
175+
Log.warning("Warning: Using NavigationSettings.initialize(directions:tileStoreConfiguration:routingProviderSource:alternativeRouteDetectionStrategy:utilizeSensorData:navigatorPredictionInterval:liveIncidentsOptions:) after corresponding variables was initialized. Possible reasons: Initialize called more than once, or the following properties was accessed before initialization: `tileStoreConfiguration`, `directions`, `routingProviderSource`, `alternativeRouteDetectionStrategy`, `utilizeSensorData`, `navigatorPredictionInterval`, `liveIncidentsOptions`. This might result in an undefined behaviour.", category: .settings)
161176
}
162177
_state = .init(directions: directions,
163178
tileStoreConfiguration: tileStoreConfiguration,
164179
routingProviderSource: routingProviderSource,
165180
alternativeRouteDetectionStrategy: alternativeRouteDetectionStrategy,
166181
utilizeSensorData: utilizeSensorData,
167-
navigatorPredictionInterval: navigatorPredictionInterval)
182+
navigatorPredictionInterval: navigatorPredictionInterval,
183+
liveIncidentsOptions: liveIncidentsOptions)
168184
}
169185

170186
/**

0 commit comments

Comments
 (0)