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

Commit d7c16538 authored by Jordan Liu's avatar Jordan Liu Committed by Gerrit Code Review
Browse files

Merge "Use known EID in IccCardStatus update"

parents a25060af 9109c269
Loading
Loading
Loading
Loading
+22 −7
Original line number Diff line number Diff line
@@ -696,15 +696,30 @@ public class UiccController extends Handler {
            cardString = card.getIccId();
        }

        // EID may be unpopulated if RadioConfig<1.2
        if (cardString != null) {
            addCardId(cardString);
        }

        // EID is unpopulated if Radio HAL < 1.4 (RadioConfig < 1.2)
        // If so, just register for EID loaded and skip this stuff
        if (isEuicc && cardString == null
                && mDefaultEuiccCardId != UNSUPPORTED_CARD_ID) {
        if (isEuicc && mDefaultEuiccCardId != UNSUPPORTED_CARD_ID) {
            if (cardString == null) {
                ((EuiccCard) card).registerForEidReady(this, EVENT_EID_READY, index);
            } else {
                // If we know the EID from IccCardStatus, just use it to set mDefaultEuiccCardId if
                // it's not already set.
                // This is needed in cases where slot status doesn't include EID, and we don't want
                // to register for EID from APDU because we already know cardString from a previous
                // APDU
                if (mDefaultEuiccCardId == UNINITIALIZED_CARD_ID
                        || mDefaultEuiccCardId == TEMPORARILY_UNSUPPORTED_CARD_ID) {
                    mDefaultEuiccCardId = convertToPublicCardId(cardString);
                    String logStr = "IccCardStatus eid=" + cardString + " slot=" + slotId
                            + " mDefaultEuiccCardId=" + mDefaultEuiccCardId;
                    sLocalLog.log(logStr);
                    log(logStr);
                }
            }

        if (cardString != null) {
            addCardId(cardString);
        }

        if (DBG) log("Notifying IccChangedRegistrants");
+38 −0
Original line number Diff line number Diff line
@@ -593,4 +593,42 @@ public class UiccControllerTest extends TelephonyTest {
        assertEquals(mUiccControllerUT.convertToPublicCardId(eidForRemovableEuicc),
                mUiccControllerUT.getCardIdForDefaultEuicc());
    }

    /**
     * When IccCardStatus is received, if the EID is known from previous APDU, use it to set the
     * mDefaultEuiccCardId.
     */
    @Test
    public void testEidFromPreviousApduSetsDefaultEuicc() {
        // Give UiccController a real context so it can use shared preferences
        mUiccControllerUT.mContext = InstrumentationRegistry.getContext();

        // Mock out UiccSlots
        mUiccControllerUT.mUiccSlots[0] = mMockSlot;
        doReturn(true).when(mMockSlot).isEuicc();
        doReturn(null).when(mMockSlot).getUiccCard();
        doReturn("123451234567890").when(mMockSlot).getIccId();
        doReturn(false).when(mMockSlot).isRemovable();

        // If APDU has already happened, the EuiccCard already knows EID
        String knownEidFromApdu = "A1B2C3D4E5";
        doReturn(mMockEuiccCard).when(mMockSlot).getUiccCard();
        doReturn(knownEidFromApdu).when(mMockEuiccCard).getEid();

        // simulate card status loaded so that the UiccController sets the card ID
        IccCardStatus ics = new IccCardStatus();
        ics.setCardState(1 /* present */);
        ics.setUniversalPinState(3 /* disabled */);
        ics.atr = "abcdef0123456789abcdef";
        ics.iccid = "123451234567890";
        // the IccCardStatus does not contain EID, but it is known from previous APDU
        ics.eid = null;
        AsyncResult ar = new AsyncResult(null, ics, null);
        Message msg = Message.obtain(mUiccControllerUT, EVENT_GET_ICC_STATUS_DONE, ar);
        mUiccControllerUT.handleMessage(msg);

        // since EID is known and we've gotten card status, the default eUICC card ID should be set
        assertEquals(mUiccControllerUT.convertToPublicCardId(knownEidFromApdu),
                mUiccControllerUT.getCardIdForDefaultEuicc());
    }
}