Ambient: Re-register all trigger sensors if one fires
Works around an issue where triggering one trigger sensor can
affect other trigger sensors. To be sure, re-register them all.
Change-Id: I4a0999275638e8a78c3c604fda6527aff0d9365a
Fixes: 31933894
diff --git a/packages/SystemUI/src/com/android/systemui/doze/DozeService.java b/packages/SystemUI/src/com/android/systemui/doze/DozeService.java
index 261d241..56f6b8d 100644
--- a/packages/SystemUI/src/com/android/systemui/doze/DozeService.java
+++ b/packages/SystemUI/src/com/android/systemui/doze/DozeService.java
@@ -60,6 +60,11 @@
private static final String ACTION_BASE = "com.android.systemui.doze";
private static final String PULSE_ACTION = ACTION_BASE + ".pulse";
+ /**
+ * If true, reregisters all trigger sensors when the screen turns off.
+ */
+ private static final boolean REREGISTER_ALL_SENSORS_ON_SCREEN_OFF = true;
+
private final String mTag = String.format(TAG + ".%08x", hashCode());
private final Context mContext = this;
private final DozeParameters mDozeParameters = new DozeParameters(mContext);
@@ -272,6 +277,9 @@
public void onPulseFinished() {
if (mPulsing && mDreaming) {
mPulsing = false;
+ if (REREGISTER_ALL_SENSORS_ON_SCREEN_OFF) {
+ reregisterAllSensors();
+ }
turnDisplayOff();
}
mWakeLock.release(); // needs to be unconditional to balance acquire
@@ -308,6 +316,15 @@
listenForNotifications(listen);
}
+ private void reregisterAllSensors() {
+ for (TriggerSensor s : mSensors) {
+ s.setListening(false);
+ }
+ for (TriggerSensor s : mSensors) {
+ s.setListening(true);
+ }
+ }
+
private void listenForBroadcasts(boolean listen) {
if (listen) {
final IntentFilter filter = new IntentFilter(PULSE_ACTION);