From d474c99acbc423c2d7a30f8437feb9985364dff4 Mon Sep 17 00:00:00 2001 From: Gabriel Luong Date: Fri, 10 Mar 2023 00:07:17 -0500 Subject: [PATCH] Bug 1822606 - Refactor HomeFragment.navigateToSearch() to the ToolbarController --- .../org/mozilla/fenix/home/HomeFragment.kt | 20 +++---------------- .../SessionControlController.kt | 20 +++++++++++++++++++ .../SessionControlInteractor.kt | 9 +++++++++ .../DefaultSessionControlControllerTest.kt | 19 ++++++++++++++++++ .../home/SessionControlInteractorTest.kt | 6 ++++++ 5 files changed, 57 insertions(+), 17 deletions(-) diff --git a/app/src/main/java/org/mozilla/fenix/home/HomeFragment.kt b/app/src/main/java/org/mozilla/fenix/home/HomeFragment.kt index 41716f5e39..1f0dcd1f82 100644 --- a/app/src/main/java/org/mozilla/fenix/home/HomeFragment.kt +++ b/app/src/main/java/org/mozilla/fenix/home/HomeFragment.kt @@ -79,14 +79,12 @@ import mozilla.components.support.ktx.android.content.getColorFromAttr import mozilla.components.support.ktx.android.content.res.resolveAttribute import mozilla.components.support.ktx.kotlinx.coroutines.flow.ifChanged import org.mozilla.fenix.Config -import org.mozilla.fenix.GleanMetrics.Events import org.mozilla.fenix.GleanMetrics.HomeScreen import org.mozilla.fenix.GleanMetrics.PrivateBrowsingShortcutCfr import org.mozilla.fenix.GleanMetrics.UnifiedSearch import org.mozilla.fenix.HomeActivity import org.mozilla.fenix.R import org.mozilla.fenix.addons.showSnackBar -import org.mozilla.fenix.browser.BrowserAnimator.Companion.getToolbarNavOptions import org.mozilla.fenix.browser.browsingmode.BrowsingMode import org.mozilla.fenix.components.FenixSnackbar import org.mozilla.fenix.components.PrivateShortcutCreateManager @@ -594,7 +592,7 @@ class HomeFragment : Fragment() { binding.toolbar.compoundDrawablePadding = view.resources.getDimensionPixelSize(R.dimen.search_bar_search_engine_icon_padding) binding.toolbarWrapper.setOnClickListener { - navigateToSearch() + sessionControlInteractor.onNavigateSearch() } binding.toolbarWrapper.setOnLongClickListener { @@ -631,7 +629,7 @@ class HomeFragment : Fragment() { updateTabCounter(requireComponents.core.store.state) if (bundleArgs.getBoolean(FOCUS_ON_ADDRESS_BAR)) { - navigateToSearch() + sessionControlInteractor.onNavigateSearch() } else if (bundleArgs.getBoolean(SCROLL_TO_COLLECTION)) { MainScope().launch { delay(ANIM_SCROLL_DELAY) @@ -975,19 +973,7 @@ class HomeFragment : Fragment() { private fun hideOnboardingAndOpenSearch() { hideOnboardingIfNeeded() appBarLayout?.setExpanded(true, true) - navigateToSearch() - } - - @VisibleForTesting - internal fun navigateToSearch() { - val directions = - HomeFragmentDirections.actionGlobalSearchDialog( - sessionId = null, - ) - - nav(R.id.homeFragment, directions, getToolbarNavOptions(requireContext())) - - Events.searchBarTapped.record(Events.SearchBarTappedExtra("HOME")) + sessionControlInteractor.onNavigateSearch() } private fun subscribeToTabCollections(): Observer> { diff --git a/app/src/main/java/org/mozilla/fenix/home/sessioncontrol/SessionControlController.kt b/app/src/main/java/org/mozilla/fenix/home/sessioncontrol/SessionControlController.kt index ad30bb5883..4858109dac 100644 --- a/app/src/main/java/org/mozilla/fenix/home/sessioncontrol/SessionControlController.kt +++ b/app/src/main/java/org/mozilla/fenix/home/sessioncontrol/SessionControlController.kt @@ -158,6 +158,11 @@ interface SessionControlController { */ fun handlePaste(clipboardText: String) + /** + * @see [ToolbarInteractor.onNavigateSearch] + */ + fun handleNavigateSearch() + /** * @see [CollectionInteractor.onAddTabsToCollectionTapped] */ @@ -584,6 +589,21 @@ class DefaultSessionControlController( navController.nav(R.id.homeFragment, directions) } + override fun handleNavigateSearch() { + val directions = + HomeFragmentDirections.actionGlobalSearchDialog( + sessionId = null, + ) + + navController.nav( + R.id.homeFragment, + directions, + BrowserAnimator.getToolbarNavOptions(activity), + ) + + Events.searchBarTapped.record(Events.SearchBarTappedExtra("HOME")) + } + override fun handleMessageClicked(message: Message) { messageController.onMessagePressed(message) } diff --git a/app/src/main/java/org/mozilla/fenix/home/sessioncontrol/SessionControlInteractor.kt b/app/src/main/java/org/mozilla/fenix/home/sessioncontrol/SessionControlInteractor.kt index 1b8d03ffda..a12d7dd93f 100644 --- a/app/src/main/java/org/mozilla/fenix/home/sessioncontrol/SessionControlInteractor.kt +++ b/app/src/main/java/org/mozilla/fenix/home/sessioncontrol/SessionControlInteractor.kt @@ -147,6 +147,11 @@ interface ToolbarInteractor { * Navigates to search with clipboard text. */ fun onPaste(clipboardText: String) + + /** + * Navigates to the search dialog. + */ + fun onNavigateSearch() } interface CustomizeHomeIteractor { @@ -347,6 +352,10 @@ class SessionControlInteractor( controller.handlePaste(clipboardText) } + override fun onNavigateSearch() { + controller.handleNavigateSearch() + } + override fun onRemoveCollectionsPlaceholder() { controller.handleRemoveCollectionsPlaceholder() } diff --git a/app/src/test/java/org/mozilla/fenix/home/DefaultSessionControlControllerTest.kt b/app/src/test/java/org/mozilla/fenix/home/DefaultSessionControlControllerTest.kt index 67b8eab50c..6d45230113 100644 --- a/app/src/test/java/org/mozilla/fenix/home/DefaultSessionControlControllerTest.kt +++ b/app/src/test/java/org/mozilla/fenix/home/DefaultSessionControlControllerTest.kt @@ -1015,6 +1015,25 @@ class DefaultSessionControlControllerTest { } } + @Test + fun handleNavigateSearch() { + assertNull(Events.searchBarTapped.testGetValue()) + + createController().handleNavigateSearch() + + assertNotNull(Events.searchBarTapped.testGetValue()) + val recordedEvents = Events.searchBarTapped.testGetValue()!! + assertEquals(1, recordedEvents.size) + assertEquals("HOME", recordedEvents.single().extra?.getValue("source")) + + verify { + navController.navigate( + match { it.actionId == R.id.action_global_search_dialog }, + any(), + ) + } + } + @Test fun handleRemoveCollectionsPlaceholder() { createController().handleRemoveCollectionsPlaceholder() diff --git a/app/src/test/java/org/mozilla/fenix/home/SessionControlInteractorTest.kt b/app/src/test/java/org/mozilla/fenix/home/SessionControlInteractorTest.kt index 6762cfead5..9095e6689a 100644 --- a/app/src/test/java/org/mozilla/fenix/home/SessionControlInteractorTest.kt +++ b/app/src/test/java/org/mozilla/fenix/home/SessionControlInteractorTest.kt @@ -146,6 +146,12 @@ class SessionControlInteractorTest { verify { controller.handlePasteAndGo("text") } } + @Test + fun onNavigateSearch() { + interactor.onNavigateSearch() + verify { controller.handleNavigateSearch() } + } + @Test fun onRemoveCollectionsPlaceholder() { interactor.onRemoveCollectionsPlaceholder()