mirror of
https://github.com/bitwarden/android.git
synced 2025-12-11 04:39:19 -06:00
PM-21631: Update Edit Send Screen to navigate to Vault Unlocked root (#5190)
This commit is contained in:
parent
db956b9b91
commit
ea70191429
@ -201,7 +201,10 @@ fun NavGraphBuilder.vaultUnlockedGraph(
|
||||
onNavigateBack = { navController.popBackStack() },
|
||||
)
|
||||
|
||||
addSendDestination(onNavigateBack = { navController.popBackStack() })
|
||||
addSendDestination(
|
||||
onNavigateBack = { navController.popBackStack() },
|
||||
onNavigateUpToRoot = { navController.navigateToVaultUnlockedRoot() },
|
||||
)
|
||||
viewSendDestination(
|
||||
onNavigateBack = { navController.popBackStack() },
|
||||
onNavigateToEditSend = {
|
||||
@ -249,3 +252,7 @@ fun NavGraphBuilder.vaultUnlockedGraph(
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
private fun NavController.navigateToVaultUnlockedRoot() {
|
||||
this.popBackStack(route = VaultUnlockedNavbarRoute, inclusive = false)
|
||||
}
|
||||
|
||||
@ -60,9 +60,13 @@ private fun SavedStateHandle.toAddSendType(): AddSendType {
|
||||
*/
|
||||
fun NavGraphBuilder.addSendDestination(
|
||||
onNavigateBack: () -> Unit,
|
||||
onNavigateUpToRoot: () -> Unit,
|
||||
) {
|
||||
composableWithSlideTransitions<AddSendRoute> {
|
||||
AddSendScreen(onNavigateBack = onNavigateBack)
|
||||
AddSendScreen(
|
||||
onNavigateBack = onNavigateBack,
|
||||
onNavigateUpToRoot = onNavigateUpToRoot,
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@ -60,6 +60,7 @@ fun AddSendScreen(
|
||||
intentManager: IntentManager = LocalIntentManager.current,
|
||||
permissionsManager: PermissionsManager = LocalPermissionsManager.current,
|
||||
onNavigateBack: () -> Unit,
|
||||
onNavigateUpToRoot: () -> Unit,
|
||||
) {
|
||||
val state by viewModel.stateFlow.collectAsStateWithLifecycle()
|
||||
val addSendHandlers = remember(viewModel) { AddSendHandlers.create(viewModel) }
|
||||
@ -84,6 +85,8 @@ fun AddSendScreen(
|
||||
|
||||
is AddSendEvent.NavigateBack -> onNavigateBack()
|
||||
|
||||
is AddSendEvent.NavigateToRoot -> onNavigateUpToRoot()
|
||||
|
||||
is AddSendEvent.ShowChooserSheet -> {
|
||||
fileChooserLauncher.launch(
|
||||
intentManager.createFileChooserIntent(event.withCameraOption),
|
||||
|
||||
@ -259,7 +259,7 @@ class AddSendViewModel @Inject constructor(
|
||||
|
||||
is DeleteSendResult.Success -> {
|
||||
mutableStateFlow.update { it.copy(dialogState = null) }
|
||||
navigateBack()
|
||||
navigateBack(isDeleted = true)
|
||||
sendEvent(AddSendEvent.ShowToast(message = R.string.send_deleted.asText()))
|
||||
}
|
||||
}
|
||||
@ -628,11 +628,15 @@ class AddSendViewModel @Inject constructor(
|
||||
}
|
||||
}
|
||||
|
||||
private fun navigateBack() {
|
||||
private fun navigateBack(isDeleted: Boolean = false) {
|
||||
specialCircumstanceManager.specialCircumstance = null
|
||||
sendEvent(
|
||||
event = if (state.shouldFinishOnComplete) {
|
||||
AddSendEvent.ExitApp
|
||||
} else if (isDeleted) {
|
||||
// We need to make sure we don't land on the View Send screen
|
||||
// since it has now been deleted.
|
||||
AddSendEvent.NavigateToRoot
|
||||
} else {
|
||||
AddSendEvent.NavigateBack
|
||||
},
|
||||
@ -867,6 +871,11 @@ sealed class AddSendEvent {
|
||||
*/
|
||||
data object NavigateBack : AddSendEvent()
|
||||
|
||||
/**
|
||||
* Navigate up to the root.
|
||||
*/
|
||||
data object NavigateToRoot : AddSendEvent()
|
||||
|
||||
/**
|
||||
* Show file chooser sheet.
|
||||
*/
|
||||
|
||||
@ -41,6 +41,7 @@ import io.mockk.verify
|
||||
import kotlinx.coroutines.flow.MutableStateFlow
|
||||
import kotlinx.coroutines.flow.update
|
||||
import kotlinx.coroutines.test.runTest
|
||||
import org.junit.Assert.assertTrue
|
||||
import org.junit.Before
|
||||
import org.junit.Test
|
||||
import java.time.ZonedDateTime
|
||||
@ -49,6 +50,7 @@ import java.time.ZonedDateTime
|
||||
class AddSendScreenTest : BaseComposeTest() {
|
||||
|
||||
private var onNavigateBackCalled = false
|
||||
private var onNavigateUpToRootCalled = false
|
||||
|
||||
private val exitManager: ExitManager = mockk(relaxed = true) {
|
||||
every { exitApplication() } just runs
|
||||
@ -74,6 +76,7 @@ class AddSendScreenTest : BaseComposeTest() {
|
||||
AddSendScreen(
|
||||
viewModel = viewModel,
|
||||
onNavigateBack = { onNavigateBackCalled = true },
|
||||
onNavigateUpToRoot = { onNavigateUpToRootCalled = true },
|
||||
)
|
||||
}
|
||||
}
|
||||
@ -81,7 +84,13 @@ class AddSendScreenTest : BaseComposeTest() {
|
||||
@Test
|
||||
fun `on NavigateBack should call onNavigateBack`() {
|
||||
mutableEventFlow.tryEmit(AddSendEvent.NavigateBack)
|
||||
assert(onNavigateBackCalled)
|
||||
assertTrue(onNavigateBackCalled)
|
||||
}
|
||||
|
||||
@Test
|
||||
fun `on NavigateToRoot should call onNavigateUpToRoot`() {
|
||||
mutableEventFlow.tryEmit(AddSendEvent.NavigateToRoot)
|
||||
assertTrue(onNavigateUpToRootCalled)
|
||||
}
|
||||
|
||||
@Test
|
||||
|
||||
@ -667,7 +667,7 @@ class AddSendViewModelTest : BaseViewModelTest() {
|
||||
|
||||
viewModel.eventFlow.test {
|
||||
viewModel.trySendAction(AddSendAction.DeleteClick)
|
||||
assertEquals(AddSendEvent.NavigateBack, awaitItem())
|
||||
assertEquals(AddSendEvent.NavigateToRoot, awaitItem())
|
||||
assertEquals(AddSendEvent.ShowToast(R.string.send_deleted.asText()), awaitItem())
|
||||
}
|
||||
}
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user