Loading core/java/android/provider/Settings.java +11 −0 Original line number Original line Diff line number Diff line Loading @@ -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 */ */ Loading Loading @@ -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); Loading packages/SettingsProvider/src/android/provider/settings/validators/SystemSettingsValidators.java +1 −0 Original line number Original line Diff line number Diff line Loading @@ -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); Loading packages/SettingsProvider/test/src/android/provider/SettingsBackupTest.java +1 −0 Original line number Original line Diff line number Diff line Loading @@ -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 ); ); Loading services/core/java/com/android/server/policy/PhoneWindowManager.java +43 −8 Original line number Original line Diff line number Diff line Loading @@ -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; Loading Loading @@ -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; Loading Loading @@ -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; } } } } Loading @@ -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() { Loading Loading
core/java/android/provider/Settings.java +11 −0 Original line number Original line Diff line number Diff line Loading @@ -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 */ */ Loading Loading @@ -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); Loading
packages/SettingsProvider/src/android/provider/settings/validators/SystemSettingsValidators.java +1 −0 Original line number Original line Diff line number Diff line Loading @@ -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); Loading
packages/SettingsProvider/test/src/android/provider/SettingsBackupTest.java +1 −0 Original line number Original line Diff line number Diff line Loading @@ -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 ); ); Loading
services/core/java/com/android/server/policy/PhoneWindowManager.java +43 −8 Original line number Original line Diff line number Diff line Loading @@ -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; Loading Loading @@ -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; Loading Loading @@ -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; } } } } Loading @@ -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() { Loading