summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Dave Mankoff <mankoff@google.com> 2020-03-06 14:59:00 -0500
committer Dave Mankoff <mankoff@google.com> 2020-03-06 15:33:13 -0500
commit682d86f69b39d6f39b5cd75ac4c0dd08209d354a (patch)
treecb8bfeabcf090d35af25234ba3338c57e7965552
parenteaebc6540cb8f7015842bbc3c72d888781b9acd4 (diff)
Prevent multiple registration of ProximitySensor
Fixes: 150454546 Test: atest SystemUITests Change-Id: I22527a6303132108ae9908448c718fc677af39a6
-rw-r--r--packages/SystemUI/src/com/android/systemui/util/sensors/ProximitySensor.java6
-rw-r--r--packages/SystemUI/tests/src/com/android/systemui/util/sensors/ProximitySensorTest.java24
2 files changed, 29 insertions, 1 deletions
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 13ba1a3cbf31..378dde284747 100644
--- a/packages/SystemUI/src/com/android/systemui/util/sensors/ProximitySensor.java
+++ b/packages/SystemUI/src/com/android/systemui/util/sensors/ProximitySensor.java
@@ -170,7 +170,11 @@ public class ProximitySensor {
return false;
}
- mListeners.add(listener);
+ if (mListeners.contains(listener)) {
+ Log.d(TAG, "ProxListener registered multiple times: " + listener);
+ } else {
+ mListeners.add(listener);
+ }
registerInternal();
return true;
diff --git a/packages/SystemUI/tests/src/com/android/systemui/util/sensors/ProximitySensorTest.java b/packages/SystemUI/tests/src/com/android/systemui/util/sensors/ProximitySensorTest.java
index 37b315fec26e..526fba726e9d 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/util/sensors/ProximitySensorTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/util/sensors/ProximitySensorTest.java
@@ -104,6 +104,30 @@ public class ProximitySensorTest extends SysuiTestCase {
}
@Test
+ public void testDuplicateListener() {
+ TestableListener listenerA = new TestableListener();
+
+ assertFalse(mProximitySensor.isRegistered());
+
+ mProximitySensor.register(listenerA);
+ waitForSensorManager();
+ assertTrue(mProximitySensor.isRegistered());
+ mProximitySensor.register(listenerA);
+ waitForSensorManager();
+ assertTrue(mProximitySensor.isRegistered());
+ assertNull(listenerA.mLastEvent);
+
+ mFakeProximitySensor.sendProximityResult(true);
+ assertFalse(listenerA.mLastEvent.getNear());
+ assertEquals(listenerA.mCallCount, 1);
+ mFakeProximitySensor.sendProximityResult(false);
+ assertTrue(listenerA.mLastEvent.getNear());
+ assertEquals(listenerA.mCallCount, 2);
+
+ mProximitySensor.unregister(listenerA);
+ waitForSensorManager();
+ }
+ @Test
public void testUnregister() {
TestableListener listener = new TestableListener();