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

Commit d0b187b2 authored by Holly Jiuyu Sun's avatar Holly Jiuyu Sun Committed by Jordan Liu
Browse files

Refresh cardId before using it.

Bug: 122978614
Bug: 111614811
Test: on phone
Change-Id: I30d70b839f05183ad201a114ea12c79c730f4206
Merged-In: I30d70b839f05183ad201a114ea12c79c730f4206
parent 0296decc
Loading
Loading
Loading
Loading
+31 −19
Original line number Diff line number Diff line
@@ -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,7 +320,7 @@ public class EuiccManager {
     *
     * <p>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,
     * @return the status of eUICC OTA. If the eUICC is not ready,
     *         {@link OtaStatus#EUICC_OTA_STATUS_UNAVAILABLE} will be returned.
     *
     * @hide
@@ -328,7 +328,7 @@ public class EuiccManager {
    @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);