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

Commit b72163b9 authored by Doris Ling's avatar Doris Ling
Browse files

Fix crash when silencing condition.

- check if the broadcast receiver is being registered before trying to
un-regist it.

Change-Id: I6af215f393d16173f317c9e5bc05237c935e7133
Fix: 38131851
Test: make RunSettingsRoboTests
parent 3f303d5f
Loading
Loading
Loading
Loading
+9 −2
Original line number Original line Diff line number Diff line
@@ -35,6 +35,7 @@ public abstract class Condition {


    protected final ConditionManager mManager;
    protected final ConditionManager mManager;
    protected final MetricsFeatureProvider mMetricsFeatureProvider;
    protected final MetricsFeatureProvider mMetricsFeatureProvider;
    protected boolean mReceiverRegistered;


    private boolean mIsSilenced;
    private boolean mIsSilenced;
    private boolean mIsActive;
    private boolean mIsActive;
@@ -110,9 +111,15 @@ public abstract class Condition {
            return;
            return;
        }
        }
        if (silenced) {
        if (silenced) {
            if (!mReceiverRegistered) {
                mManager.getContext().registerReceiver(receiver, getIntentFilter());
                mManager.getContext().registerReceiver(receiver, getIntentFilter());
                mReceiverRegistered = true;
            }
        } else {
        } else {
            if (mReceiverRegistered) {
                mManager.getContext().unregisterReceiver(receiver);
                mManager.getContext().unregisterReceiver(receiver);
                mReceiverRegistered = false;
            }
        }
        }
    }
    }


+16 −3
Original line number Original line Diff line number Diff line
@@ -29,11 +29,14 @@ import org.junit.runner.RunWith;
import org.mockito.Mock;
import org.mockito.Mock;
import org.mockito.MockitoAnnotations;
import org.mockito.MockitoAnnotations;
import org.robolectric.annotation.Config;
import org.robolectric.annotation.Config;
import org.robolectric.RuntimeEnvironment;


import static com.google.common.truth.Truth.assertThat;
import static com.google.common.truth.Truth.assertThat;
import static org.mockito.Matchers.any;
import static org.mockito.Matchers.any;
import static org.mockito.Matchers.eq;
import static org.mockito.Matchers.eq;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.never;
import static org.mockito.Mockito.spy;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;
import static org.mockito.Mockito.when;


@@ -45,14 +48,14 @@ public class ConditionTest {
    private ConditionManager mConditionManager;
    private ConditionManager mConditionManager;
    @Mock
    @Mock
    private MetricsFeatureProvider mMetricsFeatureProvider;
    private MetricsFeatureProvider mMetricsFeatureProvider;
    @Mock
    private Context mContext;


    private Context mContext;
    private TestCondition mCondition;
    private TestCondition mCondition;


    @Before
    @Before
    public void setUp() {
    public void setUp() {
        MockitoAnnotations.initMocks(this);
        MockitoAnnotations.initMocks(this);
        mContext = spy(RuntimeEnvironment.application);
        mCondition = new TestCondition(mConditionManager, mMetricsFeatureProvider);
        mCondition = new TestCondition(mConditionManager, mMetricsFeatureProvider);
        when(mConditionManager.getContext()).thenReturn(mContext);
        when(mConditionManager.getContext()).thenReturn(mContext);
    }
    }
@@ -82,12 +85,22 @@ public class ConditionTest {
    }
    }


    @Test
    @Test
    public void onSilenceChanged_notSilenced_shouldUnregisterReceiver() {
    public void onSilenceChanged_notSilenced_registered_shouldUnregisterReceiver() {
        mCondition.onSilenceChanged(true);

        mCondition.onSilenceChanged(false);
        mCondition.onSilenceChanged(false);


        verify(mContext).unregisterReceiver(TestCondition.mReceiver);
        verify(mContext).unregisterReceiver(TestCondition.mReceiver);
    }
    }


    @Test
    public void onSilenceChanged_notSilenced_notRegistered_shouldNotCrash() {
        mCondition.onSilenceChanged(false);

        verify(mContext, never()).unregisterReceiver(TestCondition.mReceiver);
        // no crash
    }

    private static final class TestCondition extends Condition {
    private static final class TestCondition extends Condition {


        private static final int TEST_METRIC_CONSTANT = 1234;
        private static final int TEST_METRIC_CONSTANT = 1234;