diff --git a/app/src/main/java/org/mozilla/fenix/search/SearchFragment.kt b/app/src/main/java/org/mozilla/fenix/search/SearchFragment.kt index 33ac396a9..5373f8b0b 100644 --- a/app/src/main/java/org/mozilla/fenix/search/SearchFragment.kt +++ b/app/src/main/java/org/mozilla/fenix/search/SearchFragment.kt @@ -67,15 +67,17 @@ class SearchFragment : Fragment(), BackHandler { val view = inflater.inflate(R.layout.fragment_search, container, false) val url = session?.url ?: "" + val currentSearchEngine = SearchEngineSource.Default( + requireComponents.search.searchEngineManager.getDefaultSearchEngine(requireContext()) + ) searchStore = StoreProvider.get(this) { SearchStore( SearchState( query = url, - showShortcutEnginePicker = true, - searchEngineSource = SearchEngineSource.Default( - requireComponents.search.searchEngineManager.getDefaultSearchEngine(requireContext()) - ), + showShortcutEnginePicker = false, + searchEngineSource = currentSearchEngine, + defaultEngineSource = currentSearchEngine, showSuggestions = Settings.getInstance(requireContext()).showSearchSuggestions, showVisitedSitesBookmarks = Settings.getInstance(requireContext()).shouldShowVisitedSitesBookmarks, session = session @@ -183,6 +185,16 @@ class SearchFragment : Fragment(), BackHandler { override fun onResume() { super.onResume() + // The user has the option to go to 'Shortcuts' -> 'Search engine settings' to modify the default search engine. + // When returning from that settings screen we need to update it to account for any changes. + val currentDefaultEngine = requireComponents.search.searchEngineManager.getDefaultSearchEngine(requireContext()) + if (searchStore.state.defaultEngineSource.searchEngine != currentDefaultEngine) { + searchStore.dispatch( + SearchAction.SelectNewDefaultSearchEngine + (currentDefaultEngine) + ) + } + if (!permissionDidUpdate) { toolbarView.view.requestFocus() } diff --git a/app/src/main/java/org/mozilla/fenix/search/SearchStore.kt b/app/src/main/java/org/mozilla/fenix/search/SearchStore.kt index 6ec46ffb9..98f9ae325 100644 --- a/app/src/main/java/org/mozilla/fenix/search/SearchStore.kt +++ b/app/src/main/java/org/mozilla/fenix/search/SearchStore.kt @@ -35,6 +35,7 @@ sealed class SearchEngineSource { * @property query The current search query string * @property showShortcutEnginePicker Whether or not to show the available search engine view * @property searchEngineSource The current selected search engine with the context of how it was selected + * @property defaultEngineSource The current default search engine source * @property showSuggestions Whether or not to show search suggestions for the selected search engine in the AwesomeBar * @property showVisitedSitesBookmarks Whether or not to show history and bookmark suggestions in the AwesomeBar * @property session The current session if available @@ -43,6 +44,7 @@ data class SearchState( val query: String, val showShortcutEnginePicker: Boolean, val searchEngineSource: SearchEngineSource, + val defaultEngineSource: SearchEngineSource.Default, val showSuggestions: Boolean, val showVisitedSitesBookmarks: Boolean, val session: Session? @@ -53,6 +55,7 @@ data class SearchState( */ sealed class SearchAction : Action { data class SearchShortcutEngineSelected(val engine: SearchEngine) : SearchAction() + data class SelectNewDefaultSearchEngine(val engine: SearchEngine) : SearchAction() data class ShowSearchShortcutEnginePicker(val show: Boolean) : SearchAction() data class UpdateQuery(val query: String) : SearchAction() } @@ -71,5 +74,10 @@ fun searchStateReducer(state: SearchState, action: SearchAction): SearchState { state.copy(showShortcutEnginePicker = action.show) is SearchAction.UpdateQuery -> state.copy(query = action.query) + is SearchAction.SelectNewDefaultSearchEngine -> + state.copy( + searchEngineSource = SearchEngineSource.Default(action.engine), + showShortcutEnginePicker = false + ) } } diff --git a/app/src/test/java/org/mozilla/fenix/search/SearchStoreTest.kt b/app/src/test/java/org/mozilla/fenix/search/SearchStoreTest.kt index 24ab0e632..1b1375a9f 100644 --- a/app/src/test/java/org/mozilla/fenix/search/SearchStoreTest.kt +++ b/app/src/test/java/org/mozilla/fenix/search/SearchStoreTest.kt @@ -48,6 +48,7 @@ class SearchStoreTest { private fun emptyDefaultState(): SearchState = SearchState( query = "", searchEngineSource = mockk(), + defaultEngineSource = mockk(), showShortcutEnginePicker = false, showSuggestions = false, showVisitedSitesBookmarks = false,