From bde54dc30f5a80d337e9ec36f34247f75616584b Mon Sep 17 00:00:00 2001 From: Roger Yang Date: Thu, 15 Apr 2021 00:46:26 -0400 Subject: [PATCH] Closes #19003: Add account setting to tabstray synced tab menu (#19034) --- .../org/mozilla/fenix/tabstray/MenuIntegration.kt | 2 ++ .../mozilla/fenix/tabstray/NavigationInteractor.kt | 10 ++++++++++ .../java/org/mozilla/fenix/tabstray/TabsTrayMenu.kt | 13 ++++++++++++- .../org/mozilla/fenix/tabstray/ext/TabLayout.kt | 4 ++++ app/src/main/res/values/strings.xml | 2 ++ .../mozilla/fenix/tabstray/MenuIntegrationTest.kt | 9 +++++++++ .../fenix/tabstray/NavigationInteractorTest.kt | 13 +++++++++++++ 7 files changed, 52 insertions(+), 1 deletion(-) diff --git a/app/src/main/java/org/mozilla/fenix/tabstray/MenuIntegration.kt b/app/src/main/java/org/mozilla/fenix/tabstray/MenuIntegration.kt index db8139f5d..2a1630204 100644 --- a/app/src/main/java/org/mozilla/fenix/tabstray/MenuIntegration.kt +++ b/app/src/main/java/org/mozilla/fenix/tabstray/MenuIntegration.kt @@ -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 -> diff --git a/app/src/main/java/org/mozilla/fenix/tabstray/NavigationInteractor.kt b/app/src/main/java/org/mozilla/fenix/tabstray/NavigationInteractor.kt index 3f083778f..385d8a851 100644 --- a/app/src/main/java/org/mozilla/fenix/tabstray/NavigationInteractor.kt +++ b/app/src/main/java/org/mozilla/fenix/tabstray/NavigationInteractor.kt @@ -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()) diff --git a/app/src/main/java/org/mozilla/fenix/tabstray/TabsTrayMenu.kt b/app/src/main/java/org/mozilla/fenix/tabstray/TabsTrayMenu.kt index c2171bde6..0db845931 100644 --- a/app/src/main/java/org/mozilla/fenix/tabstray/TabsTrayMenu.kt +++ b/app/src/main/java/org/mozilla/fenix/tabstray/TabsTrayMenu.kt @@ -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), diff --git a/app/src/main/java/org/mozilla/fenix/tabstray/ext/TabLayout.kt b/app/src/main/java/org/mozilla/fenix/tabstray/ext/TabLayout.kt index 0d5aae3cc..dfba62b0d 100644 --- a/app/src/main/java/org/mozilla/fenix/tabstray/ext/TabLayout.kt +++ b/app/src/main/java/org/mozilla/fenix/tabstray/ext/TabLayout.kt @@ -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 +} diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 81940556a..aad04c4a6 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -612,6 +612,8 @@ Share all tabs Recently closed tabs + + Account settings Tab settings diff --git a/app/src/test/java/org/mozilla/fenix/tabstray/MenuIntegrationTest.kt b/app/src/test/java/org/mozilla/fenix/tabstray/MenuIntegrationTest.kt index bbf795d8f..d28ea3db4 100644 --- a/app/src/test/java/org/mozilla/fenix/tabstray/MenuIntegrationTest.kt +++ b/app/src/test/java/org/mozilla/fenix/tabstray/MenuIntegrationTest.kt @@ -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) diff --git a/app/src/test/java/org/mozilla/fenix/tabstray/NavigationInteractorTest.kt b/app/src/test/java/org/mozilla/fenix/tabstray/NavigationInteractorTest.kt index a874e7b3b..6bc00dd84 100644 --- a/app/src/test/java/org/mozilla/fenix/tabstray/NavigationInteractorTest.kt +++ b/app/src/test/java/org/mozilla/fenix/tabstray/NavigationInteractorTest.kt @@ -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()