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

Commit 920ba72c authored by Nitin Sangar's avatar Nitin Sangar Committed by Android (Google) Code Review
Browse files

Merge "Implement accessibility telemtery in wear"

parents ce6e1868 a9fa5e03
Loading
Loading
Loading
Loading
+11 −0
Original line number Original line Diff line number Diff line
@@ -4384,6 +4384,16 @@ public final class Settings {
        public static final String WEAR_ACCESSIBILITY_GESTURE_ENABLED
        public static final String WEAR_ACCESSIBILITY_GESTURE_ENABLED
                = "wear_accessibility_gesture_enabled";
                = "wear_accessibility_gesture_enabled";
        /**
         * If the triple press gesture for toggling accessibility is enabled during OOBE.
         * Set to 1 for true and 0 for false.
         *
         * This setting is used only internally.
         * @hide
         */
        public static final String WEAR_ACCESSIBILITY_GESTURE_ENABLED_DURING_OOBE =
                "wear_accessibility_gesture_enabled_during_oobe";
        /**
        /**
         * @deprecated Use {@link android.provider.Settings.Global#AIRPLANE_MODE_ON} instead
         * @deprecated Use {@link android.provider.Settings.Global#AIRPLANE_MODE_ON} instead
         */
         */
@@ -5766,6 +5776,7 @@ public final class Settings {
            PRIVATE_SETTINGS.add(END_BUTTON_BEHAVIOR);
            PRIVATE_SETTINGS.add(END_BUTTON_BEHAVIOR);
            PRIVATE_SETTINGS.add(ADVANCED_SETTINGS);
            PRIVATE_SETTINGS.add(ADVANCED_SETTINGS);
            PRIVATE_SETTINGS.add(WEAR_ACCESSIBILITY_GESTURE_ENABLED);
            PRIVATE_SETTINGS.add(WEAR_ACCESSIBILITY_GESTURE_ENABLED);
            PRIVATE_SETTINGS.add(WEAR_ACCESSIBILITY_GESTURE_ENABLED_DURING_OOBE);
            PRIVATE_SETTINGS.add(SCREEN_AUTO_BRIGHTNESS_ADJ);
            PRIVATE_SETTINGS.add(SCREEN_AUTO_BRIGHTNESS_ADJ);
            PRIVATE_SETTINGS.add(VIBRATE_INPUT_DEVICES);
            PRIVATE_SETTINGS.add(VIBRATE_INPUT_DEVICES);
            PRIVATE_SETTINGS.add(VOLUME_MASTER);
            PRIVATE_SETTINGS.add(VOLUME_MASTER);
+1 −0
Original line number Original line Diff line number Diff line
@@ -211,6 +211,7 @@ public class SystemSettingsValidators {
        VALIDATORS.put(System.SHOW_BATTERY_PERCENT, BOOLEAN_VALIDATOR);
        VALIDATORS.put(System.SHOW_BATTERY_PERCENT, BOOLEAN_VALIDATOR);
        VALIDATORS.put(System.NOTIFICATION_LIGHT_PULSE, BOOLEAN_VALIDATOR);
        VALIDATORS.put(System.NOTIFICATION_LIGHT_PULSE, BOOLEAN_VALIDATOR);
        VALIDATORS.put(System.WEAR_ACCESSIBILITY_GESTURE_ENABLED, BOOLEAN_VALIDATOR);
        VALIDATORS.put(System.WEAR_ACCESSIBILITY_GESTURE_ENABLED, BOOLEAN_VALIDATOR);
        VALIDATORS.put(System.WEAR_ACCESSIBILITY_GESTURE_ENABLED_DURING_OOBE, BOOLEAN_VALIDATOR);
        VALIDATORS.put(System.CLOCKWORK_BLUETOOTH_SETTINGS_PREF, BOOLEAN_VALIDATOR);
        VALIDATORS.put(System.CLOCKWORK_BLUETOOTH_SETTINGS_PREF, BOOLEAN_VALIDATOR);
        VALIDATORS.put(System.UNREAD_NOTIFICATION_DOT_INDICATOR, BOOLEAN_VALIDATOR);
        VALIDATORS.put(System.UNREAD_NOTIFICATION_DOT_INDICATOR, BOOLEAN_VALIDATOR);
        VALIDATORS.put(System.AUTO_LAUNCH_MEDIA_CONTROLS, BOOLEAN_VALIDATOR);
        VALIDATORS.put(System.AUTO_LAUNCH_MEDIA_CONTROLS, BOOLEAN_VALIDATOR);
+1 −0
Original line number Original line Diff line number Diff line
@@ -100,6 +100,7 @@ public class SettingsBackupTest {
                    Settings.System.MIN_REFRESH_RATE, // depends on hardware capabilities
                    Settings.System.MIN_REFRESH_RATE, // depends on hardware capabilities
                    Settings.System.PEAK_REFRESH_RATE, // depends on hardware capabilities
                    Settings.System.PEAK_REFRESH_RATE, // depends on hardware capabilities
                    Settings.System.SCREEN_BRIGHTNESS_FLOAT,
                    Settings.System.SCREEN_BRIGHTNESS_FLOAT,
                    Settings.System.WEAR_ACCESSIBILITY_GESTURE_ENABLED_DURING_OOBE,
                    Settings.System.SCREEN_AUTO_BRIGHTNESS_ADJ,
                    Settings.System.SCREEN_AUTO_BRIGHTNESS_ADJ,
                    Settings.System.MULTI_AUDIO_FOCUS_ENABLED // form-factor/OEM specific
                    Settings.System.MULTI_AUDIO_FOCUS_ENABLED // form-factor/OEM specific
                    );
                    );
+43 −8
Original line number Original line Diff line number Diff line
@@ -68,6 +68,7 @@ import static android.view.WindowManagerGlobal.ADD_OKAY;
import static android.view.WindowManagerGlobal.ADD_PERMISSION_DENIED;
import static android.view.WindowManagerGlobal.ADD_PERMISSION_DENIED;


import static com.android.internal.config.sysui.SystemUiDeviceConfigFlags.SCREENSHOT_KEYCHORD_DELAY;
import static com.android.internal.config.sysui.SystemUiDeviceConfigFlags.SCREENSHOT_KEYCHORD_DELAY;
import static com.android.internal.util.FrameworkStatsLog.ACCESSIBILITY_SHORTCUT_REPORTED__SHORTCUT_TYPE__A11Y_WEAR_TRIPLE_PRESS_GESTURE;
import static com.android.server.policy.WindowManagerPolicy.WindowManagerFuncs.CAMERA_LENS_COVERED;
import static com.android.server.policy.WindowManagerPolicy.WindowManagerFuncs.CAMERA_LENS_COVERED;
import static com.android.server.policy.WindowManagerPolicy.WindowManagerFuncs.CAMERA_LENS_COVER_ABSENT;
import static com.android.server.policy.WindowManagerPolicy.WindowManagerFuncs.CAMERA_LENS_COVER_ABSENT;
import static com.android.server.policy.WindowManagerPolicy.WindowManagerFuncs.CAMERA_LENS_UNCOVERED;
import static com.android.server.policy.WindowManagerPolicy.WindowManagerFuncs.CAMERA_LENS_UNCOVERED;
@@ -190,6 +191,7 @@ import android.widget.Toast;


import com.android.internal.R;
import com.android.internal.R;
import com.android.internal.accessibility.AccessibilityShortcutController;
import com.android.internal.accessibility.AccessibilityShortcutController;
import com.android.internal.accessibility.util.AccessibilityStatsLogUtils;
import com.android.internal.accessibility.util.AccessibilityUtils;
import com.android.internal.accessibility.util.AccessibilityUtils;
import com.android.internal.annotations.VisibleForTesting;
import com.android.internal.annotations.VisibleForTesting;
import com.android.internal.app.AssistUtils;
import com.android.internal.app.AssistUtils;
@@ -1400,7 +1402,18 @@ public class PhoneWindowManager implements WindowManagerPolicy {
                if (DEBUG_INPUT) {
                if (DEBUG_INPUT) {
                    Slog.d(TAG, "Executing stem primary triple press action behavior.");
                    Slog.d(TAG, "Executing stem primary triple press action behavior.");
                }
                }
                toggleTalkBack();

                if (Settings.System.getIntForUser(mContext.getContentResolver(),
                        Settings.System.WEAR_ACCESSIBILITY_GESTURE_ENABLED,
                        /* def= */ 0, UserHandle.USER_CURRENT) == 1) {
                    /** Toggle talkback begin */
                    ComponentName componentName = getTalkbackComponent();
                    if (componentName != null && toggleTalkBack(componentName)) {
                        /** log stem triple press telemetry if it's a talkback enabled event */
                        logStemTriplePressAccessibilityTelemetry(componentName);
                    }
                    /** Toggle talkback end */
                }
                break;
                break;
        }
        }
    }
    }
@@ -1419,17 +1432,39 @@ public class PhoneWindowManager implements WindowManagerPolicy {
        }
        }
    }
    }


    private void toggleTalkBack() {
    /**
        final ComponentName componentName = getTalkbackComponent();
     * A function that toggles talkback service
        if (componentName == null) {
     *
            return;
     * @return {@code true} if talkback is enabled, {@code false} if talkback is disabled
        }
     */

    private boolean toggleTalkBack(ComponentName componentName) {
        final Set<ComponentName> enabledServices =
        final Set<ComponentName> enabledServices =
                AccessibilityUtils.getEnabledServicesFromSettings(mContext, mCurrentUserId);
                AccessibilityUtils.getEnabledServicesFromSettings(mContext, mCurrentUserId);


        boolean isTalkbackAlreadyEnabled = enabledServices.contains(componentName);
        AccessibilityUtils.setAccessibilityServiceState(mContext, componentName,
        AccessibilityUtils.setAccessibilityServiceState(mContext, componentName,
                !enabledServices.contains(componentName));
                !isTalkbackAlreadyEnabled);
        /** if isTalkbackAlreadyEnabled is true, then it's a disabled event so return false
         * and if isTalkbackAlreadyEnabled is false, return true as it's an enabled event */
        return !isTalkbackAlreadyEnabled;
    }

    /**
     * A function that logs stem triple press accessibility telemetry
     * If the user setup (Oobe) is not completed, set the
     * WEAR_ACCESSIBILITY_GESTURE_ENABLED_DURING_OOBE
     * setting which will be later logged via Settings Snapshot
     * else, log ACCESSIBILITY_SHORTCUT_REPORTED atom
     */
    private void logStemTriplePressAccessibilityTelemetry(ComponentName componentName) {
        if (!AccessibilityUtils.isUserSetupCompleted(mContext)) {
            Settings.Secure.putInt(mContext.getContentResolver(),
                    Settings.System.WEAR_ACCESSIBILITY_GESTURE_ENABLED_DURING_OOBE, 1);
        } else {
            AccessibilityStatsLogUtils.logAccessibilityShortcutActivated(mContext, componentName,
                    ACCESSIBILITY_SHORTCUT_REPORTED__SHORTCUT_TYPE__A11Y_WEAR_TRIPLE_PRESS_GESTURE,
                    /* serviceEnabled= */ true);
        }
    }
    }


    private ComponentName getTalkbackComponent() {
    private ComponentName getTalkbackComponent() {