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

Commit f1202262 authored by Helen Qin's avatar Helen Qin Committed by Automerger Merge Worker
Browse files

Merge "[CredManUi] Honor preferDefaultProvider for the create flow" into udc-dev am: 2bd76f57

parents e3b96ca3 2bd76f57
Loading
Loading
Loading
Loading
+8 −6
Original line number Diff line number Diff line
@@ -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
+9 −3
Original line number Diff line number Diff line
@@ -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()
+27 −10
Original line number Diff line number Diff line
@@ -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,
            )
        }
    }
+1 −0
Original line number Diff line number Diff line
@@ -107,6 +107,7 @@ data class RequestDisplayInfo(
  val appName: String,
  val typeIcon: Drawable,
  val preferImmediatelyAvailableCredentials: Boolean,
  val appPreferredDefaultProviderId: String?,
)

/**