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

Commit 59594bee authored by Darrell Shi's avatar Darrell Shi
Browse files

Monitor add callback uniqueness.

Only allow the same instance of callback registered once in the
conditions monitor.

Test: atest ConditionMonitorTest#addCallback_withMultipleInstancesOfTheSameCallback_registerOnlyOne
Fix: 218921598
Change-Id: Ibbce271446e4039759e27bf889c4c672ac026c16
parent 52dbc0d2
Loading
Loading
Loading
Loading
+4 −0
Original line number Diff line number Diff line
@@ -145,6 +145,10 @@ public class Monitor implements CallbackController<Monitor.Callback> {
    }

    private void addCallbackLocked(@NotNull Callback callback) {
        if (mCallbacks.contains(callback)) {
            return;
        }

        if (shouldLog()) Log.d(mTag, "adding callback");
        mCallbacks.add(callback);

+15 −0
Original line number Diff line number Diff line
@@ -194,6 +194,21 @@ public class ConditionMonitorTest extends SysuiTestCase {
        verify(callback).onConditionsChanged(true);
    }

    @Test
    public void addCallback_withMultipleInstancesOfTheSameCallback_registerOnlyOne() {
        final Monitor monitor = new Monitor(mExecutor, new HashSet<>(), null /*callbacks*/);
        final Monitor.Callback callback = mock(Monitor.Callback.class);

        // Adds the same instance multiple times.
        monitor.addCallback(callback);
        monitor.addCallback(callback);
        monitor.addCallback(callback);
        mExecutor.runAllReady();

        // Callback should only be triggered once.
        verify(callback, times(1)).onConditionsChanged(true);
    }

    @Test
    public void removeCallback_shouldNoLongerReceiveUpdate() {
        final Condition condition = mock(Condition.class);