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

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

Integrate IRadioSim into telephony

Test: atest RILTest
Bug: 198331673
Change-Id: Ic26c68380e6526ea631cbc6be28864aeaf11ceb8
Merged-In: Ic26c68380e6526ea631cbc6be28864aeaf11ceb8
parent 17e6624c
Loading
Loading
Loading
Loading
+287 −488

File changed.

Preview size limit exceeded, changes collapsed.

+205 −5
Original line number Diff line number Diff line
@@ -270,6 +270,7 @@ import android.service.carrier.CarrierIdentifier;
import android.telephony.AccessNetworkConstants;
import android.telephony.Annotation;
import android.telephony.BarringInfo;
import android.telephony.CarrierRestrictionRules;
import android.telephony.CellConfigLte;
import android.telephony.CellIdentity;
import android.telephony.CellIdentityCdma;
@@ -369,7 +370,6 @@ public class RILUtils {
    public static final String RADIO_POWER_FAILURE_NO_RF_CALIBRATION_UUID =
            "316f3801-fa21-4954-a42f-0041eada3b33";


    /**
     * Convert to PersoSubstate defined in radio/1.5/types.hal
     * @param persoType PersoSubState type
@@ -451,6 +451,87 @@ public class RILUtils {
        }
    }

    /**
     * Convert to PersoSubstate defined in PersoSubstate.aidl
     * @param persoType PersoSubState type
     * @return The converted PersoSubstate
     */
    public static int convertToHalPersoTypeAidl(
            IccCardApplicationStatus.PersoSubState persoType) {
        switch (persoType) {
            case PERSOSUBSTATE_IN_PROGRESS:
                return android.hardware.radio.sim.PersoSubstate.IN_PROGRESS;
            case  PERSOSUBSTATE_READY:
                return android.hardware.radio.sim.PersoSubstate.READY;
            case PERSOSUBSTATE_SIM_NETWORK:
                return android.hardware.radio.sim.PersoSubstate.SIM_NETWORK;
            case PERSOSUBSTATE_SIM_NETWORK_SUBSET:
                return android.hardware.radio.sim.PersoSubstate.SIM_NETWORK_SUBSET;
            case PERSOSUBSTATE_SIM_CORPORATE:
                return android.hardware.radio.sim.PersoSubstate.SIM_CORPORATE;
            case PERSOSUBSTATE_SIM_SERVICE_PROVIDER:
                return android.hardware.radio.sim.PersoSubstate.SIM_SERVICE_PROVIDER;
            case PERSOSUBSTATE_SIM_SIM:
                return android.hardware.radio.sim.PersoSubstate.SIM_SIM;
            case PERSOSUBSTATE_SIM_NETWORK_PUK:
                return android.hardware.radio.sim.PersoSubstate.SIM_NETWORK_PUK;
            case PERSOSUBSTATE_SIM_NETWORK_SUBSET_PUK:
                return android.hardware.radio.sim.PersoSubstate.SIM_NETWORK_SUBSET_PUK;
            case PERSOSUBSTATE_SIM_CORPORATE_PUK:
                return android.hardware.radio.sim.PersoSubstate.SIM_CORPORATE_PUK;
            case PERSOSUBSTATE_SIM_SERVICE_PROVIDER_PUK:
                return android.hardware.radio.sim.PersoSubstate.SIM_SERVICE_PROVIDER_PUK;
            case PERSOSUBSTATE_SIM_SIM_PUK:
                return android.hardware.radio.sim.PersoSubstate.SIM_SIM_PUK;
            case PERSOSUBSTATE_RUIM_NETWORK1:
                return android.hardware.radio.sim.PersoSubstate.RUIM_NETWORK1;
            case PERSOSUBSTATE_RUIM_NETWORK2:
                return android.hardware.radio.sim.PersoSubstate.RUIM_NETWORK2;
            case PERSOSUBSTATE_RUIM_HRPD:
                return android.hardware.radio.sim.PersoSubstate.RUIM_HRPD;
            case PERSOSUBSTATE_RUIM_CORPORATE:
                return android.hardware.radio.sim.PersoSubstate.RUIM_CORPORATE;
            case PERSOSUBSTATE_RUIM_SERVICE_PROVIDER:
                return android.hardware.radio.sim.PersoSubstate.RUIM_SERVICE_PROVIDER;
            case PERSOSUBSTATE_RUIM_RUIM:
                return android.hardware.radio.sim.PersoSubstate.RUIM_RUIM;
            case PERSOSUBSTATE_RUIM_NETWORK1_PUK:
                return android.hardware.radio.sim.PersoSubstate.RUIM_NETWORK1_PUK;
            case PERSOSUBSTATE_RUIM_NETWORK2_PUK:
                return android.hardware.radio.sim.PersoSubstate.RUIM_NETWORK2_PUK;
            case PERSOSUBSTATE_RUIM_HRPD_PUK:
                return android.hardware.radio.sim.PersoSubstate.RUIM_HRPD_PUK;
            case PERSOSUBSTATE_RUIM_CORPORATE_PUK:
                return android.hardware.radio.sim.PersoSubstate.RUIM_CORPORATE_PUK;
            case PERSOSUBSTATE_RUIM_SERVICE_PROVIDER_PUK:
                return android.hardware.radio.sim.PersoSubstate.RUIM_SERVICE_PROVIDER_PUK;
            case PERSOSUBSTATE_RUIM_RUIM_PUK:
                return android.hardware.radio.sim.PersoSubstate.RUIM_RUIM_PUK;
            case PERSOSUBSTATE_SIM_SPN:
                return android.hardware.radio.sim.PersoSubstate.SIM_SPN;
            case PERSOSUBSTATE_SIM_SPN_PUK:
                return android.hardware.radio.sim.PersoSubstate.SIM_SPN_PUK;
            case PERSOSUBSTATE_SIM_SP_EHPLMN:
                return android.hardware.radio.sim.PersoSubstate.SIM_SP_EHPLMN;
            case PERSOSUBSTATE_SIM_SP_EHPLMN_PUK:
                return android.hardware.radio.sim.PersoSubstate.SIM_SP_EHPLMN_PUK;
            case PERSOSUBSTATE_SIM_ICCID:
                return android.hardware.radio.sim.PersoSubstate.SIM_ICCID;
            case PERSOSUBSTATE_SIM_ICCID_PUK:
                return android.hardware.radio.sim.PersoSubstate.SIM_ICCID_PUK;
            case PERSOSUBSTATE_SIM_IMPI:
                return android.hardware.radio.sim.PersoSubstate.SIM_IMPI;
            case PERSOSUBSTATE_SIM_IMPI_PUK:
                return android.hardware.radio.sim.PersoSubstate.SIM_IMPI_PUK;
            case PERSOSUBSTATE_SIM_NS_SP:
                return android.hardware.radio.sim.PersoSubstate.SIM_NS_SP;
            case PERSOSUBSTATE_SIM_NS_SP_PUK:
                return android.hardware.radio.sim.PersoSubstate.SIM_NS_SP_PUK;
            default:
                return android.hardware.radio.sim.PersoSubstate.UNKNOWN;
        }
    }

    /**
     * Convert to GsmSmsMessage defined in radio/1.0/types.hal
     * @param smscPdu SMSC address
@@ -1626,7 +1707,67 @@ public class RILUtils {
    }

    /**
     * Convert a list of CarrierIdentifiers into a list of Carrier defined in radio/1.0/types.hal
     * Convert to SimApdu defined in SimApdu.aidl
     * @param channel channel
     * @param cla cla
     * @param instruction instruction
     * @param p1 p1
     * @param p2 p2
     * @param p3 p3
     * @param data data
     * @return The converted SimApdu
     */
    public static android.hardware.radio.sim.SimApdu convertToHalSimApduAidl(int channel, int cla,
            int instruction, int p1, int p2, int p3, String data) {
        android.hardware.radio.sim.SimApdu msg = new android.hardware.radio.sim.SimApdu();
        msg.sessionId = channel;
        msg.cla = cla;
        msg.instruction = instruction;
        msg.p1 = p1;
        msg.p2 = p2;
        msg.p3 = p3;
        msg.data = convertNullToEmptyString(data);
        return msg;
    }

    /**
     * Convert to SimLockMultiSimPolicy defined in radio/1.4/types.hal
     * @param policy Multi SIM policy
     * @return The converted SimLockMultiSimPolicy
     */
    public static int convertToHalSimLockMultiSimPolicy(int policy) {
        switch (policy) {
            case CarrierRestrictionRules.MULTISIM_POLICY_ONE_VALID_SIM_MUST_BE_PRESENT:
                return android.hardware.radio.V1_4.SimLockMultiSimPolicy
                        .ONE_VALID_SIM_MUST_BE_PRESENT;
            case CarrierRestrictionRules.MULTISIM_POLICY_NONE:
                // fallthrough
            default:
                return android.hardware.radio.V1_4.SimLockMultiSimPolicy.NO_MULTISIM_POLICY;

        }
    }

    /**
     * Convert to SimLockMultiSimPolicy defined in SimLockMultiSimPolicy.aidl
     * @param policy Multi SIM policy
     * @return The converted SimLockMultiSimPolicy
     */
    public static int convertToHalSimLockMultiSimPolicyAidl(int policy) {
        switch (policy) {
            case CarrierRestrictionRules.MULTISIM_POLICY_ONE_VALID_SIM_MUST_BE_PRESENT:
                return android.hardware.radio.sim.SimLockMultiSimPolicy
                        .ONE_VALID_SIM_MUST_BE_PRESENT;
            case CarrierRestrictionRules.MULTISIM_POLICY_NONE:
                // fallthrough
            default:
                return android.hardware.radio.sim.SimLockMultiSimPolicy.NO_MULTISIM_POLICY;

        }
    }

    /**
     * Convert a list of CarrierIdentifiers into a list of Carriers defined in radio/1.0/types.hal
     * @param carriers List of CarrierIdentifiers
     * @return The converted list of Carriers
     */
@@ -1659,6 +1800,42 @@ public class RILUtils {
        return result;
    }

    /**
     * Convert a list of CarrierIdentifiers into an array of Carriers defined in Carrier.aidl
     * @param carriers List of CarrierIdentifiers
     * @return The converted array of Carriers
     */
    public static android.hardware.radio.sim.Carrier[] convertToHalCarrierRestrictionListAidl(
            List<CarrierIdentifier> carriers) {
        android.hardware.radio.sim.Carrier[] result =
                new android.hardware.radio.sim.Carrier[carriers.size()];
        for (int i = 0; i < carriers.size(); i++) {
            CarrierIdentifier ci = carriers.get(i);
            android.hardware.radio.sim.Carrier carrier = new android.hardware.radio.sim.Carrier();
            carrier.mcc = convertNullToEmptyString(ci.getMcc());
            carrier.mnc = convertNullToEmptyString(ci.getMnc());
            int matchType = CarrierIdentifier.MatchType.ALL;
            String matchData = null;
            if (!TextUtils.isEmpty(ci.getSpn())) {
                matchType = CarrierIdentifier.MatchType.SPN;
                matchData = ci.getSpn();
            } else if (!TextUtils.isEmpty(ci.getImsi())) {
                matchType = CarrierIdentifier.MatchType.IMSI_PREFIX;
                matchData = ci.getImsi();
            } else if (!TextUtils.isEmpty(ci.getGid1())) {
                matchType = CarrierIdentifier.MatchType.GID1;
                matchData = ci.getGid1();
            } else if (!TextUtils.isEmpty(ci.getGid2())) {
                matchType = CarrierIdentifier.MatchType.GID2;
                matchData = ci.getGid2();
            }
            carrier.matchType = matchType;
            carrier.matchData = convertNullToEmptyString(matchData);
            result[i] = carrier;
        }
        return result;
    }

    /**
     * Convert to SignalThresholdInfo defined in radio/1.5/types.hal
     * @param signalThresholdInfo Signal threshold info
@@ -4097,9 +4274,7 @@ public class RILUtils {
        pbRecordInfo.number = convertNullToEmptyString(
                convertToHalPhonebookRecordInfoNumber(record.getNumber()));
        if (record.getEmails() != null) {
            for (String email : record.getEmails()) {
                pbRecordInfo.emails.add(email);
            }
            pbRecordInfo.emails = primitiveArrayToArrayList(record.getEmails());
        }
        if (record.getAdditionalNumbers() != null) {
            for (String addNum : record.getAdditionalNumbers()) {
@@ -4109,6 +4284,31 @@ public class RILUtils {
        return pbRecordInfo;
    }

    /**
     * Convert SimPhonebookRecord to PhonebookRecordInfo.aidl
     * @param record SimPhonebookRecord to convert
     * @return The converted PhonebookRecordInfo
     */
    public static android.hardware.radio.sim.PhonebookRecordInfo
            convertToHalPhonebookRecordInfoAidl(SimPhonebookRecord record) {
        android.hardware.radio.sim.PhonebookRecordInfo pbRecordInfo =
                new android.hardware.radio.sim.PhonebookRecordInfo();
        pbRecordInfo.recordId = record.getRecordIndex();
        pbRecordInfo.name = convertNullToEmptyString(record.getAlphaTag());
        pbRecordInfo.number = convertNullToEmptyString(
                convertToHalPhonebookRecordInfoNumber(record.getNumber()));
        pbRecordInfo.emails = record.getEmails();
        if (record.getAdditionalNumbers() != null) {
            String[] additionalNumbers = new String[record.getAdditionalNumbers().length];
            for (int i = 0; i < additionalNumbers.length; i++) {
                additionalNumbers[i] =
                        convertToHalPhonebookRecordInfoNumber(record.getAdditionalNumbers()[i]);
            }
            pbRecordInfo.additionalNumbers = additionalNumbers;
        }
        return pbRecordInfo;
    }

    /**
     * Convert the GSM pause/wild/wait character to the phone number in the SIM PhonebookRecordInfo
     * number format
+810 −0

File added.

Preview size limit exceeded, changes collapsed.

+11 −5
Original line number Diff line number Diff line
@@ -206,6 +206,8 @@ public class RILTest extends TelephonyTest {
    private RadioDataProxy mDataProxy;
    @Mock
    private RadioNetworkProxy mNetworkProxy;
    @Mock
    private RadioSimProxy mSimProxy;

    private HalVersion mRadioVersionV10 = new HalVersion(1, 0);
    private HalVersion mRadioVersionV11 = new HalVersion(1, 1);
@@ -314,6 +316,7 @@ public class RILTest extends TelephonyTest {
        proxies.put(RIL.RADIO_SERVICE, null);
        proxies.put(RIL.DATA_SERVICE, mDataProxy);
        proxies.put(RIL.NETWORK_SERVICE, mNetworkProxy);
        proxies.put(RIL.SIM_SERVICE, mSimProxy);
        mRILInstance = new RIL(context,
                RadioAccessFamily.getRafFromNetworkType(RILConstants.PREFERRED_NETWORK_MODE),
                Phone.PREFERRED_CDMA_SUBSCRIPTION, 0, proxies);
@@ -323,8 +326,11 @@ public class RILTest extends TelephonyTest {
                any());
        doReturn(mNetworkProxy).when(mRILUnderTest).getRadioServiceProxy(
                eq(RadioNetworkProxy.class), any());
        doReturn(mSimProxy).when(mRILUnderTest).getRadioServiceProxy(eq(RadioSimProxy.class),
                any());
        doReturn(false).when(mDataProxy).isEmpty();
        doReturn(false).when(mNetworkProxy).isEmpty();
        doReturn(false).when(mSimProxy).isEmpty();
        try {
            replaceInstance(RIL.class, "mRadioVersion", mRILUnderTest, mRadioVersionV10);
        } catch (Exception e) {
@@ -2745,7 +2751,7 @@ public class RILTest extends TelephonyTest {
    public void testEnableUiccApplications() throws Exception {
        // Not supported on Radio 1.0.
        mRILUnderTest.enableUiccApplications(false, obtainMessage());
        verify(mRadioProxy, never()).enableUiccApplications(anyInt(), anyBoolean());
        verify(mSimProxy, never()).enableUiccApplications(anyInt(), anyBoolean());

        // Make radio version 1.5 to support the operation.
        try {
@@ -2753,7 +2759,7 @@ public class RILTest extends TelephonyTest {
        } catch (Exception e) {
        }
        mRILUnderTest.enableUiccApplications(false, obtainMessage());
        verify(mRadioProxy).enableUiccApplications(mSerialNumberCaptor.capture(), anyBoolean());
        verify(mSimProxy).enableUiccApplications(mSerialNumberCaptor.capture(), anyBoolean());
        verifyRILResponse(mRILUnderTest, mSerialNumberCaptor.getValue(),
                RIL_REQUEST_ENABLE_UICC_APPLICATIONS);
    }
@@ -2762,7 +2768,7 @@ public class RILTest extends TelephonyTest {
    public void testAreUiccApplicationsEnabled() throws Exception {
        // Not supported on Radio 1.0.
        mRILUnderTest.areUiccApplicationsEnabled(obtainMessage());
        verify(mRadioProxy, never()).areUiccApplicationsEnabled(mSerialNumberCaptor.capture());
        verify(mSimProxy, never()).areUiccApplicationsEnabled(mSerialNumberCaptor.capture());

        // Make radio version 1.5 to support the operation.
        try {
@@ -2770,7 +2776,7 @@ public class RILTest extends TelephonyTest {
        } catch (Exception e) {
        }
        mRILUnderTest.areUiccApplicationsEnabled(obtainMessage());
        verify(mRadioProxy).areUiccApplicationsEnabled(mSerialNumberCaptor.capture());
        verify(mSimProxy).areUiccApplicationsEnabled(mSerialNumberCaptor.capture());
        verifyRILResponse(mRILUnderTest, mSerialNumberCaptor.getValue(),
                RIL_REQUEST_GET_UICC_APPLICATIONS_ENABLEMENT);
    }
@@ -2782,7 +2788,7 @@ public class RILTest extends TelephonyTest {
        Message message = obtainMessage();
        mRILUnderTest.areUiccApplicationsEnabled(message);
        processAllMessages();
        verify(mRadioProxy, never()).areUiccApplicationsEnabled(mSerialNumberCaptor.capture());
        verify(mSimProxy, never()).areUiccApplicationsEnabled(mSerialNumberCaptor.capture());
        // Sending message is handled by getRadioProxy when proxy is null.
        // areUiccApplicationsEnabled shouldn't explicitly send another callback.
        assertEquals(null, message.obj);