Merge "Remove CommunalConditionsMonitor."

This commit is contained in:
Bryce Lee
2021-12-13 23:04:34 +00:00
committed by Android (Google) Code Review
8 changed files with 66 additions and 36 deletions

View File

@@ -16,12 +16,14 @@
package com.android.systemui.communal;
import static com.android.systemui.communal.dagger.CommunalModule.COMMUNAL_CONDITIONS;
import android.util.Log;
import com.android.internal.annotations.VisibleForTesting;
import com.android.systemui.communal.conditions.CommunalConditionsMonitor;
import com.android.systemui.dagger.SysUISingleton;
import com.android.systemui.dagger.qualifiers.Main;
import com.android.systemui.util.condition.Monitor;
import com.google.android.collect.Lists;
@@ -31,6 +33,7 @@ import java.util.Iterator;
import java.util.concurrent.Executor;
import javax.inject.Inject;
import javax.inject.Named;
/**
* A Monitor for reporting a {@link CommunalSource} presence.
@@ -42,7 +45,7 @@ public class CommunalSourceMonitor {
// A list of {@link Callback} that have registered to receive updates.
private final ArrayList<WeakReference<Callback>> mCallbacks = Lists.newArrayList();
private final CommunalConditionsMonitor mConditionsMonitor;
private final Monitor mConditionsMonitor;
private final Executor mExecutor;
private CommunalSource mCurrentSource;
@@ -53,7 +56,7 @@ public class CommunalSourceMonitor {
// Whether the class is currently listening for condition changes.
private boolean mListeningForConditions = false;
private final CommunalConditionsMonitor.Callback mConditionsCallback =
private final Monitor.Callback mConditionsCallback =
allConditionsMet -> {
if (mAllCommunalConditionsMet != allConditionsMet) {
if (DEBUG) Log.d(TAG, "communal conditions changed: " + allConditionsMet);
@@ -66,7 +69,7 @@ public class CommunalSourceMonitor {
@VisibleForTesting
@Inject
public CommunalSourceMonitor(@Main Executor executor,
CommunalConditionsMonitor communalConditionsMonitor) {
@Named(COMMUNAL_CONDITIONS) Monitor communalConditionsMonitor) {
mExecutor = executor;
mConditionsMonitor = communalConditionsMonitor;
}

View File

@@ -34,6 +34,8 @@ import com.android.systemui.idle.AmbientLightModeMonitor;
import com.android.systemui.idle.LightSensorEventsDebounceAlgorithm;
import com.android.systemui.idle.dagger.IdleViewComponent;
import com.android.systemui.util.condition.Condition;
import com.android.systemui.util.condition.Monitor;
import com.android.systemui.util.condition.dagger.MonitorComponent;
import java.util.Collections;
import java.util.HashSet;
@@ -135,4 +137,14 @@ public interface CommunalModule {
return Optional.empty();
}
}
/** */
@Provides
@Named(COMMUNAL_CONDITIONS)
static Monitor provideCommunalSourceMonitor(
@Named(COMMUNAL_CONDITIONS) Set<Condition> communalConditions,
MonitorComponent.Factory factory) {
final MonitorComponent component = factory.create(communalConditions, new HashSet<>());
return component.getMonitor();
}
}

View File

@@ -23,7 +23,6 @@ import com.android.systemui.statusbar.policy.CallbackController;
import org.jetbrains.annotations.NotNull;
import java.lang.ref.WeakReference;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
@@ -38,7 +37,7 @@ import javax.inject.Inject;
public class Monitor implements CallbackController<Monitor.Callback> {
private final String mTag = getClass().getSimpleName();
private final ArrayList<WeakReference<Callback>> mCallbacks = new ArrayList<>();
private final ArrayList<Callback> mCallbacks = new ArrayList<>();
// Set of all conditions that need to be monitored.
private final Set<Condition> mConditions;
@@ -66,9 +65,9 @@ public class Monitor implements CallbackController<Monitor.Callback> {
mAllConditionsMet = newAllConditionsMet;
// Updates all callbacks.
final Iterator<WeakReference<Callback>> iterator = mCallbacks.iterator();
final Iterator<Callback> iterator = mCallbacks.iterator();
while (iterator.hasNext()) {
final Callback callback = iterator.next().get();
final Callback callback = iterator.next();
if (callback == null) {
iterator.remove();
} else {
@@ -78,7 +77,7 @@ public class Monitor implements CallbackController<Monitor.Callback> {
};
@Inject
public Monitor(Set<Condition> conditions) {
public Monitor(Set<Condition> conditions, Set<Callback> callbacks) {
mConditions = conditions;
// If there is no condition, give green pass.
@@ -89,12 +88,20 @@ public class Monitor implements CallbackController<Monitor.Callback> {
// Initializes the conditions map and registers a callback for each condition.
mConditions.forEach((condition -> mConditionsMap.put(condition, false)));
if (callbacks == null) {
return;
}
for (Callback callback : callbacks) {
addCallback(callback);
}
}
@Override
public void addCallback(@NotNull Callback callback) {
if (shouldLog()) Log.d(mTag, "adding callback");
mCallbacks.add(new WeakReference<>(callback));
mCallbacks.add(callback);
// Updates the callback immediately.
callback.onConditionsChanged(mAllConditionsMet);
@@ -109,9 +116,9 @@ public class Monitor implements CallbackController<Monitor.Callback> {
@Override
public void removeCallback(@NotNull Callback callback) {
if (shouldLog()) Log.d(mTag, "removing callback");
final Iterator<WeakReference<Callback>> iterator = mCallbacks.iterator();
final Iterator<Callback> iterator = mCallbacks.iterator();
while (iterator.hasNext()) {
final Callback cb = iterator.next().get();
final Callback cb = iterator.next();
if (cb == null || cb == callback) {
iterator.remove();
}

View File

@@ -14,29 +14,33 @@
* limitations under the License.
*/
package com.android.systemui.communal.conditions;
package com.android.systemui.util.condition.dagger;
import static com.android.systemui.communal.dagger.CommunalModule.COMMUNAL_CONDITIONS;
import com.android.systemui.dagger.SysUISingleton;
import com.android.systemui.util.condition.Condition;
import com.android.systemui.util.condition.Monitor;
import java.util.Set;
import javax.inject.Inject;
import javax.inject.Named;
import dagger.BindsInstance;
import dagger.Subcomponent;
/**
* A concrete implementation of {@Monitor} with conditions for monitoring when communal mode should
* be enabled.
* Component for {@link Monitor}.
*/
@SysUISingleton
public class CommunalConditionsMonitor extends Monitor {
@Inject
public CommunalConditionsMonitor(
@Named(COMMUNAL_CONDITIONS) Set<Condition> communalConditions) {
super(communalConditions);
@Subcomponent
public interface MonitorComponent {
/**
* Factory for {@link MonitorComponent}.
*/
@Subcomponent.Factory
interface Factory {
MonitorComponent create(@BindsInstance Set<Condition> conditions,
@BindsInstance Set<Monitor.Callback> callbacks);
}
/**
* Provides {@link Monitor}.
* @return
*/
Monitor getMonitor();
}

View File

@@ -18,6 +18,7 @@ package com.android.systemui.util.dagger;
import com.android.systemui.util.RingerModeTracker;
import com.android.systemui.util.RingerModeTrackerImpl;
import com.android.systemui.util.condition.dagger.MonitorComponent;
import com.android.systemui.util.wrapper.UtilWrapperModule;
import dagger.Binds;
@@ -26,6 +27,9 @@ import dagger.Module;
/** Dagger Module for code in the util package. */
@Module(includes = {
UtilWrapperModule.class
},
subcomponents = {
MonitorComponent.class,
})
public interface UtilModule {
/** */

View File

@@ -28,8 +28,8 @@ import android.testing.AndroidTestingRunner;
import androidx.test.filters.SmallTest;
import com.android.systemui.SysuiTestCase;
import com.android.systemui.communal.conditions.CommunalConditionsMonitor;
import com.android.systemui.util.concurrency.FakeExecutor;
import com.android.systemui.util.condition.Monitor;
import com.android.systemui.util.time.FakeSystemClock;
import org.junit.Before;
@@ -45,7 +45,7 @@ public class CommunalManagerUpdaterTest extends SysuiTestCase {
@Mock
private CommunalManager mCommunalManager;
@Mock
private CommunalConditionsMonitor mCommunalConditionsMonitor;
private Monitor mCommunalConditionsMonitor;
private FakeExecutor mExecutor = new FakeExecutor(new FakeSystemClock());
@@ -55,7 +55,7 @@ public class CommunalManagerUpdaterTest extends SysuiTestCase {
mContext.addMockSystemService(CommunalManager.class, mCommunalManager);
doAnswer(invocation -> {
final CommunalConditionsMonitor.Callback callback = invocation.getArgument(0);
final Monitor.Callback callback = invocation.getArgument(0);
callback.onConditionsChanged(true);
return null;
}).when(mCommunalConditionsMonitor).addCallback(any());

View File

@@ -31,8 +31,8 @@ import android.testing.TestableLooper;
import androidx.test.filters.SmallTest;
import com.android.systemui.SysuiTestCase;
import com.android.systemui.communal.conditions.CommunalConditionsMonitor;
import com.android.systemui.util.concurrency.FakeExecutor;
import com.android.systemui.util.condition.Monitor;
import com.android.systemui.util.time.FakeSystemClock;
import org.junit.Before;
@@ -49,9 +49,9 @@ import java.lang.ref.WeakReference;
@RunWith(AndroidTestingRunner.class)
@TestableLooper.RunWithLooper
public class CommunalSourceMonitorTest extends SysuiTestCase {
@Mock private CommunalConditionsMonitor mCommunalConditionsMonitor;
@Mock private Monitor mCommunalConditionsMonitor;
@Captor private ArgumentCaptor<CommunalConditionsMonitor.Callback> mConditionsCallbackCaptor;
@Captor private ArgumentCaptor<Monitor.Callback> mConditionsCallbackCaptor;
private CommunalSourceMonitor mCommunalSourceMonitor;
private FakeExecutor mExecutor = new FakeExecutor(new FakeSystemClock());
@@ -156,7 +156,7 @@ public class CommunalSourceMonitorTest extends SysuiTestCase {
private void setConditionsMet(boolean value) {
mExecutor.runAllReady();
verify(mCommunalConditionsMonitor).addCallback(mConditionsCallbackCaptor.capture());
final CommunalConditionsMonitor.Callback conditionsCallback =
final Monitor.Callback conditionsCallback =
mConditionsCallbackCaptor.getValue();
conditionsCallback.onConditionsChanged(value);
mExecutor.runAllReady();

View File

@@ -58,7 +58,7 @@ public class ConditionMonitorTest extends SysuiTestCase {
mCondition3 = spy(new FakeCondition());
mConditions = new HashSet<>(Arrays.asList(mCondition1, mCondition2, mCondition3));
mConditionMonitor = new Monitor(mConditions);
mConditionMonitor = new Monitor(mConditions, null /*callbacks*/);
}
@Test
@@ -98,7 +98,7 @@ public class ConditionMonitorTest extends SysuiTestCase {
@Test
public void addCallback_noConditions_reportAllConditionsMet() {
final Monitor monitor = new Monitor(new HashSet<>());
final Monitor monitor = new Monitor(new HashSet<>(), null /*callbacks*/);
final Monitor.Callback callback = mock(Monitor.Callback.class);
monitor.addCallback(callback);