mirror of
https://github.com/bitwarden/android.git
synced 2026-03-24 15:21:42 -05:00
Add navigation routing for the VaultEditItemScreen (#328)
This commit is contained in:
committed by
Álison Fernandes
parent
b61c796f7b
commit
96866ee540
@@ -10,10 +10,12 @@ import com.x8bit.bitwarden.ui.platform.feature.vaultunlockednavbar.VAULT_UNLOCKE
|
||||
import com.x8bit.bitwarden.ui.platform.feature.vaultunlockednavbar.vaultUnlockedNavBarDestination
|
||||
import com.x8bit.bitwarden.ui.tools.feature.send.navigateToNewSend
|
||||
import com.x8bit.bitwarden.ui.tools.feature.send.newSendDestination
|
||||
import com.x8bit.bitwarden.ui.vault.feature.item.navigateToVaultItem
|
||||
import com.x8bit.bitwarden.ui.vault.feature.item.vaultItemDestination
|
||||
import com.x8bit.bitwarden.ui.vault.feature.additem.navigateToVaultAddItem
|
||||
import com.x8bit.bitwarden.ui.vault.feature.additem.vaultAddItemDestination
|
||||
import com.x8bit.bitwarden.ui.vault.feature.edit.navigateToVaultEditItem
|
||||
import com.x8bit.bitwarden.ui.vault.feature.edit.vaultEditItemDestination
|
||||
import com.x8bit.bitwarden.ui.vault.feature.item.navigateToVaultItem
|
||||
import com.x8bit.bitwarden.ui.vault.feature.item.vaultItemDestination
|
||||
|
||||
const val VAULT_UNLOCKED_GRAPH_ROUTE: String = "vault_unlocked_graph"
|
||||
|
||||
@@ -37,12 +39,17 @@ fun NavGraphBuilder.vaultUnlockedGraph(
|
||||
vaultUnlockedNavBarDestination(
|
||||
onNavigateToVaultAddItem = { navController.navigateToVaultAddItem() },
|
||||
onNavigateToVaultItem = { navController.navigateToVaultItem(it) },
|
||||
onNavigateToVaultEditItem = { navController.navigateToVaultEditItem(it) },
|
||||
onNavigateToNewSend = { navController.navigateToNewSend() },
|
||||
onNavigateToDeleteAccount = { navController.navigateToDeleteAccount() },
|
||||
)
|
||||
deleteAccountDestination(onNavigateBack = { navController.popBackStack() })
|
||||
vaultAddItemDestination(onNavigateBack = { navController.popBackStack() })
|
||||
vaultItemDestination(onNavigateBack = { navController.popBackStack() })
|
||||
vaultItemDestination(
|
||||
onNavigateBack = { navController.popBackStack() },
|
||||
onNavigateToVaultEditItem = { navController.navigateToVaultEditItem(it) },
|
||||
)
|
||||
vaultEditItemDestination(onNavigateBack = { navController.popBackStack() })
|
||||
newSendDestination(onNavigateBack = { navController.popBackStack() })
|
||||
}
|
||||
}
|
||||
|
||||
@@ -24,6 +24,7 @@ fun NavController.navigateToVaultUnlockedNavBar(navOptions: NavOptions? = null)
|
||||
fun NavGraphBuilder.vaultUnlockedNavBarDestination(
|
||||
onNavigateToVaultAddItem: () -> Unit,
|
||||
onNavigateToVaultItem: (vaultItemId: String) -> Unit,
|
||||
onNavigateToVaultEditItem: (vaultItemId: String) -> Unit,
|
||||
onNavigateToNewSend: () -> Unit,
|
||||
onNavigateToDeleteAccount: () -> Unit,
|
||||
) {
|
||||
@@ -37,6 +38,7 @@ fun NavGraphBuilder.vaultUnlockedNavBarDestination(
|
||||
VaultUnlockedNavBarScreen(
|
||||
onNavigateToVaultAddItem = onNavigateToVaultAddItem,
|
||||
onNavigateToVaultItem = onNavigateToVaultItem,
|
||||
onNavigateToVaultEditItem = onNavigateToVaultEditItem,
|
||||
onNavigateToNewSend = onNavigateToNewSend,
|
||||
onNavigateToDeleteAccount = onNavigateToDeleteAccount,
|
||||
)
|
||||
|
||||
@@ -67,6 +67,7 @@ fun VaultUnlockedNavBarScreen(
|
||||
navController: NavHostController = rememberNavController(),
|
||||
onNavigateToVaultAddItem: () -> Unit,
|
||||
onNavigateToVaultItem: (vaultItemId: String) -> Unit,
|
||||
onNavigateToVaultEditItem: (vaultItemId: String) -> Unit,
|
||||
onNavigateToNewSend: () -> Unit,
|
||||
onNavigateToDeleteAccount: () -> Unit,
|
||||
) {
|
||||
@@ -95,6 +96,7 @@ fun VaultUnlockedNavBarScreen(
|
||||
VaultUnlockedNavBarScaffold(
|
||||
navController = navController,
|
||||
onNavigateToVaultItem = onNavigateToVaultItem,
|
||||
onNavigateToVaultEditItem = onNavigateToVaultEditItem,
|
||||
navigateToVaultAddItem = onNavigateToVaultAddItem,
|
||||
navigateToNewSend = onNavigateToNewSend,
|
||||
navigateToDeleteAccount = onNavigateToDeleteAccount,
|
||||
@@ -126,6 +128,7 @@ private fun VaultUnlockedNavBarScaffold(
|
||||
settingsTabClickedAction: () -> Unit,
|
||||
navigateToVaultAddItem: () -> Unit,
|
||||
onNavigateToVaultItem: (vaultItemId: String) -> Unit,
|
||||
onNavigateToVaultEditItem: (vaultItemId: String) -> Unit,
|
||||
navigateToNewSend: () -> Unit,
|
||||
navigateToDeleteAccount: () -> Unit,
|
||||
) {
|
||||
@@ -182,6 +185,7 @@ private fun VaultUnlockedNavBarScaffold(
|
||||
navigateToVaultAddItem()
|
||||
},
|
||||
onNavigateToVaultItemScreen = onNavigateToVaultItem,
|
||||
onNavigateToVaultEditItemScreen = onNavigateToVaultEditItem,
|
||||
onDimBottomNavBarRequest = { shouldDim ->
|
||||
shouldDimNavBar = shouldDim
|
||||
},
|
||||
|
||||
@@ -27,6 +27,7 @@ class VaultItemArgs(val vaultItemId: String) {
|
||||
*/
|
||||
fun NavGraphBuilder.vaultItemDestination(
|
||||
onNavigateBack: () -> Unit,
|
||||
onNavigateToVaultEditItem: (vaultItemId: String) -> Unit,
|
||||
) {
|
||||
composable(
|
||||
route = VAULT_ITEM_ROUTE,
|
||||
@@ -34,11 +35,14 @@ fun NavGraphBuilder.vaultItemDestination(
|
||||
navArgument(VAULT_ITEM_ID) { type = NavType.StringType },
|
||||
),
|
||||
enterTransition = TransitionProviders.Enter.slideUp,
|
||||
exitTransition = TransitionProviders.Exit.slideDown,
|
||||
popEnterTransition = TransitionProviders.Enter.slideUp,
|
||||
exitTransition = TransitionProviders.Exit.stay,
|
||||
popEnterTransition = TransitionProviders.Enter.stay,
|
||||
popExitTransition = TransitionProviders.Exit.slideDown,
|
||||
) {
|
||||
VaultItemScreen(onNavigateBack = onNavigateBack)
|
||||
VaultItemScreen(
|
||||
onNavigateBack = onNavigateBack,
|
||||
onNavigateToVaultEditItem = onNavigateToVaultEditItem,
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -49,6 +49,7 @@ fun VaultItemScreen(
|
||||
clipboardManager: ClipboardManager = LocalClipboardManager.current,
|
||||
intentHandler: IntentHandler = IntentHandler(context = LocalContext.current),
|
||||
onNavigateBack: () -> Unit,
|
||||
onNavigateToVaultEditItem: (vaultItemId: String) -> Unit,
|
||||
) {
|
||||
val state by viewModel.stateFlow.collectAsStateWithLifecycle()
|
||||
val context = LocalContext.current
|
||||
@@ -61,9 +62,7 @@ fun VaultItemScreen(
|
||||
|
||||
VaultItemEvent.NavigateBack -> onNavigateBack()
|
||||
|
||||
is VaultItemEvent.NavigateToEdit -> {
|
||||
Toast.makeText(context, "Not yet implemented.", Toast.LENGTH_SHORT).show()
|
||||
}
|
||||
is VaultItemEvent.NavigateToEdit -> onNavigateToVaultEditItem(event.itemId)
|
||||
|
||||
is VaultItemEvent.NavigateToPasswordHistory -> {
|
||||
Toast.makeText(context, "Not yet implemented.", Toast.LENGTH_SHORT).show()
|
||||
|
||||
@@ -13,12 +13,14 @@ const val VAULT_ROUTE: String = "vault"
|
||||
fun NavGraphBuilder.vaultDestination(
|
||||
onNavigateToVaultAddItemScreen: () -> Unit,
|
||||
onNavigateToVaultItemScreen: (vaultItemId: String) -> Unit,
|
||||
onNavigateToVaultEditItemScreen: (vaultItemId: String) -> Unit,
|
||||
onDimBottomNavBarRequest: (shouldDim: Boolean) -> Unit,
|
||||
) {
|
||||
composable(VAULT_ROUTE) {
|
||||
VaultScreen(
|
||||
onNavigateToVaultAddItemScreen = onNavigateToVaultAddItemScreen,
|
||||
onNavigateToVaultItemScreen = onNavigateToVaultItemScreen,
|
||||
onNavigateToVaultEditItemScreen = onNavigateToVaultEditItemScreen,
|
||||
onDimBottomNavBarRequest = onDimBottomNavBarRequest,
|
||||
)
|
||||
}
|
||||
|
||||
@@ -46,6 +46,7 @@ fun VaultScreen(
|
||||
viewModel: VaultViewModel = hiltViewModel(),
|
||||
onNavigateToVaultAddItemScreen: () -> Unit,
|
||||
onNavigateToVaultItemScreen: (vaultItemId: String) -> Unit,
|
||||
onNavigateToVaultEditItemScreen: (vaultItemId: String) -> Unit,
|
||||
onDimBottomNavBarRequest: (shouldDim: Boolean) -> Unit,
|
||||
) {
|
||||
val context = LocalContext.current
|
||||
@@ -62,6 +63,8 @@ fun VaultScreen(
|
||||
|
||||
is VaultEvent.NavigateToVaultItem -> onNavigateToVaultItemScreen(event.itemId)
|
||||
|
||||
is VaultEvent.NavigateToEditVaultItem -> onNavigateToVaultEditItemScreen(event.itemId)
|
||||
|
||||
VaultEvent.NavigateToCardGroup -> {
|
||||
Toast
|
||||
.makeText(context, "Navigate to card type screen.", Toast.LENGTH_SHORT)
|
||||
|
||||
@@ -419,6 +419,13 @@ sealed class VaultEvent {
|
||||
val itemId: String,
|
||||
) : VaultEvent()
|
||||
|
||||
/**
|
||||
* Navigate to the item edit screen.
|
||||
*/
|
||||
data class NavigateToEditVaultItem(
|
||||
val itemId: String,
|
||||
) : VaultEvent()
|
||||
|
||||
/**
|
||||
* Navigate to the card group screen.
|
||||
*/
|
||||
|
||||
@@ -34,6 +34,7 @@ class VaultUnlockedNavBarScreenTest : BaseComposeTest() {
|
||||
navController = fakeNavHostController,
|
||||
onNavigateToVaultAddItem = {},
|
||||
onNavigateToVaultItem = {},
|
||||
onNavigateToVaultEditItem = {},
|
||||
onNavigateToNewSend = {},
|
||||
onNavigateToDeleteAccount = {},
|
||||
)
|
||||
@@ -58,6 +59,7 @@ class VaultUnlockedNavBarScreenTest : BaseComposeTest() {
|
||||
navController = fakeNavHostController,
|
||||
onNavigateToVaultAddItem = {},
|
||||
onNavigateToVaultItem = {},
|
||||
onNavigateToVaultEditItem = {},
|
||||
onNavigateToNewSend = {},
|
||||
onNavigateToDeleteAccount = {},
|
||||
)
|
||||
@@ -83,6 +85,7 @@ class VaultUnlockedNavBarScreenTest : BaseComposeTest() {
|
||||
navController = fakeNavHostController,
|
||||
onNavigateToVaultAddItem = {},
|
||||
onNavigateToVaultItem = {},
|
||||
onNavigateToVaultEditItem = {},
|
||||
onNavigateToNewSend = {},
|
||||
onNavigateToDeleteAccount = {},
|
||||
)
|
||||
@@ -107,6 +110,7 @@ class VaultUnlockedNavBarScreenTest : BaseComposeTest() {
|
||||
navController = fakeNavHostController,
|
||||
onNavigateToVaultAddItem = {},
|
||||
onNavigateToVaultItem = {},
|
||||
onNavigateToVaultEditItem = {},
|
||||
onNavigateToNewSend = {},
|
||||
onNavigateToDeleteAccount = {},
|
||||
)
|
||||
@@ -132,6 +136,7 @@ class VaultUnlockedNavBarScreenTest : BaseComposeTest() {
|
||||
navController = fakeNavHostController,
|
||||
onNavigateToVaultAddItem = {},
|
||||
onNavigateToVaultItem = {},
|
||||
onNavigateToVaultEditItem = {},
|
||||
onNavigateToNewSend = {},
|
||||
onNavigateToDeleteAccount = {},
|
||||
)
|
||||
@@ -156,6 +161,7 @@ class VaultUnlockedNavBarScreenTest : BaseComposeTest() {
|
||||
navController = fakeNavHostController,
|
||||
onNavigateToVaultAddItem = {},
|
||||
onNavigateToVaultItem = {},
|
||||
onNavigateToVaultEditItem = {},
|
||||
onNavigateToNewSend = {},
|
||||
onNavigateToDeleteAccount = {},
|
||||
)
|
||||
@@ -181,6 +187,7 @@ class VaultUnlockedNavBarScreenTest : BaseComposeTest() {
|
||||
navController = fakeNavHostController,
|
||||
onNavigateToVaultAddItem = {},
|
||||
onNavigateToVaultItem = {},
|
||||
onNavigateToVaultEditItem = {},
|
||||
onNavigateToNewSend = {},
|
||||
onNavigateToDeleteAccount = {},
|
||||
)
|
||||
@@ -205,6 +212,7 @@ class VaultUnlockedNavBarScreenTest : BaseComposeTest() {
|
||||
navController = fakeNavHostController,
|
||||
onNavigateToVaultAddItem = {},
|
||||
onNavigateToVaultItem = {},
|
||||
onNavigateToVaultEditItem = {},
|
||||
onNavigateToNewSend = {},
|
||||
onNavigateToDeleteAccount = {},
|
||||
)
|
||||
|
||||
@@ -8,12 +8,14 @@ import io.mockk.mockk
|
||||
import io.mockk.verify
|
||||
import kotlinx.coroutines.flow.MutableSharedFlow
|
||||
import kotlinx.coroutines.flow.MutableStateFlow
|
||||
import org.junit.Assert.assertEquals
|
||||
import org.junit.Before
|
||||
import org.junit.Test
|
||||
|
||||
class VaultItemScreenTest : BaseComposeTest() {
|
||||
|
||||
private var onNavigateBackCalled = false
|
||||
private var onNavigateToVaultEditItemId: String? = null
|
||||
|
||||
private val mutableEventFlow = MutableSharedFlow<VaultItemEvent>(
|
||||
extraBufferCapacity = Int.MAX_VALUE,
|
||||
@@ -30,10 +32,18 @@ class VaultItemScreenTest : BaseComposeTest() {
|
||||
VaultItemScreen(
|
||||
viewModel = viewModel,
|
||||
onNavigateBack = { onNavigateBackCalled = true },
|
||||
onNavigateToVaultEditItem = { onNavigateToVaultEditItemId = it },
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
@Test
|
||||
fun `NavigateToEdit event should invoke onNavigateToVaultEditItem`() {
|
||||
val id = "id1234"
|
||||
mutableEventFlow.tryEmit(VaultItemEvent.NavigateToEdit(id))
|
||||
assertEquals(id, onNavigateToVaultEditItemId)
|
||||
}
|
||||
|
||||
@Test
|
||||
fun `clicking close button should send CloseClick action`() {
|
||||
composeTestRule.onNodeWithContentDescription(label = "Close").performClick()
|
||||
|
||||
@@ -20,6 +20,7 @@ import kotlinx.collections.immutable.persistentListOf
|
||||
import kotlinx.coroutines.flow.MutableSharedFlow
|
||||
import kotlinx.coroutines.flow.MutableStateFlow
|
||||
import kotlinx.coroutines.flow.update
|
||||
import org.junit.Assert.assertEquals
|
||||
import org.junit.Assert.assertFalse
|
||||
import org.junit.Assert.assertTrue
|
||||
import org.junit.Before
|
||||
@@ -28,7 +29,8 @@ import org.junit.Test
|
||||
class VaultScreenTest : BaseComposeTest() {
|
||||
|
||||
private var onNavigateToVaultAddItemScreenCalled = false
|
||||
private var onNavigateToVaultItemScreenCalled = false
|
||||
private var onNavigateToVaultItemId: String? = null
|
||||
private var onNavigateToVaultEditItemId: String? = null
|
||||
private var onDimBottomNavBarRequestCalled = false
|
||||
|
||||
private val mutableEventFlow = MutableSharedFlow<VaultEvent>(
|
||||
@@ -46,7 +48,8 @@ class VaultScreenTest : BaseComposeTest() {
|
||||
VaultScreen(
|
||||
viewModel = viewModel,
|
||||
onNavigateToVaultAddItemScreen = { onNavigateToVaultAddItemScreenCalled = true },
|
||||
onNavigateToVaultItemScreen = { onNavigateToVaultItemScreenCalled = true },
|
||||
onNavigateToVaultItemScreen = { onNavigateToVaultItemId = it },
|
||||
onNavigateToVaultEditItemScreen = { onNavigateToVaultEditItemId = it },
|
||||
onDimBottomNavBarRequest = { onDimBottomNavBarRequestCalled = true },
|
||||
)
|
||||
}
|
||||
@@ -118,9 +121,17 @@ class VaultScreenTest : BaseComposeTest() {
|
||||
}
|
||||
|
||||
@Test
|
||||
fun `NavigateToVaultItem event should call onNavigateToVaultItemScreenCalled`() {
|
||||
mutableEventFlow.tryEmit(VaultEvent.NavigateToVaultItem(itemId = "id"))
|
||||
assertTrue(onNavigateToVaultItemScreenCalled)
|
||||
fun `NavigateToVaultItem event should call onNavigateToVaultItemScreen`() {
|
||||
val id = "id4321"
|
||||
mutableEventFlow.tryEmit(VaultEvent.NavigateToVaultItem(itemId = id))
|
||||
assertEquals(id, onNavigateToVaultItemId)
|
||||
}
|
||||
|
||||
@Test
|
||||
fun `NavigateToEditVaultItem event should call onNavigateToVaultEditItemScreen`() {
|
||||
val id = "id1234"
|
||||
mutableEventFlow.tryEmit(VaultEvent.NavigateToEditVaultItem(itemId = id))
|
||||
assertEquals(id, onNavigateToVaultEditItemId)
|
||||
}
|
||||
|
||||
@Test
|
||||
|
||||
Reference in New Issue
Block a user