diff --git a/packages/CredentialManager/res/values/strings.xml b/packages/CredentialManager/res/values/strings.xml
index ee512427fa9cf..168c8b36193aa 100644
--- a/packages/CredentialManager/res/values/strings.xml
+++ b/packages/CredentialManager/res/values/strings.xml
@@ -67,9 +67,8 @@
Create passkey in another device?
Use %1$s for all your sign-ins?
-
-
- This password manager will store your passwords and passkeys to help you easily sign in
+
+ This password manager for %1$s will store your passwords and passkeys to help you easily sign in
Set as default
diff --git a/packages/CredentialManager/src/com/android/credentialmanager/CredentialSelectorViewModel.kt b/packages/CredentialManager/src/com/android/credentialmanager/CredentialSelectorViewModel.kt
index 9b7139ccc26ec..a5c7494327531 100644
--- a/packages/CredentialManager/src/com/android/credentialmanager/CredentialSelectorViewModel.kt
+++ b/packages/CredentialManager/src/com/android/credentialmanager/CredentialSelectorViewModel.kt
@@ -130,6 +130,11 @@ class CredentialSelectorViewModel(
onInternalError()
}
+ fun onIllegalUiState(errorMessage: String) {
+ Log.w(Constants.LOG_TAG, errorMessage)
+ onInternalError()
+ }
+
private fun onInternalError() {
Log.w(Constants.LOG_TAG, "UI closed due to illegal internal state")
credManRepo.onParsingFailureCancel()
diff --git a/packages/CredentialManager/src/com/android/credentialmanager/createflow/CreateCredentialComponents.kt b/packages/CredentialManager/src/com/android/credentialmanager/createflow/CreateCredentialComponents.kt
index 5b175bf07abeb..b83c593fdffce 100644
--- a/packages/CredentialManager/src/com/android/credentialmanager/createflow/CreateCredentialComponents.kt
+++ b/packages/CredentialManager/src/com/android/credentialmanager/createflow/CreateCredentialComponents.kt
@@ -120,11 +120,20 @@ fun CreateCredentialScreen(
viewModel::createFlowOnDisabledProvidersSelected,
onRemoteEntrySelected = viewModel::createFlowOnEntrySelected,
)
- CreateScreenState.MORE_OPTIONS_ROW_INTRO -> MoreOptionsRowIntroCard(
- providerInfo = createCredentialUiState.activeEntry?.activeProvider!!,
- onChangeDefaultSelected = viewModel::createFlowOnChangeDefaultSelected,
- onUseOnceSelected = viewModel::createFlowOnUseOnceSelected,
- )
+ CreateScreenState.MORE_OPTIONS_ROW_INTRO -> {
+ if (createCredentialUiState.activeEntry == null) {
+ viewModel.onIllegalUiState("Expect active entry to be non-null" +
+ " upon default provider dialog.")
+ } else {
+ MoreOptionsRowIntroCard(
+ selectedEntry = createCredentialUiState.activeEntry,
+ onIllegalScreenState = viewModel::onIllegalUiState,
+ onChangeDefaultSelected =
+ viewModel::createFlowOnChangeDefaultSelected,
+ onUseOnceSelected = viewModel::createFlowOnUseOnceSelected,
+ )
+ }
+ }
CreateScreenState.EXTERNAL_ONLY_SELECTION -> ExternalOnlySelectionCard(
requestDisplayInfo = createCredentialUiState.requestDisplayInfo,
activeRemoteEntry =
@@ -331,7 +340,7 @@ fun MoreOptionsSelectionCard(
)
}) {
item { Divider(thickness = 8.dp, color = Color.Transparent) } // Top app bar has a 8dp
- // bottom padding already
+ // bottom padding already
item {
CredentialContainerCard {
Column(verticalArrangement = Arrangement.spacedBy(2.dp)) {
@@ -376,23 +385,31 @@ fun MoreOptionsSelectionCard(
@Composable
fun MoreOptionsRowIntroCard(
- providerInfo: EnabledProviderInfo,
+ selectedEntry: ActiveEntry,
+ onIllegalScreenState: (String) -> Unit,
onChangeDefaultSelected: () -> Unit,
onUseOnceSelected: () -> Unit,
) {
+ val entryInfo = selectedEntry.activeEntryInfo
+ if (entryInfo !is CreateOptionInfo) {
+ onIllegalScreenState("Encountered unexpected type of entry during the default provider" +
+ " dialog: ${entryInfo::class}")
+ return
+ }
SheetContainerCard {
item { HeadlineIcon(imageVector = Icons.Outlined.NewReleases) }
item { Divider(thickness = 24.dp, color = Color.Transparent) }
item {
HeadlineText(
text = stringResource(
- R.string.use_provider_for_all_title,
- providerInfo.displayName
- )
+ R.string.use_provider_for_all_title, selectedEntry.activeProvider.displayName)
)
}
item { Divider(thickness = 24.dp, color = Color.Transparent) }
- item { BodyMediumText(text = stringResource(R.string.use_provider_for_all_description)) }
+ item {
+ BodyMediumText(text = stringResource(
+ R.string.use_provider_for_all_description, entryInfo.userProviderDisplayName))
+ }
item {
CtaButtonRow(
leftButton = {
diff --git a/packages/CredentialManager/src/com/android/credentialmanager/createflow/CreateModel.kt b/packages/CredentialManager/src/com/android/credentialmanager/createflow/CreateModel.kt
index 192fa15714c60..4332fb34ce790 100644
--- a/packages/CredentialManager/src/com/android/credentialmanager/createflow/CreateModel.kt
+++ b/packages/CredentialManager/src/com/android/credentialmanager/createflow/CreateModel.kt
@@ -69,7 +69,7 @@ class CreateOptionInfo(
entrySubkey: String,
pendingIntent: PendingIntent?,
fillInIntent: Intent?,
- val userProviderDisplayName: String?,
+ val userProviderDisplayName: String,
val profileIcon: Drawable?,
val passwordCount: Int?,
val passkeyCount: Int?,