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

Commit 213769d0 authored by Treehugger Robot's avatar Treehugger Robot Committed by Automerger Merge Worker
Browse files

Merge "Consider isRadioPowerOn before updating roaming state" am: 3133a824 am: 704f2295

Original change: https://android-review.googlesource.com/c/platform/frameworks/opt/telephony/+/1681326

Change-Id: Ia00171c562f665134b9c2ba3fb2d50466d3ab2ed
parents dcfda3e3 704f2295
Loading
Loading
Loading
Loading
+8 −8
Original line number Diff line number Diff line
@@ -273,7 +273,7 @@ public class ImsPhone extends ImsPhoneBase {
    private ImsRegistrationCallbackHelper mImsMmTelRegistrationHelper;

    // The roaming state if currently in service, or the last roaming state when was in service.
    private boolean mRoaming = false;
    private boolean mLastKnownRoamingState = false;

    private boolean mIsInImsEcm = false;

@@ -2312,15 +2312,15 @@ public class ImsPhone extends ImsPhoneBase {
        }
        boolean newRoamingState = ss.getRoaming();
        // Do not recalculate if there is no change to state.
        if (mRoaming == newRoamingState) {
        if (mLastKnownRoamingState == newRoamingState) {
            return;
        }
        boolean isInService = (ss.getState() == ServiceState.STATE_IN_SERVICE
                || ss.getDataRegistrationState() == ServiceState.STATE_IN_SERVICE);
        // If we are not IN_SERVICE for voice or data, ignore change roaming state, as we always
        // move to home in this case.
        if (!isInService) {
            logi("updateRoamingState: we are OUT_OF_SERVICE, ignoring roaming change.");
        if (!isInService || !mDefaultPhone.isRadioOn()) {
            logi("updateRoamingState: we are not IN_SERVICE, ignoring roaming change.");
            return;
        }
        // We ignore roaming changes when moving to IWLAN because it always sets the roaming
@@ -2334,7 +2334,7 @@ public class ImsPhone extends ImsPhoneBase {
        }
        if (mCT.getState() == PhoneConstants.State.IDLE) {
            if (DBG) logd("updateRoamingState now: " + newRoamingState);
            mRoaming = newRoamingState;
            mLastKnownRoamingState = newRoamingState;
            CarrierConfigManager configManager = (CarrierConfigManager)
                    getContext().getSystemService(Context.CARRIER_CONFIG_SERVICE);
            // Don't set wfc mode if carrierconfig has not loaded. It will be set by GsmCdmaPhone
@@ -2484,8 +2484,8 @@ public class ImsPhone extends ImsPhoneBase {
                getBackgroundCall().getState() != Call.State.IDLE);
    }

    public boolean getRoamingState() {
        return mRoaming;
    public boolean getLastKnownRoamingState() {
        return mLastKnownRoamingState;
    }

    @Override
@@ -2506,7 +2506,7 @@ public class ImsPhone extends ImsPhoneBase {
        pw.println("  mSilentRedialRegistrants = " + mSilentRedialRegistrants);
        pw.println("  mImsMmTelRegistrationState = "
                + mImsMmTelRegistrationHelper.getImsRegistrationState());
        pw.println("  mRoaming = " + mRoaming);
        pw.println("  mLastKnownRoamingState = " + mLastKnownRoamingState);
        pw.println("  mSsnRegistrants = " + mSsnRegistrants);
        pw.println(" Registration Log:");
        pw.increaseIndent();
+32 −0
Original line number Diff line number Diff line
@@ -712,6 +712,7 @@ public class ImsPhoneTest extends TelephonyTest {
    @SmallTest
    public void testRoamingDuplicateMessages() throws Exception {
        doReturn(PhoneConstants.State.IDLE).when(mImsCT).getState();
        doReturn(true).when(mPhone).isRadioOn();

        //roaming - data registration only on LTE
        Message m = getServiceStateChangedMessage(getServiceStateDataOnly(
@@ -729,12 +730,40 @@ public class ImsPhoneTest extends TelephonyTest {
        verify(mImsManager, times(1)).setWfcMode(anyInt(), anyBoolean());
    }

    @Test
    @SmallTest
    public void testRoamingToAirplanModeIwlanInService() throws Exception {
        doReturn(true).when(mTransportManager).isInLegacyMode();
        doReturn(PhoneConstants.State.IDLE).when(mImsCT).getState();
        doReturn(true).when(mPhone).isRadioOn();

        //roaming - data registration only on LTE
        Message m = getServiceStateChangedMessage(getServiceStateDataOnly(
                ServiceState.RIL_RADIO_TECHNOLOGY_LTE, ServiceState.STATE_IN_SERVICE, true));
        // Inject the message synchronously instead of waiting for the thread to do it.
        mImsPhoneUT.handleMessage(m);
        m.recycle();

        verify(mImsManager, times(1)).setWfcMode(anyInt(), eq(true));

        // move to airplane mode + IWLAN in service
        doReturn(false).when(mPhone).isRadioOn();
        m = getServiceStateChangedMessage(getServiceStateDataOnly(
            ServiceState.RIL_RADIO_TECHNOLOGY_IWLAN, ServiceState.STATE_IN_SERVICE, false));
        mImsPhoneUT.handleMessage(m);
        m.recycle();

        // setWfcMode should not be called again, airplane mode should not trigger move out of
        // roaming.
        verify(mImsManager, times(1)).setWfcMode(anyInt(), anyBoolean());
    }

    @Test
    @SmallTest
    public void testRoamingToOutOfService() throws Exception {
        doReturn(true).when(mTransportManager).isInLegacyMode();
        doReturn(PhoneConstants.State.IDLE).when(mImsCT).getState();
        doReturn(true).when(mPhone).isRadioOn();

        //roaming - data registration only on LTE
        Message m = getServiceStateChangedMessage(getServiceStateDataOnly(
@@ -760,6 +789,7 @@ public class ImsPhoneTest extends TelephonyTest {
    public void testRoamingChangeForLteInLegacyMode() throws Exception {
        doReturn(true).when(mTransportManager).isInLegacyMode();
        doReturn(PhoneConstants.State.IDLE).when(mImsCT).getState();
        doReturn(true).when(mPhone).isRadioOn();

        //roaming - data registration only on LTE
        Message m = getServiceStateChangedMessage(getServiceStateDataOnly(
@@ -784,6 +814,7 @@ public class ImsPhoneTest extends TelephonyTest {
    public void testDataOnlyRoamingCellToIWlanInLegacyMode() throws Exception {
        doReturn(true).when(mTransportManager).isInLegacyMode();
        doReturn(PhoneConstants.State.IDLE).when(mImsCT).getState();
        doReturn(true).when(mPhone).isRadioOn();

        //roaming - data registration only on LTE
        Message m = getServiceStateChangedMessage(getServiceStateDataOnly(
@@ -809,6 +840,7 @@ public class ImsPhoneTest extends TelephonyTest {
    public void testCellVoiceDataChangeToWlanInLegacyMode() throws Exception {
        doReturn(true).when(mTransportManager).isInLegacyMode();
        doReturn(PhoneConstants.State.IDLE).when(mImsCT).getState();
        doReturn(true).when(mPhone).isRadioOn();

        //roaming - voice/data registration on LTE
        ServiceState ss = getServiceStateDataAndVoice(