Merge "Implement accessibility telemtery in wear"
This commit is contained in:
@@ -4384,6 +4384,16 @@ public final class Settings {
|
||||
public static final String 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
|
||||
*/
|
||||
@@ -5766,6 +5776,7 @@ public final class Settings {
|
||||
PRIVATE_SETTINGS.add(END_BUTTON_BEHAVIOR);
|
||||
PRIVATE_SETTINGS.add(ADVANCED_SETTINGS);
|
||||
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(VIBRATE_INPUT_DEVICES);
|
||||
PRIVATE_SETTINGS.add(VOLUME_MASTER);
|
||||
|
||||
@@ -211,6 +211,7 @@ public class SystemSettingsValidators {
|
||||
VALIDATORS.put(System.SHOW_BATTERY_PERCENT, 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_DURING_OOBE, BOOLEAN_VALIDATOR);
|
||||
VALIDATORS.put(System.CLOCKWORK_BLUETOOTH_SETTINGS_PREF, BOOLEAN_VALIDATOR);
|
||||
VALIDATORS.put(System.UNREAD_NOTIFICATION_DOT_INDICATOR, BOOLEAN_VALIDATOR);
|
||||
VALIDATORS.put(System.AUTO_LAUNCH_MEDIA_CONTROLS, BOOLEAN_VALIDATOR);
|
||||
|
||||
@@ -100,6 +100,7 @@ public class SettingsBackupTest {
|
||||
Settings.System.MIN_REFRESH_RATE, // depends on hardware capabilities
|
||||
Settings.System.PEAK_REFRESH_RATE, // depends on hardware capabilities
|
||||
Settings.System.SCREEN_BRIGHTNESS_FLOAT,
|
||||
Settings.System.WEAR_ACCESSIBILITY_GESTURE_ENABLED_DURING_OOBE,
|
||||
Settings.System.SCREEN_AUTO_BRIGHTNESS_ADJ,
|
||||
Settings.System.MULTI_AUDIO_FOCUS_ENABLED // form-factor/OEM specific
|
||||
);
|
||||
|
||||
@@ -68,6 +68,7 @@ import static android.view.WindowManagerGlobal.ADD_OKAY;
|
||||
import static android.view.WindowManagerGlobal.ADD_PERMISSION_DENIED;
|
||||
|
||||
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_COVER_ABSENT;
|
||||
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.accessibility.AccessibilityShortcutController;
|
||||
import com.android.internal.accessibility.util.AccessibilityStatsLogUtils;
|
||||
import com.android.internal.accessibility.util.AccessibilityUtils;
|
||||
import com.android.internal.annotations.VisibleForTesting;
|
||||
import com.android.internal.app.AssistUtils;
|
||||
@@ -1400,7 +1402,18 @@ public class PhoneWindowManager implements WindowManagerPolicy {
|
||||
if (DEBUG_INPUT) {
|
||||
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;
|
||||
}
|
||||
}
|
||||
@@ -1419,17 +1432,39 @@ public class PhoneWindowManager implements WindowManagerPolicy {
|
||||
}
|
||||
}
|
||||
|
||||
private void toggleTalkBack() {
|
||||
final ComponentName componentName = getTalkbackComponent();
|
||||
if (componentName == null) {
|
||||
return;
|
||||
}
|
||||
|
||||
/**
|
||||
* A function that toggles talkback service
|
||||
*
|
||||
* @return {@code true} if talkback is enabled, {@code false} if talkback is disabled
|
||||
*/
|
||||
private boolean toggleTalkBack(ComponentName componentName) {
|
||||
final Set<ComponentName> enabledServices =
|
||||
AccessibilityUtils.getEnabledServicesFromSettings(mContext, mCurrentUserId);
|
||||
|
||||
boolean isTalkbackAlreadyEnabled = enabledServices.contains(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() {
|
||||
|
||||
Reference in New Issue
Block a user