commit 7b5fda80450b35ab3cb494fcbb5d772eada389a7 parent d82dd0a2608c44b6808e39cbb47fbbccd91105d0 Author: Mugurell <Mugurell@users.noreply.github.com> Date: Wed, 29 Oct 2025 16:52:38 +0000 Bug 1990238 - Update private mode for the toolbar when entering search r=android-reviewers,skhan Moves setting private mode for the search toolbar to the only place from where the toolbar is put into search mode. Differential Revision: https://phabricator.services.mozilla.com/D267581 Diffstat:
4 files changed, 29 insertions(+), 19 deletions(-)
diff --git a/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/search/BrowserToolbarSearchStatusSyncMiddleware.kt b/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/search/BrowserToolbarSearchStatusSyncMiddleware.kt @@ -12,6 +12,7 @@ import kotlinx.coroutines.Job import kotlinx.coroutines.flow.Flow import kotlinx.coroutines.flow.distinctUntilChangedBy import kotlinx.coroutines.launch +import mozilla.components.compose.browser.toolbar.store.BrowserEditToolbarAction.PrivateModeUpdated import mozilla.components.compose.browser.toolbar.store.BrowserToolbarAction import mozilla.components.compose.browser.toolbar.store.BrowserToolbarAction.EnterEditMode import mozilla.components.compose.browser.toolbar.store.BrowserToolbarAction.ExitEditMode @@ -70,6 +71,9 @@ class BrowserToolbarSearchStatusSyncMiddleware( distinctUntilChangedBy { it.searchState.isSearchActive } .collect { if (it.searchState.isSearchActive) { + context.dispatch( + PrivateModeUpdated(environment?.browsingModeManager?.mode?.isPrivate == true), + ) context.dispatch(EnterEditMode) } else { context.dispatch(ExitEditMode) diff --git a/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/search/FenixSearchMiddleware.kt b/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/search/FenixSearchMiddleware.kt @@ -17,7 +17,6 @@ import mozilla.components.browser.state.search.DefaultSearchEngineProvider import mozilla.components.browser.state.search.SearchEngine import mozilla.components.browser.state.store.BrowserStore import mozilla.components.compose.browser.toolbar.store.BrowserEditToolbarAction -import mozilla.components.compose.browser.toolbar.store.BrowserEditToolbarAction.PrivateModeUpdated import mozilla.components.compose.browser.toolbar.store.BrowserToolbarStore import mozilla.components.compose.browser.toolbar.ui.BrowserToolbarQuery import mozilla.components.concept.awesomebar.AwesomeBar @@ -119,12 +118,6 @@ class FenixSearchMiddleware( } is SearchStarted -> { - toolbarStore.dispatch( - PrivateModeUpdated( - environment?.browsingModeManager?.mode?.isPrivate == true, - ), - ) - next(action) engine.speculativeCreateSession(action.inPrivateMode) diff --git a/mobile/android/fenix/app/src/test/java/org/mozilla/fenix/search/BrowserToolbarSearchStatusSyncMiddlewareTest.kt b/mobile/android/fenix/app/src/test/java/org/mozilla/fenix/search/BrowserToolbarSearchStatusSyncMiddlewareTest.kt @@ -28,6 +28,8 @@ import org.junit.Before import org.junit.Rule import org.junit.Test import org.junit.runner.RunWith +import org.mozilla.fenix.browser.browsingmode.BrowsingMode +import org.mozilla.fenix.browser.browsingmode.BrowsingModeManager import org.mozilla.fenix.components.AppStore import org.mozilla.fenix.components.appstate.AppAction.SearchAction.SearchEnded import org.mozilla.fenix.components.appstate.AppAction.SearchAction.SearchStarted @@ -43,6 +45,7 @@ class BrowserToolbarSearchStatusSyncMiddlewareTest { private val appStore = AppStore() private val lifecycleOwner: LifecycleOwner = TestLifecycleOwner(Lifecycle.State.RESUMED) + private val browsingModeManager: BrowsingModeManager = mockk(relaxed = true) private lateinit var fragment: Fragment @Before @@ -93,13 +96,28 @@ class BrowserToolbarSearchStatusSyncMiddlewareTest { } @Test - fun `WHEN search starts in the application THEN put the toolbar in search mode also`() = runTest { + fun `GIVEN in private browsing mode WHEN search starts in the application THEN put the toolbar in search mode also`() = runTest { + every { browsingModeManager.mode } returns BrowsingMode.Private val (_, toolbarStore) = buildMiddlewareAndAddToSearchStore() appStore.dispatch(SearchStarted()).joinBlocking() mainLooperRule.idle() assertTrue(toolbarStore.state.isEditMode()) + assertTrue(toolbarStore.state.editState.isQueryPrivate) + assertTrue(appStore.state.searchState.isSearchActive) + } + + @Test + fun `GIVEN in normal browsing mode WHEN search starts in the application THEN put the toolbar in search mode also`() = runTest { + every { browsingModeManager.mode } returns BrowsingMode.Normal + val (_, toolbarStore) = buildMiddlewareAndAddToSearchStore() + + appStore.dispatch(SearchStarted()).joinBlocking() + mainLooperRule.idle() + + assertTrue(toolbarStore.state.isEditMode()) + assertFalse(toolbarStore.state.editState.isQueryPrivate) assertTrue(appStore.state.searchState.isSearchActive) } @@ -130,7 +148,7 @@ class BrowserToolbarSearchStatusSyncMiddlewareTest { context = testContext, navController = mockk(), fragment = fragment, - browsingModeManager = mockk(), + browsingModeManager = browsingModeManager, ), ), ) diff --git a/mobile/android/fenix/app/src/test/java/org/mozilla/fenix/search/FenixSearchMiddlewareTest.kt b/mobile/android/fenix/app/src/test/java/org/mozilla/fenix/search/FenixSearchMiddlewareTest.kt @@ -23,8 +23,7 @@ import mozilla.components.browser.state.state.BrowserState import mozilla.components.browser.state.state.SearchState import mozilla.components.browser.state.state.selectedOrDefaultSearchEngine import mozilla.components.browser.state.store.BrowserStore -import mozilla.components.compose.browser.toolbar.store.BrowserEditToolbarAction.PrivateModeUpdated -import mozilla.components.compose.browser.toolbar.store.BrowserEditToolbarAction.SearchQueryUpdated +import mozilla.components.compose.browser.toolbar.store.BrowserEditToolbarAction import mozilla.components.compose.browser.toolbar.store.BrowserToolbarStore import mozilla.components.compose.browser.toolbar.ui.BrowserToolbarQuery import mozilla.components.concept.awesomebar.AwesomeBar.Suggestion @@ -95,9 +94,7 @@ class FenixSearchMiddlewareTest { every { speculativeCreateSession(any(), any()) } just Runs } private val fenixBrowserUseCasesMock: FenixBrowserUseCases = mockk(relaxed = true) - private val browsingModeManager: BrowsingModeManager = mockk(relaxed = true) { - every { mode } returns BrowsingMode.Normal - } + private val browsingModeManager: BrowsingModeManager = mockk(relaxed = true) private val useCases: UseCases = mockk { every { fenixBrowserUseCases } returns fenixBrowserUseCasesMock every { tabsUseCases } returns mockk() @@ -128,8 +125,7 @@ class FenixSearchMiddlewareTest { } @Test - fun `WHEN search is started THEN update private mode, warmup http engine and configure search providers`() { - every { browsingModeManager.mode } returns BrowsingMode.Private + fun `WHEN search is started THEN warmup http engine and configure search providers`() { val defaultSearchEngine = fakeSearchEnginesState().selectedOrDefaultSearchEngine val preselectedSearchEngine = SearchEngine("engine-a", "Engine A", mockk(), type = SearchEngine.Type.BUNDLED) val wasEngineSelectedByUser = false @@ -143,7 +139,6 @@ class FenixSearchMiddlewareTest { store.dispatch(SearchStarted(preselectedSearchEngine, wasEngineSelectedByUser, isSearchInPrivateMode, false)) - verify { toolbarStore.dispatch(PrivateModeUpdated(true)) } verify { engine.speculativeCreateSession(isSearchInPrivateMode) } assertEquals(expectedSearchSuggestionsProvider, middleware.suggestionsProvidersBuilder) assertEquals(expectedSuggestionProviders.toList(), store.state.searchSuggestionsProviders.toList()) @@ -454,7 +449,7 @@ class FenixSearchMiddlewareTest { store.dispatch(SuggestionClicked(clickedSuggestion)) assertTrue(wasSuggestionClickHandled) - verify { toolbarStore.dispatch(SearchQueryUpdated(BrowserToolbarQuery(""))) } + verify { toolbarStore.dispatch(BrowserEditToolbarAction.SearchQueryUpdated(BrowserToolbarQuery(""))) } browserActionsCaptor.assertLastAction(AwesomeBarAction.SuggestionClicked::class) { assertEquals(clickedSuggestion, it.suggestion) } @@ -491,7 +486,7 @@ class FenixSearchMiddlewareTest { store.dispatch(SuggestionSelected(selectedSuggestion)) - verify { toolbarStore.dispatch(SearchQueryUpdated(BrowserToolbarQuery("test"))) } + verify { toolbarStore.dispatch(BrowserEditToolbarAction.SearchQueryUpdated(BrowserToolbarQuery("test"))) } } @Test