diff options
8 files changed, 51 insertions, 2 deletions
diff --git a/core/java/android/provider/Settings.java b/core/java/android/provider/Settings.java index d09c4166bfe3..7980af12b821 100644 --- a/core/java/android/provider/Settings.java +++ b/core/java/android/provider/Settings.java @@ -7247,6 +7247,14 @@ public final class Settings { private static final Validator DOZE_DOUBLE_TAP_GESTURE_VALIDATOR = BOOLEAN_VALIDATOR; /** + * Whether the device should pulse on reach gesture. + * @hide + */ + public static final String DOZE_REACH_GESTURE = "doze_reach_gesture"; + + private static final Validator DOZE_REACH_GESTURE_VALIDATOR = BOOLEAN_VALIDATOR; + + /** * The current night mode that has been selected by the user. Owned * and controlled by UiModeManagerService. Constants are as per * UiModeManager. @@ -8148,6 +8156,7 @@ public final class Settings { DOZE_ALWAYS_ON, DOZE_PICK_UP_GESTURE, DOZE_DOUBLE_TAP_GESTURE, + DOZE_REACH_GESTURE, NFC_PAYMENT_DEFAULT_COMPONENT, AUTOMATIC_STORAGE_MANAGER_DAYS_TO_RETAIN, FACE_UNLOCK_KEYGUARD_ENABLED, @@ -8291,6 +8300,7 @@ public final class Settings { VALIDATORS.put(DOZE_ALWAYS_ON, DOZE_ALWAYS_ON_VALIDATOR); VALIDATORS.put(DOZE_PICK_UP_GESTURE, DOZE_PICK_UP_GESTURE_VALIDATOR); VALIDATORS.put(DOZE_DOUBLE_TAP_GESTURE, DOZE_DOUBLE_TAP_GESTURE_VALIDATOR); + VALIDATORS.put(DOZE_REACH_GESTURE, DOZE_REACH_GESTURE_VALIDATOR); VALIDATORS.put(NFC_PAYMENT_DEFAULT_COMPONENT, NFC_PAYMENT_DEFAULT_COMPONENT_VALIDATOR); VALIDATORS.put(AUTOMATIC_STORAGE_MANAGER_DAYS_TO_RETAIN, AUTOMATIC_STORAGE_MANAGER_DAYS_TO_RETAIN_VALIDATOR); diff --git a/core/java/com/android/internal/hardware/AmbientDisplayConfiguration.java b/core/java/com/android/internal/hardware/AmbientDisplayConfiguration.java index c21159eebc75..87283675d4b2 100644 --- a/core/java/com/android/internal/hardware/AmbientDisplayConfiguration.java +++ b/core/java/com/android/internal/hardware/AmbientDisplayConfiguration.java @@ -66,6 +66,15 @@ public class AmbientDisplayConfiguration { return !TextUtils.isEmpty(doubleTapSensorType()); } + public boolean reachGestureEnabled(int user) { + return boolSettingDefaultOn(Settings.Secure.DOZE_REACH_GESTURE, user) + && reachGestureAvailable(); + } + + public boolean reachGestureAvailable() { + return !TextUtils.isEmpty(reachSensorType()); + } + public String doubleTapSensorType() { return mContext.getResources().getString(R.string.config_dozeDoubleTapSensorType); } @@ -74,6 +83,10 @@ public class AmbientDisplayConfiguration { return mContext.getResources().getString(R.string.config_dozeLongPressSensorType); } + public String reachSensorType() { + return mContext.getResources().getString(R.string.config_dozeReachSensorType); + } + public boolean pulseOnLongPressEnabled(int user) { return pulseOnLongPressAvailable() && boolSettingDefaultOff( Settings.Secure.DOZE_PULSE_ON_LONG_PRESS, user); diff --git a/core/res/res/values/config.xml b/core/res/res/values/config.xml index a0d122e2713b..b15c9c5f5e18 100644 --- a/core/res/res/values/config.xml +++ b/core/res/res/values/config.xml @@ -2105,6 +2105,9 @@ <!-- Type of the long press sensor. Empty if long press is not supported. --> <string name="config_dozeLongPressSensorType" translatable="false"></string> + <!-- Type of the reach sensor. Empty if reach is not supported. --> + <string name="config_dozeReachSensorType" translatable="false"></string> + <!-- Control whether the always on display mode is available. This should only be enabled on devices where the display has been tuned to be power efficient in DOZE and/or DOZE_SUSPEND states. --> diff --git a/core/res/res/values/symbols.xml b/core/res/res/values/symbols.xml index 7094bd5f9d61..2271baa6b705 100644 --- a/core/res/res/values/symbols.xml +++ b/core/res/res/values/symbols.xml @@ -3262,6 +3262,7 @@ <java-symbol type="array" name="config_hideWhenDisabled_packageNames" /> <java-symbol type="string" name="config_dozeLongPressSensorType" /> + <java-symbol type="string" name="config_dozeReachSensorType" /> <java-symbol type="array" name="config_allowedGlobalInstantAppSettings" /> <java-symbol type="array" name="config_allowedSystemInstantAppSettings" /> diff --git a/packages/SystemUI/src/com/android/systemui/doze/DozeLog.java b/packages/SystemUI/src/com/android/systemui/doze/DozeLog.java index 1cacdb595be1..51cc4a11a8d0 100644 --- a/packages/SystemUI/src/com/android/systemui/doze/DozeLog.java +++ b/packages/SystemUI/src/com/android/systemui/doze/DozeLog.java @@ -35,7 +35,7 @@ public class DozeLog { private static final int SIZE = Build.IS_DEBUGGABLE ? 400 : 50; static final SimpleDateFormat FORMAT = new SimpleDateFormat("MM-dd HH:mm:ss.SSS"); - private static final int PULSE_REASONS = 6; + private static final int PULSE_REASONS = 7; public static final int PULSE_REASON_NONE = -1; public static final int PULSE_REASON_INTENT = 0; @@ -44,6 +44,7 @@ public class DozeLog { public static final int PULSE_REASON_SENSOR_PICKUP = 3; public static final int PULSE_REASON_SENSOR_DOUBLE_TAP = 4; public static final int PULSE_REASON_SENSOR_LONG_PRESS = 5; + public static final int PULSE_REASON_SENSOR_REACH = 6; private static boolean sRegisterKeyguardCallback = true; @@ -169,6 +170,11 @@ public class DozeLog { log("state " + state); } + public static void traceReachWakeUp() { + if (!ENABLED) return; + log("reachWakeUp"); + } + public static void traceProximityResult(Context context, boolean near, long millis, int pulseReason) { if (!ENABLED) return; @@ -186,6 +192,7 @@ public class DozeLog { case PULSE_REASON_SENSOR_PICKUP: return "pickup"; case PULSE_REASON_SENSOR_DOUBLE_TAP: return "doubletap"; case PULSE_REASON_SENSOR_LONG_PRESS: return "longpress"; + case PULSE_REASON_SENSOR_REACH: return "reach"; default: throw new IllegalArgumentException("bad reason: " + pulseReason); } } diff --git a/packages/SystemUI/src/com/android/systemui/doze/DozeSensors.java b/packages/SystemUI/src/com/android/systemui/doze/DozeSensors.java index 18dffa705f2c..045a98c51a77 100644 --- a/packages/SystemUI/src/com/android/systemui/doze/DozeSensors.java +++ b/packages/SystemUI/src/com/android/systemui/doze/DozeSensors.java @@ -110,6 +110,13 @@ public class DozeSensors { DozeLog.PULSE_REASON_SENSOR_LONG_PRESS, true /* reports touch coordinates */, true /* touchscreen */), + new TriggerSensor( + findSensorWithType(config.reachSensorType()), + Settings.Secure.DOZE_REACH_GESTURE, + true /* configured */, + DozeLog.PULSE_REASON_SENSOR_REACH, + false /* reports touch coordinates */, + false /* touchscreen */), }; mProxSensor = new ProxSensor(policy); diff --git a/packages/SystemUI/src/com/android/systemui/doze/DozeTriggers.java b/packages/SystemUI/src/com/android/systemui/doze/DozeTriggers.java index 4391a44f9904..73cbd7d96d28 100644 --- a/packages/SystemUI/src/com/android/systemui/doze/DozeTriggers.java +++ b/packages/SystemUI/src/com/android/systemui/doze/DozeTriggers.java @@ -128,6 +128,7 @@ public class DozeTriggers implements DozeMachine.Part { boolean isDoubleTap = pulseReason == DozeLog.PULSE_REASON_SENSOR_DOUBLE_TAP; boolean isPickup = pulseReason == DozeLog.PULSE_REASON_SENSOR_PICKUP; boolean isLongPress = pulseReason == DozeLog.PULSE_REASON_SENSOR_LONG_PRESS; + boolean isReach = pulseReason == DozeLog.PULSE_REASON_SENSOR_REACH; if (isLongPress) { requestPulse(pulseReason, sensorPerformedProxCheck); @@ -140,7 +141,7 @@ public class DozeTriggers implements DozeMachine.Part { if (isDoubleTap) { mDozeHost.onDoubleTap(screenX, screenY); mMachine.wakeUp(); - } else if (isPickup) { + } else if (isPickup || isReach) { mMachine.wakeUp(); } else { mDozeHost.extendPulse(); @@ -155,6 +156,8 @@ public class DozeTriggers implements DozeMachine.Part { final boolean withinVibrationThreshold = timeSinceNotification < mDozeParameters.getPickupVibrationThreshold(); DozeLog.tracePickupWakeUp(mContext, withinVibrationThreshold); + } else if (isReach) { + DozeLog.traceReachWakeUp(); } } diff --git a/proto/src/metrics_constants.proto b/proto/src/metrics_constants.proto index cc789e206484..a20eece5a668 100644 --- a/proto/src/metrics_constants.proto +++ b/proto/src/metrics_constants.proto @@ -2219,6 +2219,7 @@ message MetricsEvent { // 1: Gesture performed is Nudge // 2: Gesture performed is Pickup // 4: Gesture performed is Double Tap + // 6: Gesture performed is Reach ACTION_AMBIENT_GESTURE = 411; // ---- End N Constants, all N constants go above this line ---- @@ -6440,6 +6441,10 @@ message MetricsEvent { // OS: Q SETTINGS_WIFI_ADD_NETWORK = 1556; + // OPEN: Settings > System > Input & Gesture > Reach up gesture + // OS: Q + SETTINGS_GESTURE_REACH = 1557; + // ---- End Q Constants, all Q constants go above this line ---- // Add new aosp constants above this line. |