summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Lucas Dupin <dupin@google.com> 2019-01-15 13:40:42 -0800
committer Lucas Dupin <dupin@google.com> 2019-01-16 11:45:40 -0800
commitd43bf70c580d882c364469ba1534b0b2670f17ef (patch)
treeda1161270226b6dbfb77f9cc5759a8a3a4007f05
parentbf08b91174dfd3fab0fd1001f1624544776018d2 (diff)
Add support to SLPI tap gestures
This CL introduces a new configurable sensor type: config_dozeTapSensorType Test: atest SystemUITests Test: set config_dozeTapSensorType to double tap gesture on overlay Bug: 121198822 Bug: 111414690 Change-Id: I54f3c20473a6d97c860ee02f324edbcf89ba85d1
-rw-r--r--core/java/android/provider/Settings.java10
-rw-r--r--core/java/com/android/internal/hardware/AmbientDisplayConfiguration.java13
-rw-r--r--core/proto/android/app/settings_enums.proto3
-rw-r--r--core/proto/android/providers/settings/secure.proto1
-rw-r--r--core/res/res/values/config.xml3
-rw-r--r--core/res/res/values/symbols.xml1
-rw-r--r--packages/SettingsProvider/src/com/android/providers/settings/SettingsProtoDumpUtil.java3
-rw-r--r--packages/SystemUI/src/com/android/systemui/doze/DozeHost.java8
-rw-r--r--packages/SystemUI/src/com/android/systemui/doze/DozeLog.java4
-rw-r--r--packages/SystemUI/src/com/android/systemui/doze/DozeSensors.java7
-rw-r--r--packages/SystemUI/src/com/android/systemui/doze/DozeTriggers.java7
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBar.java2
-rw-r--r--packages/SystemUI/tests/src/com/android/systemui/doze/DozeHostFake.java2
-rw-r--r--proto/src/metrics_constants/metrics_constants.proto5
14 files changed, 62 insertions, 7 deletions
diff --git a/core/java/android/provider/Settings.java b/core/java/android/provider/Settings.java
index 39c4266e4cf8..b5954d374c72 100644
--- a/core/java/android/provider/Settings.java
+++ b/core/java/android/provider/Settings.java
@@ -7391,6 +7391,14 @@ public final class Settings {
private static final Validator DOZE_DOUBLE_TAP_GESTURE_VALIDATOR = BOOLEAN_VALIDATOR;
/**
+ * Whether the device should respond to the SLPI tap gesture.
+ * @hide
+ */
+ public static final String DOZE_TAP_SCREEN_GESTURE = "doze_tap_gesture";
+
+ private static final Validator DOZE_TAP_SCREEN_GESTURE_VALIDATOR = BOOLEAN_VALIDATOR;
+
+ /**
* Gesture that wakes up the lock screen.
* @hide
*/
@@ -8461,6 +8469,7 @@ public final class Settings {
DOZE_ALWAYS_ON,
DOZE_PICK_UP_GESTURE,
DOZE_DOUBLE_TAP_GESTURE,
+ DOZE_TAP_SCREEN_GESTURE,
DOZE_WAKE_LOCK_SCREEN_GESTURE,
DOZE_WAKE_SCREEN_GESTURE,
NFC_PAYMENT_DEFAULT_COMPONENT,
@@ -8617,6 +8626,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_TAP_SCREEN_GESTURE, DOZE_TAP_SCREEN_GESTURE_VALIDATOR);
VALIDATORS.put(DOZE_WAKE_LOCK_SCREEN_GESTURE, DOZE_WAKE_LOCK_SCREEN_GESTURE_VALIDATOR);
VALIDATORS.put(DOZE_WAKE_SCREEN_GESTURE, DOZE_WAKE_SCREEN_GESTURE_VALIDATOR);
VALIDATORS.put(NFC_PAYMENT_DEFAULT_COMPONENT, NFC_PAYMENT_DEFAULT_COMPONENT_VALIDATOR);
diff --git a/core/java/com/android/internal/hardware/AmbientDisplayConfiguration.java b/core/java/com/android/internal/hardware/AmbientDisplayConfiguration.java
index 2995a8f43268..7a00a51647f6 100644
--- a/core/java/com/android/internal/hardware/AmbientDisplayConfiguration.java
+++ b/core/java/com/android/internal/hardware/AmbientDisplayConfiguration.java
@@ -58,6 +58,15 @@ public class AmbientDisplayConfiguration {
return mContext.getResources().getBoolean(R.bool.config_dozePulsePickup);
}
+ public boolean tapGestureEnabled(int user) {
+ return boolSettingDefaultOn(Settings.Secure.DOZE_TAP_SCREEN_GESTURE, user)
+ && tapSensorAvailable();
+ }
+
+ public boolean tapSensorAvailable() {
+ return !TextUtils.isEmpty(tapSensorType());
+ }
+
public boolean doubleTapGestureEnabled(int user) {
return boolSettingDefaultOn(Settings.Secure.DOZE_DOUBLE_TAP_GESTURE, user)
&& doubleTapSensorAvailable();
@@ -86,6 +95,10 @@ public class AmbientDisplayConfiguration {
return mContext.getResources().getString(R.string.config_dozeDoubleTapSensorType);
}
+ public String tapSensorType() {
+ return mContext.getResources().getString(R.string.config_dozeTapSensorType);
+ }
+
public String longPressSensorType() {
return mContext.getResources().getString(R.string.config_dozeLongPressSensorType);
}
diff --git a/core/proto/android/app/settings_enums.proto b/core/proto/android/app/settings_enums.proto
index 49ca378ef0e2..2148273208e5 100644
--- a/core/proto/android/app/settings_enums.proto
+++ b/core/proto/android/app/settings_enums.proto
@@ -97,4 +97,7 @@ enum PageId {
// OPEN: Settings > System > Input & Gesture > Silence alerts
SETTINGS_GESTURE_SILENCE = 1625;
+
+ // OPEN: Settings > System > Input & Gesture > Tap to check
+ SETTINGS_GESTURE_TAP_SCREEN = 1626;
}
diff --git a/core/proto/android/providers/settings/secure.proto b/core/proto/android/providers/settings/secure.proto
index 9f4345d4668f..4bfd4d236abb 100644
--- a/core/proto/android/providers/settings/secure.proto
+++ b/core/proto/android/providers/settings/secure.proto
@@ -182,6 +182,7 @@ message SecureSettingsProto {
optional SettingProto pulse_on_pick_up = 3 [ (android.privacy).dest = DEST_AUTOMATIC ];
optional SettingProto pulse_on_long_press = 4 [ (android.privacy).dest = DEST_AUTOMATIC ];
optional SettingProto pulse_on_double_tap = 5 [ (android.privacy).dest = DEST_AUTOMATIC ];
+ optional SettingProto pulse_on_tap = 6 [ (android.privacy).dest = DEST_AUTOMATIC ];
}
optional Doze doze = 21;
diff --git a/core/res/res/values/config.xml b/core/res/res/values/config.xml
index 4d20fa465479..1014b5bc2f5e 100644
--- a/core/res/res/values/config.xml
+++ b/core/res/res/values/config.xml
@@ -2203,6 +2203,9 @@
<!-- Type of the double tap sensor. Empty if double tap is not supported. -->
<string name="config_dozeDoubleTapSensorType" translatable="false"></string>
+ <!-- Type of the tap sensor. Empty if tap is not supported. -->
+ <string name="config_dozeTapSensorType" translatable="false"></string>
+
<!-- Type of the long press sensor. Empty if long press is not supported. -->
<string name="config_dozeLongPressSensorType" translatable="false"></string>
diff --git a/core/res/res/values/symbols.xml b/core/res/res/values/symbols.xml
index daf8b446c7bb..f7135e744faf 100644
--- a/core/res/res/values/symbols.xml
+++ b/core/res/res/values/symbols.xml
@@ -3001,6 +3001,7 @@
<java-symbol type="array" name="config_emergency_mcc_codes" />
<java-symbol type="string" name="config_dozeDoubleTapSensorType" />
+ <java-symbol type="string" name="config_dozeTapSensorType" />
<java-symbol type="bool" name="config_dozePulsePickup" />
<!-- Used for MimeIconUtils. -->
diff --git a/packages/SettingsProvider/src/com/android/providers/settings/SettingsProtoDumpUtil.java b/packages/SettingsProvider/src/com/android/providers/settings/SettingsProtoDumpUtil.java
index 18bdb20ad0a6..abf0fdf29afe 100644
--- a/packages/SettingsProvider/src/com/android/providers/settings/SettingsProtoDumpUtil.java
+++ b/packages/SettingsProvider/src/com/android/providers/settings/SettingsProtoDumpUtil.java
@@ -1879,6 +1879,9 @@ class SettingsProtoDumpUtil {
dumpSetting(s, p,
Settings.Secure.DOZE_DOUBLE_TAP_GESTURE,
SecureSettingsProto.Doze.PULSE_ON_DOUBLE_TAP);
+ dumpSetting(s, p,
+ Settings.Secure.DOZE_TAP_SCREEN_GESTURE,
+ SecureSettingsProto.Doze.PULSE_ON_TAP);
p.end(dozeToken);
dumpSetting(s, p,
diff --git a/packages/SystemUI/src/com/android/systemui/doze/DozeHost.java b/packages/SystemUI/src/com/android/systemui/doze/DozeHost.java
index 4cb1feebcce4..bd7a421e9762 100644
--- a/packages/SystemUI/src/com/android/systemui/doze/DozeHost.java
+++ b/packages/SystemUI/src/com/android/systemui/doze/DozeHost.java
@@ -38,7 +38,13 @@ public interface DozeHost {
void setAnimateWakeup(boolean animateWakeup);
void setAnimateScreenOff(boolean animateScreenOff);
- void onDoubleTap(float x, float y);
+ /**
+ * Reports that a tap event happend on the Sensors Low Power Island.
+ *
+ * @param x Touch X, or -1 if sensor doesn't support touch location.
+ * @param y Touch Y, or -1 if sensor doesn't support touch location.
+ */
+ void onSlpiTap(float x, float y);
default void setAodDimmingScrim(float scrimOpacity) {}
void setDozeScreenBrightness(int value);
diff --git a/packages/SystemUI/src/com/android/systemui/doze/DozeLog.java b/packages/SystemUI/src/com/android/systemui/doze/DozeLog.java
index 50003e3a6a38..a7847739cd00 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 REASONS = 9;
+ private static final int REASONS = 10;
public static final int PULSE_REASON_NONE = -1;
public static final int PULSE_REASON_INTENT = 0;
@@ -47,6 +47,7 @@ public class DozeLog {
public static final int PULSE_REASON_DOCKING = 6;
public static final int REASON_SENSOR_WAKE_UP = 7;
public static final int PULSE_REASON_SENSOR_WAKE_LOCK_SCREEN = 8;
+ public static final int PULSE_REASON_SENSOR_TAP = 9;
private static boolean sRegisterKeyguardCallback = true;
@@ -207,6 +208,7 @@ public class DozeLog {
case PULSE_REASON_DOCKING: return "docking";
case PULSE_REASON_SENSOR_WAKE_LOCK_SCREEN: return "wakelockscreen";
case REASON_SENSOR_WAKE_UP: return "wakeup";
+ case PULSE_REASON_SENSOR_TAP: return "tap";
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 b6fc35553760..78374a0b1621 100644
--- a/packages/SystemUI/src/com/android/systemui/doze/DozeSensors.java
+++ b/packages/SystemUI/src/com/android/systemui/doze/DozeSensors.java
@@ -107,6 +107,13 @@ public class DozeSensors {
dozeParameters.doubleTapReportsTouchCoordinates(),
true /* touchscreen */),
new TriggerSensor(
+ findSensorWithType(config.tapSensorType()),
+ Settings.Secure.DOZE_TAP_SCREEN_GESTURE,
+ true /* configured */,
+ DozeLog.PULSE_REASON_SENSOR_TAP,
+ false /* reports touch coordinates */,
+ true /* touchscreen */),
+ new TriggerSensor(
findSensorWithType(config.longPressSensorType()),
Settings.Secure.DOZE_PULSE_ON_LONG_PRESS,
false /* settingDef */,
diff --git a/packages/SystemUI/src/com/android/systemui/doze/DozeTriggers.java b/packages/SystemUI/src/com/android/systemui/doze/DozeTriggers.java
index 6a9b6899d509..e2e448bb0d0c 100644
--- a/packages/SystemUI/src/com/android/systemui/doze/DozeTriggers.java
+++ b/packages/SystemUI/src/com/android/systemui/doze/DozeTriggers.java
@@ -132,6 +132,7 @@ public class DozeTriggers implements DozeMachine.Part {
private void onSensor(int pulseReason, boolean sensorPerformedProxCheck,
float screenX, float screenY, float[] rawValues) {
boolean isDoubleTap = pulseReason == DozeLog.PULSE_REASON_SENSOR_DOUBLE_TAP;
+ boolean isTap = pulseReason == DozeLog.PULSE_REASON_SENSOR_TAP;
boolean isPickup = pulseReason == DozeLog.PULSE_REASON_SENSOR_PICKUP;
boolean isLongPress = pulseReason == DozeLog.PULSE_REASON_SENSOR_LONG_PRESS;
boolean isWakeDisplay = pulseReason == DozeLog.REASON_SENSOR_WAKE_UP;
@@ -148,8 +149,10 @@ public class DozeTriggers implements DozeMachine.Part {
// In pocket, drop event.
return;
}
- if (isDoubleTap) {
- mDozeHost.onDoubleTap(screenX, screenY);
+ if (isDoubleTap || isTap) {
+ if (screenX != -1 && screenY != -1) {
+ mDozeHost.onSlpiTap(screenX, screenY);
+ }
mMachine.wakeUp();
} else if (isPickup) {
mMachine.wakeUp();
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBar.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBar.java
index 514bb228cd97..7569a50a8c54 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBar.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBar.java
@@ -3999,7 +3999,7 @@ public class StatusBar extends SystemUI implements DemoMode,
}
@Override
- public void onDoubleTap(float screenX, float screenY) {
+ public void onSlpiTap(float screenX, float screenY) {
if (screenX > 0 && screenY > 0 && mAmbientIndicationContainer != null
&& mAmbientIndicationContainer.getVisibility() == View.VISIBLE) {
mAmbientIndicationContainer.getLocationOnScreen(mTmpInt2);
diff --git a/packages/SystemUI/tests/src/com/android/systemui/doze/DozeHostFake.java b/packages/SystemUI/tests/src/com/android/systemui/doze/DozeHostFake.java
index ce28b50436eb..dc4287287b03 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/doze/DozeHostFake.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/doze/DozeHostFake.java
@@ -104,7 +104,7 @@ class DozeHostFake implements DozeHost {
}
@Override
- public void onDoubleTap(float x, float y) {
+ public void onSlpiTap(float x, float y) {
doubleTapX = y;
doubleTapY = y;
}
diff --git a/proto/src/metrics_constants/metrics_constants.proto b/proto/src/metrics_constants/metrics_constants.proto
index bb5d288f11e7..a07411d0afaf 100644
--- a/proto/src/metrics_constants/metrics_constants.proto
+++ b/proto/src/metrics_constants/metrics_constants.proto
@@ -6801,7 +6801,6 @@ message MetricsEvent {
// ACTION: Tap & Pay -> Default Application Setting -> Use Default
// OS: Q
ACTION_NFC_PAYMENT_ALWAYS_SETTING = 1623;
- // ---- End Q Constants, all Q constants go above this line ----
// OPEN: Settings > System > Input & Gesture > Skip song gesture
// OS: Q
@@ -6811,6 +6810,10 @@ message MetricsEvent {
// OS: Q
SETTINGS_GESTURE_SILENCE = 1625;
+ // OPEN: Settings > System > Input & Gesture > Tap screen gesture
+ // OS: Q
+ SETTINGS_GESTURE_TAP_SCREEN = 1626;
+
// ---- End Q Constants, all Q constants go above this line ----
// Add new aosp constants above this line.
// END OF AOSP CONSTANTS