Loading src/java/com/android/internal/telephony/SubscriptionController.java +29 −3 Original line number Diff line number Diff line Loading @@ -46,6 +46,8 @@ import android.util.Log; import com.android.internal.annotations.VisibleForTesting; import com.android.internal.telephony.IccCardConstants.State; import com.android.internal.telephony.uicc.IccUtils; import com.android.internal.telephony.uicc.UiccCard; import com.android.internal.telephony.uicc.UiccController; import java.io.FileDescriptor; import java.io.PrintWriter; Loading Loading @@ -317,6 +319,8 @@ public class SubscriptionController extends ISub.Stub { SubscriptionManager.MCC)); int mnc = cursor.getInt(cursor.getColumnIndexOrThrow( SubscriptionManager.MNC)); String cardId = cursor.getString(cursor.getColumnIndexOrThrow( SubscriptionManager.CARD_ID)); // FIXME: consider stick this into database too String countryIso = getSubscriptionCountryIso(id); boolean isEmbedded = cursor.getInt(cursor.getColumnIndexOrThrow( Loading @@ -331,11 +335,13 @@ public class SubscriptionController extends ISub.Stub { if (VDBG) { String iccIdToPrint = SubscriptionInfo.givePrintableIccid(iccId); String cardIdToPrint = SubscriptionInfo.givePrintableIccid(cardId); logd("[getSubInfoRecord] id:" + id + " iccid:" + iccIdToPrint + " simSlotIndex:" + simSlotIndex + " displayName:" + displayName + " nameSource:" + nameSource + " iconTint:" + iconTint + " dataRoaming:" + dataRoaming + " mcc:" + mcc + " mnc:" + mnc + " countIso:" + countryIso + " isEmbedded:" + isEmbedded + " accessRules:" + Arrays.toString(accessRules)); + isEmbedded + " accessRules:" + Arrays.toString(accessRules) + " cardId:" + cardIdToPrint); } // If line1number has been set to a different number, use it instead. Loading @@ -345,7 +351,7 @@ public class SubscriptionController extends ISub.Stub { } return new SubscriptionInfo(id, iccId, simSlotIndex, displayName, carrierName, nameSource, iconTint, number, dataRoaming, iconBitmap, mcc, mnc, countryIso, isEmbedded, accessRules); isEmbedded, accessRules, cardId); } /** Loading Loading @@ -911,7 +917,7 @@ public class SubscriptionController extends ISub.Stub { Cursor cursor = resolver.query(SubscriptionManager.CONTENT_URI, new String[]{SubscriptionManager.UNIQUE_KEY_SUBSCRIPTION_ID, SubscriptionManager.SIM_SLOT_INDEX, SubscriptionManager.NAME_SOURCE, SubscriptionManager.ICC_ID}, SubscriptionManager.ICC_ID, SubscriptionManager.CARD_ID}, SubscriptionManager.ICC_ID + "=?" + " OR " + SubscriptionManager.ICC_ID + "=?", new String[]{iccId, IccUtils.getDecimalSubstring(iccId)}, null); Loading @@ -926,6 +932,7 @@ public class SubscriptionController extends ISub.Stub { int oldSimInfoId = cursor.getInt(1); int nameSource = cursor.getInt(2); String oldIccId = cursor.getString(3); String oldCardId = cursor.getString(4); ContentValues value = new ContentValues(); if (slotIndex != oldSimInfoId) { Loading @@ -941,6 +948,14 @@ public class SubscriptionController extends ISub.Stub { value.put(SubscriptionManager.ICC_ID, iccId); } UiccCard card = UiccController.getInstance().getUiccCardForPhone(slotIndex); if (card != null) { String cardId = card.getCardId(); if (cardId != null && cardId != oldCardId) { value.put(SubscriptionManager.CARD_ID, cardId); } } if (value.size() > 0) { resolver.update(SubscriptionManager.CONTENT_URI, value, SubscriptionManager.UNIQUE_KEY_SUBSCRIPTION_ID + Loading Loading @@ -1076,6 +1091,17 @@ public class SubscriptionController extends ISub.Stub { value.put(SubscriptionManager.COLOR, color); value.put(SubscriptionManager.SIM_SLOT_INDEX, slotIndex); value.put(SubscriptionManager.CARRIER_NAME, ""); UiccCard card = UiccController.getInstance().getUiccCardForPhone(slotIndex); if (card != null) { String cardId = card.getCardId(); if (cardId != null) { value.put(SubscriptionManager.CARD_ID, cardId); } else { value.put(SubscriptionManager.CARD_ID, iccId); } } else { value.put(SubscriptionManager.CARD_ID, iccId); } Uri uri = resolver.insert(SubscriptionManager.CONTENT_URI, value); Loading src/java/com/android/internal/telephony/uicc/UiccCard.java +29 −0 Original line number Diff line number Diff line Loading @@ -51,6 +51,7 @@ public class UiccCard { private final Object mLock = new Object(); private CardState mCardState; private String mIccid; protected String mCardId; private UiccProfile mUiccProfile; private Context mContext; private CommandsInterface mCi; Loading Loading @@ -81,6 +82,8 @@ public class UiccCard { mContext = c; mCi = ci; mIccid = ics.iccid; updateCardId(); if (mCardState != CardState.CARDSTATE_ABSENT) { if (mUiccProfile == null) { Loading @@ -99,6 +102,18 @@ public class UiccCard { if (DBG) log("UiccCard finalized"); } /** * Updates the ID of the SIM card. * * <p>Whenever the {@link UiccCard#update(Context, CommandsInterface, IccCardStatus)} is called, * this function needs to be called to update the card ID. Subclasses of {@link UiccCard} * could override this function to set the {@link UiccCard#mCardId} to be something else instead * of {@link UiccCard#mIccid}.</p> */ protected void updateCardId() { mCardId = mIccid; } /** * Notifies handler when carrier privilege rules are loaded. * @deprecated Please use Loading Loading @@ -465,6 +480,20 @@ public class UiccCard { } } /** * Returns the ID of this SIM card, it is the ICCID of the active profile on the card for a UICC * card or the EID of the card for an eUICC card. */ public String getCardId() { if (mCardId != null) { return mCardId; } else if (mUiccProfile != null) { return mUiccProfile.getIccId(); } else { return null; } } private void log(String msg) { Rlog.d(LOG_TAG, msg); } Loading tests/telephonytests/src/com/android/internal/telephony/SubscriptionControllerTest.java +2 −1 Original line number Diff line number Diff line Loading @@ -76,7 +76,8 @@ public class SubscriptionControllerTest extends TelephonyTest { SubscriptionManager.ACCESS_RULES, SubscriptionManager.ENHANCED_4G_MODE_ENABLED, SubscriptionManager.VT_IMS_ENABLED, SubscriptionManager.WFC_IMS_ENABLED, SubscriptionManager.WFC_IMS_MODE, SubscriptionManager.WFC_IMS_ROAMING_MODE, SubscriptionManager.WFC_IMS_ROAMING_ENABLED}; SubscriptionManager.WFC_IMS_ROAMING_ENABLED, SubscriptionManager.CARD_ID}; /* internal util function */ private MatrixCursor convertFromContentToCursor(ContentValues initialValues, Loading Loading
src/java/com/android/internal/telephony/SubscriptionController.java +29 −3 Original line number Diff line number Diff line Loading @@ -46,6 +46,8 @@ import android.util.Log; import com.android.internal.annotations.VisibleForTesting; import com.android.internal.telephony.IccCardConstants.State; import com.android.internal.telephony.uicc.IccUtils; import com.android.internal.telephony.uicc.UiccCard; import com.android.internal.telephony.uicc.UiccController; import java.io.FileDescriptor; import java.io.PrintWriter; Loading Loading @@ -317,6 +319,8 @@ public class SubscriptionController extends ISub.Stub { SubscriptionManager.MCC)); int mnc = cursor.getInt(cursor.getColumnIndexOrThrow( SubscriptionManager.MNC)); String cardId = cursor.getString(cursor.getColumnIndexOrThrow( SubscriptionManager.CARD_ID)); // FIXME: consider stick this into database too String countryIso = getSubscriptionCountryIso(id); boolean isEmbedded = cursor.getInt(cursor.getColumnIndexOrThrow( Loading @@ -331,11 +335,13 @@ public class SubscriptionController extends ISub.Stub { if (VDBG) { String iccIdToPrint = SubscriptionInfo.givePrintableIccid(iccId); String cardIdToPrint = SubscriptionInfo.givePrintableIccid(cardId); logd("[getSubInfoRecord] id:" + id + " iccid:" + iccIdToPrint + " simSlotIndex:" + simSlotIndex + " displayName:" + displayName + " nameSource:" + nameSource + " iconTint:" + iconTint + " dataRoaming:" + dataRoaming + " mcc:" + mcc + " mnc:" + mnc + " countIso:" + countryIso + " isEmbedded:" + isEmbedded + " accessRules:" + Arrays.toString(accessRules)); + isEmbedded + " accessRules:" + Arrays.toString(accessRules) + " cardId:" + cardIdToPrint); } // If line1number has been set to a different number, use it instead. Loading @@ -345,7 +351,7 @@ public class SubscriptionController extends ISub.Stub { } return new SubscriptionInfo(id, iccId, simSlotIndex, displayName, carrierName, nameSource, iconTint, number, dataRoaming, iconBitmap, mcc, mnc, countryIso, isEmbedded, accessRules); isEmbedded, accessRules, cardId); } /** Loading Loading @@ -911,7 +917,7 @@ public class SubscriptionController extends ISub.Stub { Cursor cursor = resolver.query(SubscriptionManager.CONTENT_URI, new String[]{SubscriptionManager.UNIQUE_KEY_SUBSCRIPTION_ID, SubscriptionManager.SIM_SLOT_INDEX, SubscriptionManager.NAME_SOURCE, SubscriptionManager.ICC_ID}, SubscriptionManager.ICC_ID, SubscriptionManager.CARD_ID}, SubscriptionManager.ICC_ID + "=?" + " OR " + SubscriptionManager.ICC_ID + "=?", new String[]{iccId, IccUtils.getDecimalSubstring(iccId)}, null); Loading @@ -926,6 +932,7 @@ public class SubscriptionController extends ISub.Stub { int oldSimInfoId = cursor.getInt(1); int nameSource = cursor.getInt(2); String oldIccId = cursor.getString(3); String oldCardId = cursor.getString(4); ContentValues value = new ContentValues(); if (slotIndex != oldSimInfoId) { Loading @@ -941,6 +948,14 @@ public class SubscriptionController extends ISub.Stub { value.put(SubscriptionManager.ICC_ID, iccId); } UiccCard card = UiccController.getInstance().getUiccCardForPhone(slotIndex); if (card != null) { String cardId = card.getCardId(); if (cardId != null && cardId != oldCardId) { value.put(SubscriptionManager.CARD_ID, cardId); } } if (value.size() > 0) { resolver.update(SubscriptionManager.CONTENT_URI, value, SubscriptionManager.UNIQUE_KEY_SUBSCRIPTION_ID + Loading Loading @@ -1076,6 +1091,17 @@ public class SubscriptionController extends ISub.Stub { value.put(SubscriptionManager.COLOR, color); value.put(SubscriptionManager.SIM_SLOT_INDEX, slotIndex); value.put(SubscriptionManager.CARRIER_NAME, ""); UiccCard card = UiccController.getInstance().getUiccCardForPhone(slotIndex); if (card != null) { String cardId = card.getCardId(); if (cardId != null) { value.put(SubscriptionManager.CARD_ID, cardId); } else { value.put(SubscriptionManager.CARD_ID, iccId); } } else { value.put(SubscriptionManager.CARD_ID, iccId); } Uri uri = resolver.insert(SubscriptionManager.CONTENT_URI, value); Loading
src/java/com/android/internal/telephony/uicc/UiccCard.java +29 −0 Original line number Diff line number Diff line Loading @@ -51,6 +51,7 @@ public class UiccCard { private final Object mLock = new Object(); private CardState mCardState; private String mIccid; protected String mCardId; private UiccProfile mUiccProfile; private Context mContext; private CommandsInterface mCi; Loading Loading @@ -81,6 +82,8 @@ public class UiccCard { mContext = c; mCi = ci; mIccid = ics.iccid; updateCardId(); if (mCardState != CardState.CARDSTATE_ABSENT) { if (mUiccProfile == null) { Loading @@ -99,6 +102,18 @@ public class UiccCard { if (DBG) log("UiccCard finalized"); } /** * Updates the ID of the SIM card. * * <p>Whenever the {@link UiccCard#update(Context, CommandsInterface, IccCardStatus)} is called, * this function needs to be called to update the card ID. Subclasses of {@link UiccCard} * could override this function to set the {@link UiccCard#mCardId} to be something else instead * of {@link UiccCard#mIccid}.</p> */ protected void updateCardId() { mCardId = mIccid; } /** * Notifies handler when carrier privilege rules are loaded. * @deprecated Please use Loading Loading @@ -465,6 +480,20 @@ public class UiccCard { } } /** * Returns the ID of this SIM card, it is the ICCID of the active profile on the card for a UICC * card or the EID of the card for an eUICC card. */ public String getCardId() { if (mCardId != null) { return mCardId; } else if (mUiccProfile != null) { return mUiccProfile.getIccId(); } else { return null; } } private void log(String msg) { Rlog.d(LOG_TAG, msg); } Loading
tests/telephonytests/src/com/android/internal/telephony/SubscriptionControllerTest.java +2 −1 Original line number Diff line number Diff line Loading @@ -76,7 +76,8 @@ public class SubscriptionControllerTest extends TelephonyTest { SubscriptionManager.ACCESS_RULES, SubscriptionManager.ENHANCED_4G_MODE_ENABLED, SubscriptionManager.VT_IMS_ENABLED, SubscriptionManager.WFC_IMS_ENABLED, SubscriptionManager.WFC_IMS_MODE, SubscriptionManager.WFC_IMS_ROAMING_MODE, SubscriptionManager.WFC_IMS_ROAMING_ENABLED}; SubscriptionManager.WFC_IMS_ROAMING_ENABLED, SubscriptionManager.CARD_ID}; /* internal util function */ private MatrixCursor convertFromContentToCursor(ContentValues initialValues, Loading