diff options
| author | 2019-01-15 13:40:42 -0800 | |
|---|---|---|
| committer | 2019-01-16 11:45:40 -0800 | |
| commit | d43bf70c580d882c364469ba1534b0b2670f17ef (patch) | |
| tree | da1161270226b6dbfb77f9cc5759a8a3a4007f05 | |
| parent | bf08b91174dfd3fab0fd1001f1624544776018d2 (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
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 |