Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit c0b8f15e authored by Bryce Lee's avatar Bryce Lee
Browse files

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
parent 8e63a7c8
Loading
Loading
Loading
Loading
+7 −3
Original line number Diff line number Diff line
@@ -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
+24 −9
Original line number Diff line number Diff line
@@ -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));