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

Commit fd361c22 authored by Automerger Merge Worker's avatar Automerger Merge Worker
Browse files

Merge "Use known EID in IccCardStatus update" am: d7c16538

Change-Id: I445a707486bd53bc04e2c949dd4275b521a60843
parents b66f43a6 d7c16538
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());
    }
}