From 7c4092a5390e85f850b68c3fc3311181c8eee4eb Mon Sep 17 00:00:00 2001 From: Brian Yencho Date: Sun, 28 Jan 2024 20:06:53 -0600 Subject: [PATCH] Add placeholder autofill URI matching (#838) --- .../itemlisting/VaultItemListingViewModel.kt | 38 ++++++++++++++++++- .../VaultItemListingViewModelTest.kt | 6 ++- 2 files changed, 42 insertions(+), 2 deletions(-) diff --git a/app/src/main/java/com/x8bit/bitwarden/ui/vault/feature/itemlisting/VaultItemListingViewModel.kt b/app/src/main/java/com/x8bit/bitwarden/ui/vault/feature/itemlisting/VaultItemListingViewModel.kt index 2f648ff0ac..12f37931df 100644 --- a/app/src/main/java/com/x8bit/bitwarden/ui/vault/feature/itemlisting/VaultItemListingViewModel.kt +++ b/app/src/main/java/com/x8bit/bitwarden/ui/vault/feature/itemlisting/VaultItemListingViewModel.kt @@ -7,6 +7,7 @@ import com.x8bit.bitwarden.R import com.x8bit.bitwarden.data.auth.repository.AuthRepository import com.x8bit.bitwarden.data.autofill.manager.AutofillSelectionManager import com.x8bit.bitwarden.data.autofill.model.AutofillSelectionData +import com.x8bit.bitwarden.data.platform.annotation.OmitFromCoverage import com.x8bit.bitwarden.data.platform.manager.SpecialCircumstanceManager import com.x8bit.bitwarden.data.platform.manager.clipboard.BitwardenClipboardManager import com.x8bit.bitwarden.data.platform.manager.model.SpecialCircumstance @@ -15,6 +16,7 @@ import com.x8bit.bitwarden.data.platform.repository.SettingsRepository import com.x8bit.bitwarden.data.platform.repository.model.DataState import com.x8bit.bitwarden.data.platform.repository.util.baseIconUrl import com.x8bit.bitwarden.data.platform.repository.util.baseWebSendUrl +import com.x8bit.bitwarden.data.platform.repository.util.map import com.x8bit.bitwarden.data.vault.repository.VaultRepository import com.x8bit.bitwarden.data.vault.repository.model.DeleteSendResult import com.x8bit.bitwarden.data.vault.repository.model.RemovePasswordSendResult @@ -104,7 +106,13 @@ class VaultItemListingViewModel @Inject constructor( vaultRepository .vaultDataStateFlow - .onEach { sendAction(VaultItemListingsAction.Internal.VaultDataReceive(it)) } + .onEach { + sendAction( + VaultItemListingsAction.Internal.VaultDataReceive( + it.filterForAutofillIfNecessary(), + ), + ) + } .launchIn(viewModelScope) } @@ -566,6 +574,34 @@ class VaultItemListingViewModel @Inject constructor( .data ?.cipherViewList ?.firstOrNull { it.id == cipherId } + + // TODO: Update to use correct logic (BIT-1641) + /** + * Takes the given vault data and filters it for autofill if necessary. + */ + @OmitFromCoverage + private suspend fun DataState.filterForAutofillIfNecessary(): DataState { + val matchingUri = state + .autofillSelectionData + ?.uri + ?.toHostOrPathOrNull() + ?: return this + return this.map { vaultData -> + vaultData.copy( + cipherViewList = vaultData + .cipherViewList + .filter { cipherView -> + cipherView + .login + ?.uris + .orEmpty() + .any { + matchingUri in it.uri?.toHostOrPathOrNull().orEmpty() + } + }, + ) + } + } } /** diff --git a/app/src/test/java/com/x8bit/bitwarden/ui/vault/feature/itemlisting/VaultItemListingViewModelTest.kt b/app/src/test/java/com/x8bit/bitwarden/ui/vault/feature/itemlisting/VaultItemListingViewModelTest.kt index 838e1af8fb..ad3306c68d 100644 --- a/app/src/test/java/com/x8bit/bitwarden/ui/vault/feature/itemlisting/VaultItemListingViewModelTest.kt +++ b/app/src/test/java/com/x8bit/bitwarden/ui/vault/feature/itemlisting/VaultItemListingViewModelTest.kt @@ -9,6 +9,7 @@ import com.x8bit.bitwarden.data.auth.repository.model.SwitchAccountResult import com.x8bit.bitwarden.data.auth.repository.model.UserState import com.x8bit.bitwarden.data.autofill.manager.AutofillSelectionManager import com.x8bit.bitwarden.data.autofill.manager.AutofillSelectionManagerImpl +import com.x8bit.bitwarden.data.autofill.model.AutofillSelectionData import com.x8bit.bitwarden.data.platform.manager.SpecialCircumstanceManagerImpl import com.x8bit.bitwarden.data.platform.manager.clipboard.BitwardenClipboardManager import com.x8bit.bitwarden.data.platform.manager.model.SpecialCircumstance @@ -217,7 +218,10 @@ class VaultItemListingViewModelTest : BaseViewModelTest() { val cipherView = createMockCipherView(number = 1) specialCircumstanceManager.specialCircumstance = SpecialCircumstance.AutofillSelection( - autofillSelectionData = mockk(), + autofillSelectionData = AutofillSelectionData( + type = AutofillSelectionData.Type.LOGIN, + uri = "https://www.test.com", + ), shouldFinishWhenComplete = true, ) mutableVaultDataStateFlow.value = DataState.Loaded(