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?,