From 949add437bb6f1fca9c9f4dee61d9b086c4c5627 Mon Sep 17 00:00:00 2001 From: Dave Mankoff Date: Thu, 11 Feb 2021 18:00:23 -0500 Subject: [PATCH] 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 --- .../util/sensors/ProximitySensor.java | 1 + .../util/sensors/ProximityCheckTest.java | 25 +++++++++++++++++++ 2 files changed, 26 insertions(+) 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 06806d0e6ab6c..6a648bdf8cd43 100644 --- a/packages/SystemUI/src/com/android/systemui/util/sensors/ProximitySensor.java +++ b/packages/SystemUI/src/com/android/systemui/util/sensors/ProximitySensor.java @@ -347,6 +347,7 @@ public class ProximitySensor implements ThresholdSensor { public void check(long timeoutMs, Consumer callback) { if (!mSensor.isLoaded()) { callback.accept(null); + return; } mCallbacks.add(callback); if (!mRegistered.getAndSet(true)) { diff --git a/packages/SystemUI/tests/src/com/android/systemui/util/sensors/ProximityCheckTest.java b/packages/SystemUI/tests/src/com/android/systemui/util/sensors/ProximityCheckTest.java index c5a197eef2d49..242fe9f5fffe3 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/util/sensors/ProximityCheckTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/util/sensors/ProximityCheckTest.java @@ -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());