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

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

Fix No Service when connected to WiFi on APM

Test: atest ServiceStateTrackerTest and manual testing
Bug: 154813505
Change-Id: Ia36df8edd75fa0a48036cda073b96087ba9981a4
parent 0c941bce
Loading
Loading
Loading
Loading
+14 −4
Original line number Diff line number Diff line
@@ -2724,9 +2724,13 @@ public class ServiceStateTracker extends Handler {
            //    EXTRA_PLMN = plmn

            // 4) No service due to power off, aka airplane mode
            //    EXTRA_SHOW_PLMN = false
            //    EXTRA_SHOW_PLMN = true
            //    EXTRA_PLMN = null

            // 5) Airplane mode but connected to WiFi with WFC disabled
            //    EXTRA_SHOW_PLMN = true
            //    EXTRA_PLMN = plmn

            IccRecords iccRecords = mIccRecords;
            int rule = getCarrierNameDisplayBitmask(mSS);
            boolean noService = false;
@@ -2759,10 +2763,16 @@ public class ServiceStateTracker extends Handler {
                if (DBG) log("updateSpnDisplay: rawPlmn = " + plmn);
            } else {
                // Power off state, such as airplane mode, show plmn as "No service"
                // unless connected to WiFi with WFC disabled, then show plmn
                showPlmn = true;
                if (mPhone.getImsPhone() != null && !mPhone.getImsPhone().isWifiCallingEnabled()
                        && mSS.getDataNetworkType() == TelephonyManager.NETWORK_TYPE_IWLAN) {
                    plmn = mSS.getOperatorAlpha();
                } else {
                    plmn = Resources.getSystem()
                            .getText(com.android.internal.R.string.lockscreen_carrier_default)
                            .toString();
                }
                if (DBG) log("updateSpnDisplay: radio is off w/ showPlmn="
                        + showPlmn + " plmn=" + plmn);
            }
+28 −0
Original line number Diff line number Diff line
@@ -2475,6 +2475,34 @@ public class ServiceStateTrackerTest extends TelephonyTest {
        assertThat(b.getBoolean(TelephonyManager.EXTRA_SHOW_PLMN)).isTrue();
    }

    @Test
    public void testUpdateSpnDisplay_flightModeNoWifiCalling_showSpnAndPlmn() {
        // GSM phone
        doReturn(true).when(mPhone).isPhoneTypeGsm();

        // Flight mode and connected to WiFI
        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();

        // wifi-calling is disable
        doReturn(false).when(mPhone).isWifiCallingEnabled();

        // update the spn
        sst.updateSpnDisplay();

        // Show both spn & plmn
        String spn = mBundle.getString(CarrierConfigManager.KEY_CARRIER_NAME_STRING);
        String plmn = mBundle.getStringArray(CarrierConfigManager.KEY_PNN_OVERRIDE_STRING_ARRAY)[0];
        plmn = plmn.split("\\s*,\\s*")[0];
        Bundle b = getExtrasFromLastSpnUpdateIntent();
        assertThat(b.getString(TelephonyManager.EXTRA_SPN)).isEqualTo(spn);
        assertThat(b.getBoolean(TelephonyManager.EXTRA_SHOW_SPN)).isTrue();
        assertThat(b.getString(TelephonyManager.EXTRA_PLMN)).isEqualTo(plmn);
        assertThat(b.getBoolean(TelephonyManager.EXTRA_SHOW_PLMN)).isTrue();
    }

    @Test
    public void testUpdateSpnDisplay_spnNotEmptyAndWifiCallingEnabled_showSpnOnly() {
        // GSM phone