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

Commit 86dd6eb6 authored by Jeff DeCew's avatar Jeff DeCew Committed by Android (Google) Code Review
Browse files

Merge "Fix ProximityCheck so that re-entrant check calls callback." into main

parents 22a5dfe1 2b551e71
Loading
Loading
Loading
Loading
+20 −0
Original line number Diff line number Diff line
@@ -73,6 +73,26 @@ public class ProximityCheckTest extends SysuiTestCase {
        assertTrue(mTestableCallback.mLastResult);
    }

    @Test
    public void testRecursiveCheck() {
        mProximityCheck.check(100, event-> mProximityCheck.check(100, mTestableCallback));

        assertThat(mTestableCallback.mNumCalls).isEqualTo(0);
        assertThat(mTestableCallback.mLastResult).isNull();

        mFakeExecutor.advanceClockToNext();
        mFakeExecutor.runAllReady();

        assertThat(mTestableCallback.mNumCalls).isEqualTo(0);
        assertThat(mTestableCallback.mLastResult).isNull();

        mFakeProximitySensor.setLastEvent(new ThresholdSensorEvent(true, 0));
        mFakeProximitySensor.alertListeners();

        assertThat(mTestableCallback.mNumCalls).isEqualTo(1);
        assertThat(mTestableCallback.mLastResult).isTrue();
    }

    @Test
    public void testTimeout() {
        mProximityCheck.check(100, mTestableCallback);
+4 −2
Original line number Diff line number Diff line
@@ -86,13 +86,15 @@ public class ProximityCheck implements Runnable {
    }

    private void onProximityEvent(ThresholdSensorEvent proximityEvent) {
        // Move the callbacks to a local to avoid ConcurrentModificationException
        List<Consumer<Boolean>> oldCallbacks = mCallbacks;
        mCallbacks = new ArrayList<>();
        // Unregister from the ProximitySensor to ensure a re-entrant check will re-register
        unregister();
        // Notify the callbacks
        oldCallbacks.forEach(
                booleanConsumer ->
                        booleanConsumer.accept(
                                proximityEvent == null ? null : proximityEvent.getBelow()));
        unregister();
        mRegistered.set(false);
    }
}