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

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

Strip trailing Fs when comparing ICCIDs

Bug: 122977180
Test: manual
Change-Id: Iad36aa7e408fa12dfe0129398c8f4fde1c8567c5
parent aa3c1e63
Loading
Loading
Loading
Loading
+19 −3
Original line number 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;

    // 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
    private static final String CARD_STRINGS = "card_strings";

@@ -560,18 +563,25 @@ public class UiccController extends Handler {

        UiccCard card = mUiccSlots[slotId].getUiccCard();
        if (card != null && (card.getCardState() == CardState.CARDSTATE_PRESENT)) {
            // getCardString() uses the raw ICCID, so we strip it manually
            addCardId(IccUtils.stripTrailingFs(card.getCardId()));
            String cardString = card.getCardId();
            addCardId(cardString);
        }

        if (DBG) log("Notifying IccChangedRegistrants");
        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) {
        if (TextUtils.isEmpty(cardString)) {
            return;
        }
        if (cardString.length() < EID_LENGTH) {
            cardString = IccUtils.stripTrailingFs(cardString);
        }
        if (!mCardStrings.contains(cardString)) {
            mCardStrings.add(cardString);
            saveCardStrings();
@@ -580,9 +590,15 @@ public class UiccController extends Handler {

    /**
     * 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) {
        if (cardString.length() < EID_LENGTH) {
            cardString = IccUtils.stripTrailingFs(cardString);
        }
        int id = mCardStrings.indexOf(cardString);
        if (id == -1) {
            return INVALID_CARD_ID;
+1 −1
Original line number Diff line number Diff line
@@ -399,6 +399,7 @@ public class UiccSlot extends Handler {
        pw.println("UiccSlot:");
        pw.println(" mCi=" + mCi);
        pw.println(" mActive=" + mActive);
        pw.println(" mIsEuicc=" + mIsEuicc);
        pw.println(" mLastRadioState=" + mLastRadioState);
        pw.println(" mIccId=" + mIccId);
        pw.println(" mCardState=" + mCardState);
@@ -410,6 +411,5 @@ public class UiccSlot extends Handler {
        }
        pw.println();
        pw.flush();
        pw.flush();
    }
}
+9 −0
Original line number 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.AsyncResultHelper;

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

@@ -1352,4 +1354,11 @@ public class EuiccCard extends UiccCard {
            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);
    }
}