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

Commit 2a1ea8fc authored by Bryce Lee's avatar Bryce Lee Committed by Android (Google) Code Review
Browse files

Merge "Improve Condition Monitor threading." into tm-qpr-dev

parents 405a90c7 cb10414f
Loading
Loading
Loading
Loading
+2 −9
Original line number Diff line number Diff line
@@ -18,6 +18,7 @@ package com.android.systemui.util.condition;

import android.util.Log;

import com.android.systemui.dagger.qualifiers.Main;
import com.android.systemui.statusbar.policy.CallbackController;

import org.jetbrains.annotations.NotNull;
@@ -60,21 +61,13 @@ public class Monitor implements CallbackController<Monitor.Callback> {
    };

    @Inject
    public Monitor(Executor executor, Set<Condition> conditions, Set<Callback> callbacks) {
    public Monitor(@Main Executor executor, Set<Condition> conditions) {
        mConditions = new HashSet<>();
        mExecutor = executor;

        if (conditions != null) {
            mConditions.addAll(conditions);
        }

        if (callbacks == null) {
            return;
        }

        for (Callback callback : callbacks) {
            addCallbackLocked(callback);
        }
    }

    private void updateConditionMetState() {
+1 −2
Original line number Diff line number Diff line
@@ -34,8 +34,7 @@ public interface MonitorComponent {
     */
    @Subcomponent.Factory
    interface Factory {
        MonitorComponent create(@BindsInstance Set<Condition> conditions,
                @BindsInstance Set<Monitor.Callback> callbacks);
        MonitorComponent create(@BindsInstance Set<Condition> conditions);
    }

    /**
+13 −11
Original line number Diff line number Diff line
@@ -65,7 +65,7 @@ public class ConditionMonitorTest extends SysuiTestCase {
        mCondition3 = spy(new FakeCondition());
        mConditions = new HashSet<>(Arrays.asList(mCondition1, mCondition2, mCondition3));

        mConditionMonitor = new Monitor(mExecutor, mConditions, null /*callbacks*/);
        mConditionMonitor = new Monitor(mExecutor, mConditions);
    }

    @Test
@@ -76,8 +76,10 @@ public class ConditionMonitorTest extends SysuiTestCase {

        final Monitor monitor = new Monitor(
                mExecutor,
                new HashSet<>(Arrays.asList(overridingCondition, regularCondition)),
                new HashSet<>(Arrays.asList(callback)));
                new HashSet<>(Arrays.asList(overridingCondition, regularCondition)));

        monitor.addCallback(callback);
        mExecutor.runAllReady();

        when(overridingCondition.isOverridingCondition()).thenReturn(true);
        when(overridingCondition.isConditionMet()).thenReturn(true);
@@ -123,8 +125,9 @@ public class ConditionMonitorTest extends SysuiTestCase {
        final Monitor monitor = new Monitor(
                mExecutor,
                new HashSet<>(Arrays.asList(overridingCondition, overridingCondition2,
                        regularCondition)),
                new HashSet<>(Arrays.asList(callback)));
                        regularCondition)));
        monitor.addCallback(callback);
        mExecutor.runAllReady();

        when(overridingCondition.isOverridingCondition()).thenReturn(true);
        when(overridingCondition.isConditionMet()).thenReturn(true);
@@ -174,8 +177,8 @@ public class ConditionMonitorTest extends SysuiTestCase {
                mock(Monitor.Callback.class);
        final Condition condition = mock(Condition.class);
        when(condition.isConditionMet()).thenReturn(true);
        final Monitor monitor = new Monitor(mExecutor, new HashSet<>(Arrays.asList(condition)),
                new HashSet<>(Arrays.asList(callback1)));
        final Monitor monitor = new Monitor(mExecutor, new HashSet<>(Arrays.asList(condition)));
        monitor.addCallback(callback1);

        final Monitor.Callback callback2 =
                mock(Monitor.Callback.class);
@@ -186,7 +189,7 @@ public class ConditionMonitorTest extends SysuiTestCase {

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

        monitor.addCallback(callback);
@@ -196,7 +199,7 @@ public class ConditionMonitorTest extends SysuiTestCase {

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

        // Adds the same instance multiple times.
@@ -212,8 +215,7 @@ public class ConditionMonitorTest extends SysuiTestCase {
    @Test
    public void removeCallback_shouldNoLongerReceiveUpdate() {
        final Condition condition = mock(Condition.class);
        final Monitor monitor = new Monitor(mExecutor, new HashSet<>(Arrays.asList(condition)),
                null);
        final Monitor monitor = new Monitor(mExecutor, new HashSet<>(Arrays.asList(condition)));
        final Monitor.Callback callback =
                mock(Monitor.Callback.class);
        monitor.addCallback(callback);