From 098c08a189aac6861fd2d80f6af2e9efcda61eb3 Mon Sep 17 00:00:00 2001 From: aj-rosado <109146700+aj-rosado@users.noreply.github.com> Date: Tue, 6 Oct 2026 16:22:10 +0000 Subject: [PATCH] [PM-44412] fix: Keep autofill context after editing cipher (#7448) --- .../feature/addedit/VaultAddEditViewModel.kt | 4 +- .../addedit/VaultAddEditViewModelTest.kt | 47 +++++++++++++++++++ 2 files changed, 50 insertions(+), 1 deletion(-) diff --git a/app/src/main/kotlin/com/x8bit/bitwarden/ui/vault/feature/addedit/VaultAddEditViewModel.kt b/app/src/main/kotlin/com/x8bit/bitwarden/ui/vault/feature/addedit/VaultAddEditViewModel.kt index 96bc87d283..797b550c6d 100644 --- a/app/src/main/kotlin/com/x8bit/bitwarden/ui/vault/feature/addedit/VaultAddEditViewModel.kt +++ b/app/src/main/kotlin/com/x8bit/bitwarden/ui/vault/feature/addedit/VaultAddEditViewModel.kt @@ -2069,7 +2069,9 @@ class VaultAddEditViewModel @Inject constructor( } is UpdateCipherResult.Success -> { - specialCircumstanceManager.specialCircumstance = null + if (state.shouldClearSpecialCircumstance) { + specialCircumstanceManager.specialCircumstance = null + } if (state.shouldExitOnSave) { sendEvent(event = VaultAddEditEvent.ExitApp) } else { diff --git a/app/src/test/kotlin/com/x8bit/bitwarden/ui/vault/feature/addedit/VaultAddEditViewModelTest.kt b/app/src/test/kotlin/com/x8bit/bitwarden/ui/vault/feature/addedit/VaultAddEditViewModelTest.kt index d7de95aa8b..92be0aeb0f 100644 --- a/app/src/test/kotlin/com/x8bit/bitwarden/ui/vault/feature/addedit/VaultAddEditViewModelTest.kt +++ b/app/src/test/kotlin/com/x8bit/bitwarden/ui/vault/feature/addedit/VaultAddEditViewModelTest.kt @@ -2117,6 +2117,53 @@ class VaultAddEditViewModelTest : BaseViewModelTest() { } } + @Suppress("MaxLineLength") + @Test + fun `in edit mode during autofill selection, SaveClick should navigate back without clearing special circumstances`() = + runTest { + specialCircumstanceManager.specialCircumstance = + SpecialCircumstance.AutofillSelection( + autofillSelectionData = AutofillSelectionData( + type = AutofillSelectionData.Type.LOGIN, + framework = AutofillSelectionData.Framework.AUTOFILL, + uri = "mockUri", + ), + shouldFinishWhenComplete = true, + ) + val stateWithName = createVaultAddItemState( + vaultAddEditType = VaultAddEditType.EditItem(DEFAULT_ITEM_ID), + commonContentViewState = createCommonContentViewState(name = "mockName-1"), + shouldExitOnSave = false, + shouldClearSpecialCircumstance = false, + ) + mutableVaultDataFlow.value = DataState.Loaded( + data = createVaultData(cipherListView = createMockCipherListView(1)), + ) + val viewModel = createAddVaultItemViewModel( + createSavedStateHandleWithState( + state = stateWithName, + vaultAddEditType = VaultAddEditType.EditItem(DEFAULT_ITEM_ID), + vaultItemCipherType = VaultItemCipherType.LOGIN, + ), + ) + coEvery { + vaultRepository.updateCipher(DEFAULT_ITEM_ID, any()) + } returns UpdateCipherResult.Success + + viewModel.eventFlow.test { + viewModel.trySendAction(VaultAddEditAction.Common.SaveClick) + assertEquals(VaultAddEditEvent.NavigateBack, awaitItem()) + } + + assertNotNull(specialCircumstanceManager.specialCircumstance) + verify(exactly = 1) { + snackbarRelayManager.sendSnackbarData( + data = BitwardenSnackbarData(BitwardenString.login_saved.asText()), + relay = SnackbarRelay.CIPHER_UPDATED, + ) + } + } + @Suppress("MaxLineLength") @Test fun `in edit mode, SaveClick updateCipher error with a null message should show an error dialog with a generic message`() =