Merge "[CredManUi] Honor preferDefaultProvider for the create flow" into udc-dev
This commit is contained in:
@@ -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
|
||||
|
||||
@@ -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()
|
||||
|
||||
@@ -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,
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -107,6 +107,7 @@ data class RequestDisplayInfo(
|
||||
val appName: String,
|
||||
val typeIcon: Drawable,
|
||||
val preferImmediatelyAvailableCredentials: Boolean,
|
||||
val appPreferredDefaultProviderId: String?,
|
||||
)
|
||||
|
||||
/**
|
||||
|
||||
Reference in New Issue
Block a user