tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

commit 92ba58a5ebe5e191cf8956d02fa17116ed0facbc
parent 61ece244205725e788a05db5648d80962ccf583e
Author: Roger Yang <royang@mozilla.com>
Date:   Wed,  1 Oct 2025 18:32:15 +0000

Bug 1988158 - Add separators in search engine dropdown menu. r=android-reviewers,petru

Differential Revision: https://phabricator.services.mozilla.com/D266706

Diffstat:
Mmobile/android/fenix/app/src/main/java/org/mozilla/fenix/search/BrowserToolbarSearchMiddleware.kt | 14+++++++++++++-
Mmobile/android/fenix/app/src/test/java/org/mozilla/fenix/search/fixtures/SearchSelector.kt | 56+++++++++++++++++++++++++++++++++++++++++++-------------
2 files changed, 56 insertions(+), 14 deletions(-)

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 @@ -46,6 +46,7 @@ import mozilla.components.compose.browser.toolbar.store.BrowserToolbarInteractio import mozilla.components.compose.browser.toolbar.store.BrowserToolbarInteraction.BrowserToolbarMenu import mozilla.components.compose.browser.toolbar.store.BrowserToolbarMenuItem import mozilla.components.compose.browser.toolbar.store.BrowserToolbarMenuItem.BrowserToolbarMenuButton +import mozilla.components.compose.browser.toolbar.store.BrowserToolbarMenuItem.BrowserToolbarMenuDivider import mozilla.components.compose.browser.toolbar.store.BrowserToolbarState import mozilla.components.compose.browser.toolbar.store.BrowserToolbarStore import mozilla.components.compose.browser.toolbar.store.EnvironmentCleared @@ -607,7 +608,18 @@ class BrowserToolbarSearchMiddleware( onClick = null, ), ) - addAll(searchEngineShortcuts.toToolbarMenuItems(resources)) + val searchEngines = searchEngineShortcuts.filter { it.type != APPLICATION } + if (searchEngines.isNotEmpty()) { + addAll(searchEngines.toToolbarMenuItems(resources)) + add(BrowserToolbarMenuDivider) + } + + val applicationSearchEngines = searchEngineShortcuts.filter { it.type == APPLICATION } + if (applicationSearchEngines.isNotEmpty()) { + addAll(applicationSearchEngines.toToolbarMenuItems(resources)) + add(BrowserToolbarMenuDivider) + } + add( BrowserToolbarMenuButton( icon = MenuItemIconRes(iconsR.drawable.mozac_ic_settings_24), diff --git a/mobile/android/fenix/app/src/test/java/org/mozilla/fenix/search/fixtures/SearchSelector.kt b/mobile/android/fenix/app/src/test/java/org/mozilla/fenix/search/fixtures/SearchSelector.kt @@ -11,7 +11,9 @@ import mozilla.components.browser.state.search.SearchEngine import mozilla.components.browser.state.search.SearchEngine.Type.APPLICATION import mozilla.components.compose.browser.toolbar.concept.Action.SearchSelectorAction import mozilla.components.compose.browser.toolbar.store.BrowserToolbarInteraction.BrowserToolbarMenu +import mozilla.components.compose.browser.toolbar.store.BrowserToolbarMenuItem import mozilla.components.compose.browser.toolbar.store.BrowserToolbarMenuItem.BrowserToolbarMenuButton +import mozilla.components.compose.browser.toolbar.store.BrowserToolbarMenuItem.BrowserToolbarMenuDivider import org.junit.Assert.assertEquals import org.junit.Assert.assertNull import org.mozilla.fenix.R @@ -58,6 +60,11 @@ fun assertSearchSelectorEquals( val actualMenuItems = actual.menu.items() assertEquals(expectedMenuItems.size, actualMenuItems.size) for (i in expectedMenuItems.indices) { + if (expectedMenuItems[i] is BrowserToolbarMenuDivider) { + assertEquals(expectedMenuItems[i], actualMenuItems[i]) + continue + } + val expectedMenuItem = expectedMenuItems[i] as BrowserToolbarMenuButton val actualMenuItem = actualMenuItems[i] as BrowserToolbarMenuButton @@ -135,19 +142,42 @@ fun buildExpectedSearchSelectorMenuItems( onClick = null, ), ) - addAll( - searchEnginesShortcuts.map { searchEngine -> - BrowserToolbarMenuButton( - icon = MenuItemIcon.DrawableIcon( - drawable = searchEngine.icon.toDrawable(resources), - shouldTint = searchEngine.type == APPLICATION, - ), - text = MenuItemText.StringText(searchEngine.name), - contentDescription = MenuItemDescription.StringContentDescription(searchEngine.name), - onClick = SearchSelectorItemClicked(searchEngine), - ) - }, - ) + + val searchEngines = searchEnginesShortcuts.filter { it.type != APPLICATION } + if (searchEngines.isNotEmpty()) { + addAll( + searchEngines.map { searchEngine -> + BrowserToolbarMenuButton( + icon = MenuItemIcon.DrawableIcon( + drawable = searchEngine.icon.toDrawable(resources), + shouldTint = searchEngine.type == APPLICATION, + ), + text = MenuItemText.StringText(searchEngine.name), + contentDescription = MenuItemDescription.StringContentDescription(searchEngine.name), + onClick = SearchSelectorItemClicked(searchEngine), + ) + }, + ) + add(BrowserToolbarMenuDivider) + } + + val applicationSearchEngines = searchEnginesShortcuts.filter { it.type == APPLICATION } + if (applicationSearchEngines.isNotEmpty()) { + addAll( + applicationSearchEngines.map { searchEngine -> + BrowserToolbarMenuButton( + icon = MenuItemIcon.DrawableIcon( + drawable = searchEngine.icon.toDrawable(resources), + shouldTint = searchEngine.type == APPLICATION, + ), + text = MenuItemText.StringText(searchEngine.name), + contentDescription = MenuItemDescription.StringContentDescription(searchEngine.name), + onClick = SearchSelectorItemClicked(searchEngine), + ) + }, + ) + add(BrowserToolbarMenuDivider) + } add( BrowserToolbarMenuButton( icon = MenuItemIcon.DrawableResIcon(iconsR.drawable.mozac_ic_settings_24),