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

Commit a6af0ea3 authored by Sarah Chin's avatar Sarah Chin
Browse files

Update call sites for getCombinedRegState

Phone#isEmergencyOnly should use getCombinedRegState to be consistent
with PLMN logic. CDNR should also call getCombinedRegState to be
consistent with legagy logic.

Test: atest ServiceStateTrackerTest
Bug: 182419003
Change-Id: I6c64c77e3dfdcdb9ca3099f5475e8d8d07bc4682
Merged-In: I6c64c77e3dfdcdb9ca3099f5475e8d8d07bc4682
parent 78df30bc
Loading
Loading
Loading
Loading
+4 −4
Original line number Diff line number Diff line
@@ -4619,10 +4619,10 @@ public abstract class Phone extends Handler implements PhoneInternalInterface {
        boolean isEmergencyCallOnly = false;
        for (Phone phone : PhoneFactory.getPhones()) {
            if (phone != null) {
                ServiceState ss = phone.getServiceStateTracker().getServiceState();
                // One of the phone is in service, hence the device is not emergency call only.
                if (ss.getState() == ServiceState.STATE_IN_SERVICE
                        || ss.getDataRegistrationState() == ServiceState.STATE_IN_SERVICE) {
                ServiceStateTracker sst = phone.getServiceStateTracker();
                ServiceState ss = sst.getServiceState();
                // Combined reg state is in service, hence the device is not emergency call only.
                if (sst.getCombinedRegState(ss) == ServiceState.STATE_IN_SERVICE) {
                    return false;
                }
                isEmergencyCallOnly |= ss.isEmergencyOnly();
+1 −1
Original line number Diff line number Diff line
@@ -5929,7 +5929,7 @@ public class ServiceStateTracker extends Handler {
     * If dataRegState is in service on IWLAN, also check for wifi calling enabled.
     * @param ss service state.
     */
    protected int getCombinedRegState(ServiceState ss) {
    public int getCombinedRegState(ServiceState ss) {
        int regState = ss.getState();
        int dataRegState = ss.getDataRegistrationState();
        if ((regState == ServiceState.STATE_OUT_OF_SERVICE
+2 −10
Original line number Diff line number Diff line
@@ -429,7 +429,8 @@ public class CarrierDisplayNameResolver {
    private void resolveCarrierDisplayName() {
        CarrierDisplayNameData data = getCarrierDisplayNameFromEf();
        if (DBG) Rlog.d(TAG, "CarrierName from EF: " + data);
        if (getCombinedRegState(getServiceState()) == ServiceState.STATE_IN_SERVICE) {
        if (mPhone.getServiceStateTracker().getCombinedRegState(getServiceState())
                == ServiceState.STATE_IN_SERVICE) {
            if (mPhone.isWifiCallingEnabled()) {
                data = getCarrierDisplayNameFromWifiCallingOverride(data);
                if (DBG) {
@@ -578,13 +579,4 @@ public class CarrierDisplayNameResolver {
            return String.format(mDataFormat, name.trim());
        }
    }

    /**
     * Consider dataRegState if voiceRegState is OOS to determine SPN to be displayed.
     * @param ss service state.
     */
    private static int getCombinedRegState(ServiceState ss) {
        if (ss.getState() != ServiceState.STATE_IN_SERVICE) return ss.getDataRegistrationState();
        return ss.getState();
    }
}
+48 −4
Original line number Diff line number Diff line
@@ -188,6 +188,7 @@ public class ServiceStateTrackerTest extends TelephonyTest {
        public void onLooperPrepared() {
            sst = new ServiceStateTracker(mPhone, mSimulatedCommands);
            sst.setServiceStateStats(mServiceStateStats);
            doReturn(sst).when(mPhone).getServiceStateTracker();
            setReady(true);
        }
    }
@@ -2670,7 +2671,7 @@ public class ServiceStateTrackerTest extends TelephonyTest {
        ss.setVoiceRegState(ServiceState.STATE_EMERGENCY_ONLY);
        ss.setDataRegState(ServiceState.STATE_OUT_OF_SERVICE);
        ss.setEmergencyOnly(true);
        doReturn(ss).when(mSST).getServiceState();
        sst.mSS = ss;

        // update the spn
        sst.updateSpnDisplay();
@@ -2692,7 +2693,7 @@ public class ServiceStateTrackerTest extends TelephonyTest {
        ss.setVoiceRegState(ServiceState.STATE_OUT_OF_SERVICE);
        ss.setDataRegState(ServiceState.STATE_OUT_OF_SERVICE);
        ss.setEmergencyOnly(false);
        doReturn(ss).when(mSST).getServiceState();
        sst.mSS = ss;

        // update the spn
        sst.updateSpnDisplay();
@@ -2713,7 +2714,7 @@ public class ServiceStateTrackerTest extends TelephonyTest {
        ServiceState ss = new ServiceState();
        ss.setVoiceRegState(ServiceState.STATE_POWER_OFF);
        ss.setDataRegState(ServiceState.STATE_POWER_OFF);
        doReturn(ss).when(mSST).getServiceState();
        sst.mSS = ss;

        // update the spn
        sst.updateSpnDisplay();
@@ -2733,7 +2734,7 @@ public class ServiceStateTrackerTest extends TelephonyTest {
        doReturn(ServiceState.STATE_POWER_OFF).when(mServiceState).getVoiceRegState();
        doReturn(ServiceState.STATE_POWER_OFF).when(mServiceState).getDataRegState();
        doReturn(TelephonyManager.NETWORK_TYPE_IWLAN).when(mServiceState).getDataNetworkType();
        doReturn(mServiceState).when(mSST).getServiceState();
        sst.mSS = mServiceState;

        // wifi-calling is disable
        doReturn(false).when(mPhone).isWifiCallingEnabled();
@@ -2991,4 +2992,47 @@ public class ServiceStateTrackerTest extends TelephonyTest {
        assertEquals(4, (long) method.invoke(mSST, lteCi));
        assertEquals(5, (long) method.invoke(mSST, nrCi));
    }

    @Test
    public void testGetCombinedRegState() {
        doReturn(mImsPhone).when(mPhone).getImsPhone();

        // If voice/data out of service, return out of service.
        doReturn(ServiceState.STATE_OUT_OF_SERVICE).when(mServiceState).getState();
        doReturn(ServiceState.STATE_OUT_OF_SERVICE).when(mServiceState).getDataRegistrationState();
        assertEquals(ServiceState.STATE_OUT_OF_SERVICE, sst.getCombinedRegState(mServiceState));

        // If voice is emergency only, return emergency only
        doReturn(ServiceState.STATE_EMERGENCY_ONLY).when(mServiceState).getState();
        assertEquals(ServiceState.STATE_EMERGENCY_ONLY, sst.getCombinedRegState(mServiceState));

        // If data in service, return in service.
        doReturn(ServiceState.STATE_OUT_OF_SERVICE).when(mServiceState).getState();
        doReturn(ServiceState.STATE_IN_SERVICE).when(mServiceState).getDataRegistrationState();
        assertEquals(ServiceState.STATE_IN_SERVICE, sst.getCombinedRegState(mServiceState));

        // Check emergency
        doReturn(ServiceState.STATE_EMERGENCY_ONLY).when(mServiceState).getState();
        assertEquals(ServiceState.STATE_EMERGENCY_ONLY, sst.getCombinedRegState(mServiceState));

        // If data in service and network is IWLAN but WiFi calling is off, return out of service.
        doReturn(ServiceState.STATE_OUT_OF_SERVICE).when(mServiceState).getState();
        doReturn(TelephonyManager.NETWORK_TYPE_IWLAN).when(mServiceState).getDataNetworkType();
        doReturn(false).when(mImsPhone).isWifiCallingEnabled();
        assertEquals(ServiceState.STATE_OUT_OF_SERVICE, sst.getCombinedRegState(mServiceState));

        // Check emrgency
        doReturn(ServiceState.STATE_EMERGENCY_ONLY).when(mServiceState).getState();
        assertEquals(ServiceState.STATE_EMERGENCY_ONLY, sst.getCombinedRegState(mServiceState));

        // If data in service and network is IWLAN and WiFi calling is on, return in service.
        doReturn(ServiceState.STATE_OUT_OF_SERVICE).when(mServiceState).getState();
        doReturn(TelephonyManager.NETWORK_TYPE_IWLAN).when(mServiceState).getDataNetworkType();
        doReturn(true).when(mImsPhone).isWifiCallingEnabled();
        assertEquals(ServiceState.STATE_IN_SERVICE, sst.getCombinedRegState(mServiceState));

        // Check emergency
        doReturn(ServiceState.STATE_EMERGENCY_ONLY).when(mServiceState).getState();
        assertEquals(ServiceState.STATE_EMERGENCY_ONLY, sst.getCombinedRegState(mServiceState));
    }
}