summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Harini Rajan <harinirajan@google.com> 2024-04-11 20:47:35 +0000
committer Android (Google) Code Review <android-gerrit@google.com> 2024-04-11 20:47:35 +0000
commitf26f87f1d91315dacd00324e7ebdfd14abdaf2eb (patch)
tree283b0108c28ab8d1cc23665097dffa0844b61c93
parente736c103e325b756621c9307f2d4d9792db35772 (diff)
parent42ec75d87c2ec5426f563e25bafde116213fdf89 (diff)
Merge "Icon for multi credentials same provider screen" into main
-rw-r--r--packages/CredentialManager/wear/robotests/src/com/android/credentialmanager/CredentialSelectorUiStateGetMapperTest.kt17
-rw-r--r--packages/CredentialManager/wear/src/com/android/credentialmanager/CredentialSelectorViewModel.kt2
-rw-r--r--packages/CredentialManager/wear/src/com/android/credentialmanager/FlowEngine.kt9
-rw-r--r--packages/CredentialManager/wear/src/com/android/credentialmanager/ui/WearApp.kt6
-rw-r--r--packages/CredentialManager/wear/src/com/android/credentialmanager/ui/mappers/CredentialSelectorUiStateGetMapper.kt18
-rw-r--r--packages/CredentialManager/wear/src/com/android/credentialmanager/ui/screens/multiple/MultiCredentialsFoldScreen.kt4
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,
)
}