From 682d86f69b39d6f39b5cd75ac4c0dd08209d354a Mon Sep 17 00:00:00 2001 From: Dave Mankoff Date: Fri, 6 Mar 2020 14:59:00 -0500 Subject: Prevent multiple registration of ProximitySensor Fixes: 150454546 Test: atest SystemUITests Change-Id: I22527a6303132108ae9908448c718fc677af39a6 --- .../systemui/util/sensors/ProximitySensor.java | 6 +++++- .../systemui/util/sensors/ProximitySensorTest.java | 24 ++++++++++++++++++++++ 2 files changed, 29 insertions(+), 1 deletion(-) 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 @@ -103,6 +103,30 @@ public class ProximitySensorTest extends SysuiTestCase { waitForSensorManager(); } + @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(); -- cgit v1.2.3-59-g8ed1b