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

Commit a1c3355e authored by Aishwarya Mallampati's avatar Aishwarya Mallampati
Browse files

Check whether cellIdentity is null before querying for mccmnc.

Bug: 350429569
Test: atest
Flag: EXEMPT bugfix
Change-Id: I0c64a41f49bf3fa331bf41368bf7d5a5e38d7f05
parent 18180f35
Loading
Loading
Loading
Loading
+31 −6
Original line number Diff line number Diff line
@@ -44,6 +44,7 @@ import android.os.SystemProperties;
import android.provider.DeviceConfig;
import android.telecom.Connection;
import android.telephony.AccessNetworkConstants;
import android.telephony.CellIdentity;
import android.telephony.DropBoxManagerLoggerBackend;
import android.telephony.NetworkRegistrationInfo;
import android.telephony.PersistentLogger;
@@ -465,11 +466,13 @@ public class SatelliteSOSMessageRecommender extends Handler {
        return false;
    }

    private boolean isSatellitePlmn(int subId, @NonNull ServiceState serviceState) {
    /** Check whether device is connected to satellite PLMN */
    @VisibleForTesting(visibility = VisibleForTesting.Visibility.PRIVATE)
    public boolean isSatellitePlmn(int subId, @NonNull ServiceState serviceState) {
        List<String> satellitePlmnList =
                mSatelliteController.getSatellitePlmnsForCarrier(subId);
        if (satellitePlmnList.isEmpty()) {
            logv("isSatellitePlmn: satellitePlmnList is empty");
            plogd("isSatellitePlmn: satellitePlmnList is empty");
            return false;
        }

@@ -477,19 +480,23 @@ public class SatelliteSOSMessageRecommender extends Handler {
                serviceState.getNetworkRegistrationInfoListForTransportType(
                        AccessNetworkConstants.TRANSPORT_TYPE_WWAN)) {
            String registeredPlmn = nri.getRegisteredPlmn();
            String mccmnc = nri.getCellIdentity().getMccString()
                    + nri.getCellIdentity().getMncString();
            if (TextUtils.isEmpty(registeredPlmn)) {
                plogd("isSatellitePlmn: registeredPlmn is empty");
                continue;
            }

            String mccmnc = getMccMnc(nri);
            for (String satellitePlmn : satellitePlmnList) {
                if (TextUtils.equals(satellitePlmn, registeredPlmn)
                        || TextUtils.equals(satellitePlmn, mccmnc)) {
                    logv("isSatellitePlmn: return true, satellitePlmn:" + satellitePlmn
                    plogd("isSatellitePlmn: return true, satellitePlmn:" + satellitePlmn
                            + " registeredPlmn:" + registeredPlmn + " mccmnc:" + mccmnc);
                    return true;
                }
            }
        }

        logv("isSatellitePlmn: return false");
        plogd("isSatellitePlmn: return false");
        return false;
    }

@@ -829,6 +836,24 @@ public class SatelliteSOSMessageRecommender extends Handler {
        }
    }

    @Nullable
    private String getMccMnc(@NonNull NetworkRegistrationInfo nri) {
        CellIdentity cellIdentity = nri.getCellIdentity();
        if (cellIdentity == null) {
            plogd("getMccMnc: cellIdentity is null");
            return null;
        }

        String mcc = cellIdentity.getMccString();
        String mnc = cellIdentity.getMncString();
        if (mcc == null || mnc == null) {
            plogd("getMccMnc: mcc or mnc is null. mcc=" + mcc + " mnc=" + mnc);
            return null;
        }

        return mcc + mnc;
    }

    private void plogd(@NonNull String log) {
        Rlog.d(TAG, log);
        if (mPersistentLogger != null) {
+72 −0
Original line number Diff line number Diff line
@@ -29,6 +29,7 @@ import static org.junit.Assert.assertNull;
import static org.junit.Assert.assertTrue;
import static org.mockito.ArgumentMatchers.any;
import static org.mockito.ArgumentMatchers.anyInt;
import static org.mockito.ArgumentMatchers.eq;
import static org.mockito.Mockito.times;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;
@@ -46,7 +47,9 @@ import android.os.OutcomeReceiver;
import android.os.RemoteException;
import android.telecom.Connection;
import android.telecom.TelecomManager;
import android.telephony.AccessNetworkConstants;
import android.telephony.BinderCacheManager;
import android.telephony.NetworkRegistrationInfo;
import android.telephony.ServiceState;
import android.telephony.SubscriptionManager;
import android.telephony.TelephonyManager;
@@ -552,6 +555,75 @@ public class SatelliteSOSMessageRecommenderTest extends TelephonyTest {
        assertEquals(carrierTimeoutMillis, mTestSOSMessageRecommender.getTimeOutMillis());
    }

    @Test
    public void testIsSatellitePlmn() {
        int subId = 1;

        // Satellite PLMN list is empty
        SatelliteSOSMessageRecommender sosMessageRecommender = new TestSOSMessageRecommender(
                mContext, Looper.myLooper(), mSatelliteController, mTestImsManager);
        when(mSatelliteController.getSatellitePlmnsForCarrier(eq(subId)))
                .thenReturn(new ArrayList<>());
        assertFalse(sosMessageRecommender.isSatellitePlmn(subId, mServiceState));

        // registered PLMN is null
        NetworkRegistrationInfo nri = new NetworkRegistrationInfo.Builder()
                .setRegisteredPlmn(null)
                .build();
        when(mServiceState.getNetworkRegistrationInfoListForTransportType(
                eq(AccessNetworkConstants.TRANSPORT_TYPE_WWAN)))
                .thenReturn(List.of(nri));
        assertFalse(sosMessageRecommender.isSatellitePlmn(subId, mServiceState));

        // cell identity is null
        when(mSatelliteController.getSatellitePlmnsForCarrier(eq(subId))).thenReturn(
                List.of("120260"));
        nri = new NetworkRegistrationInfo.Builder()
                .setRegisteredPlmn("123456")
                .setCellIdentity(null)
                .build();
        when(mServiceState.getNetworkRegistrationInfoListForTransportType(
                eq(AccessNetworkConstants.TRANSPORT_TYPE_WWAN)))
                .thenReturn(List.of(nri));
        assertFalse(sosMessageRecommender.isSatellitePlmn(subId, mServiceState));

        // mcc and mnc are null
        when(mCellIdentity.getMccString()).thenReturn(null);
        when(mCellIdentity.getMncString()).thenReturn(null);
        nri = new NetworkRegistrationInfo.Builder()
                .setRegisteredPlmn("123456")
                .setCellIdentity(mCellIdentity)
                .build();
        when(mServiceState.getNetworkRegistrationInfoListForTransportType(
                eq(AccessNetworkConstants.TRANSPORT_TYPE_WWAN)))
                .thenReturn(List.of(nri));
        assertFalse(sosMessageRecommender.isSatellitePlmn(subId, mServiceState));

        // mccmnc equal to satellite PLMN
        when(mCellIdentity.getMccString()).thenReturn("120");
        when(mCellIdentity.getMncString()).thenReturn("260");
        nri = new NetworkRegistrationInfo.Builder()
                .setRegisteredPlmn("123456")
                .setCellIdentity(mCellIdentity)
                .build();
        when(mServiceState.getNetworkRegistrationInfoListForTransportType(
                eq(AccessNetworkConstants.TRANSPORT_TYPE_WWAN)))
                .thenReturn(List.of(nri));
        assertTrue(sosMessageRecommender.isSatellitePlmn(subId, mServiceState));

        // registered PLMN equal to satellite PLMN
        when(mCellIdentity.getMccString()).thenReturn("123");
        when(mCellIdentity.getMncString()).thenReturn("456");
        nri = new NetworkRegistrationInfo.Builder()
                .setRegisteredPlmn("120260")
                .setCellIdentity(mCellIdentity)
                .build();
        when(mServiceState.getNetworkRegistrationInfoListForTransportType(
                eq(AccessNetworkConstants.TRANSPORT_TYPE_WWAN)))
                .thenReturn(List.of(nri));
        assertTrue(sosMessageRecommender.isSatellitePlmn(subId, mServiceState));
    }

    private void testStopTrackingCallBeforeTimeout(
            @Connection.ConnectionState int connectionState) {
        mTestSOSMessageRecommender.onEmergencyCallStarted(mTestConnection);