From f0b0859ae34591c55dee41414fc755fa73f5bb3c Mon Sep 17 00:00:00 2001 From: Brian Yencho Date: Fri, 26 Jan 2024 10:59:32 -0600 Subject: [PATCH] Use direct navigation to nested destinations (#801) --- .../platform/feature/rootnav/RootNavScreen.kt | 17 +++++++----- .../vaultunlocked/VaultUnlockedNavigation.kt | 26 ------------------- .../feature/send/addsend/AddSendNavigation.kt | 5 ---- .../feature/rootnav/RootNavScreenTest.kt | 4 +-- 4 files changed, 12 insertions(+), 40 deletions(-) diff --git a/app/src/main/java/com/x8bit/bitwarden/ui/platform/feature/rootnav/RootNavScreen.kt b/app/src/main/java/com/x8bit/bitwarden/ui/platform/feature/rootnav/RootNavScreen.kt index 512c901c37..09d088f54c 100644 --- a/app/src/main/java/com/x8bit/bitwarden/ui/platform/feature/rootnav/RootNavScreen.kt +++ b/app/src/main/java/com/x8bit/bitwarden/ui/platform/feature/rootnav/RootNavScreen.kt @@ -20,13 +20,12 @@ import com.x8bit.bitwarden.ui.auth.feature.vaultunlock.vaultUnlockDestination import com.x8bit.bitwarden.ui.platform.feature.splash.SPLASH_ROUTE import com.x8bit.bitwarden.ui.platform.feature.splash.navigateToSplash import com.x8bit.bitwarden.ui.platform.feature.splash.splashDestination -import com.x8bit.bitwarden.ui.platform.feature.vaultunlocked.VAULT_UNLOCKED_FOR_NEW_SEND_GRAPH_ROUTE import com.x8bit.bitwarden.ui.platform.feature.vaultunlocked.VAULT_UNLOCKED_GRAPH_ROUTE -import com.x8bit.bitwarden.ui.platform.feature.vaultunlocked.navigateToVaultUnlockedForNewSendGraph import com.x8bit.bitwarden.ui.platform.feature.vaultunlocked.navigateToVaultUnlockedGraph import com.x8bit.bitwarden.ui.platform.feature.vaultunlocked.vaultUnlockedGraph -import com.x8bit.bitwarden.ui.platform.feature.vaultunlocked.vaultUnlockedGraphForNewSend import com.x8bit.bitwarden.ui.platform.theme.RootTransitionProviders +import com.x8bit.bitwarden.ui.tools.feature.send.addsend.model.AddSendType +import com.x8bit.bitwarden.ui.tools.feature.send.addsend.navigateToAddSend import kotlinx.coroutines.flow.launchIn import kotlinx.coroutines.flow.onEach import java.util.concurrent.atomic.AtomicReference @@ -70,15 +69,15 @@ fun RootNavScreen( authGraph(navController) vaultUnlockDestination() vaultUnlockedGraph(navController) - vaultUnlockedGraphForNewSend(navController) } val targetRoute = when (state) { RootNavState.Auth -> AUTH_GRAPH_ROUTE RootNavState.Splash -> SPLASH_ROUTE RootNavState.VaultLocked -> VAULT_UNLOCK_ROUTE - is RootNavState.VaultUnlocked -> VAULT_UNLOCKED_GRAPH_ROUTE - RootNavState.VaultUnlockedForNewSend -> VAULT_UNLOCKED_FOR_NEW_SEND_GRAPH_ROUTE + is RootNavState.VaultUnlocked, + RootNavState.VaultUnlockedForNewSend, + -> VAULT_UNLOCKED_GRAPH_ROUTE } val currentRoute = navController.currentDestination?.rootLevelRoute() @@ -109,7 +108,11 @@ fun RootNavScreen( RootNavState.VaultLocked -> navController.navigateToVaultUnlock(rootNavOptions) is RootNavState.VaultUnlocked -> navController.navigateToVaultUnlockedGraph(rootNavOptions) RootNavState.VaultUnlockedForNewSend -> { - navController.navigateToVaultUnlockedForNewSendGraph(rootNavOptions) + navController.navigateToVaultUnlock(rootNavOptions) + navController.navigateToAddSend( + sendAddType = AddSendType.AddItem, + navOptions = rootNavOptions, + ) } } } diff --git a/app/src/main/java/com/x8bit/bitwarden/ui/platform/feature/vaultunlocked/VaultUnlockedNavigation.kt b/app/src/main/java/com/x8bit/bitwarden/ui/platform/feature/vaultunlocked/VaultUnlockedNavigation.kt index ddacaf8b95..ad4799881a 100644 --- a/app/src/main/java/com/x8bit/bitwarden/ui/platform/feature/vaultunlocked/VaultUnlockedNavigation.kt +++ b/app/src/main/java/com/x8bit/bitwarden/ui/platform/feature/vaultunlocked/VaultUnlockedNavigation.kt @@ -18,7 +18,6 @@ import com.x8bit.bitwarden.ui.tools.feature.generator.generatorModalDestination import com.x8bit.bitwarden.ui.tools.feature.generator.navigateToGeneratorModal import com.x8bit.bitwarden.ui.tools.feature.generator.passwordhistory.navigateToPasswordHistory import com.x8bit.bitwarden.ui.tools.feature.generator.passwordhistory.passwordHistoryDestination -import com.x8bit.bitwarden.ui.tools.feature.send.addsend.ADD_SEND_ROUTE import com.x8bit.bitwarden.ui.tools.feature.send.addsend.addSendDestination import com.x8bit.bitwarden.ui.tools.feature.send.addsend.model.AddSendType import com.x8bit.bitwarden.ui.tools.feature.send.addsend.navigateToAddSend @@ -37,7 +36,6 @@ import com.x8bit.bitwarden.ui.vault.feature.qrcodescan.vaultQrCodeScanDestinatio import com.x8bit.bitwarden.ui.vault.model.VaultAddEditType const val VAULT_UNLOCKED_GRAPH_ROUTE: String = "vault_unlocked_graph" -const val VAULT_UNLOCKED_FOR_NEW_SEND_GRAPH_ROUTE: String = "vault_unlocked_for_new_send_graph" /** * Navigate to the vault unlocked screen. @@ -46,13 +44,6 @@ fun NavController.navigateToVaultUnlockedGraph(navOptions: NavOptions? = null) { navigate(VAULT_UNLOCKED_GRAPH_ROUTE, navOptions) } -/** - * Navigate to the vault unlocked graph for a new send. - */ -fun NavController.navigateToVaultUnlockedForNewSendGraph(navOptions: NavOptions? = null) { - navigate(VAULT_UNLOCKED_FOR_NEW_SEND_GRAPH_ROUTE, navOptions) -} - /** * Add vault unlocked destinations to the root nav graph. */ @@ -148,20 +139,3 @@ fun NavGraphBuilder.vaultUnlockedGraph( ) } } - -/** - * Add vault unlocked destinations for the new send flow to the root nav graph. - */ -fun NavGraphBuilder.vaultUnlockedGraphForNewSend( - navController: NavController, -) { - navigation( - startDestination = ADD_SEND_ROUTE, - route = VAULT_UNLOCKED_FOR_NEW_SEND_GRAPH_ROUTE, - ) { - addSendDestination( - defaultType = AddSendType.AddItem, - onNavigateBack = { navController.popBackStack() }, - ) - } -} diff --git a/app/src/main/java/com/x8bit/bitwarden/ui/tools/feature/send/addsend/AddSendNavigation.kt b/app/src/main/java/com/x8bit/bitwarden/ui/tools/feature/send/addsend/AddSendNavigation.kt index 0be616ad8d..8509dcbcdf 100644 --- a/app/src/main/java/com/x8bit/bitwarden/ui/tools/feature/send/addsend/AddSendNavigation.kt +++ b/app/src/main/java/com/x8bit/bitwarden/ui/tools/feature/send/addsend/AddSendNavigation.kt @@ -38,20 +38,15 @@ data class AddSendArgs( /** * Add the new send screen to the nav graph. - * - * The [defaultType] will be relevant in cases where the Add Send screen needs to be added as a - * start destination of a graph. */ fun NavGraphBuilder.addSendDestination( onNavigateBack: () -> Unit, - defaultType: AddSendType = AddSendType.AddItem, ) { composableWithSlideTransitions( route = ADD_SEND_ROUTE, arguments = listOf( navArgument(ADD_SEND_ITEM_TYPE) { type = NavType.StringType - defaultValue = defaultType.toTypeString() }, ), ) { diff --git a/app/src/test/java/com/x8bit/bitwarden/ui/platform/feature/rootnav/RootNavScreenTest.kt b/app/src/test/java/com/x8bit/bitwarden/ui/platform/feature/rootnav/RootNavScreenTest.kt index 567f9ddfc2..da65e6bae7 100644 --- a/app/src/test/java/com/x8bit/bitwarden/ui/platform/feature/rootnav/RootNavScreenTest.kt +++ b/app/src/test/java/com/x8bit/bitwarden/ui/platform/feature/rootnav/RootNavScreenTest.kt @@ -90,11 +90,11 @@ class RootNavScreenTest : BaseComposeTest() { ) } - // Make sure navigating to vault unlocked works as expected: + // Make sure navigating to vault unlocked for new sends works as expected: rootNavStateFlow.value = RootNavState.VaultUnlockedForNewSend composeTestRule.runOnIdle { fakeNavHostController.assertLastNavigation( - route = "vault_unlocked_for_new_send_graph", + route = "add_send_item/add", navOptions = expectedNavOptions, ) }