Use DreamManager to get initial state.

Currently, DreamCondition incorrectly treats the return value of the
broadcast receiver registration as sticky. This changelist fixes this
error by instead referencing DreamManager to get the initial state.

Test: atest DreamManagerTest
Bug: 268060399
Change-Id: Ib923e02a76ee37e6dc69d131607cab6a44a03422
This commit is contained in:
Bryce Lee
2023-03-16 15:56:39 -07:00
parent 8e63a7c8a4
commit c0b8f15e71
2 changed files with 31 additions and 12 deletions

View File

@@ -15,6 +15,7 @@
*/
package com.android.systemui.dreams.conditions;
import android.app.DreamManager;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
@@ -30,6 +31,7 @@ import javax.inject.Inject;
*/
public class DreamCondition extends Condition {
private final Context mContext;
private final DreamManager mDreamManager;
private final BroadcastReceiver mReceiver = new BroadcastReceiver() {
@Override
@@ -39,8 +41,10 @@ public class DreamCondition extends Condition {
};
@Inject
public DreamCondition(Context context) {
public DreamCondition(Context context,
DreamManager dreamManager) {
mContext = context;
mDreamManager = dreamManager;
}
private void processIntent(Intent intent) {
@@ -62,8 +66,8 @@ public class DreamCondition extends Condition {
final IntentFilter filter = new IntentFilter();
filter.addAction(Intent.ACTION_DREAMING_STARTED);
filter.addAction(Intent.ACTION_DREAMING_STOPPED);
final Intent stickyIntent = mContext.registerReceiver(mReceiver, filter);
processIntent(stickyIntent);
mContext.registerReceiver(mReceiver, filter);
updateCondition(mDreamManager.isDreaming());
}
@Override

View File

@@ -21,9 +21,11 @@ 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;
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;
@@ -50,6 +52,9 @@ public class DreamConditionTest extends SysuiTestCase {
@Mock
Condition.Callback mCallback;
@Mock
DreamManager mDreamManager;
@Before
public void setup() {
MockitoAnnotations.initMocks(this);
@@ -59,29 +64,39 @@ public class DreamConditionTest extends SysuiTestCase {
* Ensure a dreaming state immediately triggers the condition.
*/
@Test
public void testInitialState() {
final Intent intent = new Intent(Intent.ACTION_DREAMING_STARTED);
when(mContext.registerReceiver(any(), any())).thenReturn(intent);
final DreamCondition condition = new DreamCondition(mContext);
public void testInitialDreamingState() {
when(mDreamManager.isDreaming()).thenReturn(true);
final DreamCondition condition = new DreamCondition(mContext, mDreamManager);
condition.addCallback(mCallback);
condition.start();
verify(mCallback).onConditionChanged(eq(condition));
assertThat(condition.isConditionMet()).isTrue();
}
/**
* Ensure a non-dreaming state does not trigger the condition.
*/
@Test
public void testInitialNonDreamingState() {
when(mDreamManager.isDreaming()).thenReturn(false);
final DreamCondition condition = new DreamCondition(mContext, mDreamManager);
condition.addCallback(mCallback);
verify(mCallback, never()).onConditionChanged(eq(condition));
assertThat(condition.isConditionMet()).isFalse();
}
/**
* Ensure that changing dream state triggers condition.
*/
@Test
public void testChange() {
final Intent intent = new Intent(Intent.ACTION_DREAMING_STARTED);
final ArgumentCaptor<BroadcastReceiver> receiverCaptor =
ArgumentCaptor.forClass(BroadcastReceiver.class);
when(mContext.registerReceiver(receiverCaptor.capture(), any())).thenReturn(intent);
final DreamCondition condition = new DreamCondition(mContext);
when(mDreamManager.isDreaming()).thenReturn(true);
final DreamCondition condition = new DreamCondition(mContext, mDreamManager);
condition.addCallback(mCallback);
condition.start();
verify(mContext).registerReceiver(receiverCaptor.capture(), any());
clearInvocations(mCallback);
receiverCaptor.getValue().onReceive(mContext, new Intent(Intent.ACTION_DREAMING_STOPPED));
verify(mCallback).onConditionChanged(eq(condition));