diff --git a/packages/SystemUI/src/com/android/systemui/util/sensors/ProximitySensor.java b/packages/SystemUI/src/com/android/systemui/util/sensors/ProximitySensor.java index 57f58c6a517ef..ff7716a85ae1c 100644 --- a/packages/SystemUI/src/com/android/systemui/util/sensors/ProximitySensor.java +++ b/packages/SystemUI/src/com/android/systemui/util/sensors/ProximitySensor.java @@ -83,20 +83,21 @@ public class ProximitySensor implements ThresholdSensor { private ThresholdSensor.Listener mSecondaryEventListener = new ThresholdSensor.Listener() { @Override public void onThresholdCrossed(ThresholdSensorEvent event) { - // This sensor should only be used briefly. Turn it off as soon as we get a reading. - mSecondaryThresholdSensor.pause(); - // Only check the secondary as long as the primary thinks we're near. if (!mLastPrimaryEvent.getBelow()) { + mSecondaryThresholdSensor.pause(); mCancelSecondaryRunnable = null; return; } logDebug("Secondary sensor event: " + event.getBelow() + "."); - // Check this sensor again in a moment. - mCancelSecondaryRunnable = mDelayableExecutor.executeDelayed( - mSecondaryThresholdSensor::resume, SECONDARY_PING_INTERVAL_MS); - + // This sensor should only be used briefly when uncovered. + if (!event.getBelow()) { + mSecondaryThresholdSensor.pause(); + // Check this sensor again in a moment. + mCancelSecondaryRunnable = mDelayableExecutor.executeDelayed( + mSecondaryThresholdSensor::resume, SECONDARY_PING_INTERVAL_MS); + } onSensorEvent(event); } }; diff --git a/packages/SystemUI/src/com/android/systemui/util/sensors/ThresholdSensorImpl.java b/packages/SystemUI/src/com/android/systemui/util/sensors/ThresholdSensorImpl.java index 5bedea173f197..aa50292edbf72 100644 --- a/packages/SystemUI/src/com/android/systemui/util/sensors/ThresholdSensorImpl.java +++ b/packages/SystemUI/src/com/android/systemui/util/sensors/ThresholdSensorImpl.java @@ -51,7 +51,7 @@ class ThresholdSensorImpl implements ThresholdSensor { @Override public void onSensorChanged(SensorEvent event) { boolean below = event.values[0] < mThreshold; - boolean above = event.values[0] > mThresholdLatch; + boolean above = event.values[0] >= mThresholdLatch; logDebug("Sensor value: " + event.values[0]); onSensorEvent(below, above, event.timestamp); } diff --git a/packages/SystemUI/tests/src/com/android/systemui/util/sensors/ProximitySensorDualTest.java b/packages/SystemUI/tests/src/com/android/systemui/util/sensors/ProximitySensorDualTest.java index 81a57478f6efb..433ec1887fd10 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/util/sensors/ProximitySensorDualTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/util/sensors/ProximitySensorDualTest.java @@ -86,10 +86,9 @@ public class ProximitySensorDualTest extends SysuiTestCase { // Trigger second sensor. mThresholdSensorSecondary.triggerEvent(true, 0); assertFalse(mThresholdSensorPrimary.isPaused()); - assertTrue(mThresholdSensorSecondary.isPaused()); + assertFalse(mThresholdSensorSecondary.isPaused()); assertTrue(listener.mLastEvent.getBelow()); assertEquals(1, listener.mCallCount); - assertTrue(mThresholdSensorSecondary.isPaused()); mProximitySensor.unregister(listener); } @@ -109,10 +108,16 @@ public class ProximitySensorDualTest extends SysuiTestCase { assertNull(listener.mLastEvent); assertEquals(0, listener.mCallCount); - // Trigger second sensor. + // Trigger second sensor. Second sensor remains registered. mThresholdSensorSecondary.triggerEvent(true, 0); assertTrue(listener.mLastEvent.getBelow()); assertEquals(1, listener.mCallCount); + assertFalse(mThresholdSensorSecondary.isPaused()); + + // Triggering above should pause. + mThresholdSensorSecondary.triggerEvent(false, 0); + assertFalse(listener.mLastEvent.getBelow()); + assertEquals(2, listener.mCallCount); assertTrue(mThresholdSensorSecondary.isPaused()); // Advance time. Second sensor should resume. @@ -120,12 +125,6 @@ public class ProximitySensorDualTest extends SysuiTestCase { mFakeExecutor.runNextReady(); assertFalse(mThresholdSensorSecondary.isPaused()); - // Triggering should pause again. - mThresholdSensorSecondary.triggerEvent(false, 0); - assertFalse(listener.mLastEvent.getBelow()); - assertEquals(2, listener.mCallCount); - assertTrue(mThresholdSensorSecondary.isPaused()); - mProximitySensor.unregister(listener); } @@ -143,7 +142,7 @@ public class ProximitySensorDualTest extends SysuiTestCase { mThresholdSensorPrimary.triggerEvent(true, 0); mThresholdSensorSecondary.triggerEvent(true, 0); assertFalse(mThresholdSensorPrimary.isPaused()); - assertTrue(mThresholdSensorSecondary.isPaused()); + assertFalse(mThresholdSensorSecondary.isPaused()); assertTrue(listener.mLastEvent.getBelow()); assertEquals(1, listener.mCallCount); @@ -165,7 +164,7 @@ public class ProximitySensorDualTest extends SysuiTestCase { mThresholdSensorPrimary.triggerEvent(true, 0); mThresholdSensorSecondary.triggerEvent(true, 0); assertFalse(mThresholdSensorPrimary.isPaused()); - assertTrue(mThresholdSensorSecondary.isPaused()); + assertFalse(mThresholdSensorSecondary.isPaused()); assertTrue(listener.mLastEvent.getBelow()); assertEquals(1, listener.mCallCount); diff --git a/packages/SystemUI/tests/src/com/android/systemui/util/sensors/ThresholdSensorImplTest.java b/packages/SystemUI/tests/src/com/android/systemui/util/sensors/ThresholdSensorImplTest.java index 0d36bd30c8a54..8ba7d62ba843c 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/util/sensors/ThresholdSensorImplTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/util/sensors/ThresholdSensorImplTest.java @@ -259,7 +259,7 @@ public class ThresholdSensorImplTest extends SysuiTestCase { assertTrue(listener.mBelow); assertEquals(1, listener.mCallCount); - sensor.sendSensorEvent(highValue + 1); + sensor.sendSensorEvent(highValue); assertFalse(listener.mBelow); assertEquals(2, listener.mCallCount);