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

Commit 6dd0645b authored by Aishwarya Mallampati's avatar Aishwarya Mallampati Committed by Android (Google) Code Review
Browse files

Merge "Check whether cellIdentity is null before querying for mccmnc." into main

parents 68c9e978 a1c3355e
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);