Tech debt cleanup: Consolidates A11yService warning dialog.

Both frameworks/base and the Settings app define almost-identical copies
of a warning dialog shown when enabling an accessibility service.
The frameworks/base version was used for contexts outside of Settings
(e.g. while editing the volume key shortcut after triggering it with
2+ features already enabled) while the Settings version was used in
the Settings app.

This change replaces version used in Settings with the version defined
in frameworks/base.

The warning dialog's functionality is tested in
AccessibilityServiceWarningTest in frameworks/base.

Feature flag:
`adb shell device_config override accessibility android.view.accessibility.deduplicate_accessibility_warning_dialog true`

Bug: 303511250
Test: atest AccessibilityServiceWarningTest
Test: existing A11ySettings robotests
Change-Id: Iad2f13040d53d82a4afb0353fae3ac355b5548d6
This commit is contained in:
Daniel Norman
2023-11-01 21:09:03 +00:00
parent 60d28f7a8e
commit 77db500fcb
3 changed files with 63 additions and 17 deletions

View File

@@ -67,7 +67,11 @@ public class AccessibilityServiceWarning {
void uninstallPackage();
}
/** Returns a {@link Dialog} to be shown to confirm that they want to enable a service. */
/**
* Returns a {@link Dialog} to be shown to confirm that they want to enable a service.
* @deprecated Use {@link com.android.internal.accessibility.dialog.AccessibilityServiceWarning}
*/
@Deprecated
public static Dialog createCapabilitiesDialog(@NonNull Context context,
@NonNull AccessibilityServiceInfo info, @NonNull View.OnClickListener listener,
@NonNull UninstallActionPerformer performer) {

View File

@@ -64,11 +64,26 @@ public class InvisibleToggleAccessibilityServicePreferenceFragment extends
@Override
void onDialogButtonFromShortcutToggleClicked(View view) {
super.onDialogButtonFromShortcutToggleClicked(view);
if (!android.view.accessibility.Flags.deduplicateAccessibilityWarningDialog()) {
if (view.getId() == R.id.permission_enable_allow_button) {
AccessibilityUtils.setAccessibilityServiceState(getContext(), mComponentName,
true);
}
}
}
/**
* {@inheritDoc}
*
* Enables accessibility service when user clicks permission allow button.
*/
@Override
void onAllowButtonFromShortcutToggleClicked() {
super.onAllowButtonFromShortcutToggleClicked();
if (android.view.accessibility.Flags.deduplicateAccessibilityWarningDialog()) {
AccessibilityUtils.setAccessibilityServiceState(getContext(), mComponentName, true);
}
}
/**
* {@inheritDoc}

View File

@@ -157,28 +157,55 @@ public class ToggleAccessibilityServicePreferenceFragment extends
if (info == null) {
return null;
}
if (android.view.accessibility.Flags.deduplicateAccessibilityWarningDialog()) {
mWarningDialog =
com.android.internal.accessibility.dialog.AccessibilityServiceWarning
.createAccessibilityServiceWarningDialog(getPrefContext(), info,
v -> onAllowButtonFromEnableToggleClicked(),
v -> onDenyButtonFromEnableToggleClicked(),
v -> onDialogButtonFromUninstallClicked());
} else {
mWarningDialog = AccessibilityServiceWarning
.createCapabilitiesDialog(getPrefContext(), info,
this::onDialogButtonFromEnableToggleClicked,
this::onDialogButtonFromUninstallClicked);
}
return mWarningDialog;
case DialogEnums.ENABLE_WARNING_FROM_SHORTCUT_TOGGLE:
if (info == null) {
return null;
}
if (android.view.accessibility.Flags.deduplicateAccessibilityWarningDialog()) {
mWarningDialog =
com.android.internal.accessibility.dialog.AccessibilityServiceWarning
.createAccessibilityServiceWarningDialog(getPrefContext(), info,
v -> onAllowButtonFromShortcutToggleClicked(),
v -> onDenyButtonFromShortcutToggleClicked(),
v -> onDialogButtonFromUninstallClicked());
} else {
mWarningDialog = AccessibilityServiceWarning
.createCapabilitiesDialog(getPrefContext(), info,
this::onDialogButtonFromShortcutToggleClicked,
this::onDialogButtonFromUninstallClicked);
}
return mWarningDialog;
case DialogEnums.ENABLE_WARNING_FROM_SHORTCUT:
if (info == null) {
return null;
}
if (android.view.accessibility.Flags.deduplicateAccessibilityWarningDialog()) {
mWarningDialog =
com.android.internal.accessibility.dialog.AccessibilityServiceWarning
.createAccessibilityServiceWarningDialog(getPrefContext(), info,
v -> onAllowButtonFromShortcutClicked(),
v -> onDenyButtonFromShortcutClicked(),
v -> onDialogButtonFromUninstallClicked());
} else {
mWarningDialog = AccessibilityServiceWarning
.createCapabilitiesDialog(getPrefContext(), info,
this::onDialogButtonFromShortcutClicked,
this::onDialogButtonFromUninstallClicked);
}
return mWarningDialog;
case DialogEnums.DISABLE_WARNING_FROM_TOGGLE:
if (info == null) {
@@ -459,7 +486,7 @@ public class ToggleAccessibilityServicePreferenceFragment extends
}
}
private void onAllowButtonFromShortcutToggleClicked() {
void onAllowButtonFromShortcutToggleClicked() {
mShortcutPreference.setChecked(true);
final int shortcutTypes = retrieveUserShortcutType(getPrefContext(),