diff --git a/app/src/main/java/org/mozilla/fenix/search/SearchDialogController.kt b/app/src/main/java/org/mozilla/fenix/search/SearchDialogController.kt index 7635618863..1164a3d506 100644 --- a/app/src/main/java/org/mozilla/fenix/search/SearchDialogController.kt +++ b/app/src/main/java/org/mozilla/fenix/search/SearchDialogController.kt @@ -72,6 +72,7 @@ class SearchDialogController( private val clearToolbarFocus: () -> Unit, private val focusToolbar: () -> Unit, private val clearToolbar: () -> Unit, + private val dismissDialogAndGoBack: () -> Unit, ) : SearchController { override fun handleUrlCommitted(url: String, fromHomeScreen: Boolean) { @@ -135,6 +136,7 @@ class SearchDialogController( override fun handleEditingCancelled() { clearToolbarFocus() + dismissDialogAndGoBack() } override fun handleTextChanged(text: String) { diff --git a/app/src/main/java/org/mozilla/fenix/search/SearchDialogFragment.kt b/app/src/main/java/org/mozilla/fenix/search/SearchDialogFragment.kt index 658496155c..f2f8fc7f04 100644 --- a/app/src/main/java/org/mozilla/fenix/search/SearchDialogFragment.kt +++ b/app/src/main/java/org/mozilla/fenix/search/SearchDialogFragment.kt @@ -212,6 +212,7 @@ class SearchDialogFragment : AppCompatDialogFragment(), UserInteractionHandler { clearToolbar = { inlineAutocompleteEditText.setText("") }, + dismissDialogAndGoBack = ::dismissDialogAndGoBack, ), ) @@ -636,24 +637,29 @@ class SearchDialogFragment : AppCompatDialogFragment(), UserInteractionHandler { true } else -> { - // In case we're displaying search results, we wouldn't have navigated to home, and - // so we don't need to navigate "back to" browser fragment. - // See mirror of this logic in BrowserToolbarController#handleToolbarClick. - if (store.state.searchTerms.isBlank()) { - val args by navArgs() - args.sessionId?.let { - findNavController().navigate( - SearchDialogFragmentDirections.actionGlobalBrowser(null), - ) - } - } - view?.hideKeyboard() - dismissAllowingStateLoss() + dismissDialogAndGoBack() true } } } + private fun dismissDialogAndGoBack() { + // In case we're displaying search results, we wouldn't have navigated to home, and + // so we don't need to navigate "back to" browser fragment. + // See mirror of this logic in BrowserToolbarController#handleToolbarClick. + if (store.state.searchTerms.isBlank()) { + val args by navArgs() + args.sessionId?.let { + findNavController().navigate( + SearchDialogFragmentDirections.actionGlobalBrowser(null), + ) + } + } + + view?.hideKeyboard() + dismissAllowingStateLoss() + } + private fun historyStorageProvider(): HistoryStorage? { return if (requireContext().settings().shouldShowHistorySuggestions) { requireComponents.core.historyStorage diff --git a/app/src/test/java/org/mozilla/fenix/search/SearchDialogControllerTest.kt b/app/src/test/java/org/mozilla/fenix/search/SearchDialogControllerTest.kt index 76f99f64dc..e31b2d1d66 100644 --- a/app/src/test/java/org/mozilla/fenix/search/SearchDialogControllerTest.kt +++ b/app/src/test/java/org/mozilla/fenix/search/SearchDialogControllerTest.kt @@ -223,13 +223,18 @@ class SearchDialogControllerTest { @Test fun handleEditingCancelled() = runTest { var clearToolbarFocusInvoked = false + var dismissAndGoBack = false createController( clearToolbarFocus = { clearToolbarFocusInvoked = true }, + dismissDialogAndGoBack = { + dismissAndGoBack = true + }, ).handleEditingCancelled() assertTrue(clearToolbarFocusInvoked) + assertTrue(dismissAndGoBack) } @Test @@ -552,6 +557,7 @@ class SearchDialogControllerTest { focusToolbar: () -> Unit = { }, clearToolbar: () -> Unit = { }, dismissDialog: () -> Unit = { }, + dismissDialogAndGoBack: () -> Unit = { }, ): SearchDialogController { return SearchDialogController( activity = activity, @@ -564,6 +570,7 @@ class SearchDialogControllerTest { clearToolbarFocus = clearToolbarFocus, focusToolbar = focusToolbar, clearToolbar = clearToolbar, + dismissDialogAndGoBack = dismissDialogAndGoBack, ) } }