diff options
author | 2024-08-01 18:36:07 +0000 | |
---|---|---|
committer | 2024-08-01 23:40:37 +0000 | |
commit | 13ac90020bb35d71059afe11451ade5e57371b41 (patch) | |
tree | 65547111e0e29d8002c1db8c8cb1848cf88a417d /packages/CredentialManager | |
parent | c81e5cd73c983a55256afc17ecbaf127ee638d37 (diff) |
Use SIWG display name in single and multiple credential screens
https://hsv.googleplex.com/6128614297829376
https://hsv.googleplex.com/4768216021729280
Flag: EXEMPT bugfix
Bug:355488245, 356049400, 355437670
Test: CredentialSelectorUiStateGetMapperTest
Change-Id: Ib51f95208b2a0a8550b7ff5d11540ec467b5d7f0
Diffstat (limited to 'packages/CredentialManager')
5 files changed, 55 insertions, 16 deletions
diff --git a/packages/CredentialManager/wear/robotests/src/com/android/credentialmanager/CredentialSelectorUiStateGetMapperTest.kt b/packages/CredentialManager/wear/robotests/src/com/android/credentialmanager/CredentialSelectorUiStateGetMapperTest.kt index c6013e2ffae6..ef4416e9841a 100644 --- a/packages/CredentialManager/wear/robotests/src/com/android/credentialmanager/CredentialSelectorUiStateGetMapperTest.kt +++ b/packages/CredentialManager/wear/robotests/src/com/android/credentialmanager/CredentialSelectorUiStateGetMapperTest.kt @@ -30,7 +30,7 @@ import com.android.credentialmanager.model.CredentialType import com.google.common.truth.Truth.assertThat import com.android.credentialmanager.ui.mappers.toGet import com.android.credentialmanager.model.get.ProviderInfo -import com.android.credentialmanager.CredentialSelectorUiState.Get.MultipleEntry.PerUserNameEntries +import com.android.credentialmanager.CredentialSelectorUiState.Get.MultipleEntry.PerNameEntries /** Unit tests for [CredentialSelectorUiStateGetMapper]. */ @SmallTest @@ -108,7 +108,7 @@ class CredentialSelectorUiStateGetMapperTest { } @Test - fun `On primary screen, multiple accounts returns SingleEntryPerAccount`() { + fun `On primary screen, multiple accounts returns MultipleEntryPrimaryScreen`() { val getCredentialUiState = Request.Get( token = null, resultReceiver = null, @@ -135,7 +135,7 @@ class CredentialSelectorUiStateGetMapperTest { assertThat(getCredentialUiState).isEqualTo( CredentialSelectorUiState.Get.MultipleEntry( - listOf(PerUserNameEntries("userName", listOf( + listOf(PerNameEntries("userName", listOf( passkeyCredentialEntryInfo, passwordCredentialEntryInfo)) ), @@ -155,7 +155,7 @@ class CredentialSelectorUiStateGetMapperTest { assertThat(getCredentialUiState).isEqualTo( CredentialSelectorUiState.Get.MultipleEntry( listOf( - PerUserNameEntries("userName", + PerNameEntries("userName", listOf( recentlyUsedPasskeyCredential, // from provider 2 passkeyCredentialEntryInfo, // from provider 1 or 2 @@ -164,7 +164,7 @@ class CredentialSelectorUiStateGetMapperTest { passwordCredentialEntryInfo, // from provider 1 or 2 passwordCredentialEntryInfo, // from provider 1 or 2 )), - PerUserNameEntries("userName2", listOf(unknownCredentialEntryInfo)), + PerNameEntries("userName2", listOf(unknownCredentialEntryInfo)), ), listOf(actionEntryInfo, actionEntryInfo), listOf(authenticationEntryInfo, authenticationEntryInfo) @@ -172,8 +172,44 @@ class CredentialSelectorUiStateGetMapperTest { ) } + @Test + fun `Returned multiple entry is grouped by display name if present`() { + val testCred1 = createCredentialEntryInfo(displayName = "testDisplayName", + userName = "testUserName", credentialType = CredentialType.PASSWORD) + val testCred2 = createCredentialEntryInfo(displayName = "testDisplayName", + userName = "testUserName", credentialType = CredentialType.PASSKEY) + val getCredentialUiState = Request.Get( + token = null, + resultReceiver = null, + providerInfos = listOf(createProviderInfo(credentialList1), + createProviderInfo(credentialList2), + createProviderInfo(listOf(testCred1, testCred2)))) + .toGet(isPrimary = false) + + assertThat(getCredentialUiState).isEqualTo( + CredentialSelectorUiState.Get.MultipleEntry( + listOf( + PerNameEntries("userName", + listOf( + recentlyUsedPasskeyCredential, // from provider 2 + passkeyCredentialEntryInfo, // from provider 1 or 2 + passkeyCredentialEntryInfo, // from provider 1 or 2 + recentlyUsedPasswordCredential, // from provider 2 + passwordCredentialEntryInfo, // from provider 1 or 2 + passwordCredentialEntryInfo, // from provider 1 or 2 + )), + PerNameEntries("userName2", listOf(unknownCredentialEntryInfo)), + PerNameEntries("testDisplayName", listOf(testCred2, testCred1)), + ), + listOf(actionEntryInfo, actionEntryInfo, actionEntryInfo), + listOf(authenticationEntryInfo, authenticationEntryInfo, authenticationEntryInfo) + ) + ) + } + fun createCredentialEntryInfo( userName: String, + displayName: String? = null, credentialType: CredentialType = CredentialType.PASSKEY, lastUsedTimeMillis: Long = 0L ): CredentialEntryInfo = @@ -188,7 +224,7 @@ class CredentialSelectorUiStateGetMapperTest { credentialTypeDisplayName = "", providerDisplayName = "", userName = userName, - displayName = "", + displayName = displayName, icon = mDrawable, shouldTintIcon = false, lastUsedTimeMillis = Instant.ofEpochMilli(lastUsedTimeMillis), diff --git a/packages/CredentialManager/wear/src/com/android/credentialmanager/FlowEngine.kt b/packages/CredentialManager/wear/src/com/android/credentialmanager/FlowEngine.kt index b2f55c108317..2f5ec72a20a8 100644 --- a/packages/CredentialManager/wear/src/com/android/credentialmanager/FlowEngine.kt +++ b/packages/CredentialManager/wear/src/com/android/credentialmanager/FlowEngine.kt @@ -81,12 +81,12 @@ sealed class CredentialSelectorUiState { ) : Get() /** Getting credential UI state on secondary screen when there are multiple accounts available. */ data class MultipleEntry( - val accounts: List<PerUserNameEntries>, + val accounts: List<PerNameEntries>, val actionEntryList: List<ActionEntryInfo>, val authenticationEntryList: List<AuthenticationEntryInfo>, ) : Get() { - data class PerUserNameEntries( - val userName: String, + data class PerNameEntries( + val name: String, val sortedCredentialEntryList: List<CredentialEntryInfo>, ) } diff --git a/packages/CredentialManager/wear/src/com/android/credentialmanager/ui/mappers/CredentialSelectorUiStateGetMapper.kt b/packages/CredentialManager/wear/src/com/android/credentialmanager/ui/mappers/CredentialSelectorUiStateGetMapper.kt index 265627520cf7..7dfe742e4b5f 100644 --- a/packages/CredentialManager/wear/src/com/android/credentialmanager/ui/mappers/CredentialSelectorUiStateGetMapper.kt +++ b/packages/CredentialManager/wear/src/com/android/credentialmanager/ui/mappers/CredentialSelectorUiStateGetMapper.kt @@ -19,15 +19,18 @@ package com.android.credentialmanager.ui.mappers import android.graphics.drawable.Drawable import com.android.credentialmanager.model.Request import com.android.credentialmanager.CredentialSelectorUiState -import com.android.credentialmanager.CredentialSelectorUiState.Get.MultipleEntry.PerUserNameEntries +import com.android.credentialmanager.CredentialSelectorUiState.Get.MultipleEntry.PerNameEntries import com.android.credentialmanager.model.CredentialType import com.android.credentialmanager.model.get.CredentialEntryInfo import java.time.Instant fun Request.Get.toGet(isPrimary: Boolean): CredentialSelectorUiState.Get { + val accounts = providerInfos .flatMap { it.credentialEntryList } - .groupBy { it.userName} + .groupBy { + if (it.displayName.isNullOrBlank()) it.userName else checkNotNull(it.displayName) + } .entries .toList() @@ -56,7 +59,7 @@ fun Request.Get.toGet(isPrimary: Boolean): CredentialSelectorUiState.Get { } } else { CredentialSelectorUiState.Get.MultipleEntry( - accounts = accounts.map { PerUserNameEntries( + accounts = accounts.map { PerNameEntries( it.key, it.value.sortedWith(comparator) ) diff --git a/packages/CredentialManager/wear/src/com/android/credentialmanager/ui/screens/multiple/MultiCredentialsFlattenScreen.kt b/packages/CredentialManager/wear/src/com/android/credentialmanager/ui/screens/multiple/MultiCredentialsFlattenScreen.kt index 2af5be844af5..ef32c944d650 100644 --- a/packages/CredentialManager/wear/src/com/android/credentialmanager/ui/screens/multiple/MultiCredentialsFlattenScreen.kt +++ b/packages/CredentialManager/wear/src/com/android/credentialmanager/ui/screens/multiple/MultiCredentialsFlattenScreen.kt @@ -79,7 +79,7 @@ fun MultiCredentialsFlattenScreen( Row { Spacer(Modifier.weight(0.0624f)) // 6.24% side margin WearSecondaryLabel( - text = userNameEntries.userName, + text = userNameEntries.name, modifier = Modifier.padding( top = 12.dp, bottom = 4.dp, diff --git a/packages/CredentialManager/wear/src/com/android/credentialmanager/ui/screens/single/signInWithProvider/SignInWithProviderScreen.kt b/packages/CredentialManager/wear/src/com/android/credentialmanager/ui/screens/single/signInWithProvider/SignInWithProviderScreen.kt index fd0fc8cce16c..14cc9bf25348 100644 --- a/packages/CredentialManager/wear/src/com/android/credentialmanager/ui/screens/single/signInWithProvider/SignInWithProviderScreen.kt +++ b/packages/CredentialManager/wear/src/com/android/credentialmanager/ui/screens/single/signInWithProvider/SignInWithProviderScreen.kt @@ -55,15 +55,15 @@ fun SignInWithProviderScreen( }, accountContent = { val displayName = entry.displayName - if (displayName == null || + if (displayName.isNullOrBlank() || entry.displayName.equals(entry.userName, ignoreCase = true)) { AccountRow( primaryText = entry.userName, ) } else { AccountRow( - primaryText = displayName, - secondaryText = entry.userName, + primaryText = entry.userName, + secondaryText = displayName, ) } }, |