summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Helen Qin <helenqin@google.com> 2023-03-03 20:13:01 +0000
committer Helen Qin <helenqin@google.com> 2023-03-03 20:13:01 +0000
commit65b28fd053712a40c0c3cc1630449bde04f796da (patch)
tree1b215495085e8feadfcfa08f671c90e214035481
parentc2634f8d6849995001aab674e8806180c0603304 (diff)
[CredManUi] Add account name to the default provider dialog.
Bug: 271340033 Test: manual (see bug for screenshot) Change-Id: I53848977115d925e1f3af04d7f08953a7130763d
-rw-r--r--packages/CredentialManager/res/values/strings.xml5
-rw-r--r--packages/CredentialManager/src/com/android/credentialmanager/CredentialSelectorViewModel.kt5
-rw-r--r--packages/CredentialManager/src/com/android/credentialmanager/createflow/CreateCredentialComponents.kt39
-rw-r--r--packages/CredentialManager/src/com/android/credentialmanager/createflow/CreateModel.kt2
4 files changed, 36 insertions, 15 deletions
diff --git a/packages/CredentialManager/res/values/strings.xml b/packages/CredentialManager/res/values/strings.xml
index ee512427fa9c..168c8b36193a 100644
--- a/packages/CredentialManager/res/values/strings.xml
+++ b/packages/CredentialManager/res/values/strings.xml
@@ -67,9 +67,8 @@
<string name="create_passkey_in_other_device_title">Create passkey in another device?</string>
<!-- This appears as the title of the modal bottom sheet for users to confirm whether they should use the selected provider as default or not. [CHAR LIMIT=200] -->
<string name="use_provider_for_all_title">Use <xliff:g id="providerInfoDisplayName" example="Google Password Manager">%1$s</xliff:g> for all your sign-ins?</string>
- <!-- TODO: Check the wording here. -->
- <!-- This appears as the description body of the modal bottom sheet for users to confirm whether they should use the selected provider as default or not. [CHAR LIMIT=200] -->
- <string name="use_provider_for_all_description">This password manager will store your passwords and passkeys to help you easily sign in</string>
+ <!-- This appears as the description body of the modal bottom sheet for users to confirm whether they should use the selected provider as default or not. [CHAR LIMIT=300] -->
+ <string name="use_provider_for_all_description">This password manager for <xliff:g id="username" example="becket@gmail.com">%1$s</xliff:g> will store your passwords and passkeys to help you easily sign in</string>
<!-- This is a label for a button that sets this password manager as the default. [CHAR LIMIT=20] -->
<string name="set_as_default">Set as default</string>
<!-- This is a label for a button that makes this password manager be used just in this specific case. [CHAR LIMIT=20] -->
diff --git a/packages/CredentialManager/src/com/android/credentialmanager/CredentialSelectorViewModel.kt b/packages/CredentialManager/src/com/android/credentialmanager/CredentialSelectorViewModel.kt
index 9b7139ccc26e..a5c749432753 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 5b175bf07abe..b83c593fdffc 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 192fa15714c6..4332fb34ce79 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?,