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 385d8a851..a6f2bf6fc 100644 --- a/app/src/main/java/org/mozilla/fenix/tabstray/NavigationInteractor.kt +++ b/app/src/main/java/org/mozilla/fenix/tabstray/NavigationInteractor.kt @@ -15,6 +15,7 @@ import mozilla.components.browser.state.selector.normalTabs import mozilla.components.browser.state.store.BrowserStore import mozilla.components.concept.engine.prompt.ShareData import mozilla.components.concept.tabstray.Tab +import mozilla.components.service.fxa.manager.FxaAccountManager import org.mozilla.fenix.collections.CollectionsDialog import org.mozilla.fenix.collections.show import org.mozilla.fenix.components.TabCollectionStorage @@ -89,7 +90,8 @@ class DefaultNavigationInteractor( private val dismissTabTrayAndNavigateHome: (String) -> Unit, private val bookmarksUseCase: BookmarksUseCase, private val tabsTrayStore: TabsTrayStore, - private val collectionStorage: TabCollectionStorage + private val collectionStorage: TabCollectionStorage, + private val accountManager: FxaAccountManager ) : NavigationInteractor { override fun onTabTrayDismissed() { @@ -97,18 +99,26 @@ class DefaultNavigationInteractor( } override fun onAccountSettingsClicked() { - navController.navigateBlockingForAsyncNavGraph( - TabsTrayFragmentDirections.actionGlobalAccountSettingsFragment()) + val isSignedIn = accountManager.authenticatedAccount() != null + + val direction = if (isSignedIn) { + TabsTrayFragmentDirections.actionGlobalAccountSettingsFragment() + } else { + TabsTrayFragmentDirections.actionGlobalTurnOnSync() + } + navController.navigateBlockingForAsyncNavGraph(direction) } override fun onTabSettingsClicked() { navController.navigateBlockingForAsyncNavGraph( - TabsTrayFragmentDirections.actionGlobalTabSettingsFragment()) + TabsTrayFragmentDirections.actionGlobalTabSettingsFragment() + ) } override fun onOpenRecentlyClosedClicked() { navController.navigateBlockingForAsyncNavGraph( - TabsTrayFragmentDirections.actionGlobalRecentlyClosed()) + TabsTrayFragmentDirections.actionGlobalRecentlyClosed() + ) metrics.track(Event.RecentlyClosedTabsOpened) } diff --git a/app/src/main/java/org/mozilla/fenix/tabstray/TabsTrayFragment.kt b/app/src/main/java/org/mozilla/fenix/tabstray/TabsTrayFragment.kt index 4b2d1d59c..e7dceb362 100644 --- a/app/src/main/java/org/mozilla/fenix/tabstray/TabsTrayFragment.kt +++ b/app/src/main/java/org/mozilla/fenix/tabstray/TabsTrayFragment.kt @@ -116,7 +116,8 @@ class TabsTrayFragment : AppCompatDialogFragment(), TabsTrayInteractor { dismissTabTray = ::dismissTabsTray, dismissTabTrayAndNavigateHome = ::dismissTabsTrayAndNavigateHome, bookmarksUseCase = requireComponents.useCases.bookmarksUseCases, - collectionStorage = requireComponents.core.tabCollectionStorage + collectionStorage = requireComponents.core.tabCollectionStorage, + accountManager = requireComponents.backgroundServices.accountManager ) tabsTrayController = DefaultTabsTrayController( 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 dd963b163..3afb3b579 100644 --- a/app/src/test/java/org/mozilla/fenix/tabstray/NavigationInteractorTest.kt +++ b/app/src/test/java/org/mozilla/fenix/tabstray/NavigationInteractorTest.kt @@ -20,6 +20,7 @@ import mozilla.components.browser.state.state.TabSessionState import mozilla.components.browser.state.state.createTab as createStateTab import mozilla.components.browser.state.store.BrowserStore import mozilla.components.concept.tabstray.Tab +import mozilla.components.service.fxa.manager.FxaAccountManager import org.junit.Assert.assertTrue import org.junit.Before import org.junit.Rule @@ -45,6 +46,7 @@ class NavigationInteractorTest { private val bookmarksUseCase: BookmarksUseCase = mockk(relaxed = true) private val context: Context = mockk(relaxed = true) private val collectionStorage: TabCollectionStorage = mockk(relaxed = true) + private val accountManager: FxaAccountManager = mockk(relaxed = true) @get:Rule val disableNavGraphProviderAssertionRule = DisableNavGraphProviderAssertionRule() @@ -62,7 +64,8 @@ class NavigationInteractorTest { dismissTabTrayAndNavigateHome, bookmarksUseCase, tabsTrayStore, - collectionStorage + collectionStorage, + accountManager ) } @@ -146,10 +149,22 @@ class NavigationInteractorTest { @Test fun `onAccountSettingsClicked calls navigation on DefaultNavigationInteractor`() { + every { accountManager.authenticatedAccount() }.answers { mockk(relaxed = true) } + navigationInteractor.onAccountSettingsClicked() + verify(exactly = 1) { navController.navigate(TabsTrayFragmentDirections.actionGlobalAccountSettingsFragment()) } } + @Test + fun `onAccountSettingsClicked when not logged in calls navigation to turn on sync`() { + every { accountManager.authenticatedAccount() }.answers { null } + + navigationInteractor.onAccountSettingsClicked() + + verify(exactly = 1) { navController.navigate(TabsTrayFragmentDirections.actionGlobalTurnOnSync()) } + } + @Test fun `onTabSettingsClicked calls navigation on DefaultNavigationInteractor`() { navigationInteractor.onTabSettingsClicked()