diff --git a/res/values/strings.xml b/res/values/strings.xml
index 06f8fc99a3e..9988b139dc8 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -10276,13 +10276,10 @@
Saved info like passkeys and passwords may not be available when you sign in
- Turn on %1$s\?
+ Use %1$s\?
- Saved info like addresses or payment methods will be shared with this provider.
-
-
- Turn on
+ %1$s uses what\'s on your screen to determine what can be autofilled.
Passwords, passkeys and data services limit
diff --git a/src/com/android/settings/applications/credentials/CredentialManagerPreferenceController.java b/src/com/android/settings/applications/credentials/CredentialManagerPreferenceController.java
index 84b7bf0a7a6..7635f0607c4 100644
--- a/src/com/android/settings/applications/credentials/CredentialManagerPreferenceController.java
+++ b/src/com/android/settings/applications/credentials/CredentialManagerPreferenceController.java
@@ -225,7 +225,8 @@ public class CredentialManagerPreferenceController extends BasePreferenceControl
}
NewProviderConfirmationDialogFragment fragment =
- newNewProviderConfirmationDialogFragment(serviceInfo.packageName, appName);
+ newNewProviderConfirmationDialogFragment(
+ serviceInfo.packageName, appName, /* setActivityResult= */ true);
if (fragment == null || mFragmentManager == null) {
return;
}
@@ -477,20 +478,17 @@ public class CredentialManagerPreferenceController extends BasePreferenceControl
boolean isChecked = pref.isChecked();
if (isChecked) {
- // Show the error if too many enabled.
- if (!togglePackageNameEnabled(packageName)) {
- final DialogFragment fragment = newErrorDialogFragment();
-
- if (fragment == null || mFragmentManager == null) {
- return true;
- }
-
- fragment.show(mFragmentManager, ErrorDialogFragment.TAG);
-
- // The user set the check to true so we need to set it back.
- pref.setChecked(false);
+ // Since we are enabling it we should confirm the user decision with a
+ // dialog box.
+ NewProviderConfirmationDialogFragment fragment =
+ newNewProviderConfirmationDialogFragment(
+ packageName, title, /* setActivityResult= */ false);
+ if (fragment == null || mFragmentManager == null) {
+ return true;
}
+ fragment.show(mFragmentManager, NewProviderConfirmationDialogFragment.TAG);
+
return true;
} else {
// If we are disabling the last enabled provider then show a warning.
@@ -541,12 +539,15 @@ public class CredentialManagerPreferenceController extends BasePreferenceControl
/** Create the new provider confirmation dialog. */
private @Nullable NewProviderConfirmationDialogFragment
newNewProviderConfirmationDialogFragment(
- @NonNull String packageName, @NonNull CharSequence appName) {
+ @NonNull String packageName,
+ @NonNull CharSequence appName,
+ boolean setActivityResult) {
DialogHost host =
new DialogHost() {
@Override
public void onDialogClick(int whichButton) {
- completeEnableProviderDialogBox(whichButton, packageName);
+ completeEnableProviderDialogBox(
+ whichButton, packageName, setActivityResult);
}
};
@@ -554,17 +555,19 @@ public class CredentialManagerPreferenceController extends BasePreferenceControl
}
@VisibleForTesting
- void completeEnableProviderDialogBox(int whichButton, String packageName) {
+ void completeEnableProviderDialogBox(
+ int whichButton, String packageName, boolean setActivityResult) {
+ int activityResult = -1;
if (whichButton == DialogInterface.BUTTON_POSITIVE) {
if (togglePackageNameEnabled(packageName)) {
// Enable all prefs.
if (mPrefs.containsKey(packageName)) {
mPrefs.get(packageName).setChecked(true);
}
- setActivityResult(Activity.RESULT_OK);
+ activityResult = Activity.RESULT_OK;
} else {
// There are too many providers so set the result as cancelled.
- setActivityResult(Activity.RESULT_CANCELED);
+ activityResult = Activity.RESULT_CANCELED;
// Show the error if too many enabled.
final DialogFragment fragment = newErrorDialogFragment();
@@ -577,7 +580,13 @@ public class CredentialManagerPreferenceController extends BasePreferenceControl
}
} else {
// The user clicked the cancel button so send that result back.
- setActivityResult(Activity.RESULT_CANCELED);
+ activityResult = Activity.RESULT_CANCELED;
+ }
+
+ // If the dialog is being shown because of the intent we should
+ // return a result.
+ if (activityResult == -1 || !setActivityResult) {
+ setActivityResult(activityResult);
}
}
@@ -730,16 +739,17 @@ public class CredentialManagerPreferenceController extends BasePreferenceControl
public Dialog onCreateDialog(Bundle savedInstanceState) {
final Bundle bundle = getArguments();
final Context context = getContext();
+ final CharSequence appName =
+ bundle.getCharSequence(CredentialManagerDialogFragment.APP_NAME_KEY);
final String title =
- context.getString(
- R.string.credman_enable_confirmation_message_title,
- bundle.getCharSequence(CredentialManagerDialogFragment.APP_NAME_KEY));
+ context.getString(R.string.credman_enable_confirmation_message_title, appName);
+ final String message =
+ context.getString(R.string.credman_enable_confirmation_message, appName);
return new AlertDialog.Builder(getActivity())
.setTitle(title)
- .setMessage(context.getString(R.string.credman_enable_confirmation_message))
- .setPositiveButton(
- R.string.credman_enable_confirmation_message_positive_button, this)
+ .setMessage(message)
+ .setPositiveButton(android.R.string.ok, this)
.setNegativeButton(android.R.string.cancel, this)
.create();
}
diff --git a/tests/unit/src/com/android/settings/applications/credentials/CredentialManagerPreferenceControllerTest.java b/tests/unit/src/com/android/settings/applications/credentials/CredentialManagerPreferenceControllerTest.java
index 7f6857bdeef..f3877d5a174 100644
--- a/tests/unit/src/com/android/settings/applications/credentials/CredentialManagerPreferenceControllerTest.java
+++ b/tests/unit/src/com/android/settings/applications/credentials/CredentialManagerPreferenceControllerTest.java
@@ -390,7 +390,7 @@ public class CredentialManagerPreferenceControllerTest {
Intent intent = new Intent(Settings.ACTION_CREDENTIAL_PROVIDER);
intent.setData(Uri.parse("package:" + packageName));
assertThat(controller.verifyReceivedIntent(intent)).isTrue();
- controller.completeEnableProviderDialogBox(DialogInterface.BUTTON_POSITIVE, packageName);
+ controller.completeEnableProviderDialogBox(DialogInterface.BUTTON_POSITIVE, packageName, true);
assertThat(mReceivedResultCode.get()).isEqualTo(Activity.RESULT_OK);
}
@@ -405,7 +405,7 @@ public class CredentialManagerPreferenceControllerTest {
Intent intent = new Intent(Settings.ACTION_CREDENTIAL_PROVIDER);
intent.setData(Uri.parse("package:" + packageName));
assertThat(controller.verifyReceivedIntent(intent)).isTrue();
- controller.completeEnableProviderDialogBox(DialogInterface.BUTTON_NEGATIVE, packageName);
+ controller.completeEnableProviderDialogBox(DialogInterface.BUTTON_NEGATIVE, packageName, true);
assertThat(mReceivedResultCode.get()).isEqualTo(Activity.RESULT_CANCELED);
}