diff --git a/packages/SystemUI/src/com/android/systemui/dreams/conditions/DreamCondition.java b/packages/SystemUI/src/com/android/systemui/dreams/conditions/DreamCondition.java index 5bbfbda829441..3ef19b760826a 100644 --- a/packages/SystemUI/src/com/android/systemui/dreams/conditions/DreamCondition.java +++ b/packages/SystemUI/src/com/android/systemui/dreams/conditions/DreamCondition.java @@ -16,12 +16,9 @@ package com.android.systemui.dreams.conditions; import android.app.DreamManager; -import android.content.BroadcastReceiver; -import android.content.Context; -import android.content.Intent; -import android.content.IntentFilter; -import android.text.TextUtils; +import com.android.keyguard.KeyguardUpdateMonitor; +import com.android.keyguard.KeyguardUpdateMonitorCallback; import com.android.systemui.shared.condition.Condition; import javax.inject.Inject; @@ -30,48 +27,33 @@ import javax.inject.Inject; * {@link DreamCondition} provides a signal when a dream begins and ends. */ public class DreamCondition extends Condition { - private final Context mContext; private final DreamManager mDreamManager; - private final BroadcastReceiver mReceiver = new BroadcastReceiver() { - @Override - public void onReceive(Context context, Intent intent) { - processIntent(intent); - } - }; + private final KeyguardUpdateMonitor mUpdateMonitor; + + + private final KeyguardUpdateMonitorCallback mUpdateCallback = + new KeyguardUpdateMonitorCallback() { + @Override + public void onDreamingStateChanged(boolean dreaming) { + updateCondition(dreaming); + } + }; @Inject - public DreamCondition(Context context, - DreamManager dreamManager) { - mContext = context; + public DreamCondition(DreamManager dreamManager, KeyguardUpdateMonitor monitor) { mDreamManager = dreamManager; - } - - private void processIntent(Intent intent) { - // In the case of a non-existent sticky broadcast, ignore when there is no intent. - if (intent == null) { - return; - } - if (TextUtils.equals(intent.getAction(), Intent.ACTION_DREAMING_STARTED)) { - updateCondition(true); - } else if (TextUtils.equals(intent.getAction(), Intent.ACTION_DREAMING_STOPPED)) { - updateCondition(false); - } else { - throw new IllegalStateException("unexpected intent:" + intent); - } + mUpdateMonitor = monitor; } @Override protected void start() { - final IntentFilter filter = new IntentFilter(); - filter.addAction(Intent.ACTION_DREAMING_STARTED); - filter.addAction(Intent.ACTION_DREAMING_STOPPED); - mContext.registerReceiver(mReceiver, filter); + mUpdateMonitor.registerCallback(mUpdateCallback); updateCondition(mDreamManager.isDreaming()); } @Override protected void stop() { - mContext.unregisterReceiver(mReceiver); + mUpdateMonitor.removeCallback(mUpdateCallback); } } diff --git a/packages/SystemUI/tests/src/com/android/systemui/dreams/conditions/DreamConditionTest.java b/packages/SystemUI/tests/src/com/android/systemui/dreams/conditions/DreamConditionTest.java index 58eb7d4f3ea76..e1c54976d7343 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/dreams/conditions/DreamConditionTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/dreams/conditions/DreamConditionTest.java @@ -18,7 +18,6 @@ package com.android.systemui.dreams.conditions; import static com.google.common.truth.Truth.assertThat; -import static org.mockito.ArgumentMatchers.any; import static org.mockito.ArgumentMatchers.eq; import static org.mockito.Mockito.clearInvocations; import static org.mockito.Mockito.never; @@ -26,13 +25,13 @@ import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; import android.app.DreamManager; -import android.content.BroadcastReceiver; import android.content.Context; -import android.content.Intent; import android.testing.AndroidTestingRunner; import androidx.test.filters.SmallTest; +import com.android.keyguard.KeyguardUpdateMonitor; +import com.android.keyguard.KeyguardUpdateMonitorCallback; import com.android.systemui.SysuiTestCase; import com.android.systemui.shared.condition.Condition; @@ -55,6 +54,9 @@ public class DreamConditionTest extends SysuiTestCase { @Mock DreamManager mDreamManager; + @Mock + KeyguardUpdateMonitor mKeyguardUpdateMonitor; + @Before public void setup() { MockitoAnnotations.initMocks(this); @@ -66,7 +68,7 @@ public class DreamConditionTest extends SysuiTestCase { @Test public void testInitialDreamingState() { when(mDreamManager.isDreaming()).thenReturn(true); - final DreamCondition condition = new DreamCondition(mContext, mDreamManager); + final DreamCondition condition = new DreamCondition(mDreamManager, mKeyguardUpdateMonitor); condition.addCallback(mCallback); verify(mCallback).onConditionChanged(eq(condition)); @@ -79,7 +81,7 @@ public class DreamConditionTest extends SysuiTestCase { @Test public void testInitialNonDreamingState() { when(mDreamManager.isDreaming()).thenReturn(false); - final DreamCondition condition = new DreamCondition(mContext, mDreamManager); + final DreamCondition condition = new DreamCondition(mDreamManager, mKeyguardUpdateMonitor); condition.addCallback(mCallback); verify(mCallback, never()).onConditionChanged(eq(condition)); @@ -91,15 +93,21 @@ public class DreamConditionTest extends SysuiTestCase { */ @Test public void testChange() { - final ArgumentCaptor receiverCaptor = - ArgumentCaptor.forClass(BroadcastReceiver.class); + final ArgumentCaptor callbackCaptor = + ArgumentCaptor.forClass(KeyguardUpdateMonitorCallback.class); when(mDreamManager.isDreaming()).thenReturn(true); - final DreamCondition condition = new DreamCondition(mContext, mDreamManager); + final DreamCondition condition = new DreamCondition(mDreamManager, mKeyguardUpdateMonitor); condition.addCallback(mCallback); - verify(mContext).registerReceiver(receiverCaptor.capture(), any()); + verify(mKeyguardUpdateMonitor).registerCallback(callbackCaptor.capture()); + clearInvocations(mCallback); - receiverCaptor.getValue().onReceive(mContext, new Intent(Intent.ACTION_DREAMING_STOPPED)); + callbackCaptor.getValue().onDreamingStateChanged(false); verify(mCallback).onConditionChanged(eq(condition)); assertThat(condition.isConditionMet()).isFalse(); + + clearInvocations(mCallback); + callbackCaptor.getValue().onDreamingStateChanged(true); + verify(mCallback).onConditionChanged(eq(condition)); + assertThat(condition.isConditionMet()).isTrue(); } }