Loading packages/CredentialManager/src/com/android/credentialmanager/CredentialManagerRepo.kt +8 −6 Original line number Diff line number Diff line Loading @@ -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() Loading @@ -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 Loading packages/CredentialManager/src/com/android/credentialmanager/CredentialSelectorViewModel.kt +9 −3 Original line number Diff line number Diff line Loading @@ -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() Loading packages/CredentialManager/src/com/android/credentialmanager/DataConverter.kt +27 −10 Original line number Diff line number Diff line Loading @@ -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, Loading @@ -472,6 +475,7 @@ class CreateFlowUtils { appLabel, context.getDrawable(R.drawable.ic_password_24) ?: return null, preferImmediatelyAvailableCredentials = false, appPreferredDefaultProviderId = appPreferredDefaultProviderId, ) is CreatePublicKeyCredentialRequest -> { newRequestDisplayInfoFromPasskeyJson( Loading @@ -480,6 +484,7 @@ class CreateFlowUtils { context = context, preferImmediatelyAvailableCredentials = createCredentialRequestJetpack.preferImmediatelyAvailableCredentials, appPreferredDefaultProviderId = appPreferredDefaultProviderId, ) } is CreateCustomCredentialRequest -> { Loading @@ -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 Loading @@ -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()) { Loading @@ -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, Loading Loading @@ -667,6 +682,7 @@ class CreateFlowUtils { appLabel: String, context: Context, preferImmediatelyAvailableCredentials: Boolean, appPreferredDefaultProviderId: String?, ): RequestDisplayInfo? { val json = JSONObject(requestJson) var passkeyUsername = "" Loading @@ -687,6 +703,7 @@ class CreateFlowUtils { appLabel, context.getDrawable(R.drawable.ic_passkey_24) ?: return null, preferImmediatelyAvailableCredentials, appPreferredDefaultProviderId, ) } } Loading packages/CredentialManager/src/com/android/credentialmanager/createflow/CreateModel.kt +1 −0 Original line number Diff line number Diff line Loading @@ -107,6 +107,7 @@ data class RequestDisplayInfo( val appName: String, val typeIcon: Drawable, val preferImmediatelyAvailableCredentials: Boolean, val appPreferredDefaultProviderId: String?, ) /** Loading Loading
packages/CredentialManager/src/com/android/credentialmanager/CredentialManagerRepo.kt +8 −6 Original line number Diff line number Diff line Loading @@ -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() Loading @@ -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 Loading
packages/CredentialManager/src/com/android/credentialmanager/CredentialSelectorViewModel.kt +9 −3 Original line number Diff line number Diff line Loading @@ -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() Loading
packages/CredentialManager/src/com/android/credentialmanager/DataConverter.kt +27 −10 Original line number Diff line number Diff line Loading @@ -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, Loading @@ -472,6 +475,7 @@ class CreateFlowUtils { appLabel, context.getDrawable(R.drawable.ic_password_24) ?: return null, preferImmediatelyAvailableCredentials = false, appPreferredDefaultProviderId = appPreferredDefaultProviderId, ) is CreatePublicKeyCredentialRequest -> { newRequestDisplayInfoFromPasskeyJson( Loading @@ -480,6 +484,7 @@ class CreateFlowUtils { context = context, preferImmediatelyAvailableCredentials = createCredentialRequestJetpack.preferImmediatelyAvailableCredentials, appPreferredDefaultProviderId = appPreferredDefaultProviderId, ) } is CreateCustomCredentialRequest -> { Loading @@ -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 Loading @@ -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()) { Loading @@ -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, Loading Loading @@ -667,6 +682,7 @@ class CreateFlowUtils { appLabel: String, context: Context, preferImmediatelyAvailableCredentials: Boolean, appPreferredDefaultProviderId: String?, ): RequestDisplayInfo? { val json = JSONObject(requestJson) var passkeyUsername = "" Loading @@ -687,6 +703,7 @@ class CreateFlowUtils { appLabel, context.getDrawable(R.drawable.ic_passkey_24) ?: return null, preferImmediatelyAvailableCredentials, appPreferredDefaultProviderId, ) } } Loading
packages/CredentialManager/src/com/android/credentialmanager/createflow/CreateModel.kt +1 −0 Original line number Diff line number Diff line Loading @@ -107,6 +107,7 @@ data class RequestDisplayInfo( val appName: String, val typeIcon: Drawable, val preferImmediatelyAvailableCredentials: Boolean, val appPreferredDefaultProviderId: String?, ) /** Loading