For #12926 - Add back button to menu.
parent
73fb5e6875
commit
09473b991d
|
@ -204,7 +204,15 @@ class DefaultBrowserToolbarController(
|
||||||
trackToolbarItemInteraction(item)
|
trackToolbarItemInteraction(item)
|
||||||
|
|
||||||
Do exhaustive when (item) {
|
Do exhaustive when (item) {
|
||||||
ToolbarMenu.Item.Back -> sessionUseCases.goBack.invoke(currentSession)
|
is ToolbarMenu.Item.Back -> {
|
||||||
|
if (FeatureFlags.tabHistory && item.viewHistory) {
|
||||||
|
navController.navigate(R.id.action_global_tabHistoryDialogFragment)
|
||||||
|
} else if (!item.viewHistory) {
|
||||||
|
sessionUseCases.goBack.invoke(currentSession)
|
||||||
|
} else {
|
||||||
|
// Do nothing if tab history feature flag is off and item.viewHistory is true
|
||||||
|
}
|
||||||
|
}
|
||||||
is ToolbarMenu.Item.Forward -> {
|
is ToolbarMenu.Item.Forward -> {
|
||||||
if (FeatureFlags.tabHistory && item.viewHistory) {
|
if (FeatureFlags.tabHistory && item.viewHistory) {
|
||||||
navController.navigate(R.id.action_global_tabHistoryDialogFragment)
|
navController.navigate(R.id.action_global_tabHistoryDialogFragment)
|
||||||
|
@ -383,7 +391,7 @@ class DefaultBrowserToolbarController(
|
||||||
@Suppress("ComplexMethod")
|
@Suppress("ComplexMethod")
|
||||||
private fun trackToolbarItemInteraction(item: ToolbarMenu.Item) {
|
private fun trackToolbarItemInteraction(item: ToolbarMenu.Item) {
|
||||||
val eventItem = when (item) {
|
val eventItem = when (item) {
|
||||||
ToolbarMenu.Item.Back -> Event.BrowserMenuItemTapped.Item.BACK
|
is ToolbarMenu.Item.Back -> Event.BrowserMenuItemTapped.Item.BACK
|
||||||
is ToolbarMenu.Item.Forward -> Event.BrowserMenuItemTapped.Item.FORWARD
|
is ToolbarMenu.Item.Forward -> Event.BrowserMenuItemTapped.Item.FORWARD
|
||||||
is ToolbarMenu.Item.Reload -> Event.BrowserMenuItemTapped.Item.RELOAD
|
is ToolbarMenu.Item.Reload -> Event.BrowserMenuItemTapped.Item.RELOAD
|
||||||
ToolbarMenu.Item.Stop -> Event.BrowserMenuItemTapped.Item.STOP
|
ToolbarMenu.Item.Stop -> Event.BrowserMenuItemTapped.Item.STOP
|
||||||
|
|
|
@ -252,6 +252,7 @@ class BrowserToolbarView(
|
||||||
|
|
||||||
private fun ToolbarMenu.Item.performHapticIfNeeded(view: View) {
|
private fun ToolbarMenu.Item.performHapticIfNeeded(view: View) {
|
||||||
if (this is ToolbarMenu.Item.Reload && this.bypassCache ||
|
if (this is ToolbarMenu.Item.Reload && this.bypassCache ||
|
||||||
|
this is ToolbarMenu.Item.Back && this.viewHistory ||
|
||||||
this is ToolbarMenu.Item.Forward && this.viewHistory
|
this is ToolbarMenu.Item.Forward && this.viewHistory
|
||||||
) {
|
) {
|
||||||
view.performHapticFeedback(HapticFeedbackConstants.LONG_PRESS)
|
view.performHapticFeedback(HapticFeedbackConstants.LONG_PRESS)
|
||||||
|
|
|
@ -74,6 +74,20 @@ class DefaultToolbarMenu(
|
||||||
}
|
}
|
||||||
|
|
||||||
override val menuToolbar by lazy {
|
override val menuToolbar by lazy {
|
||||||
|
val back = BrowserMenuItemToolbar.TwoStateButton(
|
||||||
|
primaryImageResource = mozilla.components.ui.icons.R.drawable.mozac_ic_back,
|
||||||
|
primaryContentDescription = context.getString(R.string.browser_menu_back),
|
||||||
|
primaryImageTintResource = primaryTextColor(),
|
||||||
|
isInPrimaryState = {
|
||||||
|
session?.canGoBack ?: true
|
||||||
|
},
|
||||||
|
secondaryImageTintResource = ThemeManager.resolveAttribute(R.attr.disabled, context),
|
||||||
|
disableInSecondaryState = true,
|
||||||
|
longClickListener = { onItemTapped.invoke(ToolbarMenu.Item.Back(viewHistory = true)) }
|
||||||
|
) {
|
||||||
|
onItemTapped.invoke(ToolbarMenu.Item.Back(viewHistory = false))
|
||||||
|
}
|
||||||
|
|
||||||
val forward = BrowserMenuItemToolbar.TwoStateButton(
|
val forward = BrowserMenuItemToolbar.TwoStateButton(
|
||||||
primaryImageResource = mozilla.components.ui.icons.R.drawable.mozac_ic_forward,
|
primaryImageResource = mozilla.components.ui.icons.R.drawable.mozac_ic_forward,
|
||||||
primaryContentDescription = context.getString(R.string.browser_menu_forward),
|
primaryContentDescription = context.getString(R.string.browser_menu_forward),
|
||||||
|
@ -135,7 +149,7 @@ class DefaultToolbarMenu(
|
||||||
onItemTapped.invoke(ToolbarMenu.Item.Bookmark)
|
onItemTapped.invoke(ToolbarMenu.Item.Bookmark)
|
||||||
}
|
}
|
||||||
|
|
||||||
BrowserMenuItemToolbar(listOf(bookmark, share, forward, refresh))
|
BrowserMenuItemToolbar(listOf(back, forward, bookmark, share, refresh))
|
||||||
}
|
}
|
||||||
|
|
||||||
// Predicates that need to be repeatedly called as the session changes
|
// Predicates that need to be repeatedly called as the session changes
|
||||||
|
|
|
@ -13,7 +13,7 @@ interface ToolbarMenu {
|
||||||
data class RequestDesktop(val isChecked: Boolean) : Item()
|
data class RequestDesktop(val isChecked: Boolean) : Item()
|
||||||
object FindInPage : Item()
|
object FindInPage : Item()
|
||||||
object Share : Item()
|
object Share : Item()
|
||||||
object Back : Item()
|
data class Back(val viewHistory: Boolean) : Item()
|
||||||
data class Forward(val viewHistory: Boolean) : Item()
|
data class Forward(val viewHistory: Boolean) : Item()
|
||||||
data class Reload(val bypassCache: Boolean) : Item()
|
data class Reload(val bypassCache: Boolean) : Item()
|
||||||
object Stop : Item()
|
object Stop : Item()
|
||||||
|
|
|
@ -59,9 +59,10 @@ class CustomTabToolbarMenu(
|
||||||
R.attr.disabled,
|
R.attr.disabled,
|
||||||
context
|
context
|
||||||
),
|
),
|
||||||
disableInSecondaryState = true
|
disableInSecondaryState = true,
|
||||||
|
longClickListener = { onItemTapped.invoke(ToolbarMenu.Item.Back(viewHistory = true)) }
|
||||||
) {
|
) {
|
||||||
onItemTapped.invoke(ToolbarMenu.Item.Back)
|
onItemTapped.invoke(ToolbarMenu.Item.Back(viewHistory = false))
|
||||||
}
|
}
|
||||||
|
|
||||||
val forward = BrowserMenuItemToolbar.TwoStateButton(
|
val forward = BrowserMenuItemToolbar.TwoStateButton(
|
||||||
|
|
|
@ -217,7 +217,7 @@ class DefaultBrowserToolbarControllerTest {
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
fun handleToolbarBackPress() = runBlockingTest {
|
fun handleToolbarBackPress() = runBlockingTest {
|
||||||
val item = ToolbarMenu.Item.Back
|
val item = ToolbarMenu.Item.Back(false)
|
||||||
|
|
||||||
val controller = createController(scope = this)
|
val controller = createController(scope = this)
|
||||||
controller.handleToolbarItemInteraction(item)
|
controller.handleToolbarItemInteraction(item)
|
||||||
|
@ -226,6 +226,17 @@ class DefaultBrowserToolbarControllerTest {
|
||||||
verify { sessionUseCases.goBack(currentSession) }
|
verify { sessionUseCases.goBack(currentSession) }
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
fun handleToolbarBackLongPress() = runBlockingTest {
|
||||||
|
val item = ToolbarMenu.Item.Back(true)
|
||||||
|
|
||||||
|
val controller = createController(scope = this)
|
||||||
|
controller.handleToolbarItemInteraction(item)
|
||||||
|
|
||||||
|
verify { metrics.track(Event.BrowserMenuItemTapped(Event.BrowserMenuItemTapped.Item.BACK)) }
|
||||||
|
verify { navController.navigate(R.id.action_global_tabHistoryDialogFragment) }
|
||||||
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
fun handleToolbarForwardPress() = runBlockingTest {
|
fun handleToolbarForwardPress() = runBlockingTest {
|
||||||
val item = ToolbarMenu.Item.Forward(false)
|
val item = ToolbarMenu.Item.Forward(false)
|
||||||
|
|
Loading…
Reference in New Issue