diff --git a/packages/CredentialManager/src/com/android/credentialmanager/CredentialManagerRepo.kt b/packages/CredentialManager/src/com/android/credentialmanager/CredentialManagerRepo.kt index 59186336056ee..46bf19c647594 100644 --- a/packages/CredentialManager/src/com/android/credentialmanager/CredentialManagerRepo.kt +++ b/packages/CredentialManager/src/com/android/credentialmanager/CredentialManagerRepo.kt @@ -1,6 +1,14 @@ package com.android.credentialmanager +import android.app.slice.Slice +import android.app.slice.SliceSpec import android.content.Context +import android.content.Intent +import android.credentials.ui.Entry +import android.credentials.ui.ProviderData +import android.credentials.ui.RequestInfo +import android.graphics.drawable.Icon +import android.os.Binder import com.android.credentialmanager.createflow.CreateOptionInfo import com.android.credentialmanager.createflow.CreatePasskeyUiState import com.android.credentialmanager.createflow.CreateScreenState @@ -11,8 +19,82 @@ import com.android.credentialmanager.getflow.GetScreenState // Consider repo per screen, similar to view model? class CredentialManagerRepo( - private val context: Context + private val context: Context, + intent: Intent, ) { + private val requestInfo: RequestInfo + private val providerList: List + + init { + requestInfo = intent.extras?.getParcelable( + RequestInfo.EXTRA_REQUEST_INFO, + RequestInfo::class.java + ) ?: RequestInfo( + Binder(), + RequestInfo.TYPE_CREATE, + /*isFirstUsage=*/false + ) + + providerList = intent.extras?.getParcelableArrayList( + ProviderData.EXTRA_PROVIDER_DATA_LIST, + ProviderData::class.java + ) ?: testProviderList() + } + + private fun testProviderList(): List { + return listOf( + ProviderData( + "com.google", + listOf( + newEntry(1, "elisa.beckett@gmail.com", "Elisa Backett"), + newEntry(2, "elisa.work@google.com", "Elisa Backett Work"), + ), + listOf( + newEntry(3, "Go to Settings", ""), + newEntry(4, "Switch Account", ""), + ), + null + ), + ProviderData( + "com.dashlane", + listOf( + newEntry(5, "elisa.beckett@dashlane.com", "Elisa Backett"), + newEntry(6, "elisa.work@dashlane.com", "Elisa Backett Work"), + ), + listOf( + newEntry(7, "Manage Accounts", "Manage your accounts in the dashlane app"), + ), + null + ), + ProviderData( + "com.lastpass", + listOf( + newEntry(8, "elisa.beckett@lastpass.com", "Elisa Backett"), + ), + listOf(), + null + ) + + ) + } + + private fun newEntry(id: Int, title: String, subtitle: String): Entry { + val slice = Slice.Builder( + Entry.CREDENTIAL_MANAGER_ENTRY_URI, SliceSpec(Entry.VERSION, 1) + ) + .addText(title, null, listOf(Entry.HINT_TITLE)) + .addText(subtitle, null, listOf(Entry.HINT_SUBTITLE)) + .addIcon( + Icon.createWithResource(context, R.drawable.ic_passkey), + null, + listOf(Entry.HINT_ICON)) + .build() + return Entry( + id, + slice + ) + } + private fun getCredentialProviderList(): List { return listOf( @@ -140,8 +222,11 @@ class CredentialManagerRepo( companion object { lateinit var repo: CredentialManagerRepo - fun setup(context: Context) { - repo = CredentialManagerRepo(context) + fun setup( + context: Context, + intent: Intent, + ) { + repo = CredentialManagerRepo(context, intent) } fun getInstance(): CredentialManagerRepo { diff --git a/packages/CredentialManager/src/com/android/credentialmanager/CredentialSelectorActivity.kt b/packages/CredentialManager/src/com/android/credentialmanager/CredentialSelectorActivity.kt index 5cd6a13a377a4..98c824cb77fc7 100644 --- a/packages/CredentialManager/src/com/android/credentialmanager/CredentialSelectorActivity.kt +++ b/packages/CredentialManager/src/com/android/credentialmanager/CredentialSelectorActivity.kt @@ -15,7 +15,7 @@ import com.android.credentialmanager.ui.theme.CredentialSelectorTheme class CredentialSelectorActivity : ComponentActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) - CredentialManagerRepo.setup(this) + CredentialManagerRepo.setup(this, intent) val startDestination = intent.extras?.getString( "start_destination", "CREATE_PASSKEY"