Skip to content

Commit 0a8d1fa

Browse files
authored
[PM-9439] Use passkey icon for items with FIDO2 credentials in search results (#4541)
1 parent f2c87d1 commit 0a8d1fa

File tree

3 files changed

+43
-2
lines changed

3 files changed

+43
-2
lines changed

app/src/main/java/com/x8bit/bitwarden/ui/platform/feature/search/util/SearchTypeDataExtensions.kt

+2-1
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ import com.bitwarden.vault.CipherView
1111
import com.bitwarden.vault.CollectionView
1212
import com.bitwarden.vault.FolderView
1313
import com.x8bit.bitwarden.R
14+
import com.x8bit.bitwarden.data.autofill.util.isActiveWithFido2Credentials
1415
import com.x8bit.bitwarden.data.platform.util.SpecialCharWithPrecedenceComparator
1516
import com.x8bit.bitwarden.data.platform.util.subtitle
1617
import com.x8bit.bitwarden.ui.platform.base.util.asText
@@ -247,7 +248,7 @@ private fun CipherView.toIconData(
247248
login?.uris.toLoginIconData(
248249
baseIconUrl = baseIconUrl,
249250
isIconLoadingDisabled = isIconLoadingDisabled,
250-
usePasskeyDefaultIcon = false,
251+
usePasskeyDefaultIcon = this.isActiveWithFido2Credentials,
251252
)
252253
}
253254

app/src/test/java/com/x8bit/bitwarden/ui/platform/feature/search/util/SearchTypeDataExtensionsTest.kt

+38
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ import com.bitwarden.vault.CollectionView
99
import com.bitwarden.vault.FolderView
1010
import com.x8bit.bitwarden.R
1111
import com.x8bit.bitwarden.data.vault.datasource.sdk.model.createMockCipherView
12+
import com.x8bit.bitwarden.data.vault.datasource.sdk.model.createMockSdkFido2CredentialList
1213
import com.x8bit.bitwarden.data.vault.datasource.sdk.model.createMockSendView
1314
import com.x8bit.bitwarden.ui.platform.base.util.asText
1415
import com.x8bit.bitwarden.ui.platform.feature.search.SearchState
@@ -458,6 +459,43 @@ class SearchTypeDataExtensionsTest {
458459
)
459460
}
460461

462+
@Test
463+
fun `CipherViews toViewState should usePasskeyDefaultIcon based on cipher fido2 credentials`() {
464+
mockkStatic(Uri::parse)
465+
every { Uri.parse(any()) } returns mockk {
466+
every { host } returns "www.mockuri.com"
467+
}
468+
val result = listOf(
469+
createMockCipherView(
470+
number = 1,
471+
fido2Credentials = createMockSdkFido2CredentialList(number = 1),
472+
),
473+
createMockCipherView(number = 2),
474+
).toViewState(
475+
searchTerm = "mock",
476+
baseIconUrl = "https://vault.bitwarden.com/icons",
477+
isIconLoadingDisabled = false,
478+
hasMasterPassword = true,
479+
isAutofill = false,
480+
isPremiumUser = true,
481+
isTotp = false,
482+
organizationPremiumStatusMap = emptyMap(),
483+
)
484+
485+
assertEquals(
486+
SearchState.ViewState.Content(
487+
displayItems = listOf(
488+
createMockDisplayItemForCipher(
489+
number = 1,
490+
fallbackIconRes = R.drawable.ic_bw_passkey,
491+
),
492+
createMockDisplayItemForCipher(number = 2),
493+
),
494+
),
495+
result,
496+
)
497+
}
498+
461499
@Test
462500
fun `SendViews filterAndOrganize should return empty list when search term is blank`() {
463501
val sends = listOf(createMockSendView(number = 1))

app/src/test/java/com/x8bit/bitwarden/ui/platform/feature/search/util/SearchUtil.kt

+3-1
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package com.x8bit.bitwarden.ui.platform.feature.search.util
22

3+
import androidx.annotation.DrawableRes
34
import com.bitwarden.send.SendType
45
import com.bitwarden.vault.CipherType
56
import com.x8bit.bitwarden.R
@@ -16,6 +17,7 @@ fun createMockDisplayItemForCipher(
1617
number: Int,
1718
cipherType: CipherType = CipherType.LOGIN,
1819
isTotp: Boolean = false,
20+
@DrawableRes fallbackIconRes: Int = R.drawable.ic_globe,
1921
): SearchState.DisplayItem =
2022
when (cipherType) {
2123
CipherType.LOGIN -> {
@@ -27,7 +29,7 @@ fun createMockDisplayItemForCipher(
2729
subtitleTestTag = "CipherSubTitleLabel",
2830
iconData = IconData.Network(
2931
uri = "https://vault.bitwarden.com/icons/www.mockuri.com/icon.png",
30-
fallbackIconRes = R.drawable.ic_globe,
32+
fallbackIconRes = fallbackIconRes,
3133
),
3234
extraIconList = listOf(
3335
IconRes(

0 commit comments

Comments
 (0)