mirror of
https://github.com/bitwarden/android.git
synced 2025-03-15 18:58:59 +03:00
Use direct navigation to nested destinations (#801)
This commit is contained in:
parent
bc834fee93
commit
f0b0859ae3
4 changed files with 12 additions and 40 deletions
|
@ -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,
|
||||
)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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() },
|
||||
)
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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()
|
||||
},
|
||||
),
|
||||
) {
|
||||
|
|
|
@ -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,
|
||||
)
|
||||
}
|
||||
|
|
Loading…
Add table
Reference in a new issue