diff --git a/.circleci/config.yml b/.circleci/config.yml index 197cd92493e..946a2ba8655 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -598,6 +598,7 @@ jobs: static-analysis: executor: ndk-r22-latest-executor + resource_class: medium+ steps: - when: condition: diff --git a/CHANGELOG.md b/CHANGELOG.md index 3247f4de033..6942b9c2c13 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -12,6 +12,7 @@ Mapbox welcomes participation and contributions from everyone. - Introduced `MapboxManeuverView#maneuverViewState` to allow users to observe changes to `MapboxManeuverViewState` when the view expands and collapses. [#6286](https://github.com/mapbox/mapbox-navigation-android/pull/6286) - Introduced `NavigationViewApi#onManeuverCollapsed` and `NavigationViewApi#onManeuverExpanded` callback which is triggered upon changes to `MapboxManeuverViewState`. [#6286](https://github.com/mapbox/mapbox-navigation-android/pull/6286) - Implemented logic that would display `BannerComponents` of `type` `GuidanceView` and `subType` `BannerComponents#SAPA`, `BannerComponents#CITYREAL`, `BannerComponents#AFTERTOLL`, `BannerComponents#SIGNBOARD`, `BannerComponents#TOLLBRANCH`, `BannerComponents#EXPRESSWAY_ENTRANCE`, `BannerComponents#EXPRESSWAY_EXIT` using `JunctionViewApi`. [#6285](https://github.com/mapbox/mapbox-navigation-android/pull/6285) +- Calling `MapboxNavigationApp.setup` will create a new `MapboxNavigation` instance with new `NavigationOptions` even if the app has been setup. [#6285](https://github.com/mapbox/mapbox-navigation-android/pull/6285) #### Bug fixes and improvements - Fixed an issue with `NavigationView` that caused overview camera to have wrong pitch. [#6278](https://github.com/mapbox/mapbox-navigation-android/pull/6278) - Fixed an issue with `NavigationView` that caused camera issues after reroute or switching to an alternative route. [#6283](https://github.com/mapbox/mapbox-navigation-android/pull/6283) diff --git a/libnavigation-core/src/main/java/com/mapbox/navigation/core/lifecycle/MapboxNavigationAppDelegate.kt b/libnavigation-core/src/main/java/com/mapbox/navigation/core/lifecycle/MapboxNavigationAppDelegate.kt index 9e93df877ec..b2e646b137b 100644 --- a/libnavigation-core/src/main/java/com/mapbox/navigation/core/lifecycle/MapboxNavigationAppDelegate.kt +++ b/libnavigation-core/src/main/java/com/mapbox/navigation/core/lifecycle/MapboxNavigationAppDelegate.kt @@ -3,7 +3,6 @@ package com.mapbox.navigation.core.lifecycle import android.app.Application import androidx.lifecycle.LifecycleOwner import com.mapbox.navigation.core.MapboxNavigation -import com.mapbox.navigation.utils.internal.logI import kotlin.reflect.KClass /** @@ -24,16 +23,7 @@ internal class MapboxNavigationAppDelegate { } if (isSetup) { - logI( - """ - MapboxNavigationApp.setup was ignored because it has already been setup. - If you want to use new NavigationOptions, you must first call - MapboxNavigationApp.disable() and then call MapboxNavigationApp.setup(..). - Calling setup multiple times, is harmless otherwise. - """.trimIndent(), - LOG_CATEGORY - ) - return this + disable() } mapboxNavigationOwner.setup(navigationOptionsProvider) @@ -80,8 +70,4 @@ internal class MapboxNavigationAppDelegate { fun getObservers(kClass: KClass): List = mapboxNavigationOwner.getObservers(kClass) - - private companion object { - private const val LOG_CATEGORY = "MapboxNavigationAppDelegate" - } } diff --git a/libnavigation-core/src/test/java/com/mapbox/navigation/core/lifecycle/MapboxNavigationAppDelegateTest.kt b/libnavigation-core/src/test/java/com/mapbox/navigation/core/lifecycle/MapboxNavigationAppDelegateTest.kt index aa41bb71803..c92ff4a4838 100644 --- a/libnavigation-core/src/test/java/com/mapbox/navigation/core/lifecycle/MapboxNavigationAppDelegateTest.kt +++ b/libnavigation-core/src/test/java/com/mapbox/navigation/core/lifecycle/MapboxNavigationAppDelegateTest.kt @@ -11,8 +11,10 @@ import com.mapbox.navigation.base.options.NavigationOptions import com.mapbox.navigation.core.MapboxNavigation import com.mapbox.navigation.core.MapboxNavigationProvider import io.mockk.every +import io.mockk.just import io.mockk.mockk import io.mockk.mockkStatic +import io.mockk.runs import io.mockk.unmockkAll import io.mockk.verify import io.mockk.verifyOrder @@ -110,12 +112,14 @@ class MapboxNavigationAppDelegateTest { } @Test - fun `verify multiple setup calls are ignored`() { - mapboxNavigationApp.setup { navigationOptions } - val firstObserver = mockk(relaxUnitFun = true) - val secondObserver = mockk(relaxUnitFun = true) - mapboxNavigationApp.registerObserver(firstObserver) - mapboxNavigationApp.registerObserver(secondObserver) + fun `verify setup will detach old and attach a new`() { + val attachedSlot = mutableListOf() + val detachedSlot = mutableListOf() + val observer = mockk { + every { onAttached(capture(attachedSlot)) } just runs + every { onDetached(capture(detachedSlot)) } just runs + } + mapboxNavigationApp.registerObserver(observer) val testLifecycleOwner = CarAppLifecycleOwnerTest.TestLifecycleOwner() mapboxNavigationApp.attach(testLifecycleOwner) @@ -123,10 +127,14 @@ class MapboxNavigationAppDelegateTest { testLifecycleOwner.lifecycleRegistry.currentState = Lifecycle.State.RESUMED mapboxNavigationApp.setup { navigationOptions } - verify(exactly = 1) { firstObserver.onAttached(any()) } - verify(exactly = 1) { secondObserver.onAttached(any()) } - verify(exactly = 0) { firstObserver.onDetached(any()) } - verify(exactly = 0) { secondObserver.onDetached(any()) } + assertEquals(2, attachedSlot.size) + assertEquals(1, detachedSlot.size) + assertEquals(attachedSlot[0], detachedSlot[0]) + verifyOrder { + observer.onAttached(attachedSlot[0]) + observer.onDetached(attachedSlot[0]) + observer.onAttached(attachedSlot[1]) + } } @Test diff --git a/qa-test-app/src/main/java/com/mapbox/navigation/qa_test_app/view/MainActivity.kt b/qa-test-app/src/main/java/com/mapbox/navigation/qa_test_app/view/MainActivity.kt index 89762d12eee..744d239b6a6 100644 --- a/qa-test-app/src/main/java/com/mapbox/navigation/qa_test_app/view/MainActivity.kt +++ b/qa-test-app/src/main/java/com/mapbox/navigation/qa_test_app/view/MainActivity.kt @@ -9,7 +9,6 @@ import androidx.appcompat.app.AppCompatActivity import androidx.lifecycle.lifecycleScope import androidx.recyclerview.widget.DividerItemDecoration import androidx.recyclerview.widget.LinearLayoutManager -import com.mapbox.navigation.core.lifecycle.MapboxNavigationApp import com.mapbox.navigation.qa_test_app.R import com.mapbox.navigation.qa_test_app.databinding.ActivityMainBinding import com.mapbox.navigation.qa_test_app.domain.TestActivityDescription @@ -54,9 +53,6 @@ class MainActivity : AppCompatActivity() { (binding.activitiesList.adapter as GenericListAdapter).swap( TestActivitySuite.testActivities ) - - // Each example is responsible for setting up their NavigationOptions. - MapboxNavigationApp.disable() } override fun onRequestPermissionsResult(