diff --git a/app/src/main/java/org/mozilla/fenix/browser/BrowserFragment.kt b/app/src/main/java/org/mozilla/fenix/browser/BrowserFragment.kt
index 312dcd1fc..9c099a0a4 100644
--- a/app/src/main/java/org/mozilla/fenix/browser/BrowserFragment.kt
+++ b/app/src/main/java/org/mozilla/fenix/browser/BrowserFragment.kt
@@ -277,6 +277,7 @@ class BrowserFragment : Fragment(), BackHandler, ComponentCallbacks2 {
ToolbarMenu.Item.Back -> sessionUseCases.goBack.invoke()
ToolbarMenu.Item.Forward -> sessionUseCases.goForward.invoke()
ToolbarMenu.Item.Reload -> sessionUseCases.reload.invoke()
+ ToolbarMenu.Item.Stop -> sessionUseCases.stopLoading.invoke()
ToolbarMenu.Item.Settings -> Navigation.findNavController(toolbarComponent.getView())
.navigate(BrowserFragmentDirections.actionBrowserFragmentToSettingsFragment())
ToolbarMenu.Item.Library -> Navigation.findNavController(toolbarComponent.getView())
diff --git a/app/src/main/java/org/mozilla/fenix/components/toolbar/ToolbarMenu.kt b/app/src/main/java/org/mozilla/fenix/components/toolbar/ToolbarMenu.kt
index dab3d2cb5..37b2e33d9 100644
--- a/app/src/main/java/org/mozilla/fenix/components/toolbar/ToolbarMenu.kt
+++ b/app/src/main/java/org/mozilla/fenix/components/toolbar/ToolbarMenu.kt
@@ -34,6 +34,7 @@ class ToolbarMenu(
object Back : Item()
object Forward : Item()
object Reload : Item()
+ object Stop : Item()
object ReportIssue : Item()
object OpenInFenix : Item()
}
@@ -41,28 +42,68 @@ class ToolbarMenu(
val menuBuilder by lazy { BrowserMenuBuilder(menuItems) }
val menuToolbar by lazy {
- val back = BrowserMenuItemToolbar.Button(
- mozilla.components.ui.icons.R.drawable.mozac_ic_back,
- iconTintColorResource = DefaultThemeManager.resolveAttribute(R.attr.browserToolbarMenuIcons, context),
- contentDescription = context.getString(R.string.browser_menu_back)
+ val back = BrowserMenuItemToolbar.TwoStateButton(
+ primaryImageResource = mozilla.components.ui.icons.R.drawable.mozac_ic_back,
+ primaryContentDescription = context.getString(R.string.browser_menu_back),
+ primaryImageTintResource = DefaultThemeManager.resolveAttribute(
+ R.attr.browserToolbarMenuIcons,
+ context
+ ),
+ isInPrimaryState = {
+ context.components.core.sessionManager.selectedSession?.canGoBack ?: true
+ },
+ secondaryImageTintResource = DefaultThemeManager.resolveAttribute(
+ R.attr.disabledIconColor,
+ context
+ ),
+ disableInSecondaryState = true
) {
onItemTapped.invoke(Item.Back)
}
- val forward = BrowserMenuItemToolbar.Button(
- mozilla.components.ui.icons.R.drawable.mozac_ic_forward,
- iconTintColorResource = DefaultThemeManager.resolveAttribute(R.attr.browserToolbarMenuIcons, context),
- contentDescription = context.getString(R.string.browser_menu_forward)
+ val forward = BrowserMenuItemToolbar.TwoStateButton(
+ primaryImageResource = mozilla.components.ui.icons.R.drawable.mozac_ic_forward,
+ primaryContentDescription = context.getString(R.string.browser_menu_forward),
+ primaryImageTintResource = DefaultThemeManager.resolveAttribute(
+ R.attr.browserToolbarMenuIcons,
+ context
+ ),
+ isInPrimaryState = {
+ context.components.core.sessionManager.selectedSession?.canGoForward ?: true
+ },
+ secondaryImageTintResource = DefaultThemeManager.resolveAttribute(
+ R.attr.disabledIconColor,
+ context
+ ),
+ disableInSecondaryState = true
) {
onItemTapped.invoke(Item.Forward)
}
- val refresh = BrowserMenuItemToolbar.Button(
- mozilla.components.ui.icons.R.drawable.mozac_ic_refresh,
- iconTintColorResource = DefaultThemeManager.resolveAttribute(R.attr.browserToolbarMenuIcons, context),
- contentDescription = context.getString(R.string.browser_menu_refresh)
+ val refresh = BrowserMenuItemToolbar.TwoStateButton(
+ primaryImageResource = mozilla.components.ui.icons.R.drawable.mozac_ic_refresh,
+ primaryContentDescription = context.getString(R.string.browser_menu_refresh),
+ primaryImageTintResource = DefaultThemeManager.resolveAttribute(
+ R.attr.browserToolbarMenuIcons,
+ context
+ ),
+ isInPrimaryState = {
+ val loading = context.components.core.sessionManager.selectedSession?.loading
+ loading == false
+ },
+ secondaryImageResource = mozilla.components.ui.icons.R.drawable.mozac_ic_stop,
+ secondaryContentDescription = context.getString(R.string.browser_menu_stop),
+ secondaryImageTintResource = DefaultThemeManager.resolveAttribute(
+ R.attr.browserToolbarMenuIcons,
+ context
+ ),
+ disableInSecondaryState = false
) {
- onItemTapped.invoke(Item.Reload)
+ if (context.components.core.sessionManager.selectedSession?.loading == true) {
+ onItemTapped.invoke(Item.Stop)
+ } else {
+ onItemTapped.invoke(Item.Reload)
+ }
}
BrowserMenuItemToolbar(listOf(back, forward, refresh))
@@ -77,12 +118,19 @@ class ToolbarMenu(
private val menuItems by lazy {
if (isCustomTab) {
listOf(
- SimpleBrowserMenuItem(context.getString(R.string.browser_menu_powered_by),
+ SimpleBrowserMenuItem(
+ context.getString(R.string.browser_menu_powered_by),
CAPTION_TEXT_SIZE,
- DefaultThemeManager.resolveAttribute(R.attr.browserToolbarMenuIcons, context)),
+ DefaultThemeManager.resolveAttribute(R.attr.browserToolbarMenuIcons, context)
+ ),
BrowserMenuDivider(),
- SimpleBrowserMenuItem(context.getString(R.string.browser_menu_open_in_fenix),
- textColorResource = DefaultThemeManager.resolveAttribute(R.attr.browserToolbarMenuIcons, context)) {
+ SimpleBrowserMenuItem(
+ context.getString(R.string.browser_menu_open_in_fenix),
+ textColorResource = DefaultThemeManager.resolveAttribute(
+ R.attr.browserToolbarMenuIcons,
+ context
+ )
+ ) {
onItemTapped.invoke(Item.OpenInFenix)
},
BrowserMenuImageText(
diff --git a/app/src/main/res/values/attrs.xml b/app/src/main/res/values/attrs.xml
index 01d513dab..7a9b1e9fe 100644
--- a/app/src/main/res/values/attrs.xml
+++ b/app/src/main/res/values/attrs.xml
@@ -11,6 +11,7 @@
+
diff --git a/app/src/main/res/values/colors.xml b/app/src/main/res/values/colors.xml
index 3a66deda5..04c465a6d 100644
--- a/app/src/main/res/values/colors.xml
+++ b/app/src/main/res/values/colors.xml
@@ -25,7 +25,10 @@
@color/photonInk70
#20233E
+ #8020233E
+
@color/off_white
+ #80F9F9FA
@color/off_white
@color/private_browsing_top_gradient
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index ab77cae6b..cab1abaaa 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -35,6 +35,8 @@
Forward
Refresh
+
+ Stop
Help
diff --git a/app/src/main/res/values/styles.xml b/app/src/main/res/values/styles.xml
index cc3b75ac4..d5bbc3b9c 100644
--- a/app/src/main/res/values/styles.xml
+++ b/app/src/main/res/values/styles.xml
@@ -10,6 +10,7 @@
- @color/off_white
- @color/off_white
- @color/icons_light_mode
+ - @color/disabled_icons_light_mode
- @color/toolbar_light_mode
- @color/off_white
- @color/session_border_color
@@ -63,6 +64,7 @@
- @color/private_browsing_primary
- @color/private_browsing_top_gradient
- @color/icons_dark_mode
+ - @color/disabled_icons_dark_mode
- @color/toolbar_dark_mode
- @color/private_browsing_primary
- @color/private_browsing_primary