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

Commit e45faa56 authored by Jordan Liu's avatar Jordan Liu
Browse files

Strip trailing Fs when comparing ICCIDs

Bug: 122977180
Test: manual
Change-Id: Iad36aa7e408fa12dfe0129398c8f4fde1c8567c5
Merged-In: Iad36aa7e408fa12dfe0129398c8f4fde1c8567c5
Merged-In: I5617f4d76e244f5235cb78b820b6b67cbd9508a2
parent 6f319694
Loading
Loading
Loading
Loading
+20 −5
Original line number Original line Diff line number Diff line
@@ -135,6 +135,9 @@ public class UiccController extends Handler {


    private static final int INVALID_CARD_ID = TelephonyManager.INVALID_CARD_ID;
    private static final int INVALID_CARD_ID = TelephonyManager.INVALID_CARD_ID;


    // GSM SGP.02 section 2.2.2 states that the EID is always 32 digits long
    private static final int EID_LENGTH = 32;

    // SharedPreference key for saving the known card strings (ICCIDs and EIDs) ordered by card ID
    // SharedPreference key for saving the known card strings (ICCIDs and EIDs) ordered by card ID
    private static final String CARD_STRINGS = "card_strings";
    private static final String CARD_STRINGS = "card_strings";


@@ -561,10 +564,6 @@ public class UiccController extends Handler {
        UiccCard card = mUiccSlots[slotId].getUiccCard();
        UiccCard card = mUiccSlots[slotId].getUiccCard();
        if (card != null && (card.getCardState() == CardState.CARDSTATE_PRESENT)) {
        if (card != null && (card.getCardState() == CardState.CARDSTATE_PRESENT)) {
            String cardString = card.getCardId();
            String cardString = card.getCardId();
            if (!mUiccSlots[slotId].isEuicc()) {
                // getCardId() returns the raw ICCID for a UICC, so we strip it manually
                cardString = IccUtils.stripTrailingFs(cardString);
            }
            addCardId(cardString);
            addCardId(cardString);
        }
        }


@@ -572,10 +571,17 @@ public class UiccController extends Handler {
        mIccChangedRegistrants.notifyRegistrants(new AsyncResult(null, index, null));
        mIccChangedRegistrants.notifyRegistrants(new AsyncResult(null, index, null));
    }
    }


    /**
     * Add a cardString to mCardStrings. If this is an ICCID, trailing Fs will be automatically
     * stripped.
     */
    private void addCardId(String cardString) {
    private void addCardId(String cardString) {
        if (TextUtils.isEmpty(cardString)) {
        if (TextUtils.isEmpty(cardString)) {
            return;
            return;
        }
        }
        if (cardString.length() < EID_LENGTH) {
            cardString = IccUtils.stripTrailingFs(cardString);
        }
        if (!mCardStrings.contains(cardString)) {
        if (!mCardStrings.contains(cardString)) {
            mCardStrings.add(cardString);
            mCardStrings.add(cardString);
            saveCardStrings();
            saveCardStrings();
@@ -584,9 +590,18 @@ public class UiccController extends Handler {


    /**
    /**
     * Converts the card string (the ICCID/EID, formerly named card ID) to the public int cardId.
     * Converts the card string (the ICCID/EID, formerly named card ID) to the public int cardId.
     * Returns INVALID_CARD_ID if the card string does not map to a cardId.
     * If the given cardString is an ICCID, trailing Fs will be automatically stripped before trying
     * to match to a card ID.
     *
     * @return the matching cardId, or INVALID_CARD_ID if the card string does not map to a cardId
     */
     */
    public int convertToPublicCardId(String cardString) {
    public int convertToPublicCardId(String cardString) {
        if (TextUtils.isEmpty(cardString)) {
            return INVALID_CARD_ID;
        }
        if (cardString.length() < EID_LENGTH) {
            cardString = IccUtils.stripTrailingFs(cardString);
        }
        int id = mCardStrings.indexOf(cardString);
        int id = mCardStrings.indexOf(cardString);
        if (id == -1) {
        if (id == -1) {
            return INVALID_CARD_ID;
            return INVALID_CARD_ID;
+1 −1
Original line number Original line Diff line number Diff line
@@ -399,6 +399,7 @@ public class UiccSlot extends Handler {
        pw.println("UiccSlot:");
        pw.println("UiccSlot:");
        pw.println(" mCi=" + mCi);
        pw.println(" mCi=" + mCi);
        pw.println(" mActive=" + mActive);
        pw.println(" mActive=" + mActive);
        pw.println(" mIsEuicc=" + mIsEuicc);
        pw.println(" mLastRadioState=" + mLastRadioState);
        pw.println(" mLastRadioState=" + mLastRadioState);
        pw.println(" mIccId=" + mIccId);
        pw.println(" mIccId=" + mIccId);
        pw.println(" mCardState=" + mCardState);
        pw.println(" mCardState=" + mCardState);
@@ -410,6 +411,5 @@ public class UiccSlot extends Handler {
        }
        }
        pw.println();
        pw.println();
        pw.flush();
        pw.flush();
        pw.flush();
    }
    }
}
}
+9 −0
Original line number Original line Diff line number Diff line
@@ -52,6 +52,8 @@ import com.android.internal.telephony.uicc.euicc.apdu.RequestProvider;
import com.android.internal.telephony.uicc.euicc.async.AsyncResultCallback;
import com.android.internal.telephony.uicc.euicc.async.AsyncResultCallback;
import com.android.internal.telephony.uicc.euicc.async.AsyncResultHelper;
import com.android.internal.telephony.uicc.euicc.async.AsyncResultHelper;


import java.io.FileDescriptor;
import java.io.PrintWriter;
import java.util.Arrays;
import java.util.Arrays;
import java.util.List;
import java.util.List;


@@ -1352,4 +1354,11 @@ public class EuiccCard extends UiccCard {
            Rlog.d(LOG_TAG, message);
            Rlog.d(LOG_TAG, message);
        }
        }
    }
    }

    @Override
    public void dump(FileDescriptor fd, PrintWriter pw, String[] args) {
        super.dump(fd, pw, args);
        pw.println("EuiccCard:");
        pw.println(" mEid=" + mEid);
    }
}
}
+14 −0
Original line number Original line Diff line number Diff line
@@ -239,6 +239,20 @@ public class UiccControllerTest extends TelephonyTest {
        assertEquals(0, mUiccControllerUT.convertToPublicCardId(ics.eid));
        assertEquals(0, mUiccControllerUT.convertToPublicCardId(ics.eid));
    }
    }


    @Test
    public void testConvertNullCardId() {
        // trying to convert a null string should return -1
        assertEquals(TelephonyManager.INVALID_CARD_ID,
                mUiccControllerUT.convertToPublicCardId(null));
    }

    @Test
    public void testConvertEmptyCardId() {
        // trying to convert an empty string should return -1
        assertEquals(TelephonyManager.INVALID_CARD_ID,
                mUiccControllerUT.convertToPublicCardId(""));
    }

    @Test
    @Test
    public void testCardIdFromSlotStatus() {
    public void testCardIdFromSlotStatus() {
        // Give UiccController a real context so it can use shared preferences
        // Give UiccController a real context so it can use shared preferences