Loading src/java/com/android/internal/telephony/uicc/UiccController.java +19 −7 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -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. Loading Loading @@ -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) { Loading Loading @@ -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; Loading Loading @@ -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); } Loading Loading @@ -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; } Loading Loading @@ -916,7 +928,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=" Loading tests/telephonytests/src/com/android/internal/telephony/uicc/UiccControllerTest.java +5 −2 Original line number Diff line number Diff line Loading @@ -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(); Loading Loading @@ -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); Loading Loading @@ -325,6 +327,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); Loading Loading
src/java/com/android/internal/telephony/uicc/UiccController.java +19 −7 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -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. Loading Loading @@ -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) { Loading Loading @@ -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; Loading Loading @@ -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); } Loading Loading @@ -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; } Loading Loading @@ -916,7 +928,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=" Loading
tests/telephonytests/src/com/android/internal/telephony/uicc/UiccControllerTest.java +5 −2 Original line number Diff line number Diff line Loading @@ -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(); Loading Loading @@ -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); Loading Loading @@ -325,6 +327,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); Loading