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

Commit 35a899af authored by Jordan Liu's avatar Jordan Liu
Browse files

convertToPublicCardId returns unsupported on HAL<1.2

Bug: 124472239
Test: manual and UiccControllerTest
Change-Id: I45160deca30032599fbb04976a8140a866295bc1
Merged-In: I45160deca30032599fbb04976a8140a866295bc1
parent 932b96e1
Loading
Loading
Loading
Loading
+19 −7
Original line number Diff line number Diff line
@@ -16,6 +16,9 @@

package com.android.internal.telephony.uicc;

import static android.telephony.TelephonyManager.UNINITIALIZED_CARD_ID;
import static android.telephony.TelephonyManager.UNSUPPORTED_CARD_ID;

import android.content.Context;
import android.content.Intent;
import android.content.SharedPreferences;
@@ -128,6 +131,8 @@ public class UiccController extends Handler {
    // The array index is the card ID (int).
    // This mapping exists to expose card-based functionality without exposing the EID, which is
    // considered sensetive information.
    // mCardStrings is populated using values from the IccSlotStatus and IccCardStatus. For
    // HAL < 1.2, these do not contain the EID or the ICCID, so mCardStrings will be empty
    private ArrayList<String> mCardStrings;

    // This is the card ID of the default eUICC. It starts as UNINITIALIZED_CARD_ID.
@@ -213,7 +218,7 @@ public class UiccController extends Handler {

        mLauncher = new UiccStateChangedLauncher(c, this);
        mCardStrings = loadCardStrings();
        mDefaultEuiccCardId = TelephonyManager.UNINITIALIZED_CARD_ID;
        mDefaultEuiccCardId = UNINITIALIZED_CARD_ID;
    }

    private int getSlotIdFromPhoneId(int phoneId) {
@@ -555,7 +560,8 @@ public class UiccController extends Handler {

        if (eidIsNotSupported(status)) {
            // we will never get EID from the HAL, so set mDefaultEuiccCardId to UNSUPPORTED_CARD_ID
            mDefaultEuiccCardId = TelephonyManager.UNSUPPORTED_CARD_ID;
            if (DBG) log("eid is not supported");
            mDefaultEuiccCardId = UNSUPPORTED_CARD_ID;
        }
        mPhoneIdToSlotId[index] = slotId;

@@ -589,7 +595,7 @@ public class UiccController extends Handler {
        // EID may be unpopulated if RadioConfig<1.2
        // If so, just register for EID loaded and skip this stuff
        if (isEuicc && cardString == null
                && mDefaultEuiccCardId != TelephonyManager.UNSUPPORTED_CARD_ID) {
                && mDefaultEuiccCardId != UNSUPPORTED_CARD_ID) {
            ((EuiccCard) card).registerForEidReady(this, EVENT_EID_READY, index);
        }

@@ -633,18 +639,24 @@ public class UiccController extends Handler {
     * to match to a card ID.
     *
     * @return the matching cardId, or UNINITIALIZED_CARD_ID if the card string does not map to a
     * currently loaded cardId
     * currently loaded cardId, or UNSUPPORTED_CARD_ID if the device does not support card IDs
     */
    public int convertToPublicCardId(String cardString) {
        if (mDefaultEuiccCardId == UNSUPPORTED_CARD_ID) {
            // even if cardString is not an EID, if EID is not supported (e.g. HAL < 1.2) we can't
            // guarentee a working card ID implementation, so return UNSUPPORTED_CARD_ID
            return UNSUPPORTED_CARD_ID;
        }
        if (TextUtils.isEmpty(cardString)) {
            return TelephonyManager.UNINITIALIZED_CARD_ID;
            return UNINITIALIZED_CARD_ID;
        }

        if (cardString.length() < EID_LENGTH) {
            cardString = IccUtils.stripTrailingFs(cardString);
        }
        int id = mCardStrings.indexOf(cardString);
        if (id == -1) {
            return TelephonyManager.UNINITIALIZED_CARD_ID;
            return UNINITIALIZED_CARD_ID;
        } else {
            return id;
        }
@@ -913,7 +925,7 @@ public class UiccController extends Handler {
        // set mCardStrings and the defaultEuiccCardId using the now available EID
        String eid = ((EuiccCard) card).getEid();
        addCardId(eid);
        if (mDefaultEuiccCardId == TelephonyManager.UNINITIALIZED_CARD_ID) {
        if (mDefaultEuiccCardId == UNINITIALIZED_CARD_ID) {
            // TODO(b/122738148) the default eUICC should not be removable
            mDefaultEuiccCardId = convertToPublicCardId(eid);
            log("onEidReady: eid=" + eid + " slot=" + slotId + " mDefaultEuiccCardId="
+5 −2
Original line number Diff line number Diff line
@@ -109,8 +109,9 @@ public class UiccControllerTest extends TelephonyTest {
                mIccCardStatus.mImsSubscriptionAppIndex =
                        mIccCardStatus.mGsmUmtsSubscriptionAppIndex = -1;
        mSimulatedCommands.setIccCardStatus(mIccCardStatus);
        // slotIndex should be invalid when testing with older versions (before 1.2) of hal
        mIccCardStatus.physicalSlotIndex = UiccController.INVALID_SLOT_ID;
        // for testing we pretend slotIndex is set. In reality it would be invalid on older versions
        // (before 1.2) of hal
        mIccCardStatus.physicalSlotIndex = 0;
        mUiccControllerHandlerThread = new UiccControllerHandlerThread(TAG);
        mUiccControllerHandlerThread.start();
        waitUntilReady();
@@ -235,6 +236,7 @@ public class UiccControllerTest extends TelephonyTest {
        ics.atr = "abcdef0123456789abcdef";
        ics.iccid = "123451234567890";
        ics.eid = "A1B2C3D4";
        ics.physicalSlotIndex = 0;
        AsyncResult ar = new AsyncResult(null, ics, null);
        Message msg = Message.obtain(mUiccControllerUT, EVENT_GET_ICC_STATUS_DONE, ar);
        mUiccControllerUT.handleMessage(msg);
@@ -323,6 +325,7 @@ public class UiccControllerTest extends TelephonyTest {
        ics.setUniversalPinState(3 /* disabled */);
        ics.atr = "abcdef0123456789abcdef";
        ics.iccid = "123451234567890";
        ics.physicalSlotIndex = 0;
        AsyncResult ar = new AsyncResult(null, ics, null);
        Message msg = Message.obtain(mUiccControllerUT, EVENT_GET_ICC_STATUS_DONE, ar);
        mUiccControllerUT.handleMessage(msg);