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

Commit 084b2de5 authored by Menghan Li's avatar Menghan Li Committed by Android (Google) Code Review
Browse files

Merge "Refines volume key shortcut confirm dialog strings" into rvc-dev

parents 7a323827 3cba1dc1
Loading
Loading
Loading
Loading
+39 −6
Original line number Diff line number Diff line
@@ -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;
@@ -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;
@@ -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, "",
@@ -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) {
+1 −1
Original line number Diff line number Diff line
@@ -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
+56 −12
Original line number Diff line number Diff line
@@ -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<>();
@@ -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();
        }
@@ -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();
+2 −1
Original line number Diff line number Diff line
@@ -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);

+2 −1
Original line number Diff line number Diff line
@@ -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