Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 77db500f authored by Daniel Norman's avatar Daniel Norman
Browse files

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
parent 60d28f7a
Loading
Loading
Loading
Loading
+5 −1
Original line number Diff line number Diff line
@@ -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) {
+18 −3
Original line number Diff line number Diff line
@@ -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}
+40 −13
Original line number Diff line number Diff line
@@ -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(),