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

Commit a925474f authored by Jason Hsu's avatar Jason Hsu Committed by Automerger Merge Worker
Browse files

Merge "Add the log for new supported accessibility button type 'Accessibility...

Merge "Add the log for new supported accessibility button type 'Accessibility Floating Menu'" into sc-dev am: 72679b76 am: b6d92578

Original change: https://googleplex-android-review.googlesource.com/c/platform/frameworks/base/+/14779652

Change-Id: Ia1d6e15a741e91c8f97e40104e59b4b675d84d5a
parents 7d7af35c b6d92578
Loading
Loading
Loading
Loading
+44 −27
Original line number Original line Diff line number Diff line
@@ -16,6 +16,7 @@


package com.android.internal.accessibility.util;
package com.android.internal.accessibility.util;


import static android.provider.Settings.Secure.ACCESSIBILITY_BUTTON_MODE_FLOATING_MENU;
import static android.provider.Settings.Secure.ACCESSIBILITY_MAGNIFICATION_MODE_ALL;
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_FULLSCREEN;
import static android.provider.Settings.Secure.ACCESSIBILITY_MAGNIFICATION_MODE_WINDOW;
import static android.provider.Settings.Secure.ACCESSIBILITY_MAGNIFICATION_MODE_WINDOW;
@@ -28,6 +29,7 @@ import static com.android.internal.util.FrameworkStatsLog.ACCESSIBILITY_SHORTCUT
import static com.android.internal.util.FrameworkStatsLog.ACCESSIBILITY_SHORTCUT_REPORTED__SERVICE_STATUS__UNKNOWN;
import static com.android.internal.util.FrameworkStatsLog.ACCESSIBILITY_SHORTCUT_REPORTED__SERVICE_STATUS__UNKNOWN;
import static com.android.internal.util.FrameworkStatsLog.ACCESSIBILITY_SHORTCUT_REPORTED__SHORTCUT_TYPE__A11Y_BUTTON;
import static com.android.internal.util.FrameworkStatsLog.ACCESSIBILITY_SHORTCUT_REPORTED__SHORTCUT_TYPE__A11Y_BUTTON;
import static com.android.internal.util.FrameworkStatsLog.ACCESSIBILITY_SHORTCUT_REPORTED__SHORTCUT_TYPE__A11Y_BUTTON_LONG_PRESS;
import static com.android.internal.util.FrameworkStatsLog.ACCESSIBILITY_SHORTCUT_REPORTED__SHORTCUT_TYPE__A11Y_BUTTON_LONG_PRESS;
import static com.android.internal.util.FrameworkStatsLog.ACCESSIBILITY_SHORTCUT_REPORTED__SHORTCUT_TYPE__A11Y_FLOATING_MENU;
import static com.android.internal.util.FrameworkStatsLog.ACCESSIBILITY_SHORTCUT_REPORTED__SHORTCUT_TYPE__TRIPLE_TAP;
import static com.android.internal.util.FrameworkStatsLog.ACCESSIBILITY_SHORTCUT_REPORTED__SHORTCUT_TYPE__TRIPLE_TAP;
import static com.android.internal.util.FrameworkStatsLog.ACCESSIBILITY_SHORTCUT_REPORTED__SHORTCUT_TYPE__UNKNOWN_TYPE;
import static com.android.internal.util.FrameworkStatsLog.ACCESSIBILITY_SHORTCUT_REPORTED__SHORTCUT_TYPE__UNKNOWN_TYPE;
import static com.android.internal.util.FrameworkStatsLog.ACCESSIBILITY_SHORTCUT_REPORTED__SHORTCUT_TYPE__VOLUME_KEY;
import static com.android.internal.util.FrameworkStatsLog.ACCESSIBILITY_SHORTCUT_REPORTED__SHORTCUT_TYPE__VOLUME_KEY;
@@ -37,6 +39,8 @@ import static com.android.internal.util.FrameworkStatsLog.MAGNIFICATION_USAGE_RE
import static com.android.internal.util.FrameworkStatsLog.MAGNIFICATION_USAGE_REPORTED__ACTIVATED_MODE__MAGNIFICATION_WINDOW;
import static com.android.internal.util.FrameworkStatsLog.MAGNIFICATION_USAGE_REPORTED__ACTIVATED_MODE__MAGNIFICATION_WINDOW;


import android.content.ComponentName;
import android.content.ComponentName;
import android.content.Context;
import android.provider.Settings;
import android.view.accessibility.AccessibilityManager;
import android.view.accessibility.AccessibilityManager;
import android.view.accessibility.AccessibilityManager.ShortcutType;
import android.view.accessibility.AccessibilityManager.ShortcutType;


@@ -50,50 +54,54 @@ public final class AccessibilityStatsLogUtils {
    private AccessibilityStatsLogUtils() {}
    private AccessibilityStatsLogUtils() {}


    /**
    /**
     * Logs accessibility feature name that is assigned to the shortcut also its shortcut type.
     * Logs accessibility feature name that is assigned to the given {@code shortcutType}.
     * Calls this when clicking the shortcut {@link AccessibilityManager#ACCESSIBILITY_BUTTON} or
     * Calls this when clicking the shortcut {@link AccessibilityManager#ACCESSIBILITY_BUTTON} or
     * {@link AccessibilityManager#ACCESSIBILITY_SHORTCUT_KEY}
     * {@link AccessibilityManager#ACCESSIBILITY_SHORTCUT_KEY}.
     *
     *
     * @param context context used to retrieve the {@link Settings} provider
     * @param componentName component name of the accessibility feature
     * @param componentName component name of the accessibility feature
     * @param shortcutType  accessibility shortcut type {@link ShortcutType}
     * @param shortcutType  accessibility shortcut type
     */
     */
    public static void logAccessibilityShortcutActivated(ComponentName componentName,
    public static void logAccessibilityShortcutActivated(Context context,
            @ShortcutType int shortcutType) {
            ComponentName componentName, @ShortcutType int shortcutType) {
        logAccessibilityShortcutActivated(componentName, shortcutType, UNKNOWN_STATUS);
        logAccessibilityShortcutActivatedInternal(componentName,
                convertToLoggingShortcutType(context, shortcutType), UNKNOWN_STATUS);
    }
    }


    /**
    /**
     * Logs accessibility feature name that is assigned to the shortcut also its shortcut type and
     * Logs accessibility feature name that is assigned to the given {@code shortcutType} and the
     * enabled status. Calls this when clicking the shortcut
     * {@code serviceEnabled} status.
     * {@link AccessibilityManager#ACCESSIBILITY_BUTTON}
     * Calls this when clicking the shortcut {@link AccessibilityManager#ACCESSIBILITY_BUTTON}
     * or {@link AccessibilityManager#ACCESSIBILITY_SHORTCUT_KEY}
     * or {@link AccessibilityManager#ACCESSIBILITY_SHORTCUT_KEY}.
     *
     *
     * @param context context used to retrieve the {@link Settings} provider
     * @param componentName  component name of the accessibility feature
     * @param componentName  component name of the accessibility feature
     * @param shortcutType   accessibility shortcut type
     * @param shortcutType   accessibility shortcut type
     * @param serviceEnabled {@code true} if the service is enabled
     * @param serviceEnabled {@code true} if the service is enabled
     */
     */
    public static void logAccessibilityShortcutActivated(ComponentName componentName,
    public static void logAccessibilityShortcutActivated(Context context,
            @ShortcutType int shortcutType, boolean serviceEnabled) {
            ComponentName componentName, @ShortcutType int shortcutType, boolean serviceEnabled) {
        logAccessibilityShortcutActivated(componentName, shortcutType,
        logAccessibilityShortcutActivatedInternal(componentName,
                convertToLoggingShortcutType(context, shortcutType),
                convertToLoggingServiceStatus(serviceEnabled));
                convertToLoggingServiceStatus(serviceEnabled));
    }
    }


    /**
    /**
     * Logs accessibility feature name that is assigned to the shortcut also its shortcut type and
     * Logs accessibility feature name that is assigned to the given {@code loggingShortcutType} and
     * status code. Calls this when clicking the shortcut
     * {@code loggingServiceStatus} code.
     * {@link AccessibilityManager#ACCESSIBILITY_BUTTON}
     * or {@link AccessibilityManager#ACCESSIBILITY_SHORTCUT_KEY}
     *
     *
     * @param componentName        component name of the accessibility feature
     * @param componentName        component name of the accessibility feature
     * @param shortcutType  accessibility shortcut type {@link ShortcutType}
     * @param loggingShortcutType  accessibility shortcut type for logging. 0 denotes
     * @param serviceStatus The service status code. 0 denotes unknown_status, 1 denotes enabled, 2
     *                             unknown_type, 1 denotes accessibility button, 2 denotes volume
     *                      denotes disabled.
     *                             key, 3 denotes triple tap on the screen, 4 denotes long press on
     *                             accessibility button, 5 denotes accessibility floating menu.
     * @param loggingServiceStatus The service status code for logging. 0 denotes unknown_status, 1
     *                             denotes enabled, 2 denotes disabled.
     */
     */
    private static void logAccessibilityShortcutActivated(ComponentName componentName,
    private static void logAccessibilityShortcutActivatedInternal(ComponentName componentName,
            @ShortcutType int shortcutType, int serviceStatus) {
            int loggingShortcutType, int loggingServiceStatus) {
        FrameworkStatsLog.write(FrameworkStatsLog.ACCESSIBILITY_SHORTCUT_REPORTED,
        FrameworkStatsLog.write(FrameworkStatsLog.ACCESSIBILITY_SHORTCUT_REPORTED,
                componentName.flattenToString(), convertToLoggingShortcutType(shortcutType),
                componentName.flattenToString(), loggingShortcutType, loggingServiceStatus);
                serviceStatus);
    }
    }


    /**
    /**
@@ -144,10 +152,19 @@ public final class AccessibilityStatsLogUtils {
                convertToLoggingMagnificationMode(mode));
                convertToLoggingMagnificationMode(mode));
    }
    }


    private static int convertToLoggingShortcutType(@ShortcutType int shortcutType) {
    private static boolean isFloatingMenuEnabled(Context context) {
        return Settings.Secure.getInt(context.getContentResolver(),
                Settings.Secure.ACCESSIBILITY_BUTTON_MODE, /* def= */ -1)
                == ACCESSIBILITY_BUTTON_MODE_FLOATING_MENU;
    }

    private static int convertToLoggingShortcutType(Context context,
            @ShortcutType int shortcutType) {
        switch (shortcutType) {
        switch (shortcutType) {
            case ACCESSIBILITY_BUTTON:
            case ACCESSIBILITY_BUTTON:
                return ACCESSIBILITY_SHORTCUT_REPORTED__SHORTCUT_TYPE__A11Y_BUTTON;
                return isFloatingMenuEnabled(context)
                        ? ACCESSIBILITY_SHORTCUT_REPORTED__SHORTCUT_TYPE__A11Y_FLOATING_MENU
                        : ACCESSIBILITY_SHORTCUT_REPORTED__SHORTCUT_TYPE__A11Y_BUTTON;
            case ACCESSIBILITY_SHORTCUT_KEY:
            case ACCESSIBILITY_SHORTCUT_KEY:
                return ACCESSIBILITY_SHORTCUT_REPORTED__SHORTCUT_TYPE__VOLUME_KEY;
                return ACCESSIBILITY_SHORTCUT_REPORTED__SHORTCUT_TYPE__VOLUME_KEY;
        }
        }
+13 −12
Original line number Original line Diff line number Diff line
@@ -2909,7 +2909,8 @@ public class AccessibilityManagerService extends IAccessibilityManager.Stub
        // In case user assigned magnification to the given shortcut.
        // In case user assigned magnification to the given shortcut.
        if (targetName.equals(MAGNIFICATION_CONTROLLER_NAME)) {
        if (targetName.equals(MAGNIFICATION_CONTROLLER_NAME)) {
            final boolean enabled = !getFullScreenMagnificationController().isMagnifying(displayId);
            final boolean enabled = !getFullScreenMagnificationController().isMagnifying(displayId);
            logAccessibilityShortcutActivated(MAGNIFICATION_COMPONENT_NAME, shortcutType, enabled);
            logAccessibilityShortcutActivated(mContext, MAGNIFICATION_COMPONENT_NAME, shortcutType,
                    enabled);
            sendAccessibilityButtonToInputFilter(displayId);
            sendAccessibilityButtonToInputFilter(displayId);
            return;
            return;
        }
        }
@@ -2924,7 +2925,7 @@ public class AccessibilityManagerService extends IAccessibilityManager.Stub
        }
        }
        // In case user assigned an accessibility shortcut target to the given shortcut.
        // In case user assigned an accessibility shortcut target to the given shortcut.
        if (performAccessibilityShortcutTargetActivity(displayId, targetComponentName)) {
        if (performAccessibilityShortcutTargetActivity(displayId, targetComponentName)) {
            logAccessibilityShortcutActivated(targetComponentName, shortcutType);
            logAccessibilityShortcutActivated(mContext, targetComponentName, shortcutType);
            return;
            return;
        }
        }
        // in case user assigned an accessibility service to the given shortcut.
        // in case user assigned an accessibility service to the given shortcut.
@@ -2947,12 +2948,12 @@ public class AccessibilityManagerService extends IAccessibilityManager.Stub
                featureInfo.getSettingKey(), mCurrentUserId);
                featureInfo.getSettingKey(), mCurrentUserId);
        // Assuming that the default state will be to have the feature off
        // Assuming that the default state will be to have the feature off
        if (!TextUtils.equals(featureInfo.getSettingOnValue(), setting.read())) {
        if (!TextUtils.equals(featureInfo.getSettingOnValue(), setting.read())) {
            logAccessibilityShortcutActivated(assignedTarget, shortcutType, /* serviceEnabled= */
            logAccessibilityShortcutActivated(mContext, assignedTarget, shortcutType,
                    true);
                    /* serviceEnabled= */ true);
            setting.write(featureInfo.getSettingOnValue());
            setting.write(featureInfo.getSettingOnValue());
        } else {
        } else {
            logAccessibilityShortcutActivated(assignedTarget, shortcutType, /* serviceEnabled= */
            logAccessibilityShortcutActivated(mContext, assignedTarget, shortcutType,
                    false);
                    /* serviceEnabled= */ false);
            setting.write(featureInfo.getSettingOffValue());
            setting.write(featureInfo.getSettingOffValue());
        }
        }
        return true;
        return true;
@@ -3014,13 +3015,13 @@ public class AccessibilityManagerService extends IAccessibilityManager.Stub
            if ((targetSdk <= Build.VERSION_CODES.Q && shortcutType == ACCESSIBILITY_SHORTCUT_KEY)
            if ((targetSdk <= Build.VERSION_CODES.Q && shortcutType == ACCESSIBILITY_SHORTCUT_KEY)
                    || (targetSdk > Build.VERSION_CODES.Q && !requestA11yButton)) {
                    || (targetSdk > Build.VERSION_CODES.Q && !requestA11yButton)) {
                if (serviceConnection == null) {
                if (serviceConnection == null) {
                    logAccessibilityShortcutActivated(assignedTarget,
                    logAccessibilityShortcutActivated(mContext, assignedTarget, shortcutType,
                            shortcutType, /* serviceEnabled= */ true);
                            /* serviceEnabled= */ true);
                    enableAccessibilityServiceLocked(assignedTarget, mCurrentUserId);
                    enableAccessibilityServiceLocked(assignedTarget, mCurrentUserId);


                } else {
                } else {
                    logAccessibilityShortcutActivated(assignedTarget,
                    logAccessibilityShortcutActivated(mContext, assignedTarget, shortcutType,
                            shortcutType, /* serviceEnabled= */ false);
                            /* serviceEnabled= */ false);
                    disableAccessibilityServiceLocked(assignedTarget, mCurrentUserId);
                    disableAccessibilityServiceLocked(assignedTarget, mCurrentUserId);
                }
                }
                return true;
                return true;
@@ -3041,8 +3042,8 @@ public class AccessibilityManagerService extends IAccessibilityManager.Stub
                return false;
                return false;
            }
            }
            // ServiceConnection means service enabled.
            // ServiceConnection means service enabled.
            logAccessibilityShortcutActivated(assignedTarget, shortcutType, /* serviceEnabled= */
            logAccessibilityShortcutActivated(mContext, assignedTarget, shortcutType,
                    true);
                    /* serviceEnabled= */ true);
            serviceConnection.notifyAccessibilityButtonClickedLocked(displayId);
            serviceConnection.notifyAccessibilityButtonClickedLocked(displayId);
            return true;
            return true;
        }
        }