From f65f57cfbbd7b221a8e1aa9fe2900bd27db4abc5 Mon Sep 17 00:00:00 2001 From: ValentinTimisica Date: Thu, 1 Aug 2019 17:48:38 +0300 Subject: [PATCH] [fenix] Fixes https://github.com/mozilla-mobile/fenix/issues/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 33ac396a91..5373f8b0b5 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 6ec46ffb9b..98f9ae3252 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 24ab0e632f..1b1375a9f6 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,