Closes #19003: Add account setting to tabstray synced tab menu (#19034)

upstream-sync
Roger Yang 3 years ago committed by GitHub
parent afd007d741
commit bde54dc30f
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

@ -43,6 +43,8 @@ class MenuIntegration(
Do exhaustive when (item) {
is TabsTrayMenu.Item.ShareAllTabs ->
navigationInteractor.onShareTabsOfTypeClicked(isPrivateMode)
is TabsTrayMenu.Item.OpenAccountSettings ->
navigationInteractor.onAccountSettingsClicked()
is TabsTrayMenu.Item.OpenTabSettings ->
navigationInteractor.onTabSettingsClicked()
is TabsTrayMenu.Item.CloseAllTabs ->

@ -35,6 +35,11 @@ interface NavigationInteractor {
*/
fun onTabTrayDismissed()
/**
* Called when clicking the account settings button.
*/
fun onAccountSettingsClicked()
/**
* Called when sharing a list of [Tab]s.
*/
@ -91,6 +96,11 @@ class DefaultNavigationInteractor(
dismissTabTray()
}
override fun onAccountSettingsClicked() {
navController.navigateBlockingForAsyncNavGraph(
TabsTrayFragmentDirections.actionGlobalAccountSettingsFragment())
}
override fun onTabSettingsClicked() {
navController.navigateBlockingForAsyncNavGraph(
TabsTrayFragmentDirections.actionGlobalTabSettingsFragment())

@ -16,6 +16,7 @@ import org.mozilla.fenix.components.metrics.Event
import org.mozilla.fenix.ext.components
import org.mozilla.fenix.tabstray.ext.isNormalModeSelected
import org.mozilla.fenix.tabstray.ext.isPrivateModeSelected
import org.mozilla.fenix.tabstray.ext.isSyncedModeSelected
class TabsTrayMenu(
private val context: Context,
@ -35,9 +36,12 @@ class TabsTrayMenu(
}
private val shouldShowSelectOrShare = { tabLayout.isNormalModeSelected() && checkOpenTabs }
private val shouldShowTabSetting = { !tabLayout.isSyncedModeSelected() }
private val shouldShowAccountSetting = { tabLayout.isSyncedModeSelected() }
sealed class Item {
object ShareAllTabs : Item()
object OpenAccountSettings : Item()
object OpenTabSettings : Item()
object SelectTabs : Item()
object CloseAllTabs : Item()
@ -63,12 +67,19 @@ class TabsTrayMenu(
onItemTapped.invoke(Item.ShareAllTabs)
}.apply { visible = shouldShowSelectOrShare },
SimpleBrowserMenuItem(
context.getString(R.string.tab_tray_menu_account_settings),
textColorResource = R.color.primary_text_normal_theme
) {
onItemTapped.invoke(Item.OpenAccountSettings)
}.apply { visible = shouldShowAccountSetting },
SimpleBrowserMenuItem(
context.getString(R.string.tab_tray_menu_tab_settings),
textColorResource = R.color.primary_text_normal_theme
) {
onItemTapped.invoke(Item.OpenTabSettings)
},
}.apply { visible = shouldShowTabSetting },
SimpleBrowserMenuItem(
context.getString(R.string.tab_tray_menu_recently_closed),

@ -14,3 +14,7 @@ fun TabLayout.isNormalModeSelected(): Boolean {
fun TabLayout.isPrivateModeSelected(): Boolean {
return selectedTabPosition == TrayPagerAdapter.POSITION_PRIVATE_TABS
}
fun TabLayout.isSyncedModeSelected(): Boolean {
return selectedTabPosition == TrayPagerAdapter.POSITION_SYNCED_TABS
}

@ -612,6 +612,8 @@
<string name="tab_tray_menu_item_share">Share all tabs</string>
<!-- Text shown in the menu to view recently closed tabs -->
<string name="tab_tray_menu_recently_closed">Recently closed tabs</string>
<!-- Text shown in the menu to view account settings -->
<string name="tab_tray_menu_account_settings">Account settings</string>
<!-- Text shown in the menu to view tab settings -->
<string name="tab_tray_menu_tab_settings">Tab settings</string>
<!-- Text shown in the menu for closing all tabs -->

@ -34,6 +34,15 @@ class MenuIntegrationTest {
verify { interactor.onShareTabsOfTypeClicked(false) }
}
@Test
fun `WHEN the open account settings menu item is clicked THEN invoke the action`() {
val menu = MenuIntegration(mockk(), mockk(), tabsTrayStore, mockk(), interactor)
menu.handleMenuClicked(TabsTrayMenu.Item.OpenAccountSettings)
verify { interactor.onAccountSettingsClicked() }
}
@Test
fun `WHEN the open settings menu item is clicked THEN invoke the action`() {
val menu = MenuIntegration(mockk(), mockk(), tabsTrayStore, mockk(), interactor)

@ -67,6 +67,7 @@ class NavigationInteractorTest {
@Test
fun `navigation interactor calls the overridden functions`() {
var tabTrayDismissed = false
var accountSettingsClicked = false
var tabSettingsClicked = false
var openRecentlyClosedClicked = false
var shareTabsOfTypeClicked = false
@ -85,6 +86,10 @@ class NavigationInteractorTest {
onShareTabs = true
}
override fun onAccountSettingsClicked() {
accountSettingsClicked = true
}
override fun onTabSettingsClicked() {
tabSettingsClicked = true
}
@ -113,6 +118,8 @@ class NavigationInteractorTest {
val navigationInteractor: NavigationInteractor = TestNavigationInteractor()
navigationInteractor.onTabTrayDismissed()
assertTrue(tabTrayDismissed)
navigationInteractor.onAccountSettingsClicked()
assertTrue(accountSettingsClicked)
navigationInteractor.onTabSettingsClicked()
assertTrue(tabSettingsClicked)
navigationInteractor.onOpenRecentlyClosedClicked()
@ -135,6 +142,12 @@ class NavigationInteractorTest {
verify(exactly = 1) { dismissTabTray() }
}
@Test
fun `onAccountSettingsClicked calls navigation on DefaultNavigationInteractor`() {
navigationInteractor.onAccountSettingsClicked()
verify(exactly = 1) { navController.navigate(TabsTrayFragmentDirections.actionGlobalAccountSettingsFragment()) }
}
@Test
fun `onTabSettingsClicked calls navigation on DefaultNavigationInteractor`() {
navigationInteractor.onTabSettingsClicked()

Loading…
Cancel
Save