diff options
| author | 2024-04-11 20:47:35 +0000 | |
|---|---|---|
| committer | 2024-04-11 20:47:35 +0000 | |
| commit | f26f87f1d91315dacd00324e7ebdfd14abdaf2eb (patch) | |
| tree | 283b0108c28ab8d1cc23665097dffa0844b61c93 | |
| parent | e736c103e325b756621c9307f2d4d9792db35772 (diff) | |
| parent | 42ec75d87c2ec5426f563e25bafde116213fdf89 (diff) | |
Merge "Icon for multi credentials same provider screen" into main
6 files changed, 34 insertions, 22 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 3422d3dc4d94..6c145631a39e 100644 --- a/packages/CredentialManager/wear/robotests/src/com/android/credentialmanager/CredentialSelectorUiStateGetMapperTest.kt +++ b/packages/CredentialManager/wear/robotests/src/com/android/credentialmanager/CredentialSelectorUiStateGetMapperTest.kt @@ -65,29 +65,29 @@ class CredentialSelectorUiStateGetMapperTest { isLastUnlocked = true ) - val passkeyCredentialEntryInfo = + private val passkeyCredentialEntryInfo = createCredentialEntryInfo(credentialType = CredentialType.PASSKEY, userName = "userName") - val unknownCredentialEntryInfo = + private val unknownCredentialEntryInfo = createCredentialEntryInfo(credentialType = CredentialType.UNKNOWN, userName = "userName2") - val passwordCredentialEntryInfo = + private val passwordCredentialEntryInfo = createCredentialEntryInfo(credentialType = CredentialType.PASSWORD, userName = "userName") - val recentlyUsedPasskeyCredential = + private val recentlyUsedPasskeyCredential = createCredentialEntryInfo(credentialType = CredentialType.PASSKEY, lastUsedTimeMillis = 2L, userName = "userName") - val recentlyUsedPasswordCredential = + private val recentlyUsedPasswordCredential = createCredentialEntryInfo(credentialType = CredentialType.PASSWORD, lastUsedTimeMillis = 2L, userName = "userName") - val credentialList1 = listOf( + private val credentialList1 = listOf( passkeyCredentialEntryInfo, passwordCredentialEntryInfo ) - val credentialList2 = listOf( + private val credentialList2 = listOf( passkeyCredentialEntryInfo, passwordCredentialEntryInfo, recentlyUsedPasskeyCredential, @@ -118,11 +118,12 @@ class CredentialSelectorUiStateGetMapperTest { unknownCredentialEntryInfo)))).toGet(isPrimary = true) assertThat(getCredentialUiState).isEqualTo( - CredentialSelectorUiState.Get.SingleEntryPerAccount( + CredentialSelectorUiState.Get.MultipleEntryPrimaryScreen( sortedEntries = listOf( passkeyCredentialEntryInfo, // userName unknownCredentialEntryInfo // userName2 ), + icon = mDrawable, authenticationEntryList = listOf(authenticationEntryInfo) )) // prefer passkey from account 1, then unknown from account 2 } diff --git a/packages/CredentialManager/wear/src/com/android/credentialmanager/CredentialSelectorViewModel.kt b/packages/CredentialManager/wear/src/com/android/credentialmanager/CredentialSelectorViewModel.kt index b7fa33e9372f..36085684db57 100644 --- a/packages/CredentialManager/wear/src/com/android/credentialmanager/CredentialSelectorViewModel.kt +++ b/packages/CredentialManager/wear/src/com/android/credentialmanager/CredentialSelectorViewModel.kt @@ -86,7 +86,7 @@ class CredentialSelectorViewModel @Inject constructor( when (uiState.value) { is Get.MultipleEntry -> isPrimaryScreen.value = true is Create, Close, is Cancel, Idle -> shouldClose.value = true - is Get.SingleEntry, is Get.SingleEntryPerAccount -> cancel() + is Get.SingleEntry, is Get.MultipleEntryPrimaryScreen -> cancel() } } diff --git a/packages/CredentialManager/wear/src/com/android/credentialmanager/FlowEngine.kt b/packages/CredentialManager/wear/src/com/android/credentialmanager/FlowEngine.kt index c05fc93b8223..b2f55c108317 100644 --- a/packages/CredentialManager/wear/src/com/android/credentialmanager/FlowEngine.kt +++ b/packages/CredentialManager/wear/src/com/android/credentialmanager/FlowEngine.kt @@ -17,6 +17,7 @@ package com.android.credentialmanager import android.content.Intent +import android.graphics.drawable.Drawable import androidx.activity.result.IntentSenderRequest import androidx.compose.runtime.Composable import com.android.credentialmanager.model.EntryInfo @@ -71,14 +72,14 @@ sealed class CredentialSelectorUiState { /** Getting credential UI state when there is only one credential available. */ data class SingleEntry(val entry: CredentialEntryInfo) : Get() /** - * Getting credential UI state when there is only one account while with multiple - * credentials, with different types(eg, passkey vs password) or providers. + * Getting credential UI state on primary screen when there is are multiple accounts. */ - data class SingleEntryPerAccount( + data class MultipleEntryPrimaryScreen( + val icon: Drawable?, val sortedEntries: List<CredentialEntryInfo>, val authenticationEntryList: List<AuthenticationEntryInfo>, ) : Get() - /** Getting credential UI state when there are multiple accounts available. */ + /** Getting credential UI state on secondary screen when there are multiple accounts available. */ data class MultipleEntry( val accounts: List<PerUserNameEntries>, val actionEntryList: List<ActionEntryInfo>, diff --git a/packages/CredentialManager/wear/src/com/android/credentialmanager/ui/WearApp.kt b/packages/CredentialManager/wear/src/com/android/credentialmanager/ui/WearApp.kt index 018db6899f6e..d67c8c2809ba 100644 --- a/packages/CredentialManager/wear/src/com/android/credentialmanager/ui/WearApp.kt +++ b/packages/CredentialManager/wear/src/com/android/credentialmanager/ui/WearApp.kt @@ -29,7 +29,7 @@ import androidx.wear.compose.foundation.rememberSwipeToDismissBoxState import androidx.wear.compose.navigation.rememberSwipeDismissableNavController import androidx.wear.compose.navigation.rememberSwipeDismissableNavHostState import com.android.credentialmanager.CredentialSelectorUiState -import com.android.credentialmanager.CredentialSelectorUiState.Get.SingleEntryPerAccount +import com.android.credentialmanager.CredentialSelectorUiState.Get.MultipleEntryPrimaryScreen import com.android.credentialmanager.CredentialSelectorUiState.Get.SingleEntry import com.android.credentialmanager.CredentialSelectorUiState.Get.MultipleEntry import com.android.credentialmanager.FlowEngine @@ -95,7 +95,7 @@ fun WearApp( scrollable(Screen.MultipleCredentialsScreenFold.route) { MultiCredentialsFoldScreen( - credentialSelectorUiState = (remember { uiState } as SingleEntryPerAccount), + credentialSelectorUiState = (remember { uiState } as MultipleEntryPrimaryScreen), columnState = it.columnState, flowEngine = flowEngine, ) @@ -169,7 +169,7 @@ private fun handleGetNavigation( } } - is SingleEntryPerAccount -> { + is MultipleEntryPrimaryScreen -> { navController.navigateToMultipleCredentialsFoldScreen() } 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 7a936b603ec1..04175335b9db 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 @@ -16,6 +16,7 @@ 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 @@ -35,10 +36,19 @@ fun Request.Get.toGet(isPrimary: Boolean): CredentialSelectorUiState.Get { entry = accounts[0].value.minWith(comparator) ) } else { - CredentialSelectorUiState.Get.SingleEntryPerAccount( - sortedEntries = accounts.map { - it.value.minWith(comparator) - }.sortedWith(comparator), + val sortedEntries = accounts.map { + it.value.minWith(comparator) + }.sortedWith(comparator) + + var icon: Drawable? = null + // provide icon if all entries have the same provider + if (sortedEntries.all {it.providerId == sortedEntries[0].providerId}) { + icon = providerInfos[0].icon + } + + CredentialSelectorUiState.Get.MultipleEntryPrimaryScreen( + sortedEntries = sortedEntries, + icon = icon, authenticationEntryList = providerInfos.flatMap { it.authenticationEntryList } ) } diff --git a/packages/CredentialManager/wear/src/com/android/credentialmanager/ui/screens/multiple/MultiCredentialsFoldScreen.kt b/packages/CredentialManager/wear/src/com/android/credentialmanager/ui/screens/multiple/MultiCredentialsFoldScreen.kt index acf4eca64c0b..23163d568117 100644 --- a/packages/CredentialManager/wear/src/com/android/credentialmanager/ui/screens/multiple/MultiCredentialsFoldScreen.kt +++ b/packages/CredentialManager/wear/src/com/android/credentialmanager/ui/screens/multiple/MultiCredentialsFoldScreen.kt @@ -48,7 +48,7 @@ import com.android.credentialmanager.ui.components.CredentialsScreenChipSpacer @OptIn(ExperimentalHorologistApi::class) @Composable fun MultiCredentialsFoldScreen( - credentialSelectorUiState: CredentialSelectorUiState.Get.SingleEntryPerAccount, + credentialSelectorUiState: CredentialSelectorUiState.Get.MultipleEntryPrimaryScreen, columnState: ScalingLazyColumnState, flowEngine: FlowEngine, ) { @@ -68,7 +68,7 @@ fun MultiCredentialsFoldScreen( } SignInHeader( - icon = null, + icon = credentialSelectorUiState.icon, title = title, ) } |