Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 949add43 authored by Dave Mankoff's avatar Dave Mankoff
Browse files

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
parent e89ad032
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -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)) {
+25 −0
Original line number Diff line number Diff line
@@ -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());