Icon for multi credentials same provider screen

Bug: 323607982
Test: Unit tests, Manual
Change-Id: Iaf6ff1b0150e235b57b36a29eb97c230ffb52ff7
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 3422d3d..6c14563 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 @@
             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 @@
                 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 b7fa33e..3608568 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 @@
         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 c05fc93..b2f55c1 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 @@
         /** 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 018db68..d67c8c2 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.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 @@
 
         scrollable(Screen.MultipleCredentialsScreenFold.route) {
             MultiCredentialsFoldScreen(
-                credentialSelectorUiState = (remember { uiState } as SingleEntryPerAccount),
+                credentialSelectorUiState = (remember { uiState } as MultipleEntryPrimaryScreen),
                 columnState = it.columnState,
                 flowEngine = flowEngine,
             )
@@ -169,7 +169,7 @@
             }
         }
 
-            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 7a936b6..0417533 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 @@
                 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 acf4eca..23163d5 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 @@
 @OptIn(ExperimentalHorologistApi::class)
 @Composable
 fun MultiCredentialsFoldScreen(
-    credentialSelectorUiState: CredentialSelectorUiState.Get.SingleEntryPerAccount,
+    credentialSelectorUiState: CredentialSelectorUiState.Get.MultipleEntryPrimaryScreen,
     columnState: ScalingLazyColumnState,
     flowEngine: FlowEngine,
 ) {
@@ -68,7 +68,7 @@
             }
 
             SignInHeader(
-                icon = null,
+                icon = credentialSelectorUiState.icon,
                 title = title,
             )
         }