Always have ConditionalCoreStartable subscribe to monitor. am: daed6675fc am: 3534a7f4ba

Original change: https://googleplex-android-review.googlesource.com/c/platform/frameworks/base/+/21380128

Change-Id: I8b98ba63c62b16b6bc93629548ce79329d67d6b1
Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
This commit is contained in:
Bryce Lee
2023-02-14 18:49:09 +00:00
committed by Automerger Merge Worker
3 changed files with 45 additions and 10 deletions

View File

@@ -43,11 +43,6 @@ public abstract class ConditionalCoreStartable implements CoreStartable {
@Override
public final void start() {
if (mConditionSet == null || mConditionSet.isEmpty()) {
onStart();
return;
}
mStartToken = mMonitor.addSubscription(
new Monitor.Subscription.Builder(allConditionsMet -> {
if (allConditionsMet) {
@@ -63,11 +58,6 @@ public abstract class ConditionalCoreStartable implements CoreStartable {
@Override
public final void onBootCompleted() {
if (mConditionSet == null || mConditionSet.isEmpty()) {
bootCompleted();
return;
}
mBootCompletedToken = mMonitor.addSubscription(
new Monitor.Subscription.Builder(allConditionsMet -> {
if (allConditionsMet) {

View File

@@ -248,6 +248,21 @@ public class ConditionMonitorTest extends SysuiTestCase {
verify(callback).onConditionsChanged(true);
}
@Test
public void addCallback_preCondition_noConditions_reportAllConditionsMet() {
final Monitor
monitor = new Monitor(mExecutor, new HashSet<>(Arrays.asList(mCondition1)));
final Monitor.Callback callback = mock(
Monitor.Callback.class);
monitor.addSubscription(new Monitor.Subscription.Builder(callback).build());
mExecutor.runAllReady();
verify(callback, never()).onConditionsChanged(true);
mCondition1.fakeUpdateCondition(true);
mExecutor.runAllReady();
verify(callback).onConditionsChanged(true);
}
@Test
public void removeCallback_noFailureOnDoubleRemove() {
final Condition condition = mock(

View File

@@ -60,6 +60,11 @@ public class ConditionalCoreStartableTest extends SysuiTestCase {
mCallback = callback;
}
public FakeConditionalCoreStartable(Monitor monitor, Callback callback) {
super(monitor);
mCallback = callback;
}
@Override
protected void onStart() {
mCallback.onStart();
@@ -122,6 +127,31 @@ public class ConditionalCoreStartableTest extends SysuiTestCase {
verify(mMonitor).removeSubscription(mSubscriptionToken);
}
@Test
public void testOnStartCallbackWithNoConditions() {
final CoreStartable coreStartable =
new FakeConditionalCoreStartable(mMonitor,
mCallback);
when(mMonitor.addSubscription(any())).thenReturn(mSubscriptionToken);
coreStartable.start();
final ArgumentCaptor<Monitor.Subscription> subscriptionCaptor = ArgumentCaptor.forClass(
Monitor.Subscription.class);
verify(mMonitor).addSubscription(subscriptionCaptor.capture());
final Monitor.Subscription subscription = subscriptionCaptor.getValue();
assertThat(subscription.getConditions()).isEmpty();
verify(mCallback, never()).onStart();
subscription.getCallback().onConditionsChanged(true);
verify(mCallback).onStart();
verify(mMonitor).removeSubscription(mSubscriptionToken);
}
/**
* Verifies that {@link ConditionalCoreStartable#bootCompleted()} ()} is predicated on