From 8cd6d7460cf07fafec2daec556656ddb2932a147 Mon Sep 17 00:00:00 2001 From: Mihai Adrian <48995920+mcarare@users.noreply.github.com> Date: Thu, 2 Apr 2020 01:36:56 +0300 Subject: [PATCH] For #9336 Check current destination before navigating (#9353) * For #9336 Check current destination before navigating * For #9336 Update unit test to check for navigateSafe --- app/src/main/java/org/mozilla/fenix/ext/NavController.kt | 9 +++++++++ .../java/org/mozilla/fenix/search/SearchController.kt | 4 +++- .../mozilla/fenix/search/DefaultSearchControllerTest.kt | 3 ++- .../org/mozilla/fenix/search/SearchInteractorTest.kt | 8 +++++++- 4 files changed, 21 insertions(+), 3 deletions(-) diff --git a/app/src/main/java/org/mozilla/fenix/ext/NavController.kt b/app/src/main/java/org/mozilla/fenix/ext/NavController.kt index efea3e982..4fae079f6 100644 --- a/app/src/main/java/org/mozilla/fenix/ext/NavController.kt +++ b/app/src/main/java/org/mozilla/fenix/ext/NavController.kt @@ -59,3 +59,12 @@ fun recordIdException(actual: Int?, expected: Int?) { Sentry.capture("Fragment id $actual did not match expected $expected") } } + +fun NavController.navigateSafe( + @IdRes resId: Int, + directions: NavDirections +) { + if (currentDestination?.id == resId) { + this.navigate(directions) + } +} diff --git a/app/src/main/java/org/mozilla/fenix/search/SearchController.kt b/app/src/main/java/org/mozilla/fenix/search/SearchController.kt index b08d0a3c6..49f66e301 100644 --- a/app/src/main/java/org/mozilla/fenix/search/SearchController.kt +++ b/app/src/main/java/org/mozilla/fenix/search/SearchController.kt @@ -15,6 +15,7 @@ import mozilla.components.browser.session.Session import mozilla.components.support.ktx.kotlin.isUrl import org.mozilla.fenix.BrowserDirection import org.mozilla.fenix.HomeActivity +import org.mozilla.fenix.R import org.mozilla.fenix.components.metrics.Event import org.mozilla.fenix.components.metrics.Event.PerformedSearch.SearchAccessPoint.ACTION import org.mozilla.fenix.components.metrics.Event.PerformedSearch.SearchAccessPoint.NONE @@ -23,6 +24,7 @@ import org.mozilla.fenix.components.metrics.MetricsUtils import org.mozilla.fenix.components.searchengine.CustomSearchEngineStore import org.mozilla.fenix.ext.components import org.mozilla.fenix.ext.metrics +import org.mozilla.fenix.ext.navigateSafe import org.mozilla.fenix.ext.settings /** @@ -159,7 +161,7 @@ class DefaultSearchController( override fun handleClickSearchEngineSettings() { val directions = SearchFragmentDirections.actionSearchFragmentToSearchEngineFragment() - navController.navigate(directions) + navController.navigateSafe(R.id.searchFragment, directions) } override fun handleExistingSessionSelected(session: Session) { diff --git a/app/src/test/java/org/mozilla/fenix/search/DefaultSearchControllerTest.kt b/app/src/test/java/org/mozilla/fenix/search/DefaultSearchControllerTest.kt index df7be30ff..425099d73 100644 --- a/app/src/test/java/org/mozilla/fenix/search/DefaultSearchControllerTest.kt +++ b/app/src/test/java/org/mozilla/fenix/search/DefaultSearchControllerTest.kt @@ -30,6 +30,7 @@ import org.mozilla.fenix.components.metrics.Event import org.mozilla.fenix.components.metrics.MetricController import org.mozilla.fenix.ext.components import org.mozilla.fenix.ext.metrics +import org.mozilla.fenix.ext.navigateSafe import org.mozilla.fenix.ext.searchEngineManager import org.mozilla.fenix.ext.settings import org.mozilla.fenix.search.DefaultSearchController.Companion.KEYBOARD_ANIMATION_DELAY @@ -242,7 +243,7 @@ class DefaultSearchControllerTest { controller.handleClickSearchEngineSettings() - verify { navController.navigate(directions) } + verify { navController.navigateSafe(R.id.searchEngineFragment, directions) } } @Test diff --git a/app/src/test/java/org/mozilla/fenix/search/SearchInteractorTest.kt b/app/src/test/java/org/mozilla/fenix/search/SearchInteractorTest.kt index 90549a48f..58750be3b 100644 --- a/app/src/test/java/org/mozilla/fenix/search/SearchInteractorTest.kt +++ b/app/src/test/java/org/mozilla/fenix/search/SearchInteractorTest.kt @@ -26,10 +26,12 @@ import org.junit.runner.RunWith import org.mozilla.fenix.BrowserDirection import org.mozilla.fenix.FenixApplication import org.mozilla.fenix.HomeActivity +import org.mozilla.fenix.R import org.mozilla.fenix.TestApplication import org.mozilla.fenix.components.metrics.Event import org.mozilla.fenix.components.searchengine.CustomSearchEngineStore.PREF_FILE_SEARCH_ENGINES import org.mozilla.fenix.ext.metrics +import org.mozilla.fenix.ext.navigateSafe import org.mozilla.fenix.ext.searchEngineManager import org.mozilla.fenix.ext.settings import org.mozilla.fenix.utils.Settings @@ -271,6 +273,7 @@ class SearchInteractorTest { val store: SearchFragmentStore = mockk() every { store.state } returns mockk(relaxed = true) + every { navController.currentDestination?.id } returns R.id.searchFragment val searchController: SearchController = DefaultSearchController( mockk(), @@ -286,7 +289,10 @@ class SearchInteractorTest { interactor.onClickSearchEngineSettings() verify { - navController.navigate(SearchFragmentDirections.actionSearchFragmentToSearchEngineFragment()) + navController.navigateSafe( + R.id.searchFragment, + SearchFragmentDirections.actionSearchFragmentToSearchEngineFragment() + ) } }