Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 3ec4aeb7 authored by harinirajan's avatar harinirajan
Browse files

Use flowEngine.getEntrySelector across credential screens

Test: Unit tests
Bug: 322797032
Change-Id: I78a437fad3bf8a7b83c1043be5048cf257bffd3d
parent 3056837d
Loading
Loading
Loading
Loading
+3 −27
Original line number Diff line number Diff line
@@ -15,7 +15,6 @@
 */
package com.android.credentialmanager.ui.screens.multiple

import androidx.activity.compose.rememberLauncherForActivityResult
import androidx.compose.foundation.layout.fillMaxSize
import androidx.compose.foundation.layout.padding
import androidx.compose.runtime.Composable
@@ -28,14 +27,11 @@ import com.android.credentialmanager.ui.components.SignInHeader
import com.android.credentialmanager.CredentialSelectorUiState.Get.MultipleEntry
import com.android.credentialmanager.FlowEngine
import com.android.credentialmanager.R
import com.android.credentialmanager.activity.StartBalIntentSenderForResultContract
import com.android.credentialmanager.ktx.getIntentSenderRequest
import com.android.credentialmanager.model.get.CredentialEntryInfo
import com.android.credentialmanager.ui.components.CredentialsScreenChip
import com.google.android.horologist.annotations.ExperimentalHorologistApi
import com.google.android.horologist.compose.layout.ScalingLazyColumn
import com.google.android.horologist.compose.layout.ScalingLazyColumnState
import androidx.activity.result.IntentSenderRequest

/**
 * Screen that shows multiple credentials to select from, grouped by accounts
@@ -52,6 +48,7 @@ fun MultiCredentialsFlattenScreen(
    columnState: ScalingLazyColumnState,
    flowEngine: FlowEngine,
) {
    val selectEntry = flowEngine.getEntrySelector()
    ScalingLazyColumn(
        columnState = columnState,
        modifier = Modifier.fillMaxSize(),
@@ -77,19 +74,9 @@ fun MultiCredentialsFlattenScreen(

            userNameEntries.sortedCredentialEntryList.forEach { credential: CredentialEntryInfo ->
                item {
                    val launcher = rememberLauncherForActivityResult(
                        StartBalIntentSenderForResultContract()
                    ) {
                        flowEngine.sendSelectionResult(credential, it.resultCode, it.data)
                    }

                    CredentialsScreenChip(
                        label = credential.userName,
                        onClick = {
                            credential.getIntentSenderRequest()?.let {
                                launcher.launch(it)
                            }
                        },
                        onClick = { selectEntry(credential, false) },
                        secondaryLabel = credential.credentialTypeDisplayName,
                        icon = credential.icon,
                    )
@@ -108,20 +95,9 @@ fun MultiCredentialsFlattenScreen(

        credentialSelectorUiState.actionEntryList.forEach {actionEntry ->
            item {
                val launcher = rememberLauncherForActivityResult(
                    StartBalIntentSenderForResultContract()
                ) {
                    flowEngine.sendSelectionResult(actionEntry, it.resultCode, it.data)
                }

                    CredentialsScreenChip(
                        label = actionEntry.title,
                        onClick = {
                              launcher.launch(
                                  IntentSenderRequest.Builder(
                                      checkNotNull(actionEntry.pendingIntent)).build()
                              )
                        },
                        onClick = { selectEntry(actionEntry, false) },
                        secondaryLabel = null,
                        icon = actionEntry.icon,
                    )
+3 −24
Original line number Diff line number Diff line
@@ -16,7 +16,6 @@

package com.android.credentialmanager.ui.screens.multiple

import androidx.activity.compose.rememberLauncherForActivityResult
import com.android.credentialmanager.R
import androidx.compose.ui.res.stringResource
import androidx.compose.foundation.layout.fillMaxSize
@@ -26,7 +25,6 @@ import androidx.compose.ui.Modifier
import androidx.compose.ui.unit.dp
import com.android.credentialmanager.CredentialSelectorUiState
import com.android.credentialmanager.FlowEngine
import com.android.credentialmanager.activity.StartBalIntentSenderForResultContract
import com.android.credentialmanager.model.get.CredentialEntryInfo
import com.android.credentialmanager.ui.components.DismissChip
import com.android.credentialmanager.ui.components.CredentialsScreenChip
@@ -37,8 +35,6 @@ import com.google.android.horologist.annotations.ExperimentalHorologistApi
import com.google.android.horologist.compose.layout.ScalingLazyColumn
import com.google.android.horologist.compose.layout.ScalingLazyColumnState
import com.android.credentialmanager.model.CredentialType
import com.android.credentialmanager.ktx.getIntentSenderRequest
import androidx.activity.result.IntentSenderRequest

/**
 * Screen that shows multiple credentials to select from.
@@ -53,6 +49,7 @@ fun MultiCredentialsFoldScreen(
    columnState: ScalingLazyColumnState,
    flowEngine: FlowEngine,
) {
    val selectEntry = flowEngine.getEntrySelector()
    ScalingLazyColumn(
        columnState = columnState,
        modifier = Modifier.fillMaxSize(),
@@ -77,17 +74,9 @@ fun MultiCredentialsFoldScreen(

        credentials.forEach { credential: CredentialEntryInfo ->
                item {
                    val launcher = rememberLauncherForActivityResult(
                        StartBalIntentSenderForResultContract()
                    ) {
                        flowEngine.sendSelectionResult(credential, it.resultCode, it.data)
                    }

                    CredentialsScreenChip(
                        label = credential.userName,
                        onClick = { credential.getIntentSenderRequest()?.let {
                            launcher.launch(it)
                        } },
                        onClick = { selectEntry(credential, false) },
                        secondaryLabel = credential.credentialTypeDisplayName,
                        icon = credential.icon,
                    )
@@ -96,18 +85,8 @@ fun MultiCredentialsFoldScreen(

        credentialSelectorUiState.authenticationEntryList.forEach { authenticationEntryInfo ->
            item {
                val launcher = rememberLauncherForActivityResult(
                    StartBalIntentSenderForResultContract()
                ) {
                    flowEngine.sendSelectionResult(authenticationEntryInfo, it.resultCode, it.data)
                }

                LockedProviderChip(authenticationEntryInfo) {
                    launcher.launch(
                        IntentSenderRequest.Builder(
                            checkNotNull(authenticationEntryInfo.pendingIntent)).build()
                    )
                }
                    selectEntry(authenticationEntryInfo, false) }
            }
        }
        item {
+2 −15
Original line number Diff line number Diff line
@@ -19,7 +19,6 @@
package com.android.credentialmanager.ui.screens.single.passkey

import androidx.compose.foundation.layout.Column
import androidx.activity.compose.rememberLauncherForActivityResult
import androidx.compose.foundation.layout.padding
import androidx.compose.runtime.Composable
import androidx.compose.ui.Modifier
@@ -28,8 +27,6 @@ import androidx.compose.ui.unit.dp
import com.android.credentialmanager.FlowEngine
import com.android.credentialmanager.model.get.CredentialEntryInfo
import com.android.credentialmanager.R
import com.android.credentialmanager.activity.StartBalIntentSenderForResultContract
import com.android.credentialmanager.ktx.getIntentSenderRequest
import com.android.credentialmanager.ui.components.AccountRow
import com.android.credentialmanager.ui.components.ContinueChip
import com.android.credentialmanager.ui.components.DismissChip
@@ -38,8 +35,6 @@ import com.android.credentialmanager.ui.components.SignInOptionsChip
import com.android.credentialmanager.ui.screens.single.SingleAccountScreen
import com.google.android.horologist.annotations.ExperimentalHorologistApi
import com.google.android.horologist.compose.layout.ScalingLazyColumnState
import com.android.credentialmanager.TAG
import android.util.Log

/**
 * Screen that shows sign in with provider credential.
@@ -57,11 +52,6 @@ fun SinglePasskeyScreen(
    modifier: Modifier = Modifier,
    flowEngine: FlowEngine,
) {
    val launcher = rememberLauncherForActivityResult(
        StartBalIntentSenderForResultContract()
    ) {
        flowEngine.sendSelectionResult(entry, it.resultCode, it.data)
    }
    SingleAccountScreen(
        headerContent = {
            SignInHeader(
@@ -80,12 +70,9 @@ fun SinglePasskeyScreen(
        modifier = modifier.padding(horizontal = 10.dp)
    ) {
        item {
            val selectEntry = flowEngine.getEntrySelector()
            Column {
                ContinueChip {
                    entry.getIntentSenderRequest()?.let {
                        launcher.launch(it)
                    } ?: Log.w(TAG, "Cannot parse IntentSenderRequest")
                }
                ContinueChip { selectEntry(entry, false) }
                SignInOptionsChip{ flowEngine.openSecondaryScreen() }
                DismissChip { flowEngine.cancel() }
            }
+2 −15
Original line number Diff line number Diff line
@@ -16,9 +16,6 @@

package com.android.credentialmanager.ui.screens.single.signInWithProvider

import android.util.Log
import com.android.credentialmanager.TAG
import androidx.activity.compose.rememberLauncherForActivityResult
import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.padding
import androidx.compose.runtime.Composable
@@ -26,8 +23,6 @@ import androidx.compose.ui.Modifier
import androidx.compose.ui.unit.dp
import com.android.credentialmanager.FlowEngine
import com.android.credentialmanager.model.get.CredentialEntryInfo
import com.android.credentialmanager.activity.StartBalIntentSenderForResultContract
import com.android.credentialmanager.ktx.getIntentSenderRequest
import com.android.credentialmanager.ui.components.AccountRow
import com.android.credentialmanager.ui.components.ContinueChip
import com.android.credentialmanager.ui.components.DismissChip
@@ -53,11 +48,6 @@ fun SignInWithProviderScreen(
    modifier: Modifier = Modifier,
    flowEngine: FlowEngine,
) {
    val launcher = rememberLauncherForActivityResult(
        StartBalIntentSenderForResultContract()
    ) {
        flowEngine.sendSelectionResult(entry, it.resultCode, it.data)
    }
    SingleAccountScreen(
        headerContent = {
            SignInHeader(
@@ -84,12 +74,9 @@ fun SignInWithProviderScreen(
        modifier = modifier.padding(horizontal = 10.dp)
    ) {
        item {
            val selectEntry = flowEngine.getEntrySelector()
            Column {
                ContinueChip {
                    entry.getIntentSenderRequest()?.let {
                        launcher.launch(it)
                    } ?: Log.w(TAG, "Cannot parse IntentSenderRequest")
                }
                ContinueChip { selectEntry(entry, false) }
                SignInOptionsChip{ flowEngine.openSecondaryScreen() }
                DismissChip { flowEngine.cancel() }
            }