summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--packages/CredentialManager/src/com/android/credentialmanager/CredentialManagerRepo.kt14
-rw-r--r--packages/CredentialManager/src/com/android/credentialmanager/CredentialSelectorViewModel.kt12
-rw-r--r--packages/CredentialManager/src/com/android/credentialmanager/DataConverter.kt37
-rw-r--r--packages/CredentialManager/src/com/android/credentialmanager/createflow/CreateModel.kt1
4 files changed, 45 insertions, 19 deletions
diff --git a/packages/CredentialManager/src/com/android/credentialmanager/CredentialManagerRepo.kt b/packages/CredentialManager/src/com/android/credentialmanager/CredentialManagerRepo.kt
index e53e956c317c..a9bee039264e 100644
--- a/packages/CredentialManager/src/com/android/credentialmanager/CredentialManagerRepo.kt
+++ b/packages/CredentialManager/src/com/android/credentialmanager/CredentialManagerRepo.kt
@@ -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
diff --git a/packages/CredentialManager/src/com/android/credentialmanager/CredentialSelectorViewModel.kt b/packages/CredentialManager/src/com/android/credentialmanager/CredentialSelectorViewModel.kt
index 29ec970966d6..4d2bb4c6016a 100644
--- a/packages/CredentialManager/src/com/android/credentialmanager/CredentialSelectorViewModel.kt
+++ b/packages/CredentialManager/src/com/android/credentialmanager/CredentialSelectorViewModel.kt
@@ -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()
diff --git a/packages/CredentialManager/src/com/android/credentialmanager/DataConverter.kt b/packages/CredentialManager/src/com/android/credentialmanager/DataConverter.kt
index 64addf237f9b..e8d3b1f45be3 100644
--- a/packages/CredentialManager/src/com/android/credentialmanager/DataConverter.kt
+++ b/packages/CredentialManager/src/com/android/credentialmanager/DataConverter.kt
@@ -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,
)
}
}
diff --git a/packages/CredentialManager/src/com/android/credentialmanager/createflow/CreateModel.kt b/packages/CredentialManager/src/com/android/credentialmanager/createflow/CreateModel.kt
index 4332fb34ce79..12bb6298b282 100644
--- a/packages/CredentialManager/src/com/android/credentialmanager/createflow/CreateModel.kt
+++ b/packages/CredentialManager/src/com/android/credentialmanager/createflow/CreateModel.kt
@@ -107,6 +107,7 @@ data class RequestDisplayInfo(
val appName: String,
val typeIcon: Drawable,
val preferImmediatelyAvailableCredentials: Boolean,
+ val appPreferredDefaultProviderId: String?,
)
/**