From 56d367f4fdd00279f896553e343a989cbf65be4b Mon Sep 17 00:00:00 2001 From: Roger Yang Date: Tue, 21 Jun 2022 13:47:47 -0400 Subject: [PATCH] [fenix] Issue https://github.com/mozilla-mobile/fenix/issues/24740: Use unified search bar in bookmark search --- .../library/bookmarks/BookmarkController.kt | 10 ++++++++-- .../fenix/library/bookmarks/BookmarkFragment.kt | 3 ++- .../mozilla/fenix/search/SearchDialogFragment.kt | 10 +++++++++- app/src/main/res/navigation/nav_graph.xml | 6 ------ .../library/bookmarks/BookmarkControllerTest.kt | 16 +++++++++++++++- 5 files changed, 34 insertions(+), 11 deletions(-) diff --git a/app/src/main/java/org/mozilla/fenix/library/bookmarks/BookmarkController.kt b/app/src/main/java/org/mozilla/fenix/library/bookmarks/BookmarkController.kt index 2b6915bd83..badbca1d51 100644 --- a/app/src/main/java/org/mozilla/fenix/library/bookmarks/BookmarkController.kt +++ b/app/src/main/java/org/mozilla/fenix/library/bookmarks/BookmarkController.kt @@ -25,6 +25,7 @@ import org.mozilla.fenix.ext.bookmarkStorage import org.mozilla.fenix.ext.components import org.mozilla.fenix.ext.nav import org.mozilla.fenix.ext.navigateSafe +import org.mozilla.fenix.utils.Settings /** * [BookmarkFragment] controller. @@ -76,7 +77,8 @@ class DefaultBookmarkController( private val showSnackbar: (String) -> Unit, private val deleteBookmarkNodes: (Set, BookmarkRemoveType) -> Unit, private val deleteBookmarkFolder: (Set) -> Unit, - private val showTabTray: () -> Unit + private val showTabTray: () -> Unit, + private val settings: Settings, ) : BookmarkController { private val resources: Resources = activity.resources @@ -195,8 +197,12 @@ class DefaultBookmarkController( } override fun handleSearch() { - val directions = + val directions = if (settings.showUnifiedSearchFeature) { + BookmarkFragmentDirections.actionGlobalSearchDialog(sessionId = null) + } else { BookmarkFragmentDirections.actionBookmarkFragmentToBookmarkSearchDialogFragment() + } + navController.navigateSafe(R.id.bookmarkFragment, directions) } diff --git a/app/src/main/java/org/mozilla/fenix/library/bookmarks/BookmarkFragment.kt b/app/src/main/java/org/mozilla/fenix/library/bookmarks/BookmarkFragment.kt index d81c60390e..38d3dc684d 100644 --- a/app/src/main/java/org/mozilla/fenix/library/bookmarks/BookmarkFragment.kt +++ b/app/src/main/java/org/mozilla/fenix/library/bookmarks/BookmarkFragment.kt @@ -103,7 +103,8 @@ class BookmarkFragment : LibraryPageFragment(), UserInteractionHan showSnackbar = ::showSnackBarWithText, deleteBookmarkNodes = ::deleteMulti, deleteBookmarkFolder = ::showRemoveFolderDialog, - showTabTray = ::showTabTray + showTabTray = ::showTabTray, + settings = requireComponents.settings, ) ) 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 f014bf6219..1cac5c5de2 100644 --- a/app/src/main/java/org/mozilla/fenix/search/SearchDialogFragment.kt +++ b/app/src/main/java/org/mozilla/fenix/search/SearchDialogFragment.kt @@ -72,6 +72,7 @@ import org.mozilla.fenix.GleanMetrics.Awesomebar import org.mozilla.fenix.GleanMetrics.VoiceSearch import org.mozilla.fenix.HomeActivity import org.mozilla.fenix.R +import org.mozilla.fenix.components.Core.Companion.BOOKMARKS_SEARCH_ENGINE_ID import org.mozilla.fenix.components.Core.Companion.HISTORY_SEARCH_ENGINE_ID import org.mozilla.fenix.components.toolbar.ToolbarPosition import org.mozilla.fenix.databinding.FragmentSearchDialogBinding @@ -268,6 +269,13 @@ class SearchDialogFragment : AppCompatDialogFragment(), UserInteractionHandler { store.dispatch(SearchFragmentAction.SearchHistoryEngineSelected(searchEngine)) } } + R.id.bookmarkFragment -> { + requireComponents.core.store.state.search.searchEngines.firstOrNull { searchEngine -> + searchEngine.id == BOOKMARKS_SEARCH_ENGINE_ID + }?.let { searchEngine -> + store.dispatch(SearchFragmentAction.SearchBookmarksEngineSelected(searchEngine)) + } + } else -> {} } @@ -300,7 +308,7 @@ class SearchDialogFragment : AppCompatDialogFragment(), UserInteractionHandler { false } } - R.id.historyFragment -> { + R.id.historyFragment, R.id.bookmarkFragment -> { binding.searchWrapper.setOnTouchListener { _, _ -> dismissAllowingStateLoss() true diff --git a/app/src/main/res/navigation/nav_graph.xml b/app/src/main/res/navigation/nav_graph.xml index 8bd5961622..b2c6e76a3b 100644 --- a/app/src/main/res/navigation/nav_graph.xml +++ b/app/src/main/res/navigation/nav_graph.xml @@ -273,12 +273,6 @@ app:popUpTo="@id/historySearchDialogFragment" app:popUpToInclusive="true" /> - - diff --git a/app/src/test/java/org/mozilla/fenix/library/bookmarks/BookmarkControllerTest.kt b/app/src/test/java/org/mozilla/fenix/library/bookmarks/BookmarkControllerTest.kt index 4d50b960a6..efd9bf70be 100644 --- a/app/src/test/java/org/mozilla/fenix/library/bookmarks/BookmarkControllerTest.kt +++ b/app/src/test/java/org/mozilla/fenix/library/bookmarks/BookmarkControllerTest.kt @@ -41,6 +41,7 @@ import org.mozilla.fenix.browser.browsingmode.BrowsingMode import org.mozilla.fenix.components.Services import org.mozilla.fenix.ext.bookmarkStorage import org.mozilla.fenix.ext.components +import org.mozilla.fenix.utils.Settings @Suppress("TooManyFunctions", "LargeClass") class BookmarkControllerTest { @@ -60,6 +61,7 @@ class BookmarkControllerTest { private val addNewTabUseCase: TabsUseCases.AddNewTabUseCase = mockk(relaxed = true) private val navBackStackEntry: NavBackStackEntry = mockk(relaxed = true) private val navDestination: NavDestination = mockk(relaxed = true) + private val settings: Settings = mockk(relaxed = true) private val item = BookmarkNode(BookmarkNodeType.ITEM, "456", "123", 0u, "Mozilla", "http://mozilla.org", 0, null) @@ -220,6 +222,17 @@ class BookmarkControllerTest { } } + @Test + fun `WHEN handling search THEN navigate to the search dialog fragment`() { + createController().handleSearch() + + verify { + navController.navigate( + BookmarkFragmentDirections.actionBookmarkFragmentToBookmarkSearchDialogFragment() + ) + } + } + @Test fun `handleBookmarkSelected dispatches Select action when selecting a non-root folder`() { createController().handleBookmarkSelected(item) @@ -424,7 +437,8 @@ class BookmarkControllerTest { showSnackbar = showSnackbar, deleteBookmarkNodes = deleteBookmarkNodes, deleteBookmarkFolder = deleteBookmarkFolder, - showTabTray = showTabTray + showTabTray = showTabTray, + settings = settings, ) } }