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

Commit 277a5823 authored by Sarah Chin's avatar Sarah Chin
Browse files

Add response for CardStatus and update PersoSubstate

getIccCardStatusResponse_1_5

Test: atest RILTest
Bug: 151774189
Change-Id: Iab1c61244f19cc3963df94b5e5973bffe57364f1
parent cf050b2b
Loading
Loading
Loading
Loading
+65 −0
Original line number Diff line number Diff line
@@ -126,6 +126,15 @@ public class RadioResponse extends IRadioResponse.Stub {
        responseIccCardStatus_1_4(responseInfo, cardStatus);
    }

    /**
     * @param responseInfo Response info struct containing response type, serial no. and error
     * @param cardStatus ICC card status as defined by CardStatus in 1.5/types.hal
     */
    public void getIccCardStatusResponse_1_5(RadioResponseInfo responseInfo,
            android.hardware.radio.V1_5.CardStatus cardStatus) {
        responseIccCardStatus_1_5(responseInfo, cardStatus);
    }

    /**
     * @param responseInfo Response info struct containing response type, serial no. and error
     * @param remainingAttempts Number of retries remaining, must be equal to -1 if unknown.
@@ -1620,6 +1629,48 @@ public class RadioResponse extends IRadioResponse.Stub {
        return iccCardStatus;
    }

    private IccCardStatus convertHalCardStatus_1_5(
            android.hardware.radio.V1_5.CardStatus cardStatus) {
        IccCardStatus iccCardStatus = new IccCardStatus();
        iccCardStatus.setCardState(cardStatus.base.base.base.cardState);
        iccCardStatus.setUniversalPinState(cardStatus.base.base.base.universalPinState);
        iccCardStatus.mGsmUmtsSubscriptionAppIndex =
                cardStatus.base.base.base.gsmUmtsSubscriptionAppIndex;
        iccCardStatus.mCdmaSubscriptionAppIndex =
                cardStatus.base.base.base.cdmaSubscriptionAppIndex;
        iccCardStatus.mImsSubscriptionAppIndex =
                cardStatus.base.base.base.imsSubscriptionAppIndex;
        iccCardStatus.physicalSlotIndex = cardStatus.base.base.physicalSlotId;
        iccCardStatus.atr = cardStatus.base.base.atr;
        iccCardStatus.iccid = cardStatus.base.base.iccid;
        iccCardStatus.eid = cardStatus.base.eid;
        int numApplications = cardStatus.applications.size();

        // limit to maximum allowed applications
        if (numApplications
                > com.android.internal.telephony.uicc.IccCardStatus.CARD_MAX_APPS) {
            numApplications =
                    com.android.internal.telephony.uicc.IccCardStatus.CARD_MAX_APPS;
        }
        iccCardStatus.mApplications = new IccCardApplicationStatus[numApplications];
        for (int i = 0; i < numApplications; i++) {
            android.hardware.radio.V1_5.AppStatus rilAppStatus = cardStatus.applications.get(i);
            IccCardApplicationStatus appStatus = new IccCardApplicationStatus();
            appStatus.app_type       = appStatus.AppTypeFromRILInt(rilAppStatus.base.appType);
            appStatus.app_state      = appStatus.AppStateFromRILInt(rilAppStatus.base.appState);
            appStatus.perso_substate = appStatus.PersoSubstateFromRILInt(
                    rilAppStatus.persoSubstate);
            appStatus.aid            = rilAppStatus.base.aidPtr;
            appStatus.app_label      = rilAppStatus.base.appLabelPtr;
            appStatus.pin1_replaced  = rilAppStatus.base.pin1Replaced;
            appStatus.pin1           = appStatus.PinStateFromRILInt(rilAppStatus.base.pin1);
            appStatus.pin2           = appStatus.PinStateFromRILInt(rilAppStatus.base.pin2);
            iccCardStatus.mApplications[i] = appStatus;
            mRil.riljLog("IccCardApplicationStatus " + i + ":" + appStatus.toString());
        }
        return iccCardStatus;
    }

    private void responseIccCardStatus(RadioResponseInfo responseInfo, CardStatus cardStatus) {
        RILRequest rr = mRil.processResponse(responseInfo);

@@ -1668,6 +1719,20 @@ public class RadioResponse extends IRadioResponse.Stub {
        }
    }

    private void responseIccCardStatus_1_5(RadioResponseInfo responseInfo,
            android.hardware.radio.V1_5.CardStatus cardStatus) {
        RILRequest rr = mRil.processResponse(responseInfo);

        if (rr != null) {
            IccCardStatus iccCardStatus = convertHalCardStatus_1_5(cardStatus);
            mRil.riljLog("responseIccCardStatus: from HIDL: " + iccCardStatus);
            if (responseInfo.error == RadioError.NONE) {
                sendMessageResponse(rr.mResult, iccCardStatus);
            }
            mRil.processResponseDone(rr, responseInfo, iccCardStatus);
        }
    }

    /**
     * @param responseInfo Response info struct containing response type, serial no. and error
     */
+19 −1
Original line number Diff line number Diff line
@@ -116,7 +116,16 @@ public class IccCardApplicationStatus {
        PERSOSUBSTATE_RUIM_HRPD_PUK,
        PERSOSUBSTATE_RUIM_CORPORATE_PUK,
        PERSOSUBSTATE_RUIM_SERVICE_PROVIDER_PUK,
        PERSOSUBSTATE_RUIM_RUIM_PUK;
        PERSOSUBSTATE_RUIM_RUIM_PUK,
        PERSOSUBSTATE_SIM_SPN,
        PERSOSUBSTATE_SIM_SPN_PUK,
        PERSOSUBSTATE_SIM_SP_EHPLMN,
        PERSOSUBSTATE_SIM_ICCID,
        PERSOSUBSTATE_SIM_ICCID_PUK,
        PERSOSUBSTATE_SIM_IMPI,
        PERSOSUBSTATE_SIM_IMPI_PUK,
        PERSOSUBSTATE_SIM_NS_SP,
        PERSOSUBSTATE_SIM_NS_SP_PUK;

        boolean isPersoSubStateUnknown() {
            return this == PERSOSUBSTATE_UNKNOWN;
@@ -205,6 +214,15 @@ public class IccCardApplicationStatus {
            case 22: newSubState = PersoSubState.PERSOSUBSTATE_RUIM_CORPORATE_PUK; break;
            case 23: newSubState = PersoSubState.PERSOSUBSTATE_RUIM_SERVICE_PROVIDER_PUK; break;
            case 24: newSubState = PersoSubState.PERSOSUBSTATE_RUIM_RUIM_PUK; break;
            case 25: newSubState = PersoSubState.PERSOSUBSTATE_SIM_SPN; break;
            case 26: newSubState = PersoSubState.PERSOSUBSTATE_SIM_SPN_PUK; break;
            case 27: newSubState = PersoSubState.PERSOSUBSTATE_SIM_SP_EHPLMN; break;
            case 28: newSubState = PersoSubState.PERSOSUBSTATE_SIM_ICCID; break;
            case 29: newSubState = PersoSubState.PERSOSUBSTATE_SIM_ICCID_PUK; break;
            case 30: newSubState = PersoSubState.PERSOSUBSTATE_SIM_IMPI; break;
            case 31: newSubState = PersoSubState.PERSOSUBSTATE_SIM_IMPI_PUK; break;
            case 32: newSubState = PersoSubState.PERSOSUBSTATE_SIM_NS_SP; break;
            case 33: newSubState = PersoSubState.PERSOSUBSTATE_SIM_NS_SP_PUK; break;
            default:
                newSubState = PersoSubState.PERSOSUBSTATE_UNKNOWN;
                loge("PersoSubstateFromRILInt: bad substate: " + substate