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

Commit c7000ad7 authored by Riley Jones's avatar Riley Jones
Browse files

Handle UserShortcutType.GESTURE in AccessibilityManagerService

- Update the in-memory gesture targets in AMS when the Setting changes,
and notify interested clients (flag exempt - no UI can modify the gesture setting while unflagged)
- Handle enabling gesture shortcut type in AccessibilityManager (flag protected)
- Map the GESTURE type to the corresponding Setting and logging enum (flag exempt - see above)
- Have the shortcut chooser dialog read from the gesture Setting when in gesture navigation mode (flag exempt). This has been manually tested to work normally with the flag disabled.

NO_IFTTT= false positive, both regions modified
Note: The flag is in development stage, and it won't be turned on by building.
There is currently no interface that can enable a GESTURE type shortcut.

Test: atest com.android.server.accessibility com.android.internal.accessibility
Bug: 330775538
Flag: android.provider.a11yStandaloneGestureEnabled

Change-Id: I57bfd05c65b09317e6c988315d4481274de0d468
parent fbcec625
Loading
Loading
Loading
Loading
+3 −0
Original line number Diff line number Diff line
@@ -72,6 +72,7 @@ public final class ShortcutConstants {
            UserShortcutType.TRIPLETAP,
            UserShortcutType.TWOFINGER_DOUBLETAP,
            UserShortcutType.QUICK_SETTINGS,
            UserShortcutType.GESTURE
    })
    public @interface UserShortcutType {
        int DEFAULT = 0;
@@ -81,6 +82,7 @@ public final class ShortcutConstants {
        int TRIPLETAP = 1 << 2;
        int TWOFINGER_DOUBLETAP = 1 << 3;
        int QUICK_SETTINGS = 1 << 4;
        int GESTURE = 1 << 5;
        // LINT.ThenChange(:shortcut_type_array)
    }

@@ -95,6 +97,7 @@ public final class ShortcutConstants {
            UserShortcutType.TRIPLETAP,
            UserShortcutType.TWOFINGER_DOUBLETAP,
            UserShortcutType.QUICK_SETTINGS,
            UserShortcutType.GESTURE
            // LINT.ThenChange(:shortcut_type_intdef)
    };

+5 −1
Original line number Diff line number Diff line
@@ -20,6 +20,7 @@ import static android.view.WindowManagerPolicyConstants.NAV_BAR_MODE_GESTURAL;

import static com.android.internal.accessibility.AccessibilityShortcutController.MAGNIFICATION_COMPONENT_NAME;
import static com.android.internal.accessibility.AccessibilityShortcutController.MAGNIFICATION_CONTROLLER_NAME;
import static com.android.internal.accessibility.common.ShortcutConstants.UserShortcutType.GESTURE;
import static com.android.internal.accessibility.common.ShortcutConstants.UserShortcutType.SOFTWARE;
import static com.android.internal.accessibility.dialog.AccessibilityTargetHelper.getTargets;
import static com.android.internal.accessibility.util.AccessibilityStatsLogUtils.logAccessibilityButtonLongPressStatus;
@@ -66,6 +67,9 @@ public class AccessibilityButtonChooserActivity extends Activity {
                NAV_BAR_MODE_GESTURAL == getResources().getInteger(
                        com.android.internal.R.integer.config_navBarInteractionMode);

        final int targetType = (isGestureNavigateEnabled
                && android.provider.Flags.a11yStandaloneGestureEnabled()) ? GESTURE : SOFTWARE;

        if (isGestureNavigateEnabled) {
            final TextView promptPrologue = findViewById(R.id.accessibility_button_prompt_prologue);
            promptPrologue.setText(isTouchExploreOn
@@ -78,7 +82,7 @@ public class AccessibilityButtonChooserActivity extends Activity {
                    : R.string.accessibility_gesture_instructional_text);
        }

        mTargets.addAll(getTargets(this, SOFTWARE));
        mTargets.addAll(getTargets(this, targetType));

        final GridView gridview = findViewById(R.id.accessibility_button_chooser_grid);
        gridview.setAdapter(new ButtonTargetAdapter(mTargets));
+1 −5
Original line number Diff line number Diff line
@@ -18,7 +18,6 @@ package com.android.internal.accessibility.dialog;
import static com.android.internal.accessibility.common.ShortcutConstants.ShortcutMenuMode;
import static com.android.internal.accessibility.common.ShortcutConstants.UserShortcutType;
import static com.android.internal.accessibility.common.ShortcutConstants.UserShortcutType.HARDWARE;
import static com.android.internal.accessibility.common.ShortcutConstants.UserShortcutType.SOFTWARE;
import static com.android.internal.accessibility.dialog.AccessibilityTargetHelper.getInstalledTargets;
import static com.android.internal.accessibility.dialog.AccessibilityTargetHelper.getTargets;
import static com.android.internal.accessibility.util.AccessibilityUtils.isUserSetupCompleted;
@@ -213,10 +212,7 @@ public class AccessibilityShortcutChooserActivity extends Activity {
        final boolean isEditMenuMode =
                mTargetAdapter.getShortcutMenuMode() == ShortcutMenuMode.EDIT;
        final int selectDialogTitleId = R.string.accessibility_select_shortcut_menu_title;
        final int editDialogTitleId =
                mShortcutType == SOFTWARE
                        ? R.string.accessibility_edit_shortcut_menu_button_title
                        : R.string.accessibility_edit_shortcut_menu_volume_title;
        final int editDialogTitleId = R.string.accessibility_edit_shortcut_menu_volume_title;

        mMenuDialog.setTitle(getString(isEditMenuMode ? editDialogTitleId : selectDialogTitleId));
        mMenuDialog.getButton(DialogInterface.BUTTON_POSITIVE).setOnClickListener(
+4 −0
Original line number Diff line number Diff line
@@ -16,6 +16,7 @@

package com.android.internal.accessibility.dialog;

import static com.android.internal.accessibility.common.ShortcutConstants.UserShortcutType.GESTURE;
import static com.android.internal.accessibility.common.ShortcutConstants.UserShortcutType.HARDWARE;
import static com.android.internal.accessibility.common.ShortcutConstants.UserShortcutType.SOFTWARE;
import static com.android.internal.accessibility.util.ShortcutUtils.optInValueToSettings;
@@ -197,6 +198,9 @@ public abstract class AccessibilityTarget implements TargetOperations, OnTargetS
    @VisibleForTesting
    public static boolean isRecognizedShortcutType(@UserShortcutType int shortcutType) {
        int mask = SOFTWARE | HARDWARE;
        if (android.provider.Flags.a11yStandaloneGestureEnabled()) {
            mask = mask | GESTURE;
        }
        return (shortcutType != 0 && (shortcutType & mask) == shortcutType);
    }
}
+3 −0
Original line number Diff line number Diff line
@@ -23,6 +23,7 @@ import static android.provider.Settings.Secure.ACCESSIBILITY_MAGNIFICATION_MODE_
import static android.provider.Settings.Secure.ACCESSIBILITY_MAGNIFICATION_MODE_WINDOW;

import static com.android.internal.accessibility.AccessibilityShortcutController.MAGNIFICATION_COMPONENT_NAME;
import static com.android.internal.accessibility.common.ShortcutConstants.UserShortcutType.GESTURE;
import static com.android.internal.accessibility.common.ShortcutConstants.UserShortcutType.HARDWARE;
import static com.android.internal.accessibility.common.ShortcutConstants.UserShortcutType.QUICK_SETTINGS;
import static com.android.internal.accessibility.common.ShortcutConstants.UserShortcutType.SOFTWARE;
@@ -247,6 +248,8 @@ public final class AccessibilityStatsLogUtils {
                } else {
                    return ACCESSIBILITY_SHORTCUT_REPORTED__SHORTCUT_TYPE__A11Y_BUTTON;
                }
            case GESTURE:
                return ACCESSIBILITY_SHORTCUT_REPORTED__SHORTCUT_TYPE__A11Y_GESTURE;
            case HARDWARE:
                return ACCESSIBILITY_SHORTCUT_REPORTED__SHORTCUT_TYPE__VOLUME_KEY;
            case QUICK_SETTINGS:
Loading