Merge "[CredManUi] Honor preferDefaultProvider for the create flow" into udc-dev

This commit is contained in:
Helen Qin
2023-04-11 22:59:19 +00:00
committed by Android (Google) Code Review
4 changed files with 45 additions and 19 deletions

View File

@@ -107,7 +107,7 @@ class CredentialManagerRepo(
initialUiState = when (requestInfo?.type) {
RequestInfo.TYPE_CREATE -> {
val defaultProviderId = userConfigRepo.getDefaultProviderId()
val defaultProviderIdSetByUser = userConfigRepo.getDefaultProviderId()
val isPasskeyFirstUse = userConfigRepo.getIsPasskeyFirstUse()
val providerEnableListUiState = getCreateProviderEnableListInitialUiState()
val providerDisableListUiState = getCreateProviderDisableListInitialUiState()
@@ -115,12 +115,14 @@ class CredentialManagerRepo(
getCreateRequestDisplayInfoInitialUiState(originName)!!
UiState(
createCredentialUiState = CreateFlowUtils.toCreateCredentialUiState(
providerEnableListUiState,
providerDisableListUiState,
defaultProviderId,
requestDisplayInfoUiState,
enabledProviders = providerEnableListUiState,
disabledProviders = providerDisableListUiState,
defaultProviderIdPreferredByApp =
requestDisplayInfoUiState.appPreferredDefaultProviderId,
defaultProviderIdSetByUser = defaultProviderIdSetByUser,
requestDisplayInfo = requestDisplayInfoUiState,
isOnPasskeyIntroStateAlready = false,
isPasskeyFirstUse
isPasskeyFirstUse = isPasskeyFirstUse,
)!!,
getCredentialUiState = null,
cancelRequestState = cancelUiRequestState

View File

@@ -250,9 +250,15 @@ class CredentialSelectorViewModel(
return
}
val newUiState = CreateFlowUtils.toCreateCredentialUiState(
prevUiState.enabledProviders, prevUiState.disabledProviders,
userConfigRepo.getDefaultProviderId(), prevUiState.requestDisplayInfo, true,
userConfigRepo.getIsPasskeyFirstUse())
enabledProviders = prevUiState.enabledProviders,
disabledProviders = prevUiState.disabledProviders,
defaultProviderIdPreferredByApp =
prevUiState.requestDisplayInfo.appPreferredDefaultProviderId,
defaultProviderIdSetByUser = userConfigRepo.getDefaultProviderId(),
requestDisplayInfo = prevUiState.requestDisplayInfo,
isOnPasskeyIntroStateAlready = true,
isPasskeyFirstUse = userConfigRepo.getIsPasskeyFirstUse()
)
if (newUiState == null) {
Log.d(Constants.LOG_TAG, "Unable to update create ui state")
onInternalError()

View File

@@ -464,6 +464,9 @@ class CreateFlowUtils {
createCredentialRequest.candidateQueryData,
createCredentialRequest.isSystemProviderRequired
)
val appPreferredDefaultProviderId: String? =
if (!requestInfo.hasPermissionToOverrideDefault()) null
else createCredentialRequestJetpack?.displayInfo?.preferDefaultProvider
return when (createCredentialRequestJetpack) {
is CreatePasswordRequest -> RequestDisplayInfo(
createCredentialRequestJetpack.id,
@@ -472,6 +475,7 @@ class CreateFlowUtils {
appLabel,
context.getDrawable(R.drawable.ic_password_24) ?: return null,
preferImmediatelyAvailableCredentials = false,
appPreferredDefaultProviderId = appPreferredDefaultProviderId,
)
is CreatePublicKeyCredentialRequest -> {
newRequestDisplayInfoFromPasskeyJson(
@@ -480,6 +484,7 @@ class CreateFlowUtils {
context = context,
preferImmediatelyAvailableCredentials =
createCredentialRequestJetpack.preferImmediatelyAvailableCredentials,
appPreferredDefaultProviderId = appPreferredDefaultProviderId,
)
}
is CreateCustomCredentialRequest -> {
@@ -495,6 +500,7 @@ class CreateFlowUtils {
typeIcon = displayInfo.credentialTypeIcon?.loadDrawable(context)
?: context.getDrawable(R.drawable.ic_other_sign_in_24) ?: return null,
preferImmediatelyAvailableCredentials = false,
appPreferredDefaultProviderId = appPreferredDefaultProviderId,
)
}
else -> null
@@ -504,20 +510,27 @@ class CreateFlowUtils {
fun toCreateCredentialUiState(
enabledProviders: List<EnabledProviderInfo>,
disabledProviders: List<DisabledProviderInfo>?,
defaultProviderId: String?,
defaultProviderIdPreferredByApp: String?,
defaultProviderIdSetByUser: String?,
requestDisplayInfo: RequestDisplayInfo,
isOnPasskeyIntroStateAlready: Boolean,
isPasskeyFirstUse: Boolean,
): CreateCredentialUiState? {
var lastSeenProviderWithNonEmptyCreateOptions: EnabledProviderInfo? = null
var remoteEntry: RemoteInfo? = null
var defaultProvider: EnabledProviderInfo? = null
var defaultProviderPreferredByApp: EnabledProviderInfo? = null
var defaultProviderSetByUser: EnabledProviderInfo? = null
var createOptionsPairs:
MutableList<Pair<CreateOptionInfo, EnabledProviderInfo>> = mutableListOf()
enabledProviders.forEach { enabledProvider ->
if (defaultProviderId != null) {
if (enabledProvider.id == defaultProviderId) {
defaultProvider = enabledProvider
if (defaultProviderIdPreferredByApp != null) {
if (enabledProvider.id == defaultProviderIdPreferredByApp) {
defaultProviderPreferredByApp = enabledProvider
}
}
if (defaultProviderIdSetByUser != null) {
if (enabledProvider.id == defaultProviderIdSetByUser) {
defaultProviderSetByUser = enabledProvider
}
}
if (enabledProvider.createOptions.isNotEmpty()) {
@@ -536,12 +549,14 @@ class CreateFlowUtils {
remoteEntry = currRemoteEntry
}
}
val defaultProvider = defaultProviderPreferredByApp ?: defaultProviderSetByUser
val initialScreenState = toCreateScreenState(
/*createOptionSize=*/createOptionsPairs.size,
/*isOnPasskeyIntroStateAlready=*/isOnPasskeyIntroStateAlready,
/*requestDisplayInfo=*/requestDisplayInfo,
/*defaultProvider=*/defaultProvider, /*remoteEntry=*/remoteEntry,
/*isPasskeyFirstUse=*/isPasskeyFirstUse
createOptionSize = createOptionsPairs.size,
isOnPasskeyIntroStateAlready = isOnPasskeyIntroStateAlready,
requestDisplayInfo = requestDisplayInfo,
defaultProvider = defaultProvider,
remoteEntry = remoteEntry,
isPasskeyFirstUse = isPasskeyFirstUse
) ?: return null
return CreateCredentialUiState(
enabledProviders = enabledProviders,
@@ -667,6 +682,7 @@ class CreateFlowUtils {
appLabel: String,
context: Context,
preferImmediatelyAvailableCredentials: Boolean,
appPreferredDefaultProviderId: String?,
): RequestDisplayInfo? {
val json = JSONObject(requestJson)
var passkeyUsername = ""
@@ -687,6 +703,7 @@ class CreateFlowUtils {
appLabel,
context.getDrawable(R.drawable.ic_passkey_24) ?: return null,
preferImmediatelyAvailableCredentials,
appPreferredDefaultProviderId,
)
}
}

View File

@@ -107,6 +107,7 @@ data class RequestDisplayInfo(
val appName: String,
val typeIcon: Drawable,
val preferImmediatelyAvailableCredentials: Boolean,
val appPreferredDefaultProviderId: String?,
)
/**