Loading core/java/com/android/internal/accessibility/AccessibilityShortcutController.java +39 −6 Original line number Diff line number Diff line Loading @@ -19,6 +19,7 @@ package com.android.internal.accessibility; 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.util.ArrayUtils.convertToLongArray; import android.accessibilityservice.AccessibilityServiceInfo; Loading Loading @@ -52,6 +53,7 @@ import android.view.accessibility.AccessibilityManager; import android.widget.Toast; import com.android.internal.R; import com.android.internal.accessibility.dialog.AccessibilityTarget; import com.android.internal.util.function.pooled.PooledLambda; import java.lang.annotation.Retention; Loading Loading @@ -267,16 +269,21 @@ public class AccessibilityShortcutController { } private AlertDialog createShortcutWarningDialog(int userId) { final String warningMessage = mContext.getString( R.string.accessibility_shortcut_toogle_warning); List<AccessibilityTarget> targets = getTargets(mContext, ACCESSIBILITY_SHORTCUT_KEY); if (targets.size() == 0) { return null; } // Avoid non-a11y users accidentally turning shortcut on without reading this carefully. // Put "don't turn on" as the primary action. final AlertDialog alertDialog = mFrameworkObjectProvider.getAlertDialogBuilder( // Use SystemUI context so we pick up any theme set in a vendor overlay mFrameworkObjectProvider.getSystemUiContext()) .setTitle(R.string.accessibility_shortcut_warning_dialog_title) .setMessage(warningMessage) .setTitle(getShortcutWarningTitle(targets)) .setMessage(getShortcutWarningMessage(targets)) .setCancelable(false) .setPositiveButton(R.string.leave_accessibility_shortcut_on, null) .setNegativeButton(R.string.disable_accessibility_shortcut, .setNegativeButton(R.string.accessibility_shortcut_on, null) .setPositiveButton(R.string.accessibility_shortcut_off, (DialogInterface d, int which) -> { Settings.Secure.putStringForUser(mContext.getContentResolver(), Settings.Secure.ACCESSIBILITY_SHORTCUT_TARGET_SERVICE, "", Loading @@ -297,6 +304,32 @@ public class AccessibilityShortcutController { return alertDialog; } private String getShortcutWarningTitle(List<AccessibilityTarget> targets) { if (targets.size() == 1) { return mContext.getString( R.string.accessibility_shortcut_single_service_warning_title, targets.get(0).getLabel()); } return mContext.getString( R.string.accessibility_shortcut_multiple_service_warning_title); } private String getShortcutWarningMessage(List<AccessibilityTarget> targets) { if (targets.size() == 1) { return mContext.getString( R.string.accessibility_shortcut_single_service_warning, targets.get(0).getLabel()); } final StringBuilder sb = new StringBuilder(); for (AccessibilityTarget target : targets) { sb.append(mContext.getString(R.string.accessibility_shortcut_multiple_service_list, target.getLabel())); } return mContext.getString(R.string.accessibility_shortcut_multiple_service_warning, sb.toString()); } private AccessibilityServiceInfo getInfoForTargetService() { final ComponentName targetComponentName = getShortcutTargetComponentName(); if (targetComponentName == null) { Loading core/java/com/android/internal/accessibility/dialog/AccessibilityTarget.java +1 −1 Original line number Diff line number Diff line Loading @@ -38,7 +38,7 @@ import com.android.internal.accessibility.dialog.TargetAdapter.ViewHolder; * Abstract base class for creating various target related to accessibility service, * accessibility activity, and white listing feature. */ abstract class AccessibilityTarget implements TargetOperations, OnTargetSelectedListener, public abstract class AccessibilityTarget implements TargetOperations, OnTargetSelectedListener, OnTargetCheckedChangeListener { private Context mContext; @ShortcutType Loading core/java/com/android/internal/accessibility/dialog/AccessibilityTargetHelper.java +56 −12 Original line number Diff line number Diff line Loading @@ -53,19 +53,61 @@ import java.util.Locale; /** * Collection of utilities for accessibility target. */ final class AccessibilityTargetHelper { public final class AccessibilityTargetHelper { private AccessibilityTargetHelper() {} static List<AccessibilityTarget> getTargets(Context context, /** * Returns list of {@link AccessibilityTarget} of assigned accessibility shortcuts from * {@link AccessibilityManager#getAccessibilityShortcutTargets} including accessibility * feature's package name, component id, etc. * * @param context The context of the application. * @param shortcutType The shortcut type. * @return The list of {@link AccessibilityTarget}. * @hide */ public static List<AccessibilityTarget> getTargets(Context context, @ShortcutType int shortcutType) { final List<AccessibilityTarget> targets = getInstalledTargets(context, shortcutType); final AccessibilityManager ams = context.getSystemService(AccessibilityManager.class); final List<String> requiredTargets = ams.getAccessibilityShortcutTargets(shortcutType); targets.removeIf(target -> !requiredTargets.contains(target.getId())); return targets; // List all accessibility target final List<AccessibilityTarget> installedTargets = getInstalledTargets(context, shortcutType); // List accessibility shortcut target final AccessibilityManager am = (AccessibilityManager) context.getSystemService( Context.ACCESSIBILITY_SERVICE); final List<String> assignedTargets = am.getAccessibilityShortcutTargets(shortcutType); // Get the list of accessibility shortcut target in all accessibility target final List<AccessibilityTarget> results = new ArrayList<>(); for (String assignedTarget : assignedTargets) { for (AccessibilityTarget installedTarget : installedTargets) { if (!MAGNIFICATION_CONTROLLER_NAME.contentEquals(assignedTarget)) { final ComponentName assignedTargetComponentName = ComponentName.unflattenFromString(assignedTarget); final ComponentName targetComponentName = ComponentName.unflattenFromString( installedTarget.getId()); if (assignedTargetComponentName.equals(targetComponentName)) { results.add(installedTarget); continue; } } if (assignedTarget.contentEquals(installedTarget.getId())) { results.add(installedTarget); } } } return results; } /** * Returns list of {@link AccessibilityTarget} of the installed accessibility service, * accessibility activity, and white listing feature including accessibility feature's package * name, component id, etc. * * @param context The context of the application. * @param shortcutType The shortcut type. * @return The list of {@link AccessibilityTarget}. */ static List<AccessibilityTarget> getInstalledTargets(Context context, @ShortcutType int shortcutType) { final List<AccessibilityTarget> targets = new ArrayList<>(); Loading Loading @@ -110,9 +152,10 @@ final class AccessibilityTargetHelper { private static List<AccessibilityTarget> getAccessibilityServiceTargets(Context context, @ShortcutType int shortcutType) { final AccessibilityManager ams = context.getSystemService(AccessibilityManager.class); final AccessibilityManager am = (AccessibilityManager) context.getSystemService( Context.ACCESSIBILITY_SERVICE); final List<AccessibilityServiceInfo> installedServices = ams.getInstalledAccessibilityServiceList(); am.getInstalledAccessibilityServiceList(); if (installedServices == null) { return Collections.emptyList(); } Loading @@ -136,9 +179,10 @@ final class AccessibilityTargetHelper { private static List<AccessibilityTarget> getAccessibilityActivityTargets(Context context, @ShortcutType int shortcutType) { final AccessibilityManager ams = context.getSystemService(AccessibilityManager.class); final AccessibilityManager am = (AccessibilityManager) context.getSystemService( Context.ACCESSIBILITY_SERVICE); final List<AccessibilityShortcutInfo> installedServices = ams.getInstalledAccessibilityShortcutListAsUser(context, am.getInstalledAccessibilityShortcutListAsUser(context, ActivityManager.getCurrentUser()); if (installedServices == null) { return Collections.emptyList(); Loading core/java/com/android/internal/accessibility/util/AccessibilityUtils.java +2 −1 Original line number Diff line number Diff line Loading @@ -142,7 +142,8 @@ public final class AccessibilityUtils { */ public static boolean isAccessibilityServiceEnabled(Context context, @NonNull String componentId) { final AccessibilityManager am = context.getSystemService(AccessibilityManager.class); final AccessibilityManager am = (AccessibilityManager) context.getSystemService( Context.ACCESSIBILITY_SERVICE); final List<AccessibilityServiceInfo> enabledServices = am.getEnabledAccessibilityServiceList(AccessibilityServiceInfo.FEEDBACK_ALL_MASK); Loading core/java/com/android/internal/accessibility/util/ShortcutUtils.java +2 −1 Original line number Diff line number Diff line Loading @@ -137,7 +137,8 @@ public final class ShortcutUtils { */ public static boolean isShortcutContained(Context context, @ShortcutType int shortcutType, @NonNull String componentId) { final AccessibilityManager am = context.getSystemService(AccessibilityManager.class); final AccessibilityManager am = (AccessibilityManager) context.getSystemService( Context.ACCESSIBILITY_SERVICE); final List<String> requiredTargets = am.getAccessibilityShortcutTargets(shortcutType); return requiredTargets.contains(componentId); } Loading Loading
core/java/com/android/internal/accessibility/AccessibilityShortcutController.java +39 −6 Original line number Diff line number Diff line Loading @@ -19,6 +19,7 @@ package com.android.internal.accessibility; 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.util.ArrayUtils.convertToLongArray; import android.accessibilityservice.AccessibilityServiceInfo; Loading Loading @@ -52,6 +53,7 @@ import android.view.accessibility.AccessibilityManager; import android.widget.Toast; import com.android.internal.R; import com.android.internal.accessibility.dialog.AccessibilityTarget; import com.android.internal.util.function.pooled.PooledLambda; import java.lang.annotation.Retention; Loading Loading @@ -267,16 +269,21 @@ public class AccessibilityShortcutController { } private AlertDialog createShortcutWarningDialog(int userId) { final String warningMessage = mContext.getString( R.string.accessibility_shortcut_toogle_warning); List<AccessibilityTarget> targets = getTargets(mContext, ACCESSIBILITY_SHORTCUT_KEY); if (targets.size() == 0) { return null; } // Avoid non-a11y users accidentally turning shortcut on without reading this carefully. // Put "don't turn on" as the primary action. final AlertDialog alertDialog = mFrameworkObjectProvider.getAlertDialogBuilder( // Use SystemUI context so we pick up any theme set in a vendor overlay mFrameworkObjectProvider.getSystemUiContext()) .setTitle(R.string.accessibility_shortcut_warning_dialog_title) .setMessage(warningMessage) .setTitle(getShortcutWarningTitle(targets)) .setMessage(getShortcutWarningMessage(targets)) .setCancelable(false) .setPositiveButton(R.string.leave_accessibility_shortcut_on, null) .setNegativeButton(R.string.disable_accessibility_shortcut, .setNegativeButton(R.string.accessibility_shortcut_on, null) .setPositiveButton(R.string.accessibility_shortcut_off, (DialogInterface d, int which) -> { Settings.Secure.putStringForUser(mContext.getContentResolver(), Settings.Secure.ACCESSIBILITY_SHORTCUT_TARGET_SERVICE, "", Loading @@ -297,6 +304,32 @@ public class AccessibilityShortcutController { return alertDialog; } private String getShortcutWarningTitle(List<AccessibilityTarget> targets) { if (targets.size() == 1) { return mContext.getString( R.string.accessibility_shortcut_single_service_warning_title, targets.get(0).getLabel()); } return mContext.getString( R.string.accessibility_shortcut_multiple_service_warning_title); } private String getShortcutWarningMessage(List<AccessibilityTarget> targets) { if (targets.size() == 1) { return mContext.getString( R.string.accessibility_shortcut_single_service_warning, targets.get(0).getLabel()); } final StringBuilder sb = new StringBuilder(); for (AccessibilityTarget target : targets) { sb.append(mContext.getString(R.string.accessibility_shortcut_multiple_service_list, target.getLabel())); } return mContext.getString(R.string.accessibility_shortcut_multiple_service_warning, sb.toString()); } private AccessibilityServiceInfo getInfoForTargetService() { final ComponentName targetComponentName = getShortcutTargetComponentName(); if (targetComponentName == null) { Loading
core/java/com/android/internal/accessibility/dialog/AccessibilityTarget.java +1 −1 Original line number Diff line number Diff line Loading @@ -38,7 +38,7 @@ import com.android.internal.accessibility.dialog.TargetAdapter.ViewHolder; * Abstract base class for creating various target related to accessibility service, * accessibility activity, and white listing feature. */ abstract class AccessibilityTarget implements TargetOperations, OnTargetSelectedListener, public abstract class AccessibilityTarget implements TargetOperations, OnTargetSelectedListener, OnTargetCheckedChangeListener { private Context mContext; @ShortcutType Loading
core/java/com/android/internal/accessibility/dialog/AccessibilityTargetHelper.java +56 −12 Original line number Diff line number Diff line Loading @@ -53,19 +53,61 @@ import java.util.Locale; /** * Collection of utilities for accessibility target. */ final class AccessibilityTargetHelper { public final class AccessibilityTargetHelper { private AccessibilityTargetHelper() {} static List<AccessibilityTarget> getTargets(Context context, /** * Returns list of {@link AccessibilityTarget} of assigned accessibility shortcuts from * {@link AccessibilityManager#getAccessibilityShortcutTargets} including accessibility * feature's package name, component id, etc. * * @param context The context of the application. * @param shortcutType The shortcut type. * @return The list of {@link AccessibilityTarget}. * @hide */ public static List<AccessibilityTarget> getTargets(Context context, @ShortcutType int shortcutType) { final List<AccessibilityTarget> targets = getInstalledTargets(context, shortcutType); final AccessibilityManager ams = context.getSystemService(AccessibilityManager.class); final List<String> requiredTargets = ams.getAccessibilityShortcutTargets(shortcutType); targets.removeIf(target -> !requiredTargets.contains(target.getId())); return targets; // List all accessibility target final List<AccessibilityTarget> installedTargets = getInstalledTargets(context, shortcutType); // List accessibility shortcut target final AccessibilityManager am = (AccessibilityManager) context.getSystemService( Context.ACCESSIBILITY_SERVICE); final List<String> assignedTargets = am.getAccessibilityShortcutTargets(shortcutType); // Get the list of accessibility shortcut target in all accessibility target final List<AccessibilityTarget> results = new ArrayList<>(); for (String assignedTarget : assignedTargets) { for (AccessibilityTarget installedTarget : installedTargets) { if (!MAGNIFICATION_CONTROLLER_NAME.contentEquals(assignedTarget)) { final ComponentName assignedTargetComponentName = ComponentName.unflattenFromString(assignedTarget); final ComponentName targetComponentName = ComponentName.unflattenFromString( installedTarget.getId()); if (assignedTargetComponentName.equals(targetComponentName)) { results.add(installedTarget); continue; } } if (assignedTarget.contentEquals(installedTarget.getId())) { results.add(installedTarget); } } } return results; } /** * Returns list of {@link AccessibilityTarget} of the installed accessibility service, * accessibility activity, and white listing feature including accessibility feature's package * name, component id, etc. * * @param context The context of the application. * @param shortcutType The shortcut type. * @return The list of {@link AccessibilityTarget}. */ static List<AccessibilityTarget> getInstalledTargets(Context context, @ShortcutType int shortcutType) { final List<AccessibilityTarget> targets = new ArrayList<>(); Loading Loading @@ -110,9 +152,10 @@ final class AccessibilityTargetHelper { private static List<AccessibilityTarget> getAccessibilityServiceTargets(Context context, @ShortcutType int shortcutType) { final AccessibilityManager ams = context.getSystemService(AccessibilityManager.class); final AccessibilityManager am = (AccessibilityManager) context.getSystemService( Context.ACCESSIBILITY_SERVICE); final List<AccessibilityServiceInfo> installedServices = ams.getInstalledAccessibilityServiceList(); am.getInstalledAccessibilityServiceList(); if (installedServices == null) { return Collections.emptyList(); } Loading @@ -136,9 +179,10 @@ final class AccessibilityTargetHelper { private static List<AccessibilityTarget> getAccessibilityActivityTargets(Context context, @ShortcutType int shortcutType) { final AccessibilityManager ams = context.getSystemService(AccessibilityManager.class); final AccessibilityManager am = (AccessibilityManager) context.getSystemService( Context.ACCESSIBILITY_SERVICE); final List<AccessibilityShortcutInfo> installedServices = ams.getInstalledAccessibilityShortcutListAsUser(context, am.getInstalledAccessibilityShortcutListAsUser(context, ActivityManager.getCurrentUser()); if (installedServices == null) { return Collections.emptyList(); Loading
core/java/com/android/internal/accessibility/util/AccessibilityUtils.java +2 −1 Original line number Diff line number Diff line Loading @@ -142,7 +142,8 @@ public final class AccessibilityUtils { */ public static boolean isAccessibilityServiceEnabled(Context context, @NonNull String componentId) { final AccessibilityManager am = context.getSystemService(AccessibilityManager.class); final AccessibilityManager am = (AccessibilityManager) context.getSystemService( Context.ACCESSIBILITY_SERVICE); final List<AccessibilityServiceInfo> enabledServices = am.getEnabledAccessibilityServiceList(AccessibilityServiceInfo.FEEDBACK_ALL_MASK); Loading
core/java/com/android/internal/accessibility/util/ShortcutUtils.java +2 −1 Original line number Diff line number Diff line Loading @@ -137,7 +137,8 @@ public final class ShortcutUtils { */ public static boolean isShortcutContained(Context context, @ShortcutType int shortcutType, @NonNull String componentId) { final AccessibilityManager am = context.getSystemService(AccessibilityManager.class); final AccessibilityManager am = (AccessibilityManager) context.getSystemService( Context.ACCESSIBILITY_SERVICE); final List<String> requiredTargets = am.getAccessibilityShortcutTargets(shortcutType); return requiredTargets.contains(componentId); } Loading