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 9be42f3fc5f48..a59d101c9f11b 100644 --- a/packages/SystemUI/src/com/android/systemui/util/sensors/ProximitySensor.java +++ b/packages/SystemUI/src/com/android/systemui/util/sensors/ProximitySensor.java @@ -92,11 +92,11 @@ public class ProximitySensor implements ThresholdSensor { } logDebug("Secondary sensor event: " + event.getBelow() + "."); - onSensorEvent(event); - // Check this sensor again in a moment. mCancelSecondaryRunnable = mDelayableExecutor.executeDelayed( mSecondaryThresholdSensor::resume, SECONDARY_PING_INTERVAL_MS); + + onSensorEvent(event); } }; 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 a39c201695183..81a57478f6efb 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 @@ -262,6 +262,37 @@ public class ProximitySensorDualTest extends SysuiTestCase { mProximitySensor.unregister(listener); } + @Test + public void testSecondaryCancelsSecondary() { + TestableListener listener = new TestableListener(); + ThresholdSensor.Listener cancelingListener = new ThresholdSensor.Listener() { + @Override + public void onThresholdCrossed(ThresholdSensor.ThresholdSensorEvent event) { + mProximitySensor.pause(); + } + }; + + mProximitySensor.register(listener); + mProximitySensor.register(cancelingListener); + assertNull(listener.mLastEvent); + assertEquals(0, listener.mCallCount); + + mThresholdSensorPrimary.triggerEvent(true, 0); + assertNull(listener.mLastEvent); + assertEquals(0, listener.mCallCount); + mThresholdSensorSecondary.triggerEvent(true, 0); + assertTrue(listener.mLastEvent.getBelow()); + assertEquals(1, listener.mCallCount); + + // The proximity sensor should now be canceled. Advancing the clock should do nothing. + assertEquals(0, mFakeExecutor.numPending()); + mThresholdSensorSecondary.triggerEvent(false, 1); + assertTrue(listener.mLastEvent.getBelow()); + assertEquals(1, listener.mCallCount); + + mProximitySensor.unregister(listener); + } + private static class TestableListener implements ThresholdSensor.Listener { ThresholdSensor.ThresholdSensorEvent mLastEvent; int mCallCount = 0;