From 8e7b11c5db5cdc86beaad810beee468c8b9cf64f Mon Sep 17 00:00:00 2001 From: Helen Qin Date: Wed, 10 May 2023 01:46:52 +0000 Subject: [PATCH] Bug fixes for the create flow auto select. 1. Create flow auto select should trigger regardless of remote entry's presence 2. Parsing of the password & passkey requires a jetpack update. For this current release, will manually parse. Test: manual (see bug for recording) Bug: 281726583 Change-Id: I69d57f7ae38eb6f7dc3ba914ddc739888e83ef1e --- .../src/com/android/credentialmanager/DataConverter.kt | 10 ++++++++-- .../com/android/credentialmanager/common/Constants.kt | 2 ++ .../credentialmanager/createflow/CreateModel.kt | 1 - 3 files changed, 10 insertions(+), 3 deletions(-) diff --git a/packages/CredentialManager/src/com/android/credentialmanager/DataConverter.kt b/packages/CredentialManager/src/com/android/credentialmanager/DataConverter.kt index 70634f435ef19..b04c128736005 100644 --- a/packages/CredentialManager/src/com/android/credentialmanager/DataConverter.kt +++ b/packages/CredentialManager/src/com/android/credentialmanager/DataConverter.kt @@ -483,7 +483,10 @@ class CreateFlowUtils { createCredentialRequestJetpack.preferImmediatelyAvailableCredentials, appPreferredDefaultProviderId = appPreferredDefaultProviderId, userSetDefaultProviderIds = requestInfo.defaultProviderIds.toSet(), - isAutoSelectRequest = createCredentialRequestJetpack.isAutoSelectAllowed, + // The jetpack library requires a fix to parse this value correctly for + // the password type. For now, directly parse it ourselves. + isAutoSelectRequest = createCredentialRequest.credentialData.getBoolean( + Constants.BUNDLE_KEY_PREFER_IMMEDIATELY_AVAILABLE_CREDENTIALS, false), ) is CreatePublicKeyCredentialRequest -> { newRequestDisplayInfoFromPasskeyJson( @@ -494,7 +497,10 @@ class CreateFlowUtils { createCredentialRequestJetpack.preferImmediatelyAvailableCredentials, appPreferredDefaultProviderId = appPreferredDefaultProviderId, userSetDefaultProviderIds = requestInfo.defaultProviderIds.toSet(), - isAutoSelectRequest = createCredentialRequestJetpack.isAutoSelectAllowed, + // The jetpack library requires a fix to parse this value correctly for + // the passkey type. For now, directly parse it ourselves. + isAutoSelectRequest = createCredentialRequest.credentialData.getBoolean( + Constants.BUNDLE_KEY_PREFER_IMMEDIATELY_AVAILABLE_CREDENTIALS, false), ) } is CreateCustomCredentialRequest -> { diff --git a/packages/CredentialManager/src/com/android/credentialmanager/common/Constants.kt b/packages/CredentialManager/src/com/android/credentialmanager/common/Constants.kt index 37e21a8fc161b..c6dc5945d8868 100644 --- a/packages/CredentialManager/src/com/android/credentialmanager/common/Constants.kt +++ b/packages/CredentialManager/src/com/android/credentialmanager/common/Constants.kt @@ -19,5 +19,7 @@ package com.android.credentialmanager.common class Constants { companion object Constants { const val LOG_TAG = "CredentialSelector" + const val BUNDLE_KEY_PREFER_IMMEDIATELY_AVAILABLE_CREDENTIALS = + "androidx.credentials.BUNDLE_KEY_IS_AUTO_SELECT_ALLOWED" } } \ No newline at end of file diff --git a/packages/CredentialManager/src/com/android/credentialmanager/createflow/CreateModel.kt b/packages/CredentialManager/src/com/android/credentialmanager/createflow/CreateModel.kt index cf7a943f2c668..e9e8c2e0ccbf8 100644 --- a/packages/CredentialManager/src/com/android/credentialmanager/createflow/CreateModel.kt +++ b/packages/CredentialManager/src/com/android/credentialmanager/createflow/CreateModel.kt @@ -42,7 +42,6 @@ internal fun isFlowAutoSelectable( // applicable. uiState.currentScreenState != CreateScreenState.PASSKEY_INTRO && uiState.currentScreenState != CreateScreenState.MORE_ABOUT_PASSKEYS_INTRO && - uiState.remoteEntry == null && uiState.sortedCreateOptionsPairs.size == 1 && uiState.activeEntry?.activeEntryInfo?.let { it is CreateOptionInfo && it.allowAutoSelect