summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--core/java/android/provider/Settings.java10
-rw-r--r--core/java/com/android/internal/hardware/AmbientDisplayConfiguration.java13
-rw-r--r--core/res/res/values/config.xml3
-rw-r--r--core/res/res/values/symbols.xml1
-rw-r--r--packages/SystemUI/src/com/android/systemui/doze/DozeLog.java9
-rw-r--r--packages/SystemUI/src/com/android/systemui/doze/DozeSensors.java7
-rw-r--r--packages/SystemUI/src/com/android/systemui/doze/DozeTriggers.java5
-rw-r--r--proto/src/metrics_constants.proto5
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.