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:
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),