diff options
25 files changed, 184 insertions, 216 deletions
diff --git a/core/java/android/view/accessibility/AccessibilityManager.java b/core/java/android/view/accessibility/AccessibilityManager.java index 49d2ceb8fecf..7782fd7e6c2a 100644 --- a/core/java/android/view/accessibility/AccessibilityManager.java +++ b/core/java/android/view/accessibility/AccessibilityManager.java @@ -66,6 +66,7 @@ import android.view.View; import android.view.accessibility.AccessibilityEvent.EventType; import com.android.internal.R; +import com.android.internal.accessibility.common.ShortcutConstants; import com.android.internal.annotations.VisibleForTesting; import com.android.internal.util.IntPair; @@ -155,22 +156,6 @@ public final class AccessibilityManager { public static final String ACTION_CHOOSE_ACCESSIBILITY_BUTTON = "com.android.internal.intent.action.CHOOSE_ACCESSIBILITY_BUTTON"; - /** - * Used as an int value for accessibility chooser activity to represent the accessibility button - * shortcut type. - * - * @hide - */ - public static final int ACCESSIBILITY_BUTTON = 0; - - /** - * Used as an int value for accessibility chooser activity to represent hardware key shortcut, - * such as volume key button. - * - * @hide - */ - public static final int ACCESSIBILITY_SHORTCUT_KEY = 1; - /** @hide */ public static final int FLASH_REASON_CALL = 1; @@ -184,32 +169,6 @@ public final class AccessibilityManager { public static final int FLASH_REASON_PREVIEW = 4; /** - * Annotations for the shortcut type. - * <p>Note: Keep in sync with {@link #SHORTCUT_TYPES}.</p> - * @hide - */ - @Retention(RetentionPolicy.SOURCE) - @IntDef(value = { - // LINT.IfChange(shortcut_type_intdef) - ACCESSIBILITY_BUTTON, - ACCESSIBILITY_SHORTCUT_KEY - // LINT.ThenChange(:shortcut_type_array) - }) - public @interface ShortcutType {} - - /** - * Used for iterating through {@link ShortcutType}. - * <p>Note: Keep in sync with {@link ShortcutType}.</p> - * @hide - */ - public static final int[] SHORTCUT_TYPES = { - // LINT.IfChange(shortcut_type_array) - ACCESSIBILITY_BUTTON, - ACCESSIBILITY_SHORTCUT_KEY, - // LINT.ThenChange(:shortcut_type_intdef) - }; - - /** * Annotations for content flag of UI. * @hide */ @@ -1785,7 +1744,8 @@ public final class AccessibilityManager { @TestApi @RequiresPermission(Manifest.permission.MANAGE_ACCESSIBILITY) @NonNull - public List<String> getAccessibilityShortcutTargets(@ShortcutType int shortcutType) { + public List<String> getAccessibilityShortcutTargets( + @ShortcutConstants.UserShortcutType int shortcutType) { final IAccessibilityManager service; synchronized (mLock) { service = getServiceLocked(); diff --git a/core/java/com/android/internal/accessibility/AccessibilityShortcutController.java b/core/java/com/android/internal/accessibility/AccessibilityShortcutController.java index de0f070b01a3..b4395a77c24b 100644 --- a/core/java/com/android/internal/accessibility/AccessibilityShortcutController.java +++ b/core/java/com/android/internal/accessibility/AccessibilityShortcutController.java @@ -18,7 +18,6 @@ package com.android.internal.accessibility; import static android.accessibilityservice.AccessibilityServiceInfo.FEEDBACK_ALL_MASK; import static android.view.WindowManager.LayoutParams.TYPE_KEYGUARD_DIALOG; -import static android.view.accessibility.AccessibilityManager.ACCESSIBILITY_SHORTCUT_KEY; import static com.android.internal.accessibility.dialog.AccessibilityTargetHelper.getTargets; import static com.android.internal.os.RoSystemProperties.SUPPORT_ONE_HANDED_MODE; @@ -329,7 +328,8 @@ public class AccessibilityShortcutController { } private AlertDialog createShortcutWarningDialog(int userId) { - List<AccessibilityTarget> targets = getTargets(mContext, ACCESSIBILITY_SHORTCUT_KEY); + List<AccessibilityTarget> targets = getTargets(mContext, + ShortcutConstants.UserShortcutType.HARDWARE); if (targets.size() == 0) { return null; } @@ -541,7 +541,7 @@ public class AccessibilityShortcutController { private ComponentName getShortcutTargetComponentName() { final List<String> shortcutTargets = mFrameworkObjectProvider .getAccessibilityManagerInstance(mContext) - .getAccessibilityShortcutTargets(ACCESSIBILITY_SHORTCUT_KEY); + .getAccessibilityShortcutTargets(ShortcutConstants.UserShortcutType.HARDWARE); if (shortcutTargets.size() != 1) { return null; } diff --git a/core/java/com/android/internal/accessibility/common/ShortcutConstants.java b/core/java/com/android/internal/accessibility/common/ShortcutConstants.java index 7ec8838699b3..353e1826a27a 100644 --- a/core/java/com/android/internal/accessibility/common/ShortcutConstants.java +++ b/core/java/com/android/internal/accessibility/common/ShortcutConstants.java @@ -44,19 +44,27 @@ public final class ShortcutConstants { * choose accessibility shortcut as preferred shortcut. * {@code TRIPLETAP} for displaying specifying magnification to be toggled via quickly * tapping screen 3 times as preferred shortcut. + * {@code TWO_FINGERS_TRIPLE_TAP} for displaying specifying magnification to be toggled via + * quickly tapping screen 3 times with two fingers as preferred shortcut. */ @Retention(RetentionPolicy.SOURCE) - @IntDef({ - UserShortcutType.DEFAULT, - UserShortcutType.SOFTWARE, - UserShortcutType.HARDWARE, - UserShortcutType.TRIPLETAP, - }) + @IntDef( + flag = true, + value = { + UserShortcutType.DEFAULT, + UserShortcutType.SOFTWARE, + UserShortcutType.HARDWARE, + UserShortcutType.TRIPLETAP, + UserShortcutType.TWO_FINGERS_TRIPLE_TAP, + }) public @interface UserShortcutType { int DEFAULT = 0; - int SOFTWARE = 1; // 1 << 0 - int HARDWARE = 2; // 1 << 1 - int TRIPLETAP = 4; // 1 << 2 + // LINT.IfChange(shortcut_type_intdef) + int SOFTWARE = 1; + int HARDWARE = 1 << 1; + int TRIPLETAP = 1 << 2; + int TWO_FINGERS_TRIPLE_TAP = 1 << 3; + // LINT.ThenChange(:shortcut_type_array) } /** @@ -64,9 +72,12 @@ public final class ShortcutConstants { * non-default IntDef types. */ public static final int[] USER_SHORTCUT_TYPES = { + // LINT.IfChange(shortcut_type_array) UserShortcutType.SOFTWARE, UserShortcutType.HARDWARE, - UserShortcutType.TRIPLETAP + UserShortcutType.TRIPLETAP, + UserShortcutType.TWO_FINGERS_TRIPLE_TAP, + // LINT.ThenChange(:shortcut_type_intdef) }; diff --git a/core/java/com/android/internal/accessibility/dialog/AccessibilityActivityTarget.java b/core/java/com/android/internal/accessibility/dialog/AccessibilityActivityTarget.java index 063154d9a6d6..33048dca12b0 100644 --- a/core/java/com/android/internal/accessibility/dialog/AccessibilityActivityTarget.java +++ b/core/java/com/android/internal/accessibility/dialog/AccessibilityActivityTarget.java @@ -17,14 +17,13 @@ package com.android.internal.accessibility.dialog; import static com.android.internal.accessibility.util.ShortcutUtils.convertToKey; -import static com.android.internal.accessibility.util.ShortcutUtils.convertToUserType; import static com.android.internal.accessibility.util.ShortcutUtils.isShortcutContained; import android.accessibilityservice.AccessibilityShortcutInfo; import android.annotation.NonNull; import android.content.Context; -import android.view.accessibility.AccessibilityManager.ShortcutType; +import com.android.internal.accessibility.common.ShortcutConstants; import com.android.internal.accessibility.common.ShortcutConstants.AccessibilityFragmentType; import com.android.internal.accessibility.common.ShortcutConstants.ShortcutMenuMode; @@ -33,7 +32,8 @@ import com.android.internal.accessibility.common.ShortcutConstants.ShortcutMenuM */ class AccessibilityActivityTarget extends AccessibilityTarget { - AccessibilityActivityTarget(Context context, @ShortcutType int shortcutType, + AccessibilityActivityTarget(Context context, + @ShortcutConstants.UserShortcutType int shortcutType, @NonNull AccessibilityShortcutInfo shortcutInfo) { super(context, shortcutType, @@ -44,7 +44,7 @@ class AccessibilityActivityTarget extends AccessibilityTarget { shortcutInfo.getActivityInfo().applicationInfo.uid, shortcutInfo.getActivityInfo().loadLabel(context.getPackageManager()), shortcutInfo.getActivityInfo().loadIcon(context.getPackageManager()), - convertToKey(convertToUserType(shortcutType))); + convertToKey(shortcutType)); } @Override diff --git a/core/java/com/android/internal/accessibility/dialog/AccessibilityButtonChooserActivity.java b/core/java/com/android/internal/accessibility/dialog/AccessibilityButtonChooserActivity.java index 7eb09e59601b..e084ebdaf3a8 100644 --- a/core/java/com/android/internal/accessibility/dialog/AccessibilityButtonChooserActivity.java +++ b/core/java/com/android/internal/accessibility/dialog/AccessibilityButtonChooserActivity.java @@ -17,7 +17,6 @@ package com.android.internal.accessibility.dialog; import static android.view.WindowManagerPolicyConstants.NAV_BAR_MODE_GESTURAL; -import static android.view.accessibility.AccessibilityManager.ACCESSIBILITY_BUTTON; import static com.android.internal.accessibility.AccessibilityShortcutController.MAGNIFICATION_COMPONENT_NAME; import static com.android.internal.accessibility.AccessibilityShortcutController.MAGNIFICATION_CONTROLLER_NAME; @@ -36,6 +35,7 @@ import android.widget.GridView; import android.widget.TextView; import com.android.internal.R; +import com.android.internal.accessibility.common.ShortcutConstants; import com.android.internal.widget.ResolverDrawerLayout; import java.util.ArrayList; @@ -85,7 +85,7 @@ public class AccessibilityButtonChooserActivity extends Activity { prompt.setVisibility(View.VISIBLE); } - mTargets.addAll(getTargets(this, ACCESSIBILITY_BUTTON)); + mTargets.addAll(getTargets(this, ShortcutConstants.UserShortcutType.SOFTWARE)); final GridView gridview = findViewById(R.id.accessibility_button_chooser_grid); gridview.setAdapter(new ButtonTargetAdapter(mTargets)); diff --git a/core/java/com/android/internal/accessibility/dialog/AccessibilityServiceTarget.java b/core/java/com/android/internal/accessibility/dialog/AccessibilityServiceTarget.java index 2b6913ca5e5a..7406da42507f 100644 --- a/core/java/com/android/internal/accessibility/dialog/AccessibilityServiceTarget.java +++ b/core/java/com/android/internal/accessibility/dialog/AccessibilityServiceTarget.java @@ -17,14 +17,13 @@ package com.android.internal.accessibility.dialog; import static com.android.internal.accessibility.util.ShortcutUtils.convertToKey; -import static com.android.internal.accessibility.util.ShortcutUtils.convertToUserType; import static com.android.internal.accessibility.util.ShortcutUtils.isShortcutContained; import android.accessibilityservice.AccessibilityServiceInfo; import android.annotation.NonNull; import android.content.Context; -import android.view.accessibility.AccessibilityManager.ShortcutType; +import com.android.internal.accessibility.common.ShortcutConstants; import com.android.internal.accessibility.common.ShortcutConstants.AccessibilityFragmentType; import com.android.internal.accessibility.common.ShortcutConstants.ShortcutMenuMode; @@ -36,7 +35,9 @@ class AccessibilityServiceTarget extends AccessibilityTarget { private final AccessibilityServiceInfo mAccessibilityServiceInfo; - AccessibilityServiceTarget(Context context, @ShortcutType int shortcutType, + AccessibilityServiceTarget( + Context context, + @ShortcutConstants.UserShortcutType int shortcutType, @AccessibilityFragmentType int fragmentType, @NonNull AccessibilityServiceInfo serviceInfo) { super(context, @@ -48,7 +49,7 @@ class AccessibilityServiceTarget extends AccessibilityTarget { serviceInfo.getResolveInfo().serviceInfo.applicationInfo.uid, serviceInfo.getResolveInfo().loadLabel(context.getPackageManager()), serviceInfo.getResolveInfo().loadIcon(context.getPackageManager()), - convertToKey(convertToUserType(shortcutType))); + convertToKey(shortcutType)); mAccessibilityServiceInfo = serviceInfo; } diff --git a/core/java/com/android/internal/accessibility/dialog/AccessibilityShortcutChooserActivity.java b/core/java/com/android/internal/accessibility/dialog/AccessibilityShortcutChooserActivity.java index 2e80b7e19516..8e2ec1bfd53d 100644 --- a/core/java/com/android/internal/accessibility/dialog/AccessibilityShortcutChooserActivity.java +++ b/core/java/com/android/internal/accessibility/dialog/AccessibilityShortcutChooserActivity.java @@ -15,10 +15,6 @@ */ package com.android.internal.accessibility.dialog; -import static android.view.accessibility.AccessibilityManager.ACCESSIBILITY_BUTTON; -import static android.view.accessibility.AccessibilityManager.ACCESSIBILITY_SHORTCUT_KEY; -import static android.view.accessibility.AccessibilityManager.ShortcutType; - import static com.android.internal.accessibility.common.ShortcutConstants.ShortcutMenuMode; import static com.android.internal.accessibility.dialog.AccessibilityTargetHelper.createEnableDialogContentView; import static com.android.internal.accessibility.dialog.AccessibilityTargetHelper.getInstalledTargets; @@ -42,6 +38,7 @@ import android.view.accessibility.Flags; import android.widget.AdapterView; import com.android.internal.R; +import com.android.internal.accessibility.common.ShortcutConstants; import com.android.internal.annotations.VisibleForTesting; import java.util.ArrayList; @@ -52,8 +49,8 @@ import java.util.List; * activity or allowlisting feature for volume key shortcut. */ public class AccessibilityShortcutChooserActivity extends Activity { - @ShortcutType - private final int mShortcutType = ACCESSIBILITY_SHORTCUT_KEY; + @ShortcutConstants.UserShortcutType + private final int mShortcutType = ShortcutConstants.UserShortcutType.HARDWARE; private static final String KEY_ACCESSIBILITY_SHORTCUT_MENU_MODE = "accessibility_shortcut_menu_mode"; private final List<AccessibilityTarget> mTargets = new ArrayList<>(); @@ -246,7 +243,7 @@ public class AccessibilityShortcutChooserActivity extends Activity { mTargetAdapter.getShortcutMenuMode() == ShortcutMenuMode.EDIT; final int selectDialogTitleId = R.string.accessibility_select_shortcut_menu_title; final int editDialogTitleId = - mShortcutType == ACCESSIBILITY_BUTTON + mShortcutType == ShortcutConstants.UserShortcutType.SOFTWARE ? R.string.accessibility_edit_shortcut_menu_button_title : R.string.accessibility_edit_shortcut_menu_volume_title; diff --git a/core/java/com/android/internal/accessibility/dialog/AccessibilityTarget.java b/core/java/com/android/internal/accessibility/dialog/AccessibilityTarget.java index 652cb5233461..4ab1ee9d6b46 100644 --- a/core/java/com/android/internal/accessibility/dialog/AccessibilityTarget.java +++ b/core/java/com/android/internal/accessibility/dialog/AccessibilityTarget.java @@ -16,10 +16,6 @@ package com.android.internal.accessibility.dialog; -import static android.view.accessibility.AccessibilityManager.ACCESSIBILITY_BUTTON; -import static android.view.accessibility.AccessibilityManager.ACCESSIBILITY_SHORTCUT_KEY; - -import static com.android.internal.accessibility.util.ShortcutUtils.convertToUserType; import static com.android.internal.accessibility.util.ShortcutUtils.optInValueToSettings; import static com.android.internal.accessibility.util.ShortcutUtils.optOutValueFromSettings; @@ -30,7 +26,6 @@ import android.content.Context; import android.graphics.drawable.Drawable; import android.view.View; import android.view.accessibility.AccessibilityManager; -import android.view.accessibility.AccessibilityManager.ShortcutType; import com.android.internal.accessibility.common.ShortcutConstants; import com.android.internal.accessibility.common.ShortcutConstants.AccessibilityFragmentType; @@ -47,7 +42,7 @@ import com.android.internal.annotations.VisibleForTesting; public abstract class AccessibilityTarget implements TargetOperations, OnTargetSelectedListener, OnTargetCheckedChangeListener { private Context mContext; - @ShortcutType + @ShortcutConstants.UserShortcutType private int mShortcutType; @AccessibilityFragmentType private int mFragmentType; @@ -61,7 +56,8 @@ public abstract class AccessibilityTarget implements TargetOperations, OnTargetS private CharSequence mStateDescription; @VisibleForTesting - public AccessibilityTarget(Context context, @ShortcutType int shortcutType, + public AccessibilityTarget( + Context context, @ShortcutConstants.UserShortcutType int shortcutType, @AccessibilityFragmentType int fragmentType, boolean isShortcutSwitched, String id, int uid, CharSequence label, Drawable icon, String key) { mContext = context; @@ -99,10 +95,10 @@ public abstract class AccessibilityTarget implements TargetOperations, OnTargetS final AccessibilityManager am = getContext().getSystemService(AccessibilityManager.class); switch (getShortcutType()) { - case ACCESSIBILITY_BUTTON: + case ShortcutConstants.UserShortcutType.SOFTWARE: am.notifyAccessibilityButtonClicked(getContext().getDisplayId(), getId()); return; - case ACCESSIBILITY_SHORTCUT_KEY: + case ShortcutConstants.UserShortcutType.HARDWARE: am.performAccessibilityShortcut(getId()); return; default: @@ -114,9 +110,9 @@ public abstract class AccessibilityTarget implements TargetOperations, OnTargetS public void onCheckedChanged(boolean isChecked) { setShortcutEnabled(isChecked); if (isChecked) { - optInValueToSettings(getContext(), convertToUserType(getShortcutType()), getId()); + optInValueToSettings(getContext(), getShortcutType(), getId()); } else { - optOutValueFromSettings(getContext(), convertToUserType(getShortcutType()), getId()); + optOutValueFromSettings(getContext(), getShortcutType(), getId()); } } @@ -142,7 +138,7 @@ public abstract class AccessibilityTarget implements TargetOperations, OnTargetS return mContext; } - public @ShortcutType int getShortcutType() { + public @ShortcutConstants.UserShortcutType int getShortcutType() { return mShortcutType; } diff --git a/core/java/com/android/internal/accessibility/dialog/AccessibilityTargetHelper.java b/core/java/com/android/internal/accessibility/dialog/AccessibilityTargetHelper.java index 51a5ddfa8dd6..bd63e23a066f 100644 --- a/core/java/com/android/internal/accessibility/dialog/AccessibilityTargetHelper.java +++ b/core/java/com/android/internal/accessibility/dialog/AccessibilityTargetHelper.java @@ -16,8 +16,6 @@ package com.android.internal.accessibility.dialog; -import static android.view.accessibility.AccessibilityManager.ACCESSIBILITY_BUTTON; - import static com.android.internal.accessibility.AccessibilityShortcutController.ACCESSIBILITY_HEARING_AIDS_COMPONENT_NAME; import static com.android.internal.accessibility.AccessibilityShortcutController.COLOR_INVERSION_COMPONENT_NAME; import static com.android.internal.accessibility.AccessibilityShortcutController.DALTONIZER_COMPONENT_NAME; @@ -41,12 +39,12 @@ import android.text.BidiFormatter; import android.view.LayoutInflater; import android.view.View; import android.view.accessibility.AccessibilityManager; -import android.view.accessibility.AccessibilityManager.ShortcutType; import android.widget.Button; import android.widget.ImageView; import android.widget.TextView; import com.android.internal.R; +import com.android.internal.accessibility.common.ShortcutConstants; import com.android.internal.accessibility.common.ShortcutConstants.AccessibilityFragmentType; import java.util.ArrayList; @@ -70,8 +68,9 @@ public final class AccessibilityTargetHelper { * @return The list of {@link AccessibilityTarget}. * @hide */ - public static List<AccessibilityTarget> getTargets(Context context, - @ShortcutType int shortcutType) { + public static List<AccessibilityTarget> getTargets( + Context context, + @ShortcutConstants.UserShortcutType int shortcutType) { // List all accessibility target final List<AccessibilityTarget> installedTargets = getInstalledTargets(context, shortcutType); @@ -113,7 +112,7 @@ public final class AccessibilityTargetHelper { * @return The list of {@link AccessibilityTarget}. */ static List<AccessibilityTarget> getInstalledTargets(Context context, - @ShortcutType int shortcutType) { + @ShortcutConstants.UserShortcutType int shortcutType) { final List<AccessibilityTarget> targets = new ArrayList<>(); targets.addAll(getAccessibilityFilteredTargets(context, shortcutType)); targets.addAll(getAllowListingFeatureTargets(context, shortcutType)); @@ -122,7 +121,7 @@ public final class AccessibilityTargetHelper { } private static List<AccessibilityTarget> getAccessibilityFilteredTargets(Context context, - @ShortcutType int shortcutType) { + @ShortcutConstants.UserShortcutType int shortcutType) { final List<AccessibilityTarget> serviceTargets = getAccessibilityServiceTargets(context, shortcutType); final List<AccessibilityTarget> activityTargets = @@ -155,7 +154,7 @@ public final class AccessibilityTargetHelper { } private static List<AccessibilityTarget> getAccessibilityServiceTargets(Context context, - @ShortcutType int shortcutType) { + @ShortcutConstants.UserShortcutType int shortcutType) { final AccessibilityManager am = (AccessibilityManager) context.getSystemService( Context.ACCESSIBILITY_SERVICE); final List<AccessibilityServiceInfo> installedServices = @@ -171,7 +170,7 @@ public final class AccessibilityTargetHelper { final boolean hasRequestAccessibilityButtonFlag = (info.flags & AccessibilityServiceInfo.FLAG_REQUEST_ACCESSIBILITY_BUTTON) != 0; if ((targetSdk <= Build.VERSION_CODES.Q) && !hasRequestAccessibilityButtonFlag - && (shortcutType == ACCESSIBILITY_BUTTON)) { + && (shortcutType == ShortcutConstants.UserShortcutType.SOFTWARE)) { continue; } @@ -182,7 +181,7 @@ public final class AccessibilityTargetHelper { } private static List<AccessibilityTarget> getAccessibilityActivityTargets(Context context, - @ShortcutType int shortcutType) { + @ShortcutConstants.UserShortcutType int shortcutType) { final AccessibilityManager am = (AccessibilityManager) context.getSystemService( Context.ACCESSIBILITY_SERVICE); final List<AccessibilityShortcutInfo> installedServices = @@ -201,7 +200,7 @@ public final class AccessibilityTargetHelper { } private static List<AccessibilityTarget> getAllowListingFeatureTargets(Context context, - @ShortcutType int shortcutType) { + @ShortcutConstants.UserShortcutType int shortcutType) { final List<AccessibilityTarget> targets = new ArrayList<>(); final int uid = context.getApplicationInfo().uid; @@ -281,8 +280,10 @@ public final class AccessibilityTargetHelper { return targets; } - private static AccessibilityTarget createAccessibilityServiceTarget(Context context, - @ShortcutType int shortcutType, @NonNull AccessibilityServiceInfo info) { + private static AccessibilityTarget createAccessibilityServiceTarget( + Context context, + @ShortcutConstants.UserShortcutType int shortcutType, + @NonNull AccessibilityServiceInfo info) { switch (getAccessibilityServiceFragmentType(info)) { case AccessibilityFragmentType.VOLUME_SHORTCUT_TOGGLE: return new VolumeShortcutToggleAccessibilityServiceTarget(context, shortcutType, diff --git a/core/java/com/android/internal/accessibility/dialog/InvisibleToggleAccessibilityServiceTarget.java b/core/java/com/android/internal/accessibility/dialog/InvisibleToggleAccessibilityServiceTarget.java index 1bc8b84e6869..641a9f18e3d6 100644 --- a/core/java/com/android/internal/accessibility/dialog/InvisibleToggleAccessibilityServiceTarget.java +++ b/core/java/com/android/internal/accessibility/dialog/InvisibleToggleAccessibilityServiceTarget.java @@ -16,9 +16,6 @@ package com.android.internal.accessibility.dialog; -import static android.view.accessibility.AccessibilityManager.ACCESSIBILITY_BUTTON; -import static android.view.accessibility.AccessibilityManager.ACCESSIBILITY_SHORTCUT_KEY; - import static com.android.internal.accessibility.common.ShortcutConstants.UserShortcutType; import static com.android.internal.accessibility.util.AccessibilityUtils.setAccessibilityServiceState; import static com.android.internal.accessibility.util.ShortcutUtils.isComponentIdExistingInSettings; @@ -28,7 +25,6 @@ import android.annotation.NonNull; import android.content.ComponentName; import android.content.Context; import android.os.UserHandle; -import android.view.accessibility.AccessibilityManager.ShortcutType; import android.view.accessibility.Flags; import com.android.internal.accessibility.common.ShortcutConstants.AccessibilityFragmentType; @@ -45,7 +41,7 @@ import java.util.Set; public class InvisibleToggleAccessibilityServiceTarget extends AccessibilityServiceTarget { public InvisibleToggleAccessibilityServiceTarget( - Context context, @ShortcutType int shortcutType, + Context context, @UserShortcutType int shortcutType, @NonNull AccessibilityServiceInfo serviceInfo) { super(context, shortcutType, @@ -72,10 +68,10 @@ public class InvisibleToggleAccessibilityServiceTarget extends AccessibilityServ private boolean isComponentIdExistingInOtherShortcut() { switch (getShortcutType()) { - case ACCESSIBILITY_BUTTON: + case UserShortcutType.SOFTWARE: return isComponentIdExistingInSettings(getContext(), UserShortcutType.HARDWARE, getId()); - case ACCESSIBILITY_SHORTCUT_KEY: + case UserShortcutType.HARDWARE: return isComponentIdExistingInSettings(getContext(), UserShortcutType.SOFTWARE, getId()); default: diff --git a/core/java/com/android/internal/accessibility/dialog/InvisibleToggleAllowListingFeatureTarget.java b/core/java/com/android/internal/accessibility/dialog/InvisibleToggleAllowListingFeatureTarget.java index c22f17dfa967..2204c0beb4fd 100644 --- a/core/java/com/android/internal/accessibility/dialog/InvisibleToggleAllowListingFeatureTarget.java +++ b/core/java/com/android/internal/accessibility/dialog/InvisibleToggleAllowListingFeatureTarget.java @@ -18,8 +18,8 @@ package com.android.internal.accessibility.dialog; import android.content.Context; import android.graphics.drawable.Drawable; -import android.view.accessibility.AccessibilityManager.ShortcutType; +import com.android.internal.accessibility.common.ShortcutConstants; import com.android.internal.accessibility.common.ShortcutConstants.AccessibilityFragmentType; /** @@ -28,7 +28,8 @@ import com.android.internal.accessibility.common.ShortcutConstants.Accessibility */ class InvisibleToggleAllowListingFeatureTarget extends AccessibilityTarget { - InvisibleToggleAllowListingFeatureTarget(Context context, @ShortcutType int shortcutType, + InvisibleToggleAllowListingFeatureTarget(Context context, + @ShortcutConstants.UserShortcutType int shortcutType, boolean isShortcutSwitched, String id, int uid, CharSequence label, Drawable icon, String key) { super(context, shortcutType, AccessibilityFragmentType.INVISIBLE_TOGGLE, isShortcutSwitched, diff --git a/core/java/com/android/internal/accessibility/dialog/ToggleAccessibilityServiceTarget.java b/core/java/com/android/internal/accessibility/dialog/ToggleAccessibilityServiceTarget.java index a4ffef6bfbc2..a6ef73e90772 100644 --- a/core/java/com/android/internal/accessibility/dialog/ToggleAccessibilityServiceTarget.java +++ b/core/java/com/android/internal/accessibility/dialog/ToggleAccessibilityServiceTarget.java @@ -22,9 +22,9 @@ import android.accessibilityservice.AccessibilityServiceInfo; import android.annotation.NonNull; import android.content.Context; import android.view.View; -import android.view.accessibility.AccessibilityManager.ShortcutType; import com.android.internal.R; +import com.android.internal.accessibility.common.ShortcutConstants; import com.android.internal.accessibility.common.ShortcutConstants.AccessibilityFragmentType; import com.android.internal.accessibility.common.ShortcutConstants.ShortcutMenuMode; import com.android.internal.accessibility.dialog.TargetAdapter.ViewHolder; @@ -45,7 +45,8 @@ class ToggleAccessibilityServiceTarget extends AccessibilityServiceTarget { float DISABLED = 0.5f; } - ToggleAccessibilityServiceTarget(Context context, @ShortcutType int shortcutType, + ToggleAccessibilityServiceTarget(Context context, + @ShortcutConstants.UserShortcutType int shortcutType, @NonNull AccessibilityServiceInfo serviceInfo) { super(context, shortcutType, diff --git a/core/java/com/android/internal/accessibility/dialog/ToggleAllowListingFeatureTarget.java b/core/java/com/android/internal/accessibility/dialog/ToggleAllowListingFeatureTarget.java index 11e668f51774..2a9c555efce8 100644 --- a/core/java/com/android/internal/accessibility/dialog/ToggleAllowListingFeatureTarget.java +++ b/core/java/com/android/internal/accessibility/dialog/ToggleAllowListingFeatureTarget.java @@ -21,9 +21,9 @@ import android.content.Context; import android.graphics.drawable.Drawable; import android.provider.Settings; import android.view.View; -import android.view.accessibility.AccessibilityManager.ShortcutType; import com.android.internal.R; +import com.android.internal.accessibility.common.ShortcutConstants; import com.android.internal.accessibility.common.ShortcutConstants.AccessibilityFragmentType; import com.android.internal.accessibility.common.ShortcutConstants.ShortcutMenuMode; import com.android.internal.accessibility.dialog.TargetAdapter.ViewHolder; @@ -34,7 +34,8 @@ import com.android.internal.accessibility.dialog.TargetAdapter.ViewHolder; */ class ToggleAllowListingFeatureTarget extends AccessibilityTarget { - ToggleAllowListingFeatureTarget(Context context, @ShortcutType int shortcutType, + ToggleAllowListingFeatureTarget(Context context, + @ShortcutConstants.UserShortcutType int shortcutType, boolean isShortcutSwitched, String id, int uid, CharSequence label, Drawable icon, String key) { super(context, shortcutType, AccessibilityFragmentType.TOGGLE, isShortcutSwitched, id, diff --git a/core/java/com/android/internal/accessibility/dialog/VolumeShortcutToggleAccessibilityServiceTarget.java b/core/java/com/android/internal/accessibility/dialog/VolumeShortcutToggleAccessibilityServiceTarget.java index 04f5061fbd8e..4926e7218530 100644 --- a/core/java/com/android/internal/accessibility/dialog/VolumeShortcutToggleAccessibilityServiceTarget.java +++ b/core/java/com/android/internal/accessibility/dialog/VolumeShortcutToggleAccessibilityServiceTarget.java @@ -16,9 +16,6 @@ package com.android.internal.accessibility.dialog; -import static android.view.accessibility.AccessibilityManager.ACCESSIBILITY_BUTTON; -import static android.view.accessibility.AccessibilityManager.ACCESSIBILITY_SHORTCUT_KEY; - import static com.android.internal.accessibility.common.ShortcutConstants.UserShortcutType; import static com.android.internal.accessibility.util.AccessibilityUtils.setAccessibilityServiceState; import static com.android.internal.accessibility.util.ShortcutUtils.optOutValueFromSettings; @@ -27,7 +24,6 @@ import android.accessibilityservice.AccessibilityServiceInfo; import android.annotation.NonNull; import android.content.ComponentName; import android.content.Context; -import android.view.accessibility.AccessibilityManager.ShortcutType; import android.widget.Toast; import com.android.internal.R; @@ -39,7 +35,8 @@ import com.android.internal.accessibility.common.ShortcutConstants.Accessibility */ class VolumeShortcutToggleAccessibilityServiceTarget extends AccessibilityServiceTarget { - VolumeShortcutToggleAccessibilityServiceTarget(Context context, @ShortcutType int shortcutType, + VolumeShortcutToggleAccessibilityServiceTarget(Context context, + @UserShortcutType int shortcutType, @NonNull AccessibilityServiceInfo serviceInfo) { super(context, shortcutType, @@ -50,10 +47,10 @@ class VolumeShortcutToggleAccessibilityServiceTarget extends AccessibilityServic @Override public void onCheckedChanged(boolean isChecked) { switch (getShortcutType()) { - case ACCESSIBILITY_BUTTON: + case UserShortcutType.SOFTWARE: onCheckedFromAccessibilityButton(isChecked); return; - case ACCESSIBILITY_SHORTCUT_KEY: + case UserShortcutType.HARDWARE: super.onCheckedChanged(isChecked); return; default: diff --git a/core/java/com/android/internal/accessibility/util/AccessibilityStatsLogUtils.java b/core/java/com/android/internal/accessibility/util/AccessibilityStatsLogUtils.java index 6b074a610818..1e4bcf21c635 100644 --- a/core/java/com/android/internal/accessibility/util/AccessibilityStatsLogUtils.java +++ b/core/java/com/android/internal/accessibility/util/AccessibilityStatsLogUtils.java @@ -21,8 +21,6 @@ import static android.provider.Settings.Secure.ACCESSIBILITY_BUTTON_MODE_GESTURE import static android.provider.Settings.Secure.ACCESSIBILITY_MAGNIFICATION_MODE_ALL; import static android.provider.Settings.Secure.ACCESSIBILITY_MAGNIFICATION_MODE_FULLSCREEN; import static android.provider.Settings.Secure.ACCESSIBILITY_MAGNIFICATION_MODE_WINDOW; -import static android.view.accessibility.AccessibilityManager.ACCESSIBILITY_BUTTON; -import static android.view.accessibility.AccessibilityManager.ACCESSIBILITY_SHORTCUT_KEY; import static com.android.internal.accessibility.AccessibilityShortcutController.MAGNIFICATION_COMPONENT_NAME; import static com.android.internal.util.FrameworkStatsLog.ACCESSIBILITY_SHORTCUT_REPORTED__SERVICE_STATUS__DISABLED; @@ -47,9 +45,8 @@ import static com.android.internal.util.FrameworkStatsLog.NON_A11Y_TOOL_SERVICE_ import android.content.ComponentName; import android.content.Context; import android.provider.Settings; -import android.view.accessibility.AccessibilityManager; -import android.view.accessibility.AccessibilityManager.ShortcutType; +import com.android.internal.accessibility.common.ShortcutConstants; import com.android.internal.util.FrameworkStatsLog; /** Methods for logging accessibility states. */ @@ -71,15 +68,15 @@ public final class AccessibilityStatsLogUtils { /** * Logs accessibility feature name that is assigned to the given {@code shortcutType}. - * Calls this when clicking the shortcut {@link AccessibilityManager#ACCESSIBILITY_BUTTON} or - * {@link AccessibilityManager#ACCESSIBILITY_SHORTCUT_KEY}. + * Calls this when clicking the shortcut {@link ShortcutConstants.UserShortcutType.SOFTWARE} or + * {@link ShortcutConstants.UserShortcutType.HARDWARE}. * * @param context context used to retrieve the {@link Settings} provider * @param componentName component name of the accessibility feature * @param shortcutType accessibility shortcut type */ public static void logAccessibilityShortcutActivated(Context context, - ComponentName componentName, @ShortcutType int shortcutType) { + ComponentName componentName, @ShortcutConstants.UserShortcutType int shortcutType) { logAccessibilityShortcutActivatedInternal(componentName, convertToLoggingShortcutType(context, shortcutType), UNKNOWN_STATUS); } @@ -87,8 +84,8 @@ public final class AccessibilityStatsLogUtils { /** * Logs accessibility feature name that is assigned to the given {@code shortcutType} and the * {@code serviceEnabled} status. - * Calls this when clicking the shortcut {@link AccessibilityManager#ACCESSIBILITY_BUTTON} - * or {@link AccessibilityManager#ACCESSIBILITY_SHORTCUT_KEY}. + * Calls this when clicking the shortcut {@link ShortcutConstants.UserShortcutType.SOFTWARE} + * or {@link ShortcutConstants.UserShortcutType.HARDWARE}. * * @param context context used to retrieve the {@link Settings} provider * @param componentName component name of the accessibility feature @@ -96,7 +93,8 @@ public final class AccessibilityStatsLogUtils { * @param serviceEnabled {@code true} if the service is enabled */ public static void logAccessibilityShortcutActivated(Context context, - ComponentName componentName, @ShortcutType int shortcutType, boolean serviceEnabled) { + ComponentName componentName, @ShortcutConstants.UserShortcutType int shortcutType, + boolean serviceEnabled) { logAccessibilityShortcutActivatedInternal(componentName, convertToLoggingShortcutType(context, shortcutType), convertToLoggingServiceStatus(serviceEnabled)); @@ -235,9 +233,9 @@ public final class AccessibilityStatsLogUtils { } private static int convertToLoggingShortcutType(Context context, - @ShortcutType int shortcutType) { + @ShortcutConstants.UserShortcutType int shortcutType) { switch (shortcutType) { - case ACCESSIBILITY_BUTTON: + case ShortcutConstants.UserShortcutType.SOFTWARE: if (isAccessibilityFloatingMenuEnabled(context)) { return ACCESSIBILITY_SHORTCUT_REPORTED__SHORTCUT_TYPE__A11Y_FLOATING_MENU; } else if (isAccessibilityGestureEnabled(context)) { @@ -245,7 +243,7 @@ public final class AccessibilityStatsLogUtils { } else { return ACCESSIBILITY_SHORTCUT_REPORTED__SHORTCUT_TYPE__A11Y_BUTTON; } - case ACCESSIBILITY_SHORTCUT_KEY: + case ShortcutConstants.UserShortcutType.HARDWARE: return ACCESSIBILITY_SHORTCUT_REPORTED__SHORTCUT_TYPE__VOLUME_KEY; } return ACCESSIBILITY_SHORTCUT_REPORTED__SHORTCUT_TYPE__UNKNOWN_TYPE; diff --git a/core/java/com/android/internal/accessibility/util/ShortcutUtils.java b/core/java/com/android/internal/accessibility/util/ShortcutUtils.java index 3fd303038c57..276c5c4ffdea 100644 --- a/core/java/com/android/internal/accessibility/util/ShortcutUtils.java +++ b/core/java/com/android/internal/accessibility/util/ShortcutUtils.java @@ -16,9 +16,6 @@ package com.android.internal.accessibility.util; -import static android.view.accessibility.AccessibilityManager.ACCESSIBILITY_BUTTON; -import static android.view.accessibility.AccessibilityManager.ACCESSIBILITY_SHORTCUT_KEY; - import static com.android.internal.accessibility.AccessibilityShortcutController.MAGNIFICATION_CONTROLLER_NAME; import static com.android.internal.accessibility.common.ShortcutConstants.AccessibilityFragmentType.INVISIBLE_TOGGLE; import static com.android.internal.accessibility.common.ShortcutConstants.SERVICES_SEPARATOR; @@ -33,7 +30,6 @@ import android.provider.Settings; import android.text.TextUtils; import android.util.ArraySet; import android.view.accessibility.AccessibilityManager; -import android.view.accessibility.AccessibilityManager.ShortcutType; import java.util.Collections; import java.util.List; @@ -144,7 +140,7 @@ public final class ShortcutUtils { * @param componentId The component id that need to be checked. * @return {@code true} if a component id is contained. */ - public static boolean isShortcutContained(Context context, @ShortcutType int shortcutType, + public static boolean isShortcutContained(Context context, @UserShortcutType int shortcutType, @NonNull String componentId) { final AccessibilityManager am = (AccessibilityManager) context.getSystemService( Context.ACCESSIBILITY_SERVICE); @@ -166,6 +162,8 @@ public final class ShortcutUtils { return Settings.Secure.ACCESSIBILITY_SHORTCUT_TARGET_SERVICE; case UserShortcutType.TRIPLETAP: return Settings.Secure.ACCESSIBILITY_DISPLAY_MAGNIFICATION_ENABLED; + case UserShortcutType.TWO_FINGERS_TRIPLE_TAP: + return Settings.Secure.ACCESSIBILITY_MAGNIFICATION_TWO_FINGER_TRIPLE_TAP_ENABLED; default: throw new IllegalArgumentException( "Unsupported user shortcut type: " + type); @@ -173,24 +171,6 @@ public final class ShortcutUtils { } /** - * Converts {@link ShortcutType} to {@link UserShortcutType}. - * - * @param type The shortcut type. - * @return Mapping type from {@link UserShortcutType}. - */ - public static @UserShortcutType int convertToUserType(@ShortcutType int type) { - switch (type) { - case ACCESSIBILITY_BUTTON: - return UserShortcutType.SOFTWARE; - case ACCESSIBILITY_SHORTCUT_KEY: - return UserShortcutType.HARDWARE; - default: - throw new IllegalArgumentException( - "Unsupported shortcut type:" + type); - } - } - - /** * Updates an accessibility state if the accessibility service is a Always-On a11y service, * a.k.a. AccessibilityServices that has FLAG_REQUEST_ACCESSIBILITY_BUTTON * <p> @@ -255,12 +235,13 @@ public final class ShortcutUtils { public static Set<String> getShortcutTargetsFromSettings( Context context, @UserShortcutType int shortcutType, int userId) { final String targetKey = convertToKey(shortcutType); - if (Settings.Secure.ACCESSIBILITY_DISPLAY_MAGNIFICATION_ENABLED.equals(targetKey)) { + if (Settings.Secure.ACCESSIBILITY_DISPLAY_MAGNIFICATION_ENABLED.equals(targetKey) + || Settings.Secure.ACCESSIBILITY_MAGNIFICATION_TWO_FINGER_TRIPLE_TAP_ENABLED + .equals(targetKey)) { boolean magnificationEnabled = Settings.Secure.getIntForUser( context.getContentResolver(), targetKey, /* def= */ 0, userId) == 1; return magnificationEnabled ? Set.of(MAGNIFICATION_CONTROLLER_NAME) : Collections.emptySet(); - } else { final String targetString = Settings.Secure.getStringForUser( context.getContentResolver(), targetKey, userId); diff --git a/core/tests/coretests/src/com/android/internal/accessibility/AccessibilityShortcutControllerTest.java b/core/tests/coretests/src/com/android/internal/accessibility/AccessibilityShortcutControllerTest.java index 75b0d4a159d9..145aa60dc495 100644 --- a/core/tests/coretests/src/com/android/internal/accessibility/AccessibilityShortcutControllerTest.java +++ b/core/tests/coretests/src/com/android/internal/accessibility/AccessibilityShortcutControllerTest.java @@ -21,7 +21,6 @@ import static android.provider.Settings.Secure.ACCESSIBILITY_SHORTCUT_DIALOG_SHO import static android.provider.Settings.Secure.ACCESSIBILITY_SHORTCUT_ON_LOCK_SCREEN; import static android.provider.Settings.Secure.ACCESSIBILITY_SHORTCUT_TARGET_SERVICE; import static android.provider.Settings.Secure.ENABLED_ACCESSIBILITY_SERVICES; -import static android.view.accessibility.AccessibilityManager.ACCESSIBILITY_SHORTCUT_KEY; import static com.android.internal.accessibility.AccessibilityShortcutController.ACCESSIBILITY_HEARING_AIDS_COMPONENT_NAME; import static com.android.internal.accessibility.AccessibilityShortcutController.COLOR_INVERSION_COMPONENT_NAME; @@ -83,6 +82,7 @@ import androidx.test.ext.junit.runners.AndroidJUnit4; import com.android.internal.R; import com.android.internal.accessibility.AccessibilityShortcutController.FrameworkObjectProvider; +import com.android.internal.accessibility.common.ShortcutConstants; import com.android.internal.util.test.FakeSettingsProvider; import org.junit.AfterClass; @@ -726,14 +726,14 @@ public class AccessibilityShortcutControllerTest { private void configureNoShortcutService() throws Exception { when(mAccessibilityManagerService - .getAccessibilityShortcutTargets(ACCESSIBILITY_SHORTCUT_KEY)) + .getAccessibilityShortcutTargets(ShortcutConstants.UserShortcutType.HARDWARE)) .thenReturn(Collections.emptyList()); Settings.Secure.putString(mContentResolver, ACCESSIBILITY_SHORTCUT_TARGET_SERVICE, ""); } private void configureValidShortcutService() throws Exception { when(mAccessibilityManagerService - .getAccessibilityShortcutTargets(ACCESSIBILITY_SHORTCUT_KEY)) + .getAccessibilityShortcutTargets(ShortcutConstants.UserShortcutType.HARDWARE)) .thenReturn(Collections.singletonList(SERVICE_NAME_STRING)); Settings.Secure.putString( mContentResolver, ACCESSIBILITY_SHORTCUT_TARGET_SERVICE, SERVICE_NAME_STRING); @@ -744,7 +744,7 @@ public class AccessibilityShortcutControllerTest { (ComponentName) AccessibilityShortcutController.getFrameworkShortcutFeaturesMap() .keySet().toArray()[0]; when(mAccessibilityManagerService - .getAccessibilityShortcutTargets(ACCESSIBILITY_SHORTCUT_KEY)) + .getAccessibilityShortcutTargets(ShortcutConstants.UserShortcutType.HARDWARE)) .thenReturn(Collections.singletonList(featureComponentName.flattenToString())); Settings.Secure.putString(mContentResolver, ACCESSIBILITY_SHORTCUT_TARGET_SERVICE, featureComponentName.flattenToString()); @@ -806,7 +806,7 @@ public class AccessibilityShortcutControllerTest { private void configureDefaultAccessibilityService() throws Exception { when(mAccessibilityManagerService - .getAccessibilityShortcutTargets(ACCESSIBILITY_SHORTCUT_KEY)) + .getAccessibilityShortcutTargets(ShortcutConstants.UserShortcutType.HARDWARE)) .thenReturn(Collections.singletonList(SERVICE_NAME_STRING)); when(mResources.getString(R.string.config_defaultAccessibilityService)).thenReturn( diff --git a/core/tests/coretests/src/com/android/internal/accessibility/dialog/InvisibleToggleAccessibilityServiceTargetTest.java b/core/tests/coretests/src/com/android/internal/accessibility/dialog/InvisibleToggleAccessibilityServiceTargetTest.java index 69b6a9b7aa87..2ea044ccfb52 100644 --- a/core/tests/coretests/src/com/android/internal/accessibility/dialog/InvisibleToggleAccessibilityServiceTargetTest.java +++ b/core/tests/coretests/src/com/android/internal/accessibility/dialog/InvisibleToggleAccessibilityServiceTargetTest.java @@ -39,6 +39,7 @@ import androidx.test.platform.app.InstrumentationRegistry; import androidx.test.runner.AndroidJUnit4; import com.android.internal.accessibility.TestUtils; +import com.android.internal.accessibility.common.ShortcutConstants; import com.android.internal.util.test.FakeSettingsProvider; import com.android.internal.util.test.FakeSettingsProviderRule; @@ -99,7 +100,7 @@ public class InvisibleToggleAccessibilityServiceTargetTest { mSut = new InvisibleToggleAccessibilityServiceTarget( mContextSpy, - AccessibilityManager.ACCESSIBILITY_SHORTCUT_KEY, accessibilityServiceInfo); + ShortcutConstants.UserShortcutType.HARDWARE, accessibilityServiceInfo); } @Test diff --git a/packages/SystemUI/src/com/android/systemui/accessibility/floatingmenu/MenuInfoRepository.java b/packages/SystemUI/src/com/android/systemui/accessibility/floatingmenu/MenuInfoRepository.java index 0538e7d55bfd..4a06ae9523fa 100644 --- a/packages/SystemUI/src/com/android/systemui/accessibility/floatingmenu/MenuInfoRepository.java +++ b/packages/SystemUI/src/com/android/systemui/accessibility/floatingmenu/MenuInfoRepository.java @@ -21,7 +21,6 @@ import static android.provider.Settings.Secure.ACCESSIBILITY_FLOATING_MENU_MIGRA import static android.provider.Settings.Secure.ACCESSIBILITY_FLOATING_MENU_OPACITY; import static android.provider.Settings.Secure.ACCESSIBILITY_FLOATING_MENU_SIZE; import static android.provider.Settings.Secure.ENABLED_ACCESSIBILITY_SERVICES; -import static android.view.accessibility.AccessibilityManager.ACCESSIBILITY_BUTTON; import static com.android.internal.accessibility.dialog.AccessibilityTargetHelper.getTargets; import static com.android.systemui.accessibility.floatingmenu.MenuFadeEffectInfoKt.DEFAULT_FADE_EFFECT_IS_ENABLED; @@ -47,6 +46,7 @@ import android.view.accessibility.AccessibilityManager; import androidx.annotation.NonNull; +import com.android.internal.accessibility.common.ShortcutConstants; import com.android.internal.accessibility.dialog.AccessibilityTarget; import com.android.internal.annotations.VisibleForTesting; import com.android.systemui.Prefs; @@ -182,7 +182,7 @@ class MenuInfoRepository { } void loadMenuTargetFeatures(OnInfoReady<List<AccessibilityTarget>> callback) { - callback.onReady(getTargets(mContext, ACCESSIBILITY_BUTTON)); + callback.onReady(getTargets(mContext, ShortcutConstants.UserShortcutType.SOFTWARE)); } void loadMenuSizeType(OnInfoReady<Integer> callback) { @@ -223,7 +223,7 @@ class MenuInfoRepository { private void onTargetFeaturesChanged() { mSettingsContentsCallback.onTargetFeaturesChanged( - getTargets(mContext, ACCESSIBILITY_BUTTON)); + getTargets(mContext, ShortcutConstants.UserShortcutType.SOFTWARE)); } private Position getStartPosition() { diff --git a/packages/SystemUI/src/com/android/systemui/accessibility/floatingmenu/MenuViewLayer.java b/packages/SystemUI/src/com/android/systemui/accessibility/floatingmenu/MenuViewLayer.java index bb5364d798da..3acf80dbbe5f 100644 --- a/packages/SystemUI/src/com/android/systemui/accessibility/floatingmenu/MenuViewLayer.java +++ b/packages/SystemUI/src/com/android/systemui/accessibility/floatingmenu/MenuViewLayer.java @@ -17,7 +17,6 @@ package com.android.systemui.accessibility.floatingmenu; import static android.view.WindowInsets.Type.ime; -import static android.view.accessibility.AccessibilityManager.ACCESSIBILITY_SHORTCUT_KEY; import static androidx.core.view.WindowInsetsCompat.Type; @@ -64,6 +63,7 @@ import androidx.lifecycle.Observer; import androidx.recyclerview.widget.RecyclerView; import androidx.recyclerview.widget.RecyclerViewAccessibilityDelegate; +import com.android.internal.accessibility.common.ShortcutConstants; import com.android.internal.accessibility.dialog.AccessibilityTarget; import com.android.internal.annotations.VisibleForTesting; import com.android.internal.messages.nano.SystemMessageProto; @@ -154,7 +154,7 @@ class MenuViewLayer extends FrameLayout implements final List<ComponentName> hardwareKeyShortcutComponents = mAccessibilityManager.getAccessibilityShortcutTargets( - ACCESSIBILITY_SHORTCUT_KEY) + ShortcutConstants.UserShortcutType.HARDWARE) .stream() .map(ComponentName::unflattenFromString) .toList(); diff --git a/packages/SystemUI/src/com/android/systemui/navigationbar/NavBarHelper.java b/packages/SystemUI/src/com/android/systemui/navigationbar/NavBarHelper.java index dfe41eb9f7f2..7d13397b374c 100644 --- a/packages/SystemUI/src/com/android/systemui/navigationbar/NavBarHelper.java +++ b/packages/SystemUI/src/com/android/systemui/navigationbar/NavBarHelper.java @@ -56,6 +56,7 @@ import android.view.accessibility.AccessibilityManager; import androidx.annotation.NonNull; +import com.android.internal.accessibility.common.ShortcutConstants; import com.android.systemui.Dumpable; import com.android.systemui.accessibility.AccessibilityButtonModeObserver; import com.android.systemui.accessibility.AccessibilityButtonTargetsObserver; @@ -380,7 +381,7 @@ public final class NavBarHelper implements // permission final List<String> a11yButtonTargets = mAccessibilityManager.getAccessibilityShortcutTargets( - AccessibilityManager.ACCESSIBILITY_BUTTON); + ShortcutConstants.UserShortcutType.SOFTWARE); final int requestingServices = a11yButtonTargets.size(); clickable = requestingServices >= 1; diff --git a/packages/SystemUI/tests/src/com/android/systemui/accessibility/floatingmenu/MenuViewLayerTest.java b/packages/SystemUI/tests/src/com/android/systemui/accessibility/floatingmenu/MenuViewLayerTest.java index 4a1bdbcc9b48..ca3eb3e077d4 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/accessibility/floatingmenu/MenuViewLayerTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/accessibility/floatingmenu/MenuViewLayerTest.java @@ -69,6 +69,7 @@ import androidx.dynamicanimation.animation.DynamicAnimation; import androidx.dynamicanimation.animation.SpringAnimation; import androidx.test.filters.SmallTest; +import com.android.internal.accessibility.common.ShortcutConstants; import com.android.internal.messages.nano.SystemMessageProto; import com.android.systemui.Flags; import com.android.systemui.SysuiTestCase; @@ -237,7 +238,7 @@ public class MenuViewLayerTest extends SysuiTestCase { final List<String> stubShortcutTargets = new ArrayList<>(); stubShortcutTargets.add(TEST_SELECT_TO_SPEAK_COMPONENT_NAME.flattenToString()); when(mStubAccessibilityManager.getAccessibilityShortcutTargets( - AccessibilityManager.ACCESSIBILITY_SHORTCUT_KEY)).thenReturn(stubShortcutTargets); + ShortcutConstants.UserShortcutType.HARDWARE)).thenReturn(stubShortcutTargets); mMenuViewLayer.mDismissMenuAction.run(); final String value = Settings.Secure.getString(mSpyContext.getContentResolver(), diff --git a/packages/SystemUI/tests/src/com/android/systemui/navigationbar/NavBarHelperTest.java b/packages/SystemUI/tests/src/com/android/systemui/navigationbar/NavBarHelperTest.java index e5ba569fd1d6..28d35ce24f4b 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/navigationbar/NavBarHelperTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/navigationbar/NavBarHelperTest.java @@ -41,6 +41,7 @@ import android.view.accessibility.AccessibilityManager; import androidx.test.filters.SmallTest; import androidx.test.runner.AndroidJUnit4; +import com.android.internal.accessibility.common.ShortcutConstants; import com.android.systemui.SysuiTestCase; import com.android.systemui.accessibility.AccessibilityButtonModeObserver; import com.android.systemui.accessibility.AccessibilityButtonTargetsObserver; @@ -56,6 +57,8 @@ import com.android.systemui.statusbar.NotificationShadeWindowController; import com.android.systemui.statusbar.phone.CentralSurfaces; import com.android.systemui.statusbar.policy.KeyguardStateController; +import dagger.Lazy; + import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; @@ -67,8 +70,6 @@ import java.util.List; import java.util.Optional; import java.util.concurrent.Executor; -import dagger.Lazy; - /** * Tests for {@link NavBarHelper}. */ @@ -270,7 +271,8 @@ public class NavBarHelperTest extends SysuiTestCase { @Test public void initNavBarHelper_buttonModeNavBar_a11yButtonClickableState() { when(mAccessibilityManager.getAccessibilityShortcutTargets( - AccessibilityManager.ACCESSIBILITY_BUTTON)).thenReturn(createFakeShortcutTargets()); + ShortcutConstants.UserShortcutType.SOFTWARE)).thenReturn( + createFakeShortcutTargets()); mNavBarHelper.registerNavTaskStateUpdater(mNavbarTaskbarStateUpdater); @@ -295,7 +297,8 @@ public class NavBarHelperTest extends SysuiTestCase { ACCESSIBILITY_BUTTON_MODE_NAVIGATION_BAR); when(mAccessibilityManager.getAccessibilityShortcutTargets( - AccessibilityManager.ACCESSIBILITY_BUTTON)).thenReturn(createFakeShortcutTargets()); + ShortcutConstants.UserShortcutType.SOFTWARE)).thenReturn( + createFakeShortcutTargets()); mAccessibilityServicesStateChangeListener.onAccessibilityServicesStateChanged( mAccessibilityManager); diff --git a/services/accessibility/java/com/android/server/accessibility/AccessibilityManagerService.java b/services/accessibility/java/com/android/server/accessibility/AccessibilityManagerService.java index d656892062d1..57c05396992e 100644 --- a/services/accessibility/java/com/android/server/accessibility/AccessibilityManagerService.java +++ b/services/accessibility/java/com/android/server/accessibility/AccessibilityManagerService.java @@ -30,10 +30,7 @@ import static android.companion.virtual.VirtualDeviceManager.ACTION_VIRTUAL_DEVI import static android.companion.virtual.VirtualDeviceManager.EXTRA_VIRTUAL_DEVICE_ID; import static android.content.Context.DEVICE_ID_DEFAULT; import static android.provider.Settings.Secure.ACCESSIBILITY_DISPLAY_MAGNIFICATION_NAVBAR_ENABLED; -import static android.view.accessibility.AccessibilityManager.ACCESSIBILITY_BUTTON; -import static android.view.accessibility.AccessibilityManager.ACCESSIBILITY_SHORTCUT_KEY; import static android.view.accessibility.AccessibilityManager.FlashNotificationReason; -import static android.view.accessibility.AccessibilityManager.ShortcutType; import static com.android.internal.accessibility.AccessibilityShortcutController.ACCESSIBILITY_HEARING_AIDS_COMPONENT_NAME; import static com.android.internal.accessibility.AccessibilityShortcutController.MAGNIFICATION_COMPONENT_NAME; @@ -142,6 +139,7 @@ import com.android.internal.R; import com.android.internal.accessibility.AccessibilityShortcutController; import com.android.internal.accessibility.AccessibilityShortcutController.FrameworkFeatureInfo; import com.android.internal.accessibility.AccessibilityShortcutController.LaunchableFrameworkFeatureInfo; +import com.android.internal.accessibility.common.ShortcutConstants; import com.android.internal.accessibility.dialog.AccessibilityButtonChooserActivity; import com.android.internal.accessibility.dialog.AccessibilityShortcutChooserActivity; import com.android.internal.accessibility.util.AccessibilityUtils; @@ -1721,7 +1719,7 @@ public class AccessibilityManagerService extends IAccessibilityManager.Stub } mMainHandler.sendMessage(obtainMessage( AccessibilityManagerService::performAccessibilityShortcutInternal, this, - displayId, ACCESSIBILITY_BUTTON, targetName)); + displayId, ShortcutConstants.UserShortcutType.SOFTWARE, targetName)); } /** @@ -2200,11 +2198,12 @@ public class AccessibilityManagerService extends IAccessibilityManager.Stub } private void showAccessibilityTargetsSelection(int displayId, - @ShortcutType int shortcutType) { + @ShortcutConstants.UserShortcutType int shortcutType) { final Intent intent = new Intent(AccessibilityManager.ACTION_CHOOSE_ACCESSIBILITY_BUTTON); - final String chooserClassName = (shortcutType == ACCESSIBILITY_SHORTCUT_KEY) - ? AccessibilityShortcutChooserActivity.class.getName() - : AccessibilityButtonChooserActivity.class.getName(); + final String chooserClassName = + (shortcutType == ShortcutConstants.UserShortcutType.HARDWARE) + ? AccessibilityShortcutChooserActivity.class.getName() + : AccessibilityButtonChooserActivity.class.getName(); intent.setClassName(CHOOSER_PACKAGE_NAME, chooserClassName); intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK); final Bundle bundle = ActivityOptions.makeBasic().setLaunchDisplayId(displayId).toBundle(); @@ -3275,7 +3274,7 @@ public class AccessibilityManagerService extends IAccessibilityManager.Stub } final Set<String> currentTargets = - userState.getShortcutTargetsLocked(ACCESSIBILITY_SHORTCUT_KEY); + userState.getShortcutTargetsLocked(ShortcutConstants.UserShortcutType.HARDWARE); if (targetsFromSetting.equals(currentTargets)) { return false; } @@ -3291,7 +3290,7 @@ public class AccessibilityManagerService extends IAccessibilityManager.Stub userState.mUserId, str -> str, targetsFromSetting); final Set<String> currentTargets = - userState.getShortcutTargetsLocked(ACCESSIBILITY_BUTTON); + userState.getShortcutTargetsLocked(ShortcutConstants.UserShortcutType.SOFTWARE); if (targetsFromSetting.equals(currentTargets)) { return false; } @@ -3346,7 +3345,7 @@ public class AccessibilityManagerService extends IAccessibilityManager.Stub */ private void updateAccessibilityShortcutKeyTargetsLocked(AccessibilityUserState userState) { final Set<String> currentTargets = - userState.getShortcutTargetsLocked(ACCESSIBILITY_SHORTCUT_KEY); + userState.getShortcutTargetsLocked(ShortcutConstants.UserShortcutType.HARDWARE); final int lastSize = currentTargets.size(); if (lastSize == 0) { return; @@ -3531,7 +3530,7 @@ public class AccessibilityManagerService extends IAccessibilityManager.Stub } final Set<String> currentTargets = - userState.getShortcutTargetsLocked(ACCESSIBILITY_BUTTON); + userState.getShortcutTargetsLocked(ShortcutConstants.UserShortcutType.SOFTWARE); final int lastSize = currentTargets.size(); if (lastSize == 0) { return; @@ -3571,7 +3570,7 @@ public class AccessibilityManagerService extends IAccessibilityManager.Stub return; } final Set<String> buttonTargets = - userState.getShortcutTargetsLocked(ACCESSIBILITY_BUTTON); + userState.getShortcutTargetsLocked(ShortcutConstants.UserShortcutType.SOFTWARE); int lastSize = buttonTargets.size(); buttonTargets.removeIf(name -> { if (packageName != null && name != null && !name.contains(packageName)) { @@ -3608,7 +3607,7 @@ public class AccessibilityManagerService extends IAccessibilityManager.Stub lastSize = buttonTargets.size(); final Set<String> shortcutKeyTargets = - userState.getShortcutTargetsLocked(ACCESSIBILITY_SHORTCUT_KEY); + userState.getShortcutTargetsLocked(ShortcutConstants.UserShortcutType.HARDWARE); userState.mEnabledServices.forEach(componentName -> { if (packageName != null && componentName != null && !packageName.equals(componentName.getPackageName())) { @@ -3665,16 +3664,18 @@ public class AccessibilityManagerService extends IAccessibilityManager.Stub return; } final ComponentName serviceName = service.getComponentName(); - if (userState.removeShortcutTargetLocked(ACCESSIBILITY_SHORTCUT_KEY, serviceName)) { + if (userState.removeShortcutTargetLocked( + ShortcutConstants.UserShortcutType.HARDWARE, serviceName)) { final Set<String> currentTargets = userState.getShortcutTargetsLocked( - ACCESSIBILITY_SHORTCUT_KEY); + ShortcutConstants.UserShortcutType.HARDWARE); persistColonDelimitedSetToSettingLocked( Settings.Secure.ACCESSIBILITY_SHORTCUT_TARGET_SERVICE, userState.mUserId, currentTargets, str -> str); } - if (userState.removeShortcutTargetLocked(ACCESSIBILITY_BUTTON, serviceName)) { + if (userState.removeShortcutTargetLocked( + ShortcutConstants.UserShortcutType.SOFTWARE, serviceName)) { final Set<String> currentTargets = userState.getShortcutTargetsLocked( - ACCESSIBILITY_BUTTON); + ShortcutConstants.UserShortcutType.SOFTWARE); persistColonDelimitedSetToSettingLocked(Settings.Secure.ACCESSIBILITY_BUTTON_TARGETS, userState.mUserId, currentTargets, str -> str); } @@ -3750,7 +3751,7 @@ public class AccessibilityManagerService extends IAccessibilityManager.Stub } mMainHandler.sendMessage(obtainMessage( AccessibilityManagerService::performAccessibilityShortcutInternal, this, - Display.DEFAULT_DISPLAY, ACCESSIBILITY_SHORTCUT_KEY, targetName)); + Display.DEFAULT_DISPLAY, ShortcutConstants.UserShortcutType.HARDWARE, targetName)); } /** @@ -3763,7 +3764,7 @@ public class AccessibilityManagerService extends IAccessibilityManager.Stub * specified target. */ private void performAccessibilityShortcutInternal(int displayId, - @ShortcutType int shortcutType, @Nullable String targetName) { + @ShortcutConstants.UserShortcutType int shortcutType, @Nullable String targetName) { final List<String> shortcutTargets = getAccessibilityShortcutTargetsInternal(shortcutType); if (shortcutTargets.isEmpty()) { Slog.d(LOG_TAG, "No target to perform shortcut, shortcutType=" + shortcutType); @@ -3814,7 +3815,7 @@ public class AccessibilityManagerService extends IAccessibilityManager.Stub } private boolean performAccessibilityFrameworkFeature(int displayId, - ComponentName assignedTarget, @ShortcutType int shortcutType) { + ComponentName assignedTarget, @ShortcutConstants.UserShortcutType int shortcutType) { final Map<ComponentName, FrameworkFeatureInfo> frameworkFeatureMap = AccessibilityShortcutController.getFrameworkShortcutFeaturesMap(); if (!frameworkFeatureMap.containsKey(assignedTarget)) { @@ -3863,12 +3864,12 @@ public class AccessibilityManagerService extends IAccessibilityManager.Stub /** * Perform accessibility service shortcut action. * - * 1) For {@link AccessibilityManager#ACCESSIBILITY_BUTTON} type and services targeting sdk + * 1) For {@link ShortcutConstants.UserShortcutType.SOFTWARE} type and services targeting sdk * version <= Q: callbacks to accessibility service if service is bounded and requests * accessibility button. - * 2) For {@link AccessibilityManager#ACCESSIBILITY_SHORTCUT_KEY} type and service targeting sdk + * 2) For {@link ShortcutConstants.UserShortcutType.HARDWARE} type and service targeting sdk * version <= Q: turns on / off the accessibility service. - * 3) For {@link AccessibilityManager#ACCESSIBILITY_SHORTCUT_KEY} type and service targeting sdk + * 3) For {@link ShortcutConstants.UserShortcutType.HARDWARE} type and service targeting sdk * version > Q and request accessibility button: turn on the accessibility service if it's * not in the enabled state. * (It'll happen when a service is disabled and assigned to shortcut then upgraded.) @@ -3879,7 +3880,7 @@ public class AccessibilityManagerService extends IAccessibilityManager.Stub * button. */ private boolean performAccessibilityShortcutTargetService(int displayId, - @ShortcutType int shortcutType, ComponentName assignedTarget) { + @ShortcutConstants.UserShortcutType int shortcutType, ComponentName assignedTarget) { synchronized (mLock) { final AccessibilityUserState userState = getCurrentUserStateLocked(); final AccessibilityServiceInfo installedServiceInfo = @@ -3897,7 +3898,8 @@ public class AccessibilityManagerService extends IAccessibilityManager.Stub final boolean requestA11yButton = (installedServiceInfo.flags & FLAG_REQUEST_ACCESSIBILITY_BUTTON) != 0; // Turns on / off the accessibility service - if ((targetSdk <= Build.VERSION_CODES.Q && shortcutType == ACCESSIBILITY_SHORTCUT_KEY) + if ((targetSdk <= Build.VERSION_CODES.Q + && shortcutType == ShortcutConstants.UserShortcutType.HARDWARE) || (targetSdk > Build.VERSION_CODES.Q && !requestA11yButton)) { if (serviceConnection == null) { logAccessibilityShortcutActivated(mContext, assignedTarget, shortcutType, @@ -3911,7 +3913,8 @@ public class AccessibilityManagerService extends IAccessibilityManager.Stub } return true; } - if (shortcutType == ACCESSIBILITY_SHORTCUT_KEY && targetSdk > Build.VERSION_CODES.Q + if (shortcutType == ShortcutConstants.UserShortcutType.HARDWARE + && targetSdk > Build.VERSION_CODES.Q && requestA11yButton) { if (!userState.getEnabledServicesLocked().contains(assignedTarget)) { enableAccessibilityServiceLocked(assignedTarget, mCurrentUserId); @@ -3941,7 +3944,8 @@ public class AccessibilityManagerService extends IAccessibilityManager.Stub } @Override - public List<String> getAccessibilityShortcutTargets(@ShortcutType int shortcutType) { + public List<String> getAccessibilityShortcutTargets( + @ShortcutConstants.UserShortcutType int shortcutType) { if (mTraceManager.isA11yTracingEnabledForTypes(FLAGS_ACCESSIBILITY_MANAGER)) { mTraceManager.logTrace(LOG_TAG + ".getAccessibilityShortcutTargets", FLAGS_ACCESSIBILITY_MANAGER, "shortcutType=" + shortcutType); @@ -3955,12 +3959,13 @@ public class AccessibilityManagerService extends IAccessibilityManager.Stub return getAccessibilityShortcutTargetsInternal(shortcutType); } - private List<String> getAccessibilityShortcutTargetsInternal(@ShortcutType int shortcutType) { + private List<String> getAccessibilityShortcutTargetsInternal( + @ShortcutConstants.UserShortcutType int shortcutType) { synchronized (mLock) { final AccessibilityUserState userState = getCurrentUserStateLocked(); final ArrayList<String> shortcutTargets = new ArrayList<>( userState.getShortcutTargetsLocked(shortcutType)); - if (shortcutType != ACCESSIBILITY_BUTTON) { + if (shortcutType != ShortcutConstants.UserShortcutType.SOFTWARE) { return shortcutTargets; } // Adds legacy a11y services requesting a11y button into the list. @@ -4423,7 +4428,7 @@ public class AccessibilityManagerService extends IAccessibilityManager.Stub } } // Warning is not required if the service is already assigned to a shortcut. - for (int shortcutType : AccessibilityManager.SHORTCUT_TYPES) { + for (int shortcutType : ShortcutConstants.USER_SHORTCUT_TYPES) { if (getAccessibilityShortcutTargets(shortcutType).contains( componentName.flattenToString())) { return false; @@ -4603,8 +4608,8 @@ public class AccessibilityManagerService extends IAccessibilityManager.Stub public void onShellCommand(FileDescriptor in, FileDescriptor out, FileDescriptor err, String[] args, ShellCallback callback, ResultReceiver resultReceiver) { - new AccessibilityShellCommand(this, mSystemActionPerformer).exec(this, in, out, err, args, - callback, resultReceiver); + new AccessibilityShellCommand(this, mSystemActionPerformer) + .exec(this, in, out, err, args, callback, resultReceiver); } private final class InteractionBridge { diff --git a/services/accessibility/java/com/android/server/accessibility/AccessibilityUserState.java b/services/accessibility/java/com/android/server/accessibility/AccessibilityUserState.java index 68ee78076f3d..41165b6aed5a 100644 --- a/services/accessibility/java/com/android/server/accessibility/AccessibilityUserState.java +++ b/services/accessibility/java/com/android/server/accessibility/AccessibilityUserState.java @@ -24,9 +24,6 @@ import static android.accessibilityservice.AccessibilityService.SHOW_MODE_IGNORE import static android.accessibilityservice.AccessibilityService.SHOW_MODE_MASK; import static android.provider.Settings.Secure.ACCESSIBILITY_MAGNIFICATION_MODE_FULLSCREEN; import static android.provider.Settings.Secure.ACCESSIBILITY_MAGNIFICATION_MODE_NONE; -import static android.view.accessibility.AccessibilityManager.ACCESSIBILITY_BUTTON; -import static android.view.accessibility.AccessibilityManager.ACCESSIBILITY_SHORTCUT_KEY; -import static android.view.accessibility.AccessibilityManager.ShortcutType; import static com.android.internal.accessibility.AccessibilityShortcutController.MAGNIFICATION_CONTROLLER_NAME; @@ -51,6 +48,7 @@ import android.view.accessibility.IAccessibilityManagerClient; import com.android.internal.R; import com.android.internal.accessibility.AccessibilityShortcutController; +import com.android.internal.accessibility.common.ShortcutConstants; import java.io.FileDescriptor; import java.io.PrintWriter; @@ -757,13 +755,21 @@ class AccessibilityUserState { * @param shortcutType The shortcut type. * @return The array set of the strings */ - public ArraySet<String> getShortcutTargetsLocked(@ShortcutType int shortcutType) { - if (shortcutType == ACCESSIBILITY_SHORTCUT_KEY) { + public ArraySet<String> getShortcutTargetsLocked( + @ShortcutConstants.UserShortcutType int shortcutType) { + if (shortcutType == ShortcutConstants.UserShortcutType.HARDWARE) { return mAccessibilityShortcutKeyTargets; - } else if (shortcutType == ACCESSIBILITY_BUTTON) { + } else if (shortcutType == ShortcutConstants.UserShortcutType.SOFTWARE) { return mAccessibilityButtonTargets; + } else if ((shortcutType == ShortcutConstants.UserShortcutType.TRIPLETAP + && isMagnificationSingleFingerTripleTapEnabledLocked()) || ( + shortcutType == ShortcutConstants.UserShortcutType.TWO_FINGERS_TRIPLE_TAP + && isMagnificationTwoFingerTripleTapEnabledLocked())) { + ArraySet<String> targets = new ArraySet<>(); + targets.add(MAGNIFICATION_CONTROLLER_NAME); + return targets; } - return null; + return new ArraySet<>(); } /** @@ -802,12 +808,22 @@ class AccessibilityUserState { /** * Removes given shortcut target in the list. * - * @param shortcutType The shortcut type. - * @param target The component name of the shortcut target. + * @param shortcutType one of {@link ShortcutConstants.UserShortcutType.HARDWARE} or + * {@link ShortcutConstants.UserShortcutType.SOFTWARE}. Other types are not + * implemented. + * @param target The component name of the shortcut target. * @return true if the shortcut target is removed. */ - public boolean removeShortcutTargetLocked(@ShortcutType int shortcutType, + public boolean removeShortcutTargetLocked(@ShortcutConstants.UserShortcutType int shortcutType, ComponentName target) { + if (shortcutType == ShortcutConstants.UserShortcutType.TRIPLETAP + || shortcutType == ShortcutConstants.UserShortcutType.TWO_FINGERS_TRIPLE_TAP) { + throw new UnsupportedOperationException( + "removeShortcutTargetLocked only support shortcut type: " + + "software and hardware for now" + ); + } + return getShortcutTargetsLocked(shortcutType).removeIf(name -> { ComponentName componentName; if (name == null |