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

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

Merge "Strip trailing Fs when comparing ICCIDs"

parents 4495e7c4 e45faa56
Loading
Loading
Loading
Loading
+20 −5
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";

@@ -561,10 +564,6 @@ public class UiccController extends Handler {
        UiccCard card = mUiccSlots[slotId].getUiccCard();
        if (card != null && (card.getCardState() == CardState.CARDSTATE_PRESENT)) {
            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);
        }

@@ -572,10 +571,17 @@ public class UiccController extends Handler {
        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();
@@ -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.
     * 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 (TextUtils.isEmpty(cardString)) {
            return INVALID_CARD_ID;
        }
        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);
    }
}
+14 −0
Original line number Diff line number Diff line
@@ -239,6 +239,20 @@ public class UiccControllerTest extends TelephonyTest {
        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
    public void testCardIdFromSlotStatus() {
        // Give UiccController a real context so it can use shared preferences