Ensure that ProxCheck doesn't run a callback twice.

If sensors weren't ready, the callback would be added to a list and
executed later if the check was used again. This was erroneous.

Fixes: 177675729
Test: atest SystemUITests
Change-Id: I9683167bb2c2f17c8fb10764d422e292274b171f
This commit is contained in:
Dave Mankoff
2021-02-11 18:00:23 -05:00
parent e89ad03287
commit 949add437b
2 changed files with 26 additions and 0 deletions

View File

@@ -347,6 +347,7 @@ public class ProximitySensor implements ThresholdSensor {
public void check(long timeoutMs, Consumer<Boolean> callback) {
if (!mSensor.isLoaded()) {
callback.accept(null);
return;
}
mCallbacks.add(callback);
if (!mRegistered.getAndSet(true)) {

View File

@@ -16,6 +16,8 @@
package com.android.systemui.util.sensors;
import static com.google.common.truth.Truth.assertThat;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertNull;
@@ -85,6 +87,29 @@ public class ProximityCheckTest extends SysuiTestCase {
assertNull(mTestableCallback.mLastResult);
}
@Test
public void testNotLoaded() {
mFakeProximitySensor.setSensorAvailable(false);
assertThat(mTestableCallback.mLastResult).isNull();
assertThat(mTestableCallback.mNumCalls).isEqualTo(0);
mProximityCheck.check(100, mTestableCallback);
assertThat(mTestableCallback.mLastResult).isNull();
assertThat(mTestableCallback.mNumCalls).isEqualTo(1);
mFakeProximitySensor.setSensorAvailable(true);
mProximityCheck.check(100, mTestableCallback);
mFakeProximitySensor.setLastEvent(new ProximitySensor.ThresholdSensorEvent(true, 0));
mFakeProximitySensor.alertListeners();
assertThat(mTestableCallback.mLastResult).isNotNull();
assertThat(mTestableCallback.mNumCalls).isEqualTo(2);
}
@Test
public void testProxDoesntCancelOthers() {
assertFalse(mFakeProximitySensor.isRegistered());