From 0a8d1fa0f56b7a2d6da52bc7da793937b49357ed Mon Sep 17 00:00:00 2001 From: Patrick Honkonen <1883101+SaintPatrck@users.noreply.github.com> Date: Thu, 9 Jan 2025 16:10:02 -0500 Subject: [PATCH] [PM-9439] Use passkey icon for items with FIDO2 credentials in search results (#4541) --- .../search/util/SearchTypeDataExtensions.kt | 3 +- .../util/SearchTypeDataExtensionsTest.kt | 38 +++++++++++++++++++ .../feature/search/util/SearchUtil.kt | 4 +- 3 files changed, 43 insertions(+), 2 deletions(-) diff --git a/app/src/main/java/com/x8bit/bitwarden/ui/platform/feature/search/util/SearchTypeDataExtensions.kt b/app/src/main/java/com/x8bit/bitwarden/ui/platform/feature/search/util/SearchTypeDataExtensions.kt index c9b7ca6d58..526bf5910a 100644 --- a/app/src/main/java/com/x8bit/bitwarden/ui/platform/feature/search/util/SearchTypeDataExtensions.kt +++ b/app/src/main/java/com/x8bit/bitwarden/ui/platform/feature/search/util/SearchTypeDataExtensions.kt @@ -11,6 +11,7 @@ import com.bitwarden.vault.CipherView import com.bitwarden.vault.CollectionView import com.bitwarden.vault.FolderView import com.x8bit.bitwarden.R +import com.x8bit.bitwarden.data.autofill.util.isActiveWithFido2Credentials import com.x8bit.bitwarden.data.platform.util.SpecialCharWithPrecedenceComparator import com.x8bit.bitwarden.data.platform.util.subtitle import com.x8bit.bitwarden.ui.platform.base.util.asText @@ -247,7 +248,7 @@ private fun CipherView.toIconData( login?.uris.toLoginIconData( baseIconUrl = baseIconUrl, isIconLoadingDisabled = isIconLoadingDisabled, - usePasskeyDefaultIcon = false, + usePasskeyDefaultIcon = this.isActiveWithFido2Credentials, ) } diff --git a/app/src/test/java/com/x8bit/bitwarden/ui/platform/feature/search/util/SearchTypeDataExtensionsTest.kt b/app/src/test/java/com/x8bit/bitwarden/ui/platform/feature/search/util/SearchTypeDataExtensionsTest.kt index 15e3d4a774..6b0952fd40 100644 --- a/app/src/test/java/com/x8bit/bitwarden/ui/platform/feature/search/util/SearchTypeDataExtensionsTest.kt +++ b/app/src/test/java/com/x8bit/bitwarden/ui/platform/feature/search/util/SearchTypeDataExtensionsTest.kt @@ -9,6 +9,7 @@ import com.bitwarden.vault.CollectionView import com.bitwarden.vault.FolderView import com.x8bit.bitwarden.R import com.x8bit.bitwarden.data.vault.datasource.sdk.model.createMockCipherView +import com.x8bit.bitwarden.data.vault.datasource.sdk.model.createMockSdkFido2CredentialList import com.x8bit.bitwarden.data.vault.datasource.sdk.model.createMockSendView import com.x8bit.bitwarden.ui.platform.base.util.asText import com.x8bit.bitwarden.ui.platform.feature.search.SearchState @@ -458,6 +459,43 @@ class SearchTypeDataExtensionsTest { ) } + @Test + fun `CipherViews toViewState should usePasskeyDefaultIcon based on cipher fido2 credentials`() { + mockkStatic(Uri::parse) + every { Uri.parse(any()) } returns mockk { + every { host } returns "www.mockuri.com" + } + val result = listOf( + createMockCipherView( + number = 1, + fido2Credentials = createMockSdkFido2CredentialList(number = 1), + ), + createMockCipherView(number = 2), + ).toViewState( + searchTerm = "mock", + baseIconUrl = "https://vault.bitwarden.com/icons", + isIconLoadingDisabled = false, + hasMasterPassword = true, + isAutofill = false, + isPremiumUser = true, + isTotp = false, + organizationPremiumStatusMap = emptyMap(), + ) + + assertEquals( + SearchState.ViewState.Content( + displayItems = listOf( + createMockDisplayItemForCipher( + number = 1, + fallbackIconRes = R.drawable.ic_bw_passkey, + ), + createMockDisplayItemForCipher(number = 2), + ), + ), + result, + ) + } + @Test fun `SendViews filterAndOrganize should return empty list when search term is blank`() { val sends = listOf(createMockSendView(number = 1)) diff --git a/app/src/test/java/com/x8bit/bitwarden/ui/platform/feature/search/util/SearchUtil.kt b/app/src/test/java/com/x8bit/bitwarden/ui/platform/feature/search/util/SearchUtil.kt index a3e23fe2ba..24f6b7f464 100644 --- a/app/src/test/java/com/x8bit/bitwarden/ui/platform/feature/search/util/SearchUtil.kt +++ b/app/src/test/java/com/x8bit/bitwarden/ui/platform/feature/search/util/SearchUtil.kt @@ -1,5 +1,6 @@ package com.x8bit.bitwarden.ui.platform.feature.search.util +import androidx.annotation.DrawableRes import com.bitwarden.send.SendType import com.bitwarden.vault.CipherType import com.x8bit.bitwarden.R @@ -16,6 +17,7 @@ fun createMockDisplayItemForCipher( number: Int, cipherType: CipherType = CipherType.LOGIN, isTotp: Boolean = false, + @DrawableRes fallbackIconRes: Int = R.drawable.ic_globe, ): SearchState.DisplayItem = when (cipherType) { CipherType.LOGIN -> { @@ -27,7 +29,7 @@ fun createMockDisplayItemForCipher( subtitleTestTag = "CipherSubTitleLabel", iconData = IconData.Network( uri = "https://vault.bitwarden.com/icons/www.mockuri.com/icon.png", - fallbackIconRes = R.drawable.ic_globe, + fallbackIconRes = fallbackIconRes, ), extraIconList = listOf( IconRes(