PM-21631: Check for Search Screen when navigating after deleting a Send (#5284)

This commit is contained in:
David Perez
2025-05-29 21:29:56 +00:00
committed by GitHub
parent e250a8dc1e
commit f3b7d0f732
6 changed files with 23 additions and 16 deletions
@@ -8,6 +8,7 @@ import com.x8bit.bitwarden.ui.auth.feature.accountsetup.navigateToSetupAutoFillS
import com.x8bit.bitwarden.ui.auth.feature.accountsetup.navigateToSetupUnlockScreen
import com.x8bit.bitwarden.ui.auth.feature.accountsetup.setupAutoFillDestination
import com.x8bit.bitwarden.ui.auth.feature.accountsetup.setupUnlockDestination
import com.x8bit.bitwarden.ui.platform.feature.search.SearchRoute
import com.x8bit.bitwarden.ui.platform.feature.search.navigateToSearch
import com.x8bit.bitwarden.ui.platform.feature.search.searchDestination
import com.x8bit.bitwarden.ui.platform.feature.settings.accountsecurity.deleteaccount.deleteAccountDestination
@@ -201,7 +202,7 @@ fun NavGraphBuilder.vaultUnlockedGraph(
addEditSendDestination(
onNavigateBack = { navController.popBackStack() },
onNavigateUpToRoot = { navController.navigateToVaultUnlockedRoot() },
onNavigateUpToSearchOrRoot = { navController.navigateUpToSearchOrVaultUnlockedRoot() },
)
viewSendDestination(
onNavigateBack = { navController.popBackStack() },
@@ -249,6 +250,12 @@ fun NavGraphBuilder.vaultUnlockedGraph(
}
}
private fun NavController.navigateToVaultUnlockedRoot() {
this.popBackStack(route = VaultUnlockedNavbarRoute, inclusive = false)
private fun NavController.navigateUpToSearchOrVaultUnlockedRoot() {
if (!this.popBackStack<SearchRoute>(inclusive = false)) {
this.navigateUpToVaultUnlockedRoot()
}
}
private fun NavController.navigateUpToVaultUnlockedRoot() {
this.popBackStack<VaultUnlockedNavbarRoute>(inclusive = false)
}
@@ -56,12 +56,12 @@ fun SavedStateHandle.toAddEditSendArgs(): AddEditSendArgs {
*/
fun NavGraphBuilder.addEditSendDestination(
onNavigateBack: () -> Unit,
onNavigateUpToRoot: () -> Unit,
onNavigateUpToSearchOrRoot: () -> Unit,
) {
composableWithSlideTransitions<AddEditSendRoute> {
AddEditSendScreen(
onNavigateBack = onNavigateBack,
onNavigateUpToRoot = onNavigateUpToRoot,
onNavigateUpToSearchOrRoot = onNavigateUpToSearchOrRoot,
)
}
}
@@ -52,7 +52,7 @@ fun AddEditSendScreen(
intentManager: IntentManager = LocalIntentManager.current,
permissionsManager: PermissionsManager = LocalPermissionsManager.current,
onNavigateBack: () -> Unit,
onNavigateUpToRoot: () -> Unit,
onNavigateUpToSearchOrRoot: () -> Unit,
) {
val state by viewModel.stateFlow.collectAsStateWithLifecycle()
val addSendHandlers = remember(viewModel) { AddEditSendHandlers.create(viewModel) }
@@ -77,7 +77,7 @@ fun AddEditSendScreen(
is AddEditSendEvent.NavigateBack -> onNavigateBack()
is AddEditSendEvent.NavigateToRoot -> onNavigateUpToRoot()
is AddEditSendEvent.NavigateUpToSearchOrRoot -> onNavigateUpToSearchOrRoot()
is AddEditSendEvent.ShowChooserSheet -> {
fileChooserLauncher.launch(
@@ -600,7 +600,7 @@ class AddEditSendViewModel @Inject constructor(
} else if (isDeleted) {
// We need to make sure we don't land on the View Send screen
// since it has now been deleted.
AddEditSendEvent.NavigateToRoot
AddEditSendEvent.NavigateUpToSearchOrRoot
} else {
AddEditSendEvent.NavigateBack
},
@@ -833,9 +833,9 @@ sealed class AddEditSendEvent {
data object NavigateBack : AddEditSendEvent()
/**
* Navigate up to the root.
* Navigate up to the search screen or the root screen depending where you came from.
*/
data object NavigateToRoot : AddEditSendEvent()
data object NavigateUpToSearchOrRoot : AddEditSendEvent()
/**
* Show file chooser sheet.
@@ -49,7 +49,7 @@ import java.time.ZonedDateTime
class AddEditSendScreenTest : BitwardenComposeTest() {
private var onNavigateBackCalled = false
private var onNavigateUpToRootCalled = false
private var onNavigateUpToSearchOrRootCalled = false
private val exitManager: ExitManager = mockk(relaxed = true) {
every { exitApplication() } just runs
@@ -75,7 +75,7 @@ class AddEditSendScreenTest : BitwardenComposeTest() {
AddEditSendScreen(
viewModel = viewModel,
onNavigateBack = { onNavigateBackCalled = true },
onNavigateUpToRoot = { onNavigateUpToRootCalled = true },
onNavigateUpToSearchOrRoot = { onNavigateUpToSearchOrRootCalled = true },
)
}
}
@@ -87,9 +87,9 @@ class AddEditSendScreenTest : BitwardenComposeTest() {
}
@Test
fun `on NavigateToRoot should call onNavigateUpToRoot`() {
mutableEventFlow.tryEmit(AddEditSendEvent.NavigateToRoot)
assertTrue(onNavigateUpToRootCalled)
fun `on NavigateUpToSearchOrRoot should call onNavigateUpToSearchOrRootCalled`() {
mutableEventFlow.tryEmit(AddEditSendEvent.NavigateUpToSearchOrRoot)
assertTrue(onNavigateUpToSearchOrRootCalled)
}
@Test
@@ -661,7 +661,7 @@ class AddEditSendViewModelTest : BaseViewModelTest() {
viewModel.eventFlow.test {
viewModel.trySendAction(AddEditSendAction.DeleteClick)
assertEquals(AddEditSendEvent.NavigateToRoot, awaitItem())
assertEquals(AddEditSendEvent.NavigateUpToSearchOrRoot, awaitItem())
assertEquals(AddEditSendEvent.ShowToast(R.string.send_deleted.asText()), awaitItem())
}
}