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

Commit d1aead71 authored by Jack Yu's avatar Jack Yu
Browse files

Fixed unnecessary roaming off event triggered issue

ag/1489842 fixed an issue that when we are in roaming and
phone type suddenly switches, we didn't broadcast the
roaming off event and the previous roaming status is
tossed away. The fix ag/1489842 then always send the
roaming off status when phone type switches.

The new fix in this CL would be only broadcasting the
event when we need.

Test: Telephony sanity tests
bug: 37973830
Merged-In: I1cd1d027a7d56541422dc573ab2ecff1c6fde108
Change-Id: I1cd1d027a7d56541422dc573ab2ecff1c6fde108
parent f90dc616
Loading
Loading
Loading
Loading
+18 −5
Original line number Diff line number Diff line
@@ -602,6 +602,23 @@ public class ServiceStateTracker extends Handler {

    @VisibleForTesting
    public void updatePhoneType() {
        // If we are previously voice roaming, we need to notify that roaming status changed before
        // we change back to non-roaming.
        if (mSS != null && mSS.getVoiceRoaming()) {
            mVoiceRoamingOffRegistrants.notifyRegistrants();
        }

        // If we are previously data roaming, we need to notify that roaming status changed before
        // we change back to non-roaming.
        if (mSS != null && mSS.getDataRoaming()) {
            mDataRoamingOffRegistrants.notifyRegistrants();
        }

        // If we are previously in service, we need to notify that we are out of service now.
        if (mSS != null && mSS.getDataRegState() == ServiceState.STATE_IN_SERVICE) {
            mDetachedRegistrants.notifyRegistrants();
        }

        mSS = new ServiceState();
        mNewSS = new ServiceState();
        mLastCellInfoListTime = 0;
@@ -673,11 +690,7 @@ public class ServiceStateTracker extends Handler {

        logPhoneTypeChange();

        // Tell everybody that we've thrown away state and are starting over with
        // empty, detached ServiceStates.
        mVoiceRoamingOffRegistrants.notifyRegistrants();
        mDataRoamingOffRegistrants.notifyRegistrants();
        mDetachedRegistrants.notifyRegistrants();
        // Tell everybody that the registration state and RAT have changed.
        notifyDataRegStateRilRadioTechnologyChanged();
    }

+50 −10
Original line number Diff line number Diff line
@@ -88,13 +88,15 @@ public class ServiceStateTrackerTest extends TelephonyTest {

    private static final int EVENT_REGISTERED_TO_NETWORK = 1;
    private static final int EVENT_SUBSCRIPTION_INFO_READY = 2;
    private static final int EVENT_ROAMING_ON = 3;
    private static final int EVENT_ROAMING_OFF = 4;
    private static final int EVENT_DATA_ROAMING_ON = 3;
    private static final int EVENT_DATA_ROAMING_OFF = 4;
    private static final int EVENT_DATA_CONNECTION_ATTACHED = 5;
    private static final int EVENT_DATA_CONNECTION_DETACHED = 6;
    private static final int EVENT_DATA_RAT_CHANGED = 7;
    private static final int EVENT_PS_RESTRICT_ENABLED = 8;
    private static final int EVENT_PS_RESTRICT_DISABLED = 9;
    private static final int EVENT_VOICE_ROAMING_ON = 10;
    private static final int EVENT_VOICE_ROAMING_OFF = 11;

    private class ServiceStateTrackerTestHandler extends HandlerThread {

@@ -439,7 +441,7 @@ public class ServiceStateTrackerTest extends TelephonyTest {
    @Test
    @MediumTest
    public void testRegAndUnregForVoiceRoamingOn() throws Exception {
        sst.registerForVoiceRoamingOn(mTestHandler, EVENT_ROAMING_ON, null);
        sst.registerForVoiceRoamingOn(mTestHandler, EVENT_DATA_ROAMING_ON, null);

        // Enable roaming and trigger events to notify handler registered
        doReturn(true).when(mPhone).isPhoneTypeGsm();
@@ -452,7 +454,7 @@ public class ServiceStateTrackerTest extends TelephonyTest {
        // verify if registered handler has message posted to it
        ArgumentCaptor<Message> messageArgumentCaptor = ArgumentCaptor.forClass(Message.class);
        verify(mTestHandler).sendMessageAtTime(messageArgumentCaptor.capture(), anyLong());
        assertEquals(EVENT_ROAMING_ON, messageArgumentCaptor.getValue().what);
        assertEquals(EVENT_DATA_ROAMING_ON, messageArgumentCaptor.getValue().what);

        // Disable roaming
        mSimulatedCommands.setVoiceRegState(ServiceState.RIL_REG_STATE_HOME);
@@ -486,7 +488,7 @@ public class ServiceStateTrackerTest extends TelephonyTest {

        waitForMs(100);

        sst.registerForVoiceRoamingOff(mTestHandler, EVENT_ROAMING_OFF, null);
        sst.registerForVoiceRoamingOff(mTestHandler, EVENT_DATA_ROAMING_OFF, null);

        // Disable roaming
        doReturn(true).when(mPhone).isPhoneTypeGsm();
@@ -499,7 +501,7 @@ public class ServiceStateTrackerTest extends TelephonyTest {
        // verify if registered handler has message posted to it
        ArgumentCaptor<Message> messageArgumentCaptor = ArgumentCaptor.forClass(Message.class);
        verify(mTestHandler).sendMessageAtTime(messageArgumentCaptor.capture(), anyLong());
        assertEquals(EVENT_ROAMING_OFF, messageArgumentCaptor.getValue().what);
        assertEquals(EVENT_DATA_ROAMING_OFF, messageArgumentCaptor.getValue().what);

        // Enable roaming
        mSimulatedCommands.setVoiceRegState(ServiceState.RIL_REG_STATE_ROAMING);
@@ -525,7 +527,7 @@ public class ServiceStateTrackerTest extends TelephonyTest {
    @Test
    @MediumTest
    public void testRegAndUnregForDataRoamingOn() throws Exception {
        sst.registerForDataRoamingOn(mTestHandler, EVENT_ROAMING_ON, null);
        sst.registerForDataRoamingOn(mTestHandler, EVENT_DATA_ROAMING_ON, null);

        // Enable roaming and trigger events to notify handler registered
        doReturn(true).when(mPhone).isPhoneTypeGsm();
@@ -538,7 +540,7 @@ public class ServiceStateTrackerTest extends TelephonyTest {
        // verify if registered handler has message posted to it
        ArgumentCaptor<Message> messageArgumentCaptor = ArgumentCaptor.forClass(Message.class);
        verify(mTestHandler).sendMessageAtTime(messageArgumentCaptor.capture(), anyLong());
        assertEquals(EVENT_ROAMING_ON, messageArgumentCaptor.getValue().what);
        assertEquals(EVENT_DATA_ROAMING_ON, messageArgumentCaptor.getValue().what);

        // Disable roaming
        mSimulatedCommands.setVoiceRegState(ServiceState.RIL_REG_STATE_HOME);
@@ -572,7 +574,7 @@ public class ServiceStateTrackerTest extends TelephonyTest {

        waitForMs(100);

        sst.registerForDataRoamingOff(mTestHandler, EVENT_ROAMING_OFF, null);
        sst.registerForDataRoamingOff(mTestHandler, EVENT_DATA_ROAMING_OFF, null);

        // Disable roaming
        doReturn(true).when(mPhone).isPhoneTypeGsm();
@@ -585,7 +587,7 @@ public class ServiceStateTrackerTest extends TelephonyTest {
        // verify if registered handler has message posted to it
        ArgumentCaptor<Message> messageArgumentCaptor = ArgumentCaptor.forClass(Message.class);
        verify(mTestHandler).sendMessageAtTime(messageArgumentCaptor.capture(), anyLong());
        assertEquals(EVENT_ROAMING_OFF, messageArgumentCaptor.getValue().what);
        assertEquals(EVENT_DATA_ROAMING_OFF, messageArgumentCaptor.getValue().what);

        // Enable roaming
        mSimulatedCommands.setVoiceRegState(ServiceState.RIL_REG_STATE_ROAMING);
@@ -977,6 +979,44 @@ public class ServiceStateTrackerTest extends TelephonyTest {
        assertEquals(EVENT_SUBSCRIPTION_INFO_READY, messageArgumentCaptor.getValue().what);
    }

    @Test
    @MediumTest
    public void testRoamingPhoneTypeSwitch() {

        // Enable roaming
        doReturn(true).when(mPhone).isPhoneTypeGsm();
        mSimulatedCommands.setVoiceRegState(ServiceState.RIL_REG_STATE_ROAMING);
        mSimulatedCommands.setDataRegState(ServiceState.RIL_REG_STATE_ROAMING);
        mSimulatedCommands.notifyNetworkStateChanged();

        waitForMs(100);

        sst.registerForDataRoamingOff(mTestHandler, EVENT_DATA_ROAMING_OFF, null);
        sst.registerForVoiceRoamingOff(mTestHandler, EVENT_VOICE_ROAMING_OFF, null);
        sst.registerForDataConnectionDetached(mTestHandler, EVENT_DATA_CONNECTION_DETACHED, null);

        // Call functions which would trigger posting of message on test handler
        doReturn(false).when(mPhone).isPhoneTypeGsm();
        sst.updatePhoneType();

        // verify if registered handler has message posted to it
        ArgumentCaptor<Message> messageArgumentCaptor = ArgumentCaptor.forClass(Message.class);
        verify(mTestHandler, times(3)).sendMessageAtTime(
                messageArgumentCaptor.capture(), anyLong());
        List<Message> messages = messageArgumentCaptor.getAllValues();
        assertEquals(EVENT_VOICE_ROAMING_OFF, messages.get(0).what);
        assertEquals(EVENT_DATA_ROAMING_OFF, messages.get(1).what);
        assertEquals(EVENT_DATA_CONNECTION_DETACHED, messages.get(2).what);


        // Switch the phone type again
        doReturn(true).when(mPhone).isPhoneTypeGsm();
        sst.updatePhoneType();
        // Make sure we don't get more events.
        verify(mTestHandler, times(3)).sendMessageAtTime(
                messageArgumentCaptor.capture(), anyLong());
    }

    @Test
    @SmallTest
    public void testGetDesiredPowerState() {