commit 10ecba2e5c431954de17b8c802a81b05faaaa721 parent 7e4906b773401a95627c58032c699452d015fbaf Author: rmalicdem <rmalicdem@mozilla.com> Date: Tue, 7 Oct 2025 21:17:58 +0000 Bug 1992700 - Separate toggle edit mode to enter and exit edit mode r=android-reviewers,petru Differential Revision: https://phabricator.services.mozilla.com/D267788 Diffstat:
15 files changed, 127 insertions(+), 88 deletions(-)
diff --git a/mobile/android/android-components/components/compose/browser-toolbar/src/main/java/mozilla/components/compose/browser/toolbar/store/BrowserToolbarAction.kt b/mobile/android/android-components/components/compose/browser-toolbar/src/main/java/mozilla/components/compose/browser/toolbar/store/BrowserToolbarAction.kt @@ -15,11 +15,14 @@ import mozilla.components.compose.browser.toolbar.concept.Action as ToolbarActio */ sealed interface BrowserToolbarAction : Action { /** - * Updates whether the toolbar is in "display" or "edit" mode. - * - * @property editMode Whether or not the toolbar is in "edit" mode. + * Allow typing a search term or URL. + */ + object EnterEditMode : BrowserToolbarAction + + /** + * Show the current URL. */ - data class ToggleEditMode(val editMode: Boolean) : BrowserToolbarAction + object ExitEditMode : BrowserToolbarAction /** * The toolbar was moved to a different position on screen. diff --git a/mobile/android/android-components/components/compose/browser-toolbar/src/main/java/mozilla/components/compose/browser/toolbar/store/BrowserToolbarStore.kt b/mobile/android/android-components/components/compose/browser-toolbar/src/main/java/mozilla/components/compose/browser/toolbar/store/BrowserToolbarStore.kt @@ -50,10 +50,14 @@ private fun reduce(state: BrowserToolbarState, action: BrowserToolbarAction): Br gravity = action.gravity, ) - is BrowserToolbarAction.ToggleEditMode -> state.copy( - mode = if (action.editMode) Mode.EDIT else Mode.DISPLAY, + is BrowserToolbarAction.EnterEditMode -> state.copy( + mode = Mode.EDIT, + ) + + is BrowserToolbarAction.ExitEditMode -> state.copy( + mode = Mode.DISPLAY, editState = state.editState.copy( - query = if (action.editMode) state.editState.query else "", + query = "", ), ) diff --git a/mobile/android/android-components/components/compose/browser-toolbar/src/test/java/mozilla/components/compose/browser/toolbar/store/BrowserToolbarStoreTest.kt b/mobile/android/android-components/components/compose/browser-toolbar/src/test/java/mozilla/components/compose/browser/toolbar/store/BrowserToolbarStoreTest.kt @@ -32,19 +32,37 @@ class BrowserToolbarStoreTest { val coroutineTestRule = MainCoroutineRule() @Test - fun `WHEN toggle edit mode action is dispatched THEN update the mode and edit text states`() { + fun `WHEN enter edit mode action is dispatched THEN mode is updated and query remains unchanged`() { val store = BrowserToolbarStore() - val editMode = true assertEquals(Mode.DISPLAY, store.state.mode) - store.dispatch(BrowserToolbarAction.ToggleEditMode(editMode = editMode)) + store.dispatch(BrowserToolbarAction.EnterEditMode) assertEquals(Mode.EDIT, store.state.mode) assertEquals("", store.state.editState.query) } @Test + fun `WHEN exit edit mode action is dispatched THEN mode is updated and query is cleared`() { + val store = BrowserToolbarStore( + initialState = BrowserToolbarState( + mode = Mode.EDIT, + editState = EditState( + query = "Mozilla", + ), + ), + ) + + assertEquals(Mode.EDIT, store.state.mode) + + store.dispatch(BrowserToolbarAction.ExitEditMode) + + assertEquals(Mode.DISPLAY, store.state.mode) + assertEquals("", store.state.editState.query) + } + + @Test fun `WHEN update edit text action is dispatched THEN update edit text state`() { val store = BrowserToolbarStore() val text = "Mozilla" diff --git a/mobile/android/android-components/samples/compose-browser/src/main/java/org/mozilla/samples/compose/browser/browser/BrowserScreen.kt b/mobile/android/android-components/samples/compose-browser/src/main/java/org/mozilla/samples/compose/browser/browser/BrowserScreen.kt @@ -75,7 +75,7 @@ fun BrowserScreen(navController: NavController) { val showTabs = store.observeAsComposableState { state -> state.showTabs } BackHandler(enabled = toolbarState.isEditMode()) { - toolbarStore.dispatch(BrowserToolbarAction.ToggleEditMode(false)) + toolbarStore.dispatch(BrowserToolbarAction.ExitEditMode) } AcornTheme { Box { @@ -96,7 +96,7 @@ fun BrowserScreen(navController: NavController) { Suggestions( url, onSuggestionClicked = { suggestion -> - toolbarStore.dispatch(BrowserToolbarAction.ToggleEditMode(false)) + toolbarStore.dispatch(BrowserToolbarAction.ExitEditMode) suggestion.onSuggestionClicked?.invoke() }, onAutoComplete = { suggestion -> @@ -165,7 +165,7 @@ fun TabsTray( selectTab = true, ) store.dispatch(BrowserScreenAction.HideTabs) - toolbarStore.dispatch(BrowserToolbarAction.ToggleEditMode(true)) + toolbarStore.dispatch(BrowserToolbarAction.EnterEditMode) }, ) { Text("+") diff --git a/mobile/android/android-components/samples/compose-browser/src/main/java/org/mozilla/samples/compose/browser/browser/BrowserToolbarMiddleware.kt b/mobile/android/android-components/samples/compose-browser/src/main/java/org/mozilla/samples/compose/browser/browser/BrowserToolbarMiddleware.kt @@ -10,7 +10,7 @@ import mozilla.components.compose.browser.toolbar.concept.Action.ActionButtonRes import mozilla.components.compose.browser.toolbar.concept.Action.TabCounterAction import mozilla.components.compose.browser.toolbar.concept.PageOrigin import mozilla.components.compose.browser.toolbar.store.BrowserToolbarAction -import mozilla.components.compose.browser.toolbar.store.BrowserToolbarAction.ToggleEditMode +import mozilla.components.compose.browser.toolbar.store.BrowserToolbarAction.EnterEditMode import mozilla.components.compose.browser.toolbar.store.BrowserToolbarInteraction.BrowserToolbarEvent import mozilla.components.compose.browser.toolbar.store.BrowserToolbarInteraction.BrowserToolbarMenu import mozilla.components.compose.browser.toolbar.store.BrowserToolbarMenuItem.BrowserToolbarMenuButton @@ -68,7 +68,7 @@ internal class BrowserToolbarMiddleware( } is PageOriginClicked -> { - next(ToggleEditMode(true)) + next(EnterEditMode) } is TabCounterClicked -> { diff --git a/mobile/android/android-components/samples/toolbar/src/main/java/org/mozilla/samples/toolbar/ToolbarActivity.kt b/mobile/android/android-components/samples/toolbar/src/main/java/org/mozilla/samples/toolbar/ToolbarActivity.kt @@ -518,7 +518,7 @@ class ToolbarActivity : AppCompatActivity() { store.dispatch(BrowserEditToolbarAction.SearchQueryUpdated(query = text)) }, onTextCommit = { - store.dispatch(BrowserToolbarAction.ToggleEditMode(editMode = false)) + store.dispatch(BrowserToolbarAction.ExitEditMode) }, url = "https://www.mozilla.org/en-US/firefox/mobile/", ) diff --git a/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/home/toolbar/BrowserToolbarMiddleware.kt b/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/home/toolbar/BrowserToolbarMiddleware.kt @@ -31,8 +31,9 @@ import mozilla.components.compose.browser.toolbar.store.BrowserDisplayToolbarAct import mozilla.components.compose.browser.toolbar.store.BrowserDisplayToolbarAction.PageOriginUpdated import mozilla.components.compose.browser.toolbar.store.BrowserEditToolbarAction.SearchQueryUpdated 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 import mozilla.components.compose.browser.toolbar.store.BrowserToolbarAction.Init -import mozilla.components.compose.browser.toolbar.store.BrowserToolbarAction.ToggleEditMode import mozilla.components.compose.browser.toolbar.store.BrowserToolbarInteraction.BrowserToolbarEvent import mozilla.components.compose.browser.toolbar.store.BrowserToolbarInteraction.BrowserToolbarEvent.Source import mozilla.components.compose.browser.toolbar.store.BrowserToolbarInteraction.CombinedEventAndMenu @@ -152,13 +153,16 @@ class BrowserToolbarMiddleware( environment = null } - is ToggleEditMode -> { + is EnterEditMode -> { next(action) - when (action.editMode) { - true -> stopSearchStateUpdates() - false -> observeSearchStateUpdates(context) - } + stopSearchStateUpdates() + } + + is ExitEditMode -> { + next(action) + + observeSearchStateUpdates(context) } is MenuClicked -> { diff --git a/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/library/history/BrowserToolbarSyncToHistoryMiddleware.kt b/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/library/history/BrowserToolbarSyncToHistoryMiddleware.kt @@ -5,7 +5,7 @@ package org.mozilla.fenix.library.history import mozilla.components.compose.browser.toolbar.store.BrowserToolbarAction -import mozilla.components.compose.browser.toolbar.store.BrowserToolbarAction.ToggleEditMode +import mozilla.components.compose.browser.toolbar.store.BrowserToolbarAction.ExitEditMode import mozilla.components.compose.browser.toolbar.store.BrowserToolbarState import mozilla.components.compose.browser.toolbar.store.BrowserToolbarStore import mozilla.components.lib.state.Middleware @@ -26,7 +26,7 @@ class BrowserToolbarSyncToHistoryMiddleware( ) { next(action) - if (action is ToggleEditMode && !action.editMode && historyStore.state.isSearching) { + if (action is ExitEditMode && historyStore.state.isSearching) { historyStore.dispatch(SearchDismissed) } } diff --git a/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/search/BrowserToolbarSearchMiddleware.kt b/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/search/BrowserToolbarSearchMiddleware.kt @@ -40,7 +40,8 @@ import mozilla.components.compose.browser.toolbar.store.BrowserEditToolbarAction import mozilla.components.compose.browser.toolbar.store.BrowserEditToolbarAction.UrlSuggestionAutocompleted import mozilla.components.compose.browser.toolbar.store.BrowserToolbarAction import mozilla.components.compose.browser.toolbar.store.BrowserToolbarAction.CommitUrl -import mozilla.components.compose.browser.toolbar.store.BrowserToolbarAction.ToggleEditMode +import mozilla.components.compose.browser.toolbar.store.BrowserToolbarAction.EnterEditMode +import mozilla.components.compose.browser.toolbar.store.BrowserToolbarAction.ExitEditMode import mozilla.components.compose.browser.toolbar.store.BrowserToolbarInteraction.BrowserToolbarEvent import mozilla.components.compose.browser.toolbar.store.BrowserToolbarInteraction.BrowserToolbarMenu import mozilla.components.compose.browser.toolbar.store.BrowserToolbarMenuItem @@ -170,26 +171,26 @@ class BrowserToolbarSearchMiddleware( context.dispatch(AutocompleteProvidersUpdated(emptyList())) } - is ToggleEditMode -> { - if (action.editMode) { - refreshConfigurationAfterSearchEngineChange( - context = context, - searchEngine = reconcileSelectedEngine(), - ) - observeVoiceInputResults(context) - syncCurrentSearchEngine(context) - syncAvailableEngines(context) - updateSearchEndPageActions(context) - } else { - syncCurrentSearchEngineJob?.cancel() - syncAvailableSearchEnginesJob?.cancel() - - if (observeQRScannerInputJob?.isActive == true) { - appStore.dispatch(AppAction.QrScannerAction.QrScannerDismissed) - } - observeQRScannerInputJob?.cancel() - observeVoiceInputJob?.cancel() + is EnterEditMode -> { + refreshConfigurationAfterSearchEngineChange( + context = context, + searchEngine = reconcileSelectedEngine(), + ) + observeVoiceInputResults(context) + syncCurrentSearchEngine(context) + syncAvailableEngines(context) + updateSearchEndPageActions(context) + } + + is ExitEditMode -> { + syncCurrentSearchEngineJob?.cancel() + syncAvailableSearchEnginesJob?.cancel() + + if (observeQRScannerInputJob?.isActive == true) { + appStore.dispatch(AppAction.QrScannerAction.QrScannerDismissed) } + observeQRScannerInputJob?.cancel() + observeVoiceInputJob?.cancel() } is SearchAborted -> { 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 @@ -13,7 +13,8 @@ import kotlinx.coroutines.flow.Flow import kotlinx.coroutines.flow.distinctUntilChangedBy import kotlinx.coroutines.launch import mozilla.components.compose.browser.toolbar.store.BrowserToolbarAction -import mozilla.components.compose.browser.toolbar.store.BrowserToolbarAction.ToggleEditMode +import mozilla.components.compose.browser.toolbar.store.BrowserToolbarAction.EnterEditMode +import mozilla.components.compose.browser.toolbar.store.BrowserToolbarAction.ExitEditMode import mozilla.components.compose.browser.toolbar.store.BrowserToolbarState import mozilla.components.compose.browser.toolbar.store.BrowserToolbarStore import mozilla.components.compose.browser.toolbar.store.EnvironmentCleared @@ -56,7 +57,7 @@ class BrowserToolbarSearchStatusSyncMiddleware( environment = null } - if (action is ToggleEditMode && !action.editMode) { + if (action is ExitEditMode) { // Only support the toolbar triggering exiting search mode in the application. // Entering search mode in the application needs more parameters and so // this must happen through a specifically configured action, not through an automated one. @@ -68,7 +69,11 @@ class BrowserToolbarSearchStatusSyncMiddleware( syncSearchActiveJob = appStore.observeWhileActive { distinctUntilChangedBy { it.searchState.isSearchActive } .collect { - context.dispatch(ToggleEditMode(it.searchState.isSearchActive)) + if (it.searchState.isSearchActive) { + context.dispatch(EnterEditMode) + } else { + context.dispatch(ExitEditMode) + } } } } diff --git a/mobile/android/fenix/app/src/test/java/org/mozilla/fenix/bookmarks/BrowserToolbarSyncToBookmarksMiddlewareTest.kt b/mobile/android/fenix/app/src/test/java/org/mozilla/fenix/bookmarks/BrowserToolbarSyncToBookmarksMiddlewareTest.kt @@ -4,7 +4,8 @@ package org.mozilla.fenix.bookmarks -import mozilla.components.compose.browser.toolbar.store.BrowserToolbarAction.ToggleEditMode +import mozilla.components.compose.browser.toolbar.store.BrowserToolbarAction.EnterEditMode +import mozilla.components.compose.browser.toolbar.store.BrowserToolbarAction.ExitEditMode import mozilla.components.compose.browser.toolbar.store.BrowserToolbarState import mozilla.components.compose.browser.toolbar.store.BrowserToolbarStore import mozilla.components.compose.browser.toolbar.store.Mode @@ -30,7 +31,7 @@ class BrowserToolbarSyncToBookmarksMiddlewareTest { middleware = listOf(middleware), ) - toolbarStore.dispatch(ToggleEditMode(false)) + toolbarStore.dispatch(ExitEditMode) assertFalse(bookmarksStore.state.isSearching) } @@ -44,7 +45,7 @@ class BrowserToolbarSyncToBookmarksMiddlewareTest { middleware = listOf(middleware), ) - toolbarStore.dispatch(ToggleEditMode(false)) + toolbarStore.dispatch(ExitEditMode) assertFalse(bookmarksStore.state.isSearching) } @@ -58,7 +59,7 @@ class BrowserToolbarSyncToBookmarksMiddlewareTest { middleware = listOf(middleware), ) - toolbarStore.dispatch(ToggleEditMode(true)) + toolbarStore.dispatch(EnterEditMode) assertFalse(bookmarksStore.state.isSearching) } diff --git a/mobile/android/fenix/app/src/test/java/org/mozilla/fenix/library/history/BrowserToolbarSyncToHistoryMiddlewareTest.kt b/mobile/android/fenix/app/src/test/java/org/mozilla/fenix/library/history/BrowserToolbarSyncToHistoryMiddlewareTest.kt @@ -7,7 +7,8 @@ package org.mozilla.fenix.library.history import io.mockk.every import io.mockk.mockk import io.mockk.verify -import mozilla.components.compose.browser.toolbar.store.BrowserToolbarAction.ToggleEditMode +import mozilla.components.compose.browser.toolbar.store.BrowserToolbarAction.EnterEditMode +import mozilla.components.compose.browser.toolbar.store.BrowserToolbarAction.ExitEditMode import mozilla.components.compose.browser.toolbar.store.BrowserToolbarState import mozilla.components.compose.browser.toolbar.store.BrowserToolbarStore import mozilla.components.compose.browser.toolbar.store.Mode @@ -28,7 +29,7 @@ class BrowserToolbarSyncToHistoryMiddlewareTest { middleware = listOf(BrowserToolbarSyncToHistoryMiddleware(historyStore)), ) - toolbarStore.dispatch(ToggleEditMode(false)) + toolbarStore.dispatch(ExitEditMode) verify { historyStore.dispatch(SearchDismissed) } } @@ -43,7 +44,7 @@ class BrowserToolbarSyncToHistoryMiddlewareTest { middleware = listOf(BrowserToolbarSyncToHistoryMiddleware(historyStore)), ) - toolbarStore.dispatch(ToggleEditMode(false)) + toolbarStore.dispatch(ExitEditMode) verify(exactly = 0) { historyStore.dispatch(any()) } } @@ -58,7 +59,7 @@ class BrowserToolbarSyncToHistoryMiddlewareTest { middleware = listOf(BrowserToolbarSyncToHistoryMiddleware(historyStore)), ) - toolbarStore.dispatch(ToggleEditMode(true)) + toolbarStore.dispatch(EnterEditMode) verify(exactly = 0) { historyStore.dispatch(any()) } } diff --git a/mobile/android/fenix/app/src/test/java/org/mozilla/fenix/search/BrowserToolbarSearchMiddlewareTest.kt b/mobile/android/fenix/app/src/test/java/org/mozilla/fenix/search/BrowserToolbarSearchMiddlewareTest.kt @@ -30,7 +30,8 @@ import mozilla.components.compose.browser.toolbar.concept.Action.SearchSelectorA import mozilla.components.compose.browser.toolbar.store.BrowserEditToolbarAction.SearchAborted import mozilla.components.compose.browser.toolbar.store.BrowserEditToolbarAction.SearchQueryUpdated import mozilla.components.compose.browser.toolbar.store.BrowserToolbarAction.CommitUrl -import mozilla.components.compose.browser.toolbar.store.BrowserToolbarAction.ToggleEditMode +import mozilla.components.compose.browser.toolbar.store.BrowserToolbarAction.EnterEditMode +import mozilla.components.compose.browser.toolbar.store.BrowserToolbarAction.ExitEditMode import mozilla.components.compose.browser.toolbar.store.BrowserToolbarInteraction.BrowserToolbarEvent import mozilla.components.compose.browser.toolbar.store.BrowserToolbarStore import mozilla.components.compose.browser.toolbar.store.EnvironmentCleared @@ -143,7 +144,7 @@ class BrowserToolbarSearchMiddlewareTest { fun `WHEN the toolbar enters in edit mode THEN a new search selector button is added`() { val (_, store) = buildMiddlewareAndAddToStore() - store.dispatch(ToggleEditMode(true)) + store.dispatch(EnterEditMode) assertSearchSelectorEquals( expectedSearchSelector(), @@ -155,7 +156,7 @@ class BrowserToolbarSearchMiddlewareTest { fun `WHEN the toolbar enters in edit mode with non-blank query THEN a clear button is shown`() { val (_, store) = buildMiddlewareAndAddToStore() - store.dispatch(ToggleEditMode(true)) + store.dispatch(EnterEditMode) store.dispatch(SearchQueryUpdated("test")) assertEquals( @@ -168,7 +169,7 @@ class BrowserToolbarSearchMiddlewareTest { fun `WHEN the toolbar enters in edit mode with blank query THEN a qr scanner button is shown`() { val (_, store) = buildMiddlewareAndAddToStore() - store.dispatch(ToggleEditMode(true)) + store.dispatch(EnterEditMode) store.dispatch(SearchQueryUpdated("")) assertEquals( @@ -181,7 +182,7 @@ class BrowserToolbarSearchMiddlewareTest { fun `WHEN the toolbar enters in edit mode with blank query AND user starts typing THEN qr button is replaced by clear button`() { val (_, store) = buildMiddlewareAndAddToStore() - store.dispatch(ToggleEditMode(true)) + store.dispatch(EnterEditMode) store.dispatch(SearchQueryUpdated("")) assertEquals( @@ -201,7 +202,7 @@ class BrowserToolbarSearchMiddlewareTest { fun `WHEN the toolbar enters in edit mode with non-blank query AND the clear button is clicked THEN text is cleared and telemetry is recorded`() { val (_, store) = buildMiddlewareAndAddToStore() store.dispatch(SearchQueryUpdated("test")) - store.dispatch(ToggleEditMode(true)) + store.dispatch(EnterEditMode) val clearButton = store.state.editState.editActionsEnd.last() as ActionButtonRes assertEquals(expectedClearButton, clearButton) @@ -218,7 +219,7 @@ class BrowserToolbarSearchMiddlewareTest { fakeSearchState().customSearchEngines.first() } val (_, store) = buildMiddlewareAndAddToStore(appStore = appStore) - store.dispatch(ToggleEditMode(true)) + store.dispatch(EnterEditMode) val qrButton = store.state.editState.editActionsEnd.last() as ActionButtonRes assertEquals(expectedQrButton, qrButton) @@ -237,7 +238,7 @@ class BrowserToolbarSearchMiddlewareTest { val middleware = spyk(buildMiddleware(appStore = appStore)) every { middleware.isSpeechRecognitionAvailable() } returns true val store = buildStore(middleware) - store.dispatch(ToggleEditMode(true)) + store.dispatch(EnterEditMode) val voiceSearchButton = store.state.editState.editActionsEnd.last() as ActionButtonRes assertEquals(expectedVoiceSearchButton, voiceSearchButton) @@ -262,7 +263,7 @@ class BrowserToolbarSearchMiddlewareTest { val appStore = AppStore(middlewares = listOf(captorMiddleware)) val (_, store) = buildMiddlewareAndAddToStore(appStore = appStore) appStore.dispatch(SearchStarted()) - store.dispatch(ToggleEditMode(true)) + store.dispatch(EnterEditMode) store.dispatch(SearchQueryUpdated("test")) assertTrue(store.state.isEditMode()) assertTrue(appStore.state.searchState.isSearchActive) @@ -285,7 +286,7 @@ class BrowserToolbarSearchMiddlewareTest { fun `GIVEN the search selector menu is open WHEN a menu item is clicked THEN update the selected search engine and rebuild the menu`() { val (_, store) = buildMiddlewareAndAddToStore() val newEngineSelection = fakeSearchState().searchEngineShortcuts.last() - store.dispatch(ToggleEditMode(true)) + store.dispatch(EnterEditMode) assertSearchSelectorEquals( expectedSearchSelector(), store.state.editState.editActionsStart[0] as SearchSelectorAction, @@ -303,7 +304,7 @@ class BrowserToolbarSearchMiddlewareTest { fun `GIVEN the search selector menu is open while in display mode WHEN a menu item is clicked THEN enter edit mode`() { val (_, store) = buildMiddlewareAndAddToStore() val newEngineSelection = fakeSearchState().searchEngineShortcuts.last() - store.dispatch(ToggleEditMode(false)) + store.dispatch(ExitEditMode) assertFalse(store.state.isEditMode()) store.dispatch(SearchSelectorItemClicked(newEngineSelection)) @@ -322,7 +323,7 @@ class BrowserToolbarSearchMiddlewareTest { configureAutocompleteProvidersInComponents() val store = buildStore(middleware) - store.dispatch(ToggleEditMode(true)) + store.dispatch(EnterEditMode) assertEquals( listOf( @@ -345,7 +346,7 @@ class BrowserToolbarSearchMiddlewareTest { configureAutocompleteProvidersInComponents() val (_, store) = buildMiddlewareAndAddToStore() - store.dispatch(ToggleEditMode(true)) + store.dispatch(EnterEditMode) assertEquals( listOf( @@ -364,7 +365,7 @@ class BrowserToolbarSearchMiddlewareTest { configureAutocompleteProvidersInComponents() val (_, store) = buildMiddlewareAndAddToStore() - store.dispatch(ToggleEditMode(true)) + store.dispatch(EnterEditMode) assertEquals( listOf( @@ -383,7 +384,7 @@ class BrowserToolbarSearchMiddlewareTest { configureAutocompleteProvidersInComponents() val (_, store) = buildMiddlewareAndAddToStore() - store.dispatch(ToggleEditMode(true)) + store.dispatch(EnterEditMode) assertEquals( listOf(components.core.domainsAutocompleteProvider), @@ -482,7 +483,7 @@ class BrowserToolbarSearchMiddlewareTest { val store = buildStore(middleware) store.dispatch(SearchSelectorItemClicked(mockk(relaxed = true))).joinBlocking() - store.dispatch(ToggleEditMode(true)) + store.dispatch(EnterEditMode) assertEquals( emptyList<AutocompleteProvider>(), @@ -496,7 +497,7 @@ class BrowserToolbarSearchMiddlewareTest { fun `WHEN the search engines are updated in BrowserStore THEN update the search selector and search providers`() { val browserStore = BrowserStore() val (_, store) = buildMiddlewareAndAddToStore(browserStore = browserStore) - store.dispatch(ToggleEditMode(true)) + store.dispatch(EnterEditMode) val newSearchEngines = fakeSearchState().applicationSearchEngines browserStore.dispatch(ApplicationSearchEnginesLoaded(newSearchEngines)).joinBlocking() @@ -520,7 +521,7 @@ class BrowserToolbarSearchMiddlewareTest { ) val browserStore = BrowserStore() val (_, store) = buildMiddlewareAndAddToStore(appStore, browserStore) - store.dispatch(ToggleEditMode(true)) + store.dispatch(EnterEditMode) val newSearchEngines = fakeSearchState().applicationSearchEngines browserStore.dispatch(ApplicationSearchEnginesLoaded(newSearchEngines)).joinBlocking() @@ -794,9 +795,9 @@ class BrowserToolbarSearchMiddlewareTest { val middleware = spyk(buildMiddleware(appStore = appStore)) every { middleware.isSpeechRecognitionAvailable() } returns true val store = buildStore(middleware) - store.dispatch(ToggleEditMode(true)) + store.dispatch(EnterEditMode) - store.dispatch(ToggleEditMode(true)) + store.dispatch(EnterEditMode) val actions = store.state.editState.editActionsEnd assertEquals(2, actions.size) @@ -809,9 +810,9 @@ class BrowserToolbarSearchMiddlewareTest { val middleware = spyk(buildMiddleware(appStore = appStore)) every { middleware.isSpeechRecognitionAvailable() } returns false val store = buildStore(middleware) - store.dispatch(ToggleEditMode(true)) + store.dispatch(EnterEditMode) store.dispatch(SearchQueryUpdated("")) - store.dispatch(ToggleEditMode(true)) + store.dispatch(EnterEditMode) val actions = store.state.editState.editActionsEnd assertTrue(actions.size == 1) @@ -832,7 +833,7 @@ class BrowserToolbarSearchMiddlewareTest { components = components, browsingModeManager = browsingModeManager, ) - store.dispatch(ToggleEditMode(true)) + store.dispatch(EnterEditMode) val qrScannerButton = store.state.editState.editActionsEnd.last() as ActionButtonRes store.dispatch(qrScannerButton.onClick as BrowserToolbarEvent).joinBlocking() @@ -866,7 +867,7 @@ class BrowserToolbarSearchMiddlewareTest { components = components, browsingModeManager = browsingModeManager, ) - store.dispatch(ToggleEditMode(true)) + store.dispatch(EnterEditMode) val qrScannerButton = store.state.editState.editActionsEnd.last() as ActionButtonRes store.dispatch(qrScannerButton.onClick as BrowserToolbarEvent).joinBlocking() @@ -905,7 +906,7 @@ class BrowserToolbarSearchMiddlewareTest { components = components, browsingModeManager = browsingModeManager, ) - store.dispatch(ToggleEditMode(true)) + store.dispatch(EnterEditMode) val qrScannerButton = store.state.editState.editActionsEnd.last() as ActionButtonRes store.dispatch(qrScannerButton.onClick as BrowserToolbarEvent).joinBlocking() @@ -934,7 +935,7 @@ class BrowserToolbarSearchMiddlewareTest { val middleware = spyk(buildMiddleware(appStore = appStore)) every { middleware.isSpeechRecognitionAvailable() } returns true val store = buildStore(middleware) - store.dispatch(ToggleEditMode(true)) + store.dispatch(EnterEditMode) val voiceAction = store.state.editState.editActionsEnd.first() as ActionButtonRes store.dispatch(voiceAction.onClick as BrowserToolbarEvent) 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 @@ -11,7 +11,8 @@ import io.mockk.every import io.mockk.mockk import io.mockk.spyk import kotlinx.coroutines.test.runTest -import mozilla.components.compose.browser.toolbar.store.BrowserToolbarAction.ToggleEditMode +import mozilla.components.compose.browser.toolbar.store.BrowserToolbarAction.EnterEditMode +import mozilla.components.compose.browser.toolbar.store.BrowserToolbarAction.ExitEditMode import mozilla.components.compose.browser.toolbar.store.BrowserToolbarStore import mozilla.components.compose.browser.toolbar.store.EnvironmentCleared import mozilla.components.compose.browser.toolbar.store.EnvironmentRehydrated @@ -72,7 +73,7 @@ class BrowserToolbarSearchStatusSyncMiddlewareTest { assertTrue(appStore.state.searchState.isSearchActive) assertTrue(toolbarStore.state.isEditMode()) - toolbarStore.dispatch(ToggleEditMode(false)).joinBlocking() + toolbarStore.dispatch(ExitEditMode).joinBlocking() appStore.waitUntilIdle() mainLooperRule.idle() assertFalse(appStore.state.searchState.isSearchActive) @@ -85,7 +86,7 @@ class BrowserToolbarSearchStatusSyncMiddlewareTest { assertFalse(toolbarStore.state.isEditMode()) assertFalse(appStore.state.searchState.isSearchActive) - toolbarStore.dispatch(ToggleEditMode(true)).joinBlocking() + toolbarStore.dispatch(EnterEditMode).joinBlocking() mainLooperRule.idle() assertFalse(appStore.state.searchState.isSearchActive) diff --git a/mobile/android/fenix/app/src/test/java/org/mozilla/fenix/search/BrowserToolbarToFenixSearchMapperMiddlewareTest.kt b/mobile/android/fenix/app/src/test/java/org/mozilla/fenix/search/BrowserToolbarToFenixSearchMapperMiddlewareTest.kt @@ -8,7 +8,7 @@ import androidx.lifecycle.Lifecycle import io.mockk.every import io.mockk.mockk import mozilla.components.compose.browser.toolbar.store.BrowserEditToolbarAction.SearchQueryUpdated -import mozilla.components.compose.browser.toolbar.store.BrowserToolbarAction.ToggleEditMode +import mozilla.components.compose.browser.toolbar.store.BrowserToolbarAction.EnterEditMode import mozilla.components.compose.browser.toolbar.store.BrowserToolbarStore import mozilla.components.lib.state.Middleware import mozilla.components.support.test.middleware.CaptureActionsMiddleware @@ -41,7 +41,7 @@ class BrowserToolbarToFenixSearchMapperMiddlewareTest { val captorMiddleware = CaptureActionsMiddleware<SearchFragmentState, SearchFragmentAction>() val searchStore = buildSearchStore(listOf(searchStatusMapperMiddleware, captorMiddleware)) - toolbarStore.dispatch(ToggleEditMode(true)) + toolbarStore.dispatch(EnterEditMode) captorMiddleware.assertLastAction(SearchStarted::class) { assertNull(it.selectedSearchEngine) @@ -64,7 +64,7 @@ class BrowserToolbarToFenixSearchMapperMiddlewareTest { @Test fun `GIVEN search was started WHEN there's a new query in the toolbar THEN update the search state`() { val searchStore = buildSearchStore(listOf(buildMiddleware())) - toolbarStore.dispatch(ToggleEditMode(true)) + toolbarStore.dispatch(EnterEditMode) searchStore.dispatch(SearchStarted(mockk(), false, false, searchStartedForCurrentUrl = false)) @@ -84,7 +84,7 @@ class BrowserToolbarToFenixSearchMapperMiddlewareTest { @Test fun `GIVEN search was started for the current URL WHEN there's a new query in the toolbar THEN don't update the search state`() { val searchStore = buildSearchStore(listOf(buildMiddleware())) - toolbarStore.dispatch(ToggleEditMode(true)) + toolbarStore.dispatch(EnterEditMode) searchStore.dispatch(SearchStarted(mockk(), false, false, searchStartedForCurrentUrl = true)) toolbarStore.dispatch(SearchQueryUpdated("https://mozilla.org", isQueryPrefilled = true))