From 59c60ef1898e13811cad164785a3c8527b7709ff Mon Sep 17 00:00:00 2001 From: ValentinTimisica Date: Thu, 1 Aug 2019 17:48:38 +0300 Subject: [PATCH] Fixes #4354: Updated SearchFragment state after returning from SearchEngineFragment. 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. For this we will check the current default engine against a previously stored value in a newly added 'defaultEngineSource' property from SearchState class. Also, I modified 'SearchStoreTest' by adding the new parameter to the 'SearchState' constructor. --- .../mozilla/fenix/search/SearchFragment.kt | 20 +++++++++++++++---- .../org/mozilla/fenix/search/SearchStore.kt | 8 ++++++++ .../mozilla/fenix/search/SearchStoreTest.kt | 1 + 3 files changed, 25 insertions(+), 4 deletions(-) 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,