diff --git a/core/java/com/android/internal/hardware/AmbientDisplayConfiguration.java b/core/java/com/android/internal/hardware/AmbientDisplayConfiguration.java
index 0080ace230a27..d4c451e3ffffd 100644
--- a/core/java/com/android/internal/hardware/AmbientDisplayConfiguration.java
+++ b/core/java/com/android/internal/hardware/AmbientDisplayConfiguration.java
@@ -72,7 +72,8 @@ public class AmbientDisplayConfiguration {
}
public boolean wakeLockScreenGestureAvailable() {
- return !TextUtils.isEmpty(wakeLockScreenSensorType());
+ return mContext.getResources()
+ .getBoolean(R.bool.config_dozeWakeLockScreenSensorAvailable);
}
public boolean wakeScreenGestureEnabled(int user) {
@@ -92,10 +93,6 @@ public class AmbientDisplayConfiguration {
return mContext.getResources().getString(R.string.config_dozeLongPressSensorType);
}
- public String wakeLockScreenSensorType() {
- return mContext.getResources().getString(R.string.config_dozeWakeLockScreenSensorType);
- }
-
public String wakeScreenSensorType() {
return mContext.getResources().getString(R.string.config_dozeWakeScreenSensorType);
}
diff --git a/core/res/res/values/config.xml b/core/res/res/values/config.xml
index 8b73b67684790..aeeba59b694b1 100644
--- a/core/res/res/values/config.xml
+++ b/core/res/res/values/config.xml
@@ -2113,8 +2113,8 @@
-
-
+
+ false
diff --git a/core/res/res/values/symbols.xml b/core/res/res/values/symbols.xml
index 7e7c7b252e21d..6f28b2c36e16c 100644
--- a/core/res/res/values/symbols.xml
+++ b/core/res/res/values/symbols.xml
@@ -3280,7 +3280,7 @@
-
+
diff --git a/packages/SystemUI/plugin/src/com/android/systemui/plugins/SensorManagerPlugin.java b/packages/SystemUI/plugin/src/com/android/systemui/plugins/SensorManagerPlugin.java
index d1181445be439..839b90bf6c5e1 100644
--- a/packages/SystemUI/plugin/src/com/android/systemui/plugins/SensorManagerPlugin.java
+++ b/packages/SystemUI/plugin/src/com/android/systemui/plugins/SensorManagerPlugin.java
@@ -16,6 +16,9 @@
package com.android.systemui.plugins;
+import android.hardware.Sensor;
+import android.hardware.TriggerEventListener;
+
import com.android.systemui.plugins.annotations.ProvidesInterface;
/**
@@ -28,10 +31,12 @@ public interface SensorManagerPlugin extends Plugin {
int VERSION = 1;
/**
- * Registers for trigger events from the sensor. The client will receive trigger events until
- * {@link #unregisterTriggerEvent(Sensor, TriggerEventListener)} is called.
+ * Registers for trigger events from the sensor. Trigger events are one-shot and need to
+ * re-registered in order for them to be fired again.
* @param sensor
* @param listener
+ * @see android.hardware.SensorManager#requestTriggerSensor(
+ * android.hardware.TriggerEventListener, android.hardware.Sensor)
*/
void registerTriggerEvent(Sensor sensor, TriggerEventListener listener);
diff --git a/packages/SystemUI/src/com/android/systemui/doze/DozeSensors.java b/packages/SystemUI/src/com/android/systemui/doze/DozeSensors.java
index 701394763fbd3..43dd412f70941 100644
--- a/packages/SystemUI/src/com/android/systemui/doze/DozeSensors.java
+++ b/packages/SystemUI/src/com/android/systemui/doze/DozeSensors.java
@@ -16,6 +16,8 @@
package com.android.systemui.doze;
+import static com.android.systemui.plugins.SensorManagerPlugin.Sensor.TYPE_WAKE_LOCK_SCREEN;
+
import android.annotation.AnyThread;
import android.app.ActivityManager;
import android.app.AlarmManager;
@@ -39,8 +41,10 @@ import android.util.Log;
import com.android.internal.hardware.AmbientDisplayConfiguration;
import com.android.internal.logging.MetricsLogger;
import com.android.internal.logging.nano.MetricsProto;
+import com.android.systemui.plugins.SensorManagerPlugin;
import com.android.systemui.statusbar.phone.DozeParameters;
import com.android.systemui.util.AlarmTimeout;
+import com.android.systemui.util.AsyncSensorManager;
import com.android.systemui.util.wakelock.WakeLock;
import java.io.PrintWriter;
@@ -112,8 +116,8 @@ public class DozeSensors {
DozeLog.PULSE_REASON_SENSOR_LONG_PRESS,
true /* reports touch coordinates */,
true /* touchscreen */),
- new TriggerSensor(
- findSensorWithType(config.wakeLockScreenSensorType()),
+ new PluginTriggerSensor(
+ new SensorManagerPlugin.Sensor(TYPE_WAKE_LOCK_SCREEN),
Settings.Secure.DOZE_WAKE_LOCK_SCREEN_GESTURE,
true /* configured */,
DozeLog.PULSE_REASON_SENSOR_WAKE_LOCK_SCREEN,
@@ -375,7 +379,7 @@ public class DozeSensors {
mHandler.post(mWakeLock.wrap(() -> {
if (DEBUG) Log.d(TAG, "onTrigger: " + triggerEventToString(event));
boolean sensorPerformsProxCheck = false;
- if (mSensor.getType() == Sensor.TYPE_PICK_UP_GESTURE) {
+ if (mSensor != null && mSensor.getType() == Sensor.TYPE_PICK_UP_GESTURE) {
int subType = (int) event.values[0];
MetricsLogger.action(
mContext, MetricsProto.MetricsEvent.ACTION_AMBIENT_GESTURE,
@@ -418,6 +422,49 @@ public class DozeSensors {
}
}
+ /**
+ * A Sensor that is injected via plugin, for better ContextHub interface.
+ */
+ private class PluginTriggerSensor extends TriggerSensor {
+
+ private final SensorManagerPlugin.Sensor mPluginSensor;
+ private final SensorManagerPlugin.TriggerEventListener mTriggerEventListener = (event) -> {
+ onTrigger(null);
+ };
+
+ PluginTriggerSensor(SensorManagerPlugin.Sensor sensor, String setting, boolean configured,
+ int pulseReason, boolean reportsTouchCoordinates, boolean requiresTouchscreen) {
+ super(null, setting, configured, pulseReason, reportsTouchCoordinates,
+ requiresTouchscreen);
+ mPluginSensor = sensor;
+ }
+
+ @Override
+ public void updateListener() {
+ if (!mConfigured) return;
+ AsyncSensorManager asyncSensorManager = (AsyncSensorManager) mSensorManager;
+ if (mRequested && !mDisabled && enabledBySetting() && !mRegistered) {
+ asyncSensorManager.requestPluginTriggerSensor(mPluginSensor, mTriggerEventListener);
+ mRegistered = true;
+ if (DEBUG) Log.d(TAG, "requestPluginTriggerSensor");
+ } else if (mRegistered) {
+ asyncSensorManager.cancelPluginTriggerSensor(mPluginSensor, mTriggerEventListener);
+ mRegistered = false;
+ if (DEBUG) Log.d(TAG, "cancelPluginTriggerSensor");
+ }
+ }
+
+ @Override
+ public String toString() {
+ return new StringBuilder("{mRegistered=").append(mRegistered)
+ .append(", mRequested=").append(mRequested)
+ .append(", mDisabled=").append(mDisabled)
+ .append(", mConfigured=").append(mConfigured)
+ .append(", mSensor=").append(mPluginSensor).append("}").toString();
+ }
+
+ }
+
private class WakeScreenSensor extends TriggerSensor {
WakeScreenSensor() {