Add back dialog when disabling provider

Adds back a dialog that will ask the
user to confirm their choice when
disabling the last credman provider.

Test: ondevice & make
Bug: 267816757
Change-Id: Icefde62efe7daa9aad2da7ad9d3fd37e40b4376b
This commit is contained in:
Becca Hughes
2023-02-10 21:19:57 +00:00
parent eb8ec1b1e4
commit 04fe12449e

View File

@@ -293,8 +293,19 @@ public class CredentialManagerPreferenceController extends BasePreferenceControl
return true; return true;
} else { } else {
// Disable the provider. // If we are disabling the last enabled provider then show a warning.
togglePackageNameDisabled(packageName); if (mEnabledPackageNames.size() <= 1) {
final DialogFragment fragment =
newConfirmationDialogFragment(packageName, title, pref);
if (fragment == null || mFragmentManager == null) {
return true;
}
fragment.show(mFragmentManager, ConfirmationDialogFragment.TAG);
} else {
togglePackageNameDisabled(packageName);
}
} }
return true; return true;
@@ -337,6 +348,29 @@ public class CredentialManagerPreferenceController extends BasePreferenceControl
return new ErrorDialogFragment(host); return new ErrorDialogFragment(host);
} }
private @Nullable ConfirmationDialogFragment newConfirmationDialogFragment(
@NonNull String packageName,
@NonNull CharSequence appName,
@NonNull SwitchPreference pref) {
DialogHost host =
new DialogHost() {
@Override
public void onDialogClick(int whichButton) {
if (whichButton == DialogInterface.BUTTON_POSITIVE) {
// Since the package is now enabled then we
// should remove it from the enabled list.
togglePackageNameDisabled(packageName);
} else if (whichButton == DialogInterface.BUTTON_NEGATIVE) {
// Set the checked back to true because we
// backed out of turning this off.
pref.setChecked(true);
}
}
};
return new ConfirmationDialogFragment(host, packageName, appName);
}
private int getUser() { private int getUser() {
UserHandle workUser = getWorkProfileUser(); UserHandle workUser = getWorkProfileUser();
return workUser != null ? workUser.getIdentifier() : UserHandle.myUserId(); return workUser != null ? workUser.getIdentifier() : UserHandle.myUserId();
@@ -386,4 +420,44 @@ public class CredentialManagerPreferenceController extends BasePreferenceControl
@Override @Override
public void onClick(DialogInterface dialog, int which) {} public void onClick(DialogInterface dialog, int which) {}
} }
/**
* Confirmation dialog fragment shows a dialog to the user to confirm that they are disabling a
* provider.
*/
public static class ConfirmationDialogFragment extends CredentialManagerDialogFragment {
ConfirmationDialogFragment(
DialogHost dialogHost, @NonNull String packageName, @NonNull CharSequence appName) {
super(dialogHost);
final Bundle argument = new Bundle();
argument.putString(PACKAGE_NAME_KEY, packageName);
argument.putCharSequence(APP_NAME_KEY, appName);
setArguments(argument);
}
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
final Bundle bundle = getArguments();
final String title =
getContext()
.getString(
R.string.credman_confirmation_message_title,
bundle.getCharSequence(
CredentialManagerDialogFragment.APP_NAME_KEY));
return new AlertDialog.Builder(getActivity())
.setTitle(title)
.setMessage(getContext().getString(R.string.credman_confirmation_message))
.setPositiveButton(R.string.credman_confirmation_message_positive_button, this)
.setNegativeButton(android.R.string.cancel, this)
.create();
}
@Override
public void onClick(DialogInterface dialog, int which) {
getDialogHost().onDialogClick(which);
}
}
} }