From 8c2f80a3ef2786963d0260f09fdad22a04f40183 Mon Sep 17 00:00:00 2001 From: Emily Kager Date: Wed, 13 Mar 2019 12:32:36 -0700 Subject: [PATCH] Closes #654 - Use new two state button for menu toolbar buttons --- .../mozilla/fenix/browser/BrowserFragment.kt | 1 + .../fenix/components/toolbar/ToolbarMenu.kt | 82 +++++++++++++++---- app/src/main/res/values/attrs.xml | 1 + app/src/main/res/values/colors.xml | 3 + app/src/main/res/values/strings.xml | 2 + app/src/main/res/values/styles.xml | 2 + 6 files changed, 74 insertions(+), 17 deletions(-) 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