PM-21631: Update Edit Send Screen to navigate to Vault Unlocked root (#5190)

This commit is contained in:
David Perez 2025-05-14 12:51:56 -05:00 committed by GitHub
parent db956b9b91
commit ea70191429
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
6 changed files with 38 additions and 6 deletions

View File

@ -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)
}

View File

@ -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,
)
}
}

View File

@ -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),

View File

@ -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.
*/

View File

@ -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

View File

@ -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())
}
}