Bug 1948633 - part 4 - Use pageOrigin in samples and Fenix r=android-reviewers,tchoh

Differential Revision: https://phabricator.services.mozilla.com/D245954
This commit is contained in:
Mugurell
2025-04-23 17:55:46 +00:00
parent b7c528df3b
commit f9ba1adec4
10 changed files with 65 additions and 21 deletions

View File

@@ -49,8 +49,6 @@ enum class Mode {
/** /**
* Wrapper containing the toolbar display state. * Wrapper containing the toolbar display state.
* *
* @property hint Text displayed in the toolbar when there's no URL to display
* (no tab or empty URL).
* @property browserActionsStart List of browser [Action]s to be displayed at the start of the * @property browserActionsStart List of browser [Action]s to be displayed at the start of the
* toolbar, outside of the URL bounding box. * toolbar, outside of the URL bounding box.
* These should be actions relevant to the browser as a whole. * These should be actions relevant to the browser as a whole.
@@ -59,8 +57,8 @@ enum class Mode {
* and the current webpage's details, inside of the URL bounding box. * and the current webpage's details, inside of the URL bounding box.
* These should be actions relevant to specific webpages as opposed to [browserActionsStart]. * These should be actions relevant to specific webpages as opposed to [browserActionsStart].
* See [MDN docs](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/pageAction). * See [MDN docs](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/pageAction).
* @param pageOrigin Details about the current website. * @property pageOrigin Details about the current website.
* @param pageActions List of page [Action]s to be displayed to the right side of the URL of the * @property pageActions List of page [Action]s to be displayed to the right side of the URL of the
* display toolbar. Also see: * display toolbar. Also see:
* [MDN docs](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/pageAction) * [MDN docs](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/pageAction)
* @property browserActions List of browser [Action]s to be displayed on the right side of the * @property browserActions List of browser [Action]s to be displayed on the right side of the
@@ -70,7 +68,6 @@ enum class Mode {
* If `null` a progress bar will not be displayed. * If `null` a progress bar will not be displayed.
*/ */
data class DisplayState( data class DisplayState(
val hint: String = "",
val browserActionsStart: List<Action> = emptyList(), val browserActionsStart: List<Action> = emptyList(),
val pageActionsStart: List<Action> = emptyList(), val pageActionsStart: List<Action> = emptyList(),
val pageOrigin: PageOrigin = PageOrigin( val pageOrigin: PageOrigin = PageOrigin(

View File

@@ -93,9 +93,6 @@ fun BrowserScreen(navController: NavController) {
onTextEdit = { text -> onTextEdit = { text ->
toolbarStore.dispatch(BrowserEditToolbarAction.UpdateEditText(text)) toolbarStore.dispatch(BrowserEditToolbarAction.UpdateEditText(text))
}, },
onDisplayToolbarClick = {
toolbarStore.dispatch(BrowserToolbarAction.ToggleEditMode(true))
},
) )
Box { Box {

View File

@@ -10,7 +10,9 @@ import androidx.core.content.ContextCompat
import androidx.navigation.NavController import androidx.navigation.NavController
import mozilla.components.compose.browser.toolbar.concept.Action.ActionButton import mozilla.components.compose.browser.toolbar.concept.Action.ActionButton
import mozilla.components.compose.browser.toolbar.concept.Action.TabCounterAction 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
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
import mozilla.components.compose.browser.toolbar.store.BrowserToolbarInteraction.BrowserToolbarMenu import mozilla.components.compose.browser.toolbar.store.BrowserToolbarInteraction.BrowserToolbarMenu
import mozilla.components.compose.browser.toolbar.store.BrowserToolbarMenuItem.BrowserToolbarMenuButton import mozilla.components.compose.browser.toolbar.store.BrowserToolbarMenuItem.BrowserToolbarMenuButton
@@ -25,9 +27,14 @@ import org.mozilla.samples.compose.browser.BrowserComposeActivity.Companion.ROUT
import org.mozilla.samples.compose.browser.R import org.mozilla.samples.compose.browser.R
import org.mozilla.samples.compose.browser.browser.DisplayBrowserActionsInteractions.TabCounterClicked import org.mozilla.samples.compose.browser.browser.DisplayBrowserActionsInteractions.TabCounterClicked
import org.mozilla.samples.compose.browser.browser.DisplayPageActionsInteractions.RefreshClicked import org.mozilla.samples.compose.browser.browser.DisplayPageActionsInteractions.RefreshClicked
import org.mozilla.samples.compose.browser.browser.DisplayPageOriginInteractions.PageOriginClicked
import org.mozilla.samples.compose.browser.browser.EditActionsInteractions.ClearClicked import org.mozilla.samples.compose.browser.browser.EditActionsInteractions.ClearClicked
import mozilla.components.ui.icons.R as iconsR import mozilla.components.ui.icons.R as iconsR
private sealed class DisplayPageOriginInteractions : BrowserToolbarEvent {
data object PageOriginClicked : DisplayPageOriginInteractions()
}
private sealed class DisplayPageActionsInteractions : BrowserToolbarEvent { private sealed class DisplayPageActionsInteractions : BrowserToolbarEvent {
data object RefreshClicked : DisplayPageActionsInteractions() data object RefreshClicked : DisplayPageActionsInteractions()
} }
@@ -59,6 +66,10 @@ internal class BrowserToolbarMiddleware(
next(buildInitialState()) next(buildInitialState())
} }
is PageOriginClicked -> {
next(ToggleEditMode(true))
}
is TabCounterClicked -> { is TabCounterClicked -> {
dependencies.browserScreenStore.dispatch(BrowserScreenAction.ShowTabs) dependencies.browserScreenStore.dispatch(BrowserScreenAction.ShowTabs)
} }
@@ -76,7 +87,12 @@ internal class BrowserToolbarMiddleware(
private fun buildInitialState() = BrowserToolbarAction.Init( private fun buildInitialState() = BrowserToolbarAction.Init(
mode = Mode.DISPLAY, mode = Mode.DISPLAY,
displayState = DisplayState( displayState = DisplayState(
hint = "Search or enter address", pageOrigin = PageOrigin(
hint = R.string.toolbar_search_hint,
title = null,
url = null,
onClick = PageOriginClicked,
),
pageActions = buildDisplayPageActions(), pageActions = buildDisplayPageActions(),
browserActions = buildDisplayBrowserActions(), browserActions = buildDisplayBrowserActions(),
), ),

View File

@@ -9,4 +9,5 @@
<string name="menu_item_settings">Settings</string> <string name="menu_item_settings">Settings</string>
<string name="menu_item_settings_description">Open browser settings</string> <string name="menu_item_settings_description">Open browser settings</string>
<string name="clear_input_description">Clear input</string> <string name="clear_input_description">Clear input</string>
<string name="toolbar_search_hint">Search or enter address</string>
</resources> </resources>

View File

@@ -515,9 +515,6 @@ class ToolbarActivity : AppCompatActivity() {
AcornTheme { AcornTheme {
BrowserToolbar( BrowserToolbar(
store = store, store = store,
onDisplayToolbarClick = {
store.dispatch(BrowserToolbarAction.ToggleEditMode(editMode = true))
},
onTextEdit = { text -> onTextEdit = { text ->
store.dispatch(BrowserEditToolbarAction.UpdateEditText(text = text)) store.dispatch(BrowserEditToolbarAction.UpdateEditText(text = text))
}, },
@@ -565,7 +562,6 @@ class ToolbarActivity : AppCompatActivity() {
BrowserToolbar( BrowserToolbar(
store = store, store = store,
onDisplayToolbarClick = {},
onTextEdit = {}, onTextEdit = {},
onTextCommit = {}, onTextCommit = {},
colors = BrowserToolbarDefaults.colors(), colors = BrowserToolbarDefaults.colors(),

View File

@@ -17,6 +17,7 @@ import mozilla.components.compose.browser.toolbar.concept.Action
import mozilla.components.compose.browser.toolbar.concept.Action.ActionButton import mozilla.components.compose.browser.toolbar.concept.Action.ActionButton
import mozilla.components.compose.browser.toolbar.concept.Action.DropdownAction import mozilla.components.compose.browser.toolbar.concept.Action.DropdownAction
import mozilla.components.compose.browser.toolbar.concept.Action.TabCounterAction import mozilla.components.compose.browser.toolbar.concept.Action.TabCounterAction
import mozilla.components.compose.browser.toolbar.concept.PageOrigin
import mozilla.components.compose.browser.toolbar.store.BrowserDisplayToolbarAction import mozilla.components.compose.browser.toolbar.store.BrowserDisplayToolbarAction
import mozilla.components.compose.browser.toolbar.store.BrowserDisplayToolbarAction.UpdateProgressBarConfig import mozilla.components.compose.browser.toolbar.store.BrowserDisplayToolbarAction.UpdateProgressBarConfig
import mozilla.components.compose.browser.toolbar.store.BrowserToolbarAction import mozilla.components.compose.browser.toolbar.store.BrowserToolbarAction
@@ -33,6 +34,8 @@ import mozilla.components.compose.browser.toolbar.store.ProgressBarGravity.Botto
import mozilla.components.lib.state.Middleware import mozilla.components.lib.state.Middleware
import mozilla.components.lib.state.MiddlewareContext import mozilla.components.lib.state.MiddlewareContext
import org.mozilla.samples.toolbar.R import org.mozilla.samples.toolbar.R
import org.mozilla.samples.toolbar.middleware.PageOriginInteractions.CopyOptionClicked
import org.mozilla.samples.toolbar.middleware.PageOriginInteractions.PageOriginClicked
import org.mozilla.samples.toolbar.middleware.SearchSelectorInteractions.BookmarksClicked import org.mozilla.samples.toolbar.middleware.SearchSelectorInteractions.BookmarksClicked
import org.mozilla.samples.toolbar.middleware.SearchSelectorInteractions.HistoryClicked import org.mozilla.samples.toolbar.middleware.SearchSelectorInteractions.HistoryClicked
import org.mozilla.samples.toolbar.middleware.SearchSelectorInteractions.SettingsClicked import org.mozilla.samples.toolbar.middleware.SearchSelectorInteractions.SettingsClicked
@@ -59,6 +62,11 @@ private sealed class StartPageInteractions : BrowserToolbarEvent {
data object SecurityIndicatorClicked : StartBrowserInteractions() data object SecurityIndicatorClicked : StartBrowserInteractions()
} }
private sealed class PageOriginInteractions : BrowserToolbarEvent {
data object PageOriginClicked : PageOriginInteractions()
data object CopyOptionClicked : PageOriginInteractions()
}
private sealed class TabCounterInteractions : BrowserToolbarEvent { private sealed class TabCounterInteractions : BrowserToolbarEvent {
data object TabCounterClicked : TabCounterInteractions() data object TabCounterClicked : TabCounterInteractions()
data object Add10TabsClicked : TabCounterInteractions() data object Add10TabsClicked : TabCounterInteractions()
@@ -91,9 +99,9 @@ internal class BrowserToolbarMiddleware(
BrowserToolbarAction.Init( BrowserToolbarAction.Init(
mode = Mode.DISPLAY, mode = Mode.DISPLAY,
displayState = DisplayState( displayState = DisplayState(
hint = "Search or enter address",
browserActionsStart = buildStartBrowserActions(), browserActionsStart = buildStartBrowserActions(),
pageActionsStart = buildStartPageActions(), pageActionsStart = buildStartPageActions(),
pageOrigin = buildPageOrigin(),
pageActions = listOf( pageActions = listOf(
ActionButton( ActionButton(
icon = iconsR.drawable.mozac_ic_arrow_clockwise_24, icon = iconsR.drawable.mozac_ic_arrow_clockwise_24,
@@ -122,6 +130,7 @@ internal class BrowserToolbarMiddleware(
is SearchSelectorInteractions, is SearchSelectorInteractions,
is StartBrowserInteractions, is StartBrowserInteractions,
is StartPageInteractions, is StartPageInteractions,
is PageOriginInteractions,
-> Toast.makeText(dependencies.context, action.javaClass.simpleName, Toast.LENGTH_SHORT).show() -> Toast.makeText(dependencies.context, action.javaClass.simpleName, Toast.LENGTH_SHORT).show()
is TabCounterClicked -> { is TabCounterClicked -> {
@@ -169,6 +178,23 @@ internal class BrowserToolbarMiddleware(
), ),
) )
private fun buildPageOrigin() = PageOrigin(
hint = R.string.toolbar_search_hint,
title = null,
url = null,
onClick = PageOriginClicked,
onLongClick = BrowserToolbarMenu {
listOf(
BrowserToolbarMenuButton(
iconResource = iconsR.drawable.mozac_ic_copy_24,
text = R.string.copy_url_button,
contentDescription = R.string.copy_url_button_description,
onClick = CopyOptionClicked,
),
)
},
)
private fun buildDisplayBrowserActions() = listOf( private fun buildDisplayBrowserActions() = listOf(
TabCounterAction( TabCounterAction(
count = currentTabsNumber, count = currentTabsNumber,

View File

@@ -21,4 +21,7 @@
<string name="page_action_clear_input_description">Clear input</string> <string name="page_action_clear_input_description">Clear input</string>
<string name="browser_action_home_button_description">Stay home</string> <string name="browser_action_home_button_description">Stay home</string>
<string name="browser_action_security_lock_description">Webpage security information</string> <string name="browser_action_security_lock_description">Webpage security information</string>
<string name="toolbar_search_hint">Search or enter address</string>
<string name="copy_url_button">Copy</string>
<string name="copy_url_button_description">Copy the current url</string>
</resources> </resources>

View File

@@ -152,7 +152,6 @@ class BrowserToolbarComposable(
BrowserToolbar( BrowserToolbar(
store = store, store = store,
browserStore = context.components.core.store, browserStore = context.components.core.store,
onDisplayToolbarClick = {},
onTextEdit = {}, onTextEdit = {},
onTextCommit = {}, onTextCommit = {},
target = Target.SelectedTab, target = Target.SelectedTab,

View File

@@ -135,7 +135,6 @@ internal class HomeToolbarComposable(
BrowserToolbar( BrowserToolbar(
store = store, store = store,
browserStore = context.components.core.store, browserStore = context.components.core.store,
onDisplayToolbarClick = {},
onTextEdit = {}, onTextEdit = {},
onTextCommit = {}, onTextCommit = {},
target = Target.Tab("none"), target = Target.Tab("none"),

View File

@@ -9,13 +9,16 @@ import androidx.compose.foundation.layout.Column
import androidx.compose.runtime.Composable import androidx.compose.runtime.Composable
import androidx.compose.ui.Modifier import androidx.compose.ui.Modifier
import androidx.compose.ui.graphics.Color import androidx.compose.ui.graphics.Color
import androidx.compose.ui.res.stringResource
import androidx.compose.ui.tooling.preview.PreviewLightDark import androidx.compose.ui.tooling.preview.PreviewLightDark
import mozilla.components.compose.browser.toolbar.BrowserDisplayToolbar import mozilla.components.compose.browser.toolbar.BrowserDisplayToolbar
import mozilla.components.compose.browser.toolbar.BrowserToolbarDefaults import mozilla.components.compose.browser.toolbar.BrowserToolbarDefaults
import mozilla.components.compose.browser.toolbar.concept.PageOrigin
import mozilla.components.compose.browser.toolbar.store.BrowserToolbarInteraction.BrowserToolbarEvent
import org.mozilla.fenix.R import org.mozilla.fenix.R
import org.mozilla.fenix.theme.FirefoxTheme import org.mozilla.fenix.theme.FirefoxTheme
private data object URLCLicked : BrowserToolbarEvent
/** /**
* Search bar. * Search bar.
* *
@@ -26,12 +29,19 @@ internal fun SearchBar(
onClick: () -> Unit, onClick: () -> Unit,
) { ) {
BrowserDisplayToolbar( BrowserDisplayToolbar(
url = stringResource(R.string.search_hint), pageOrigin = PageOrigin(
hint = R.string.search_hint,
title = null,
url = null,
onClick = URLCLicked,
),
colors = BrowserToolbarDefaults.colors().displayToolbarColors.copy(background = Color.Transparent), colors = BrowserToolbarDefaults.colors().displayToolbarColors.copy(background = Color.Transparent),
progressBarConfig = null, progressBarConfig = null,
textStyle = FirefoxTheme.typography.body1, onInteraction = {
onUrlClicked = onClick, if (it is URLCLicked) {
onInteraction = {}, onClick()
}
},
) )
} }