From 1ff5b3e7cfa2c3fc3e08c869be11493c931f17d1 Mon Sep 17 00:00:00 2001 From: Bryce Lee Date: Sat, 1 Apr 2023 01:57:21 +0000 Subject: [PATCH] Use KeyguardUpdateMonitor in DreamCondition. This changelist moves DreamCondition away from using dream broadcasts for dream state updates to instead KeyguardUpdateMonitor. This move coincides with updates to improve the latency of dream state updates to KeyguardUpdateMonitor. Test: atest DreamConditionTest Fixes: 275108597 Change-Id: Idd362f882a822d3e670eb08e424a5ac145cb9479 --- .../dreams/conditions/DreamCondition.java | 50 ++++++------------- .../dreams/conditions/DreamConditionTest.java | 28 +++++++---- 2 files changed, 34 insertions(+), 44 deletions(-) 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(); } }