diff --git a/CHANGELOG.md b/CHANGELOG.md index a3519020..de7aca27 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,19 +2,17 @@ ## Unreleased * Start & Stop Navigation in existing Map - - Removed: `NavigationViewController(for route: Route, dayStyle: Style, routeController: RouteController? = nil, locationManager: NavigationLocationManager? = nil, voiceController: RouteVoiceController? = nil)` use `NavigationViewController(dayStyleURL: URL, nightStyleURL: URL? = nil,directions: Directions = .shared, voiceController: RouteVoiceController = RouteVoiceController())` followed by `startNavigation(with route: Route)` instead. - - To simulate a route, pass a `SimulatedLocationManager` to `startNavigation()` function: + - Removed: `NavigationViewController(for route: Route, dayStyle: Style, routeController: RouteController? = nil, locationManager: NavigationLocationManager? = nil, voiceController: RouteVoiceController? = nil)` use `NavigationViewController(dayStyleURL: URL, nightStyleURL: URL? = nil,directions: Directions = .shared, voiceController: RouteVoiceController = RouteVoiceController())` followed by `startNavigation(with route: Route, animated: Bool)` instead. + - To simulate a route, pass a `SimulatedLocationManager` to `startNavigation()` function: ```swift - let vc = NavigationViewController(dayStyleURL: AppConfig().tileserverStyleUrl) - - if Env.current.simulateLocationForTesting { - let simulatedLocationManager = SimulatedLocationManager(route: route) - simulatedLocationManager.speedMultiplier = 5 - vc.startNavigation(with: route, locationManager: simulatedLocationManager) - } else { - vc.startNavigation(with: route) - } + #if targetEnvironment(simulator) + let locationManager = SimulatedLocationManager(route: route) + locationManager.speedMultiplier = 2 + self.startNavigation(with: route, animated: false, locationManager: locationManager) + #else + self.startNavigation(with: route, animated: false) + #endif ``` ## 3.0.0 (Jun 15, 2024) diff --git a/MapboxNavigation/NavigationViewController.swift b/MapboxNavigation/NavigationViewController.swift index a2a035c1..a17fde98 100644 --- a/MapboxNavigation/NavigationViewController.swift +++ b/MapboxNavigation/NavigationViewController.swift @@ -422,7 +422,7 @@ open class NavigationViewController: UIViewController { // MARK: - NavigationViewController - public func startNavigation(with route: Route, routeController: RouteController? = nil, locationManager: NavigationLocationManager? = nil) { + public func startNavigation(with route: Route, animated: Bool, routeController: RouteController? = nil, locationManager: NavigationLocationManager? = nil) { if let locationManager { self.locationManager = locationManager } @@ -431,7 +431,7 @@ open class NavigationViewController: UIViewController { } self.route = route - self.mapViewController.navigationView.showUI(animated: true) + self.mapViewController.navigationView.showUI(animated: animated) self.mapViewController.destination = route.legs.last?.destination self.routeController?.usesDefaultUserInterface = true @@ -496,8 +496,8 @@ open class NavigationViewController: UIViewController { let directions = routeController.directions let route = routeController.routeProgress.route let navigationViewController = NavigationViewController(dayStyle: DayStyle(demoStyle: ()), nightStyle: NightStyle(demoStyle: ()), directions: directions) - navigationViewController.startNavigation(with: route, routeController: routeController, locationManager: locationManager) - + navigationViewController.startNavigation(with: route, animated: true, routeController: routeController, locationManager: locationManager) + window.rootViewController?.topMostViewController()?.present(navigationViewController, animated: true, completion: { navigationViewController.isUsedInConjunctionWithCarPlayWindow = true }) diff --git a/MapboxNavigationTests/Sources/Tests/NavigationViewControllerTests.swift b/MapboxNavigationTests/Sources/Tests/NavigationViewControllerTests.swift index b6ec64ea..5485873d 100644 --- a/MapboxNavigationTests/Sources/Tests/NavigationViewControllerTests.swift +++ b/MapboxNavigationTests/Sources/Tests/NavigationViewControllerTests.swift @@ -21,8 +21,8 @@ class NavigationViewControllerTests: XCTestCase { voiceController: voice) nav.delegate = self - nav.startNavigation(with: self.initialRoute, locationManager: SimulatedLocationManager(route: self.initialRoute)) - + nav.startNavigation(with: self.initialRoute, animated: false, locationManager: SimulatedLocationManager(route: self.initialRoute)) + let routeController = nav.routeController! let firstCoord = routeController.routeProgress.currentLegProgress.nearbyCoordinates.first! let firstLocation = location(at: firstCoord) @@ -92,7 +92,7 @@ class NavigationViewControllerTests: XCTestCase { let navigationViewController = NavigationViewController(dayStyle: DayStyle(demoStyle: ()), directions: fakeDirections, voiceController: FakeVoiceController()) - navigationViewController.startNavigation(with: self.initialRoute, locationManager: SimulatedLocationManager(route: self.initialRoute)) + navigationViewController.startNavigation(with: self.initialRoute, animated: false, locationManager: SimulatedLocationManager(route: self.initialRoute)) let routeController = navigationViewController.routeController! navigationViewController.styleManager.delegate = self @@ -109,7 +109,7 @@ class NavigationViewControllerTests: XCTestCase { // If tunnel flags are enabled and we need to switch styles, we should not force refresh the map style because we have only 1 style. func testNavigationShouldNotCallStyleManagerDidRefreshAppearanceWhenOnlyOneStyle() { let navigationViewController = NavigationViewController(dayStyle: DayStyle(demoStyle: ()), directions: fakeDirections, voiceController: FakeVoiceController()) - navigationViewController.startNavigation(with: self.initialRoute, locationManager: SimulatedLocationManager(route: self.initialRoute)) + navigationViewController.startNavigation(with: self.initialRoute, animated: false, locationManager: SimulatedLocationManager(route: self.initialRoute)) let routeController = navigationViewController.routeController! navigationViewController.styleManager.delegate = self @@ -125,7 +125,7 @@ class NavigationViewControllerTests: XCTestCase { func testNavigationShouldNotCallStyleManagerDidRefreshAppearanceMoreThanOnceWithTwoStyles() { let navigationViewController = NavigationViewController(dayStyle: DayStyle(demoStyle: ()), nightStyle: NightStyle(demoStyle: ()), directions: fakeDirections, voiceController: FakeVoiceController()) - navigationViewController.startNavigation(with: self.initialRoute, locationManager: SimulatedLocationManager(route: self.initialRoute)) + navigationViewController.startNavigation(with: self.initialRoute, animated: false, locationManager: SimulatedLocationManager(route: self.initialRoute)) let routeController = navigationViewController.routeController! navigationViewController.styleManager.delegate = self @@ -179,11 +179,11 @@ class NavigationViewControllerTests: XCTestCase { func testDestinationAnnotationUpdatesUponReroute() { let styleLoaded = XCTestExpectation(description: "Style Loaded") - let navigationViewController = NavigationViewControllerTestable(for: initialRoute, dayStyle: DayStyle.blankStyleForTesting, styleLoaded: styleLoaded) + let navigationViewController = NavigationViewControllerTestable(dayStyle: DayStyle.blankStyleForTesting, styleLoaded: styleLoaded) // wait for the style to load -- routes won't show without it. wait(for: [styleLoaded], timeout: 5) - navigationViewController.startNavigation(with: self.initialRoute, locationManager: SimulatedLocationManager(route: self.initialRoute)) + navigationViewController.startNavigation(with: self.initialRoute, animated: false, locationManager: SimulatedLocationManager(route: self.initialRoute)) runUntil { !(navigationViewController.mapView.annotations?.isEmpty ?? true) @@ -255,12 +255,10 @@ private extension NavigationViewControllerTests { class NavigationViewControllerTestable: NavigationViewController { var styleLoadedExpectation: XCTestExpectation - required init(for route: Route, - dayStyle: Style, + required init(dayStyle: Style, styleLoaded: XCTestExpectation) { self.styleLoadedExpectation = styleLoaded super.init(dayStyle: dayStyle, directions: Directions(accessToken: "abc", host: ""), voiceController: FakeVoiceController()) - self.startNavigation(with: route) } @objc(initWithRoute:dayStyle:nightStyle:directions:routeController:locationManager:voiceController:) diff --git a/README.md b/README.md index 69afaeb1..d7620eaf 100644 --- a/README.md +++ b/README.md @@ -34,9 +34,9 @@ Start the navigation by calling `startNavigation(with: route)`. If you want to s #if targetEnvironment(simulator) let locationManager = SimulatedLocationManager(route: route) locationManager.speedMultiplier = 2 - self.startNavigation(with: route, locationManager: locationManager) + self.startNavigation(with: route, animated: false, locationManager: locationManager) #else - self.startNavigation(with: route) + self.startNavigation(with: route, animated: false) #endif ```