From d0b187b204ec7d48b52bb7a63a3fb2ef140533f6 Mon Sep 17 00:00:00 2001 From: Holly Jiuyu Sun Date: Wed, 30 Jan 2019 15:25:24 -0800 Subject: [PATCH] Refresh cardId before using it. Bug: 122978614 Bug: 111614811 Test: on phone Change-Id: I30d70b839f05183ad201a114ea12c79c730f4206 Merged-In: I30d70b839f05183ad201a114ea12c79c730f4206 --- .../java/android/telephony/euicc/EuiccManager.java | 50 ++++++++++++++-------- 1 file changed, 31 insertions(+), 19 deletions(-) diff --git a/telephony/java/android/telephony/euicc/EuiccManager.java b/telephony/java/android/telephony/euicc/EuiccManager.java index a5c0442948ac..ce880b9c02a3 100644 --- a/telephony/java/android/telephony/euicc/EuiccManager.java +++ b/telephony/java/android/telephony/euicc/EuiccManager.java @@ -253,7 +253,7 @@ public class EuiccManager { public static final int EUICC_OTA_STATUS_UNAVAILABLE = 5; private final Context mContext; - private final int mCardId; + private int mCardId; /** @hide */ public EuiccManager(Context context) { @@ -291,7 +291,7 @@ public class EuiccManager { public boolean isEnabled() { // In the future, this may reach out to IEuiccController (if non-null) to check any dynamic // restrictions. - return getIEuiccController() != null && mCardId != TelephonyManager.INVALID_CARD_ID; + return getIEuiccController() != null; } /** @@ -301,11 +301,11 @@ public class EuiccManager { * current eUICC. A calling app with carrier privileges for one eUICC may not necessarily have * access to the EID of another eUICC. * - * @return the EID. May be null if {@link #isEnabled()} is false or the eUICC is not ready. + * @return the EID. May be null if the eUICC is not ready. */ @Nullable public String getEid() { - if (!isEnabled()) { + if (!refreshCardIdIfInvalid()) { return null; } try { @@ -320,15 +320,15 @@ public class EuiccManager { * *

Requires the {@link android.Manifest.permission#WRITE_EMBEDDED_SUBSCRIPTIONS} permission. * - * @return the status of eUICC OTA. If {@link #isEnabled()} is false or the eUICC is not ready, - * {@link OtaStatus#EUICC_OTA_STATUS_UNAVAILABLE} will be returned. + * @return the status of eUICC OTA. If the eUICC is not ready, + * {@link OtaStatus#EUICC_OTA_STATUS_UNAVAILABLE} will be returned. * * @hide */ @SystemApi @RequiresPermission(Manifest.permission.WRITE_EMBEDDED_SUBSCRIPTIONS) public int getOtaStatus() { - if (!isEnabled()) { + if (!refreshCardIdIfInvalid()) { return EUICC_OTA_STATUS_UNAVAILABLE; } try { @@ -354,7 +354,7 @@ public class EuiccManager { @RequiresPermission(Manifest.permission.WRITE_EMBEDDED_SUBSCRIPTIONS) public void downloadSubscription(DownloadableSubscription subscription, boolean switchAfterDownload, PendingIntent callbackIntent) { - if (!isEnabled()) { + if (!refreshCardIdIfInvalid()) { sendUnavailableError(callbackIntent); return; } @@ -416,7 +416,7 @@ public class EuiccManager { @SystemApi @RequiresPermission(Manifest.permission.WRITE_EMBEDDED_SUBSCRIPTIONS) public void continueOperation(Intent resolutionIntent, Bundle resolutionExtras) { - if (!isEnabled()) { + if (!refreshCardIdIfInvalid()) { PendingIntent callbackIntent = resolutionIntent.getParcelableExtra( EuiccManager.EXTRA_EMBEDDED_SUBSCRIPTION_RESOLUTION_CALLBACK_INTENT); @@ -453,7 +453,7 @@ public class EuiccManager { @RequiresPermission(Manifest.permission.WRITE_EMBEDDED_SUBSCRIPTIONS) public void getDownloadableSubscriptionMetadata( DownloadableSubscription subscription, PendingIntent callbackIntent) { - if (!isEnabled()) { + if (!refreshCardIdIfInvalid()) { sendUnavailableError(callbackIntent); return; } @@ -483,7 +483,7 @@ public class EuiccManager { @SystemApi @RequiresPermission(Manifest.permission.WRITE_EMBEDDED_SUBSCRIPTIONS) public void getDefaultDownloadableSubscriptionList(PendingIntent callbackIntent) { - if (!isEnabled()) { + if (!refreshCardIdIfInvalid()) { sendUnavailableError(callbackIntent); return; } @@ -498,12 +498,11 @@ public class EuiccManager { /** * Returns information about the eUICC chip/device. * - * @return the {@link EuiccInfo}. May be null if {@link #isEnabled()} is false or the eUICC is - * not ready. + * @return the {@link EuiccInfo}. May be null if the eUICC is not ready. */ @Nullable public EuiccInfo getEuiccInfo() { - if (!isEnabled()) { + if (!refreshCardIdIfInvalid()) { return null; } try { @@ -528,7 +527,7 @@ public class EuiccManager { */ @RequiresPermission(Manifest.permission.WRITE_EMBEDDED_SUBSCRIPTIONS) public void deleteSubscription(int subscriptionId, PendingIntent callbackIntent) { - if (!isEnabled()) { + if (!refreshCardIdIfInvalid()) { sendUnavailableError(callbackIntent); return; } @@ -556,7 +555,7 @@ public class EuiccManager { */ @RequiresPermission(Manifest.permission.WRITE_EMBEDDED_SUBSCRIPTIONS) public void switchToSubscription(int subscriptionId, PendingIntent callbackIntent) { - if (!isEnabled()) { + if (!refreshCardIdIfInvalid()) { sendUnavailableError(callbackIntent); return; } @@ -582,7 +581,7 @@ public class EuiccManager { @RequiresPermission(Manifest.permission.WRITE_EMBEDDED_SUBSCRIPTIONS) public void updateSubscriptionNickname( int subscriptionId, String nickname, PendingIntent callbackIntent) { - if (!isEnabled()) { + if (!refreshCardIdIfInvalid()) { sendUnavailableError(callbackIntent); return; } @@ -606,7 +605,7 @@ public class EuiccManager { @SystemApi @RequiresPermission(Manifest.permission.WRITE_EMBEDDED_SUBSCRIPTIONS) public void eraseSubscriptions(PendingIntent callbackIntent) { - if (!isEnabled()) { + if (!refreshCardIdIfInvalid()) { sendUnavailableError(callbackIntent); return; } @@ -636,7 +635,7 @@ public class EuiccManager { * @hide */ public void retainSubscriptionsForFactoryReset(PendingIntent callbackIntent) { - if (!isEnabled()) { + if (!refreshCardIdIfInvalid()) { sendUnavailableError(callbackIntent); return; } @@ -647,6 +646,19 @@ public class EuiccManager { } } + private boolean refreshCardIdIfInvalid() { + if (!isEnabled()) { + return false; + } + // Refresh mCardId if it's invalid. + if (mCardId == TelephonyManager.INVALID_CARD_ID) { + TelephonyManager tm = (TelephonyManager) + mContext.getSystemService(Context.TELEPHONY_SERVICE); + mCardId = tm.getCardIdForDefaultEuicc(); + } + return true; + } + private static void sendUnavailableError(PendingIntent callbackIntent) { try { callbackIntent.send(EMBEDDED_SUBSCRIPTION_RESULT_ERROR); -- 2.11.0