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

Commit e15e9162 authored by Sarah Chin's avatar Sarah Chin Committed by Automerger Merge Worker
Browse files

Merge changes from topic "pendingIntent-switchToSub" am: 49f79010 am: 143ed3c3

parents 00814795 143ed3c3
Loading
Loading
Loading
Loading
+1 −5
Original line number Original line Diff line number Diff line
@@ -42284,7 +42284,7 @@ package android.telephony.euicc {
    method public boolean isSimPortAvailable(int);
    method public boolean isSimPortAvailable(int);
    method public void startResolutionActivity(android.app.Activity, int, android.content.Intent, android.app.PendingIntent) throws android.content.IntentSender.SendIntentException;
    method public void startResolutionActivity(android.app.Activity, int, android.content.Intent, android.app.PendingIntent) throws android.content.IntentSender.SendIntentException;
    method @Deprecated @RequiresPermission("android.permission.WRITE_EMBEDDED_SUBSCRIPTIONS") public void switchToSubscription(int, android.app.PendingIntent);
    method @Deprecated @RequiresPermission("android.permission.WRITE_EMBEDDED_SUBSCRIPTIONS") public void switchToSubscription(int, android.app.PendingIntent);
    method @RequiresPermission("android.permission.WRITE_EMBEDDED_SUBSCRIPTIONS") public void switchToSubscription(int, int, @NonNull java.util.concurrent.Executor, @NonNull android.telephony.euicc.EuiccManager.ResultListener);
    method @RequiresPermission("android.permission.WRITE_EMBEDDED_SUBSCRIPTIONS") public void switchToSubscription(int, int, @NonNull android.app.PendingIntent);
    method @RequiresPermission("android.permission.WRITE_EMBEDDED_SUBSCRIPTIONS") public void updateSubscriptionNickname(int, @Nullable String, @NonNull android.app.PendingIntent);
    method @RequiresPermission("android.permission.WRITE_EMBEDDED_SUBSCRIPTIONS") public void updateSubscriptionNickname(int, @Nullable String, @NonNull android.app.PendingIntent);
    field public static final String ACTION_MANAGE_EMBEDDED_SUBSCRIPTIONS = "android.telephony.euicc.action.MANAGE_EMBEDDED_SUBSCRIPTIONS";
    field public static final String ACTION_MANAGE_EMBEDDED_SUBSCRIPTIONS = "android.telephony.euicc.action.MANAGE_EMBEDDED_SUBSCRIPTIONS";
    field public static final String ACTION_NOTIFY_CARRIER_SETUP_INCOMPLETE = "android.telephony.euicc.action.NOTIFY_CARRIER_SETUP_INCOMPLETE";
    field public static final String ACTION_NOTIFY_CARRIER_SETUP_INCOMPLETE = "android.telephony.euicc.action.NOTIFY_CARRIER_SETUP_INCOMPLETE";
@@ -42330,10 +42330,6 @@ package android.telephony.euicc {
    field public static final int OPERATION_SYSTEM = 1; // 0x1
    field public static final int OPERATION_SYSTEM = 1; // 0x1
  }
  }
  public static interface EuiccManager.ResultListener {
    method public void onComplete(int, @Nullable android.content.Intent);
  }
}
}
package android.telephony.gsm {
package android.telephony.gsm {
+1 −0
Original line number Original line Diff line number Diff line
@@ -9665,6 +9665,7 @@ package android.service.euicc {
    field public static final String EXTRA_RESOLUTION_CONFIRMATION_CODE_RETRIED = "android.service.euicc.extra.RESOLUTION_CONFIRMATION_CODE_RETRIED";
    field public static final String EXTRA_RESOLUTION_CONFIRMATION_CODE_RETRIED = "android.service.euicc.extra.RESOLUTION_CONFIRMATION_CODE_RETRIED";
    field public static final String EXTRA_RESOLUTION_CONSENT = "android.service.euicc.extra.RESOLUTION_CONSENT";
    field public static final String EXTRA_RESOLUTION_CONSENT = "android.service.euicc.extra.RESOLUTION_CONSENT";
    field public static final String EXTRA_RESOLUTION_PORT_INDEX = "android.service.euicc.extra.RESOLUTION_PORT_INDEX";
    field public static final String EXTRA_RESOLUTION_PORT_INDEX = "android.service.euicc.extra.RESOLUTION_PORT_INDEX";
    field public static final String EXTRA_RESOLUTION_USE_PORT_INDEX = "android.service.euicc.extra.RESOLUTION_USE_PORT_INDEX";
    field public static final String EXTRA_RESOLVABLE_ERRORS = "android.service.euicc.extra.RESOLVABLE_ERRORS";
    field public static final String EXTRA_RESOLVABLE_ERRORS = "android.service.euicc.extra.RESOLVABLE_ERRORS";
    field public static final int RESOLVABLE_ERROR_CONFIRMATION_CODE = 1; // 0x1
    field public static final int RESOLVABLE_ERROR_CONFIRMATION_CODE = 1; // 0x1
    field public static final int RESOLVABLE_ERROR_POLICY_RULES = 2; // 0x2
    field public static final int RESOLVABLE_ERROR_POLICY_RULES = 2; // 0x2
+19 −5
Original line number Original line Diff line number Diff line
@@ -23,6 +23,7 @@ import android.annotation.NonNull;
import android.annotation.Nullable;
import android.annotation.Nullable;
import android.annotation.SdkConstant;
import android.annotation.SdkConstant;
import android.annotation.SystemApi;
import android.annotation.SystemApi;
import android.app.PendingIntent;
import android.app.Service;
import android.app.Service;
import android.content.Intent;
import android.content.Intent;
import android.os.Bundle;
import android.os.Bundle;
@@ -261,6 +262,14 @@ public abstract class EuiccService extends Service {
    public static final String EXTRA_RESOLUTION_PORT_INDEX =
    public static final String EXTRA_RESOLUTION_PORT_INDEX =
            "android.service.euicc.extra.RESOLUTION_PORT_INDEX";
            "android.service.euicc.extra.RESOLUTION_PORT_INDEX";


    /**
     * Intent extra set for resolution requests containing a bool indicating whether to use the
     * given port index. For example, if {@link #switchToSubscription(int, PendingIntent)} is
     * called, then no portIndex has been provided by the caller, and this extra will be false.
     */
    public static final String EXTRA_RESOLUTION_USE_PORT_INDEX =
            "android.service.euicc.extra.RESOLUTION_USE_PORT_INDEX";

    /** @hide */
    /** @hide */
    @Retention(RetentionPolicy.SOURCE)
    @Retention(RetentionPolicy.SOURCE)
    @IntDef(prefix = { "RESULT_" }, value = {
    @IntDef(prefix = { "RESULT_" }, value = {
@@ -852,14 +861,19 @@ public abstract class EuiccService extends Service {
        }
        }
        @Override
        @Override
        public void switchToSubscription(int slotId, int portIndex, String iccid,
        public void switchToSubscription(int slotId, int portIndex, String iccid,
                boolean forceDeactivateSim, ISwitchToSubscriptionCallback callback) {
                boolean forceDeactivateSim, ISwitchToSubscriptionCallback callback,
                boolean usePortIndex) {
            mExecutor.execute(new Runnable() {
            mExecutor.execute(new Runnable() {
                @Override
                @Override
                public void run() {
                public void run() {
                    // TODO(b/207392528: use portIndex API once implemented)
                    int result = 0;
                    int result =
                    if (usePortIndex) {
                            EuiccService.this.onSwitchToSubscription(
                        result = EuiccService.this.onSwitchToSubscriptionWithPort(
                                slotId, portIndex, iccid, forceDeactivateSim);
                    } else {
                        result = EuiccService.this.onSwitchToSubscription(
                                slotId, iccid, forceDeactivateSim);
                                slotId, iccid, forceDeactivateSim);
                    }
                    try {
                    try {
                        callback.onComplete(result);
                        callback.onComplete(result);
                    } catch (RemoteException e) {
                    } catch (RemoteException e) {
+1 −1
Original line number Original line Diff line number Diff line
@@ -49,7 +49,7 @@ oneway interface IEuiccService {
    void getEuiccInfo(int slotId, in IGetEuiccInfoCallback callback);
    void getEuiccInfo(int slotId, in IGetEuiccInfoCallback callback);
    void deleteSubscription(int slotId, String iccid, in IDeleteSubscriptionCallback callback);
    void deleteSubscription(int slotId, String iccid, in IDeleteSubscriptionCallback callback);
    void switchToSubscription(int slotId, int portIndex, String iccid, boolean forceDeactivateSim,
    void switchToSubscription(int slotId, int portIndex, String iccid, boolean forceDeactivateSim,
            in ISwitchToSubscriptionCallback callback);
            in ISwitchToSubscriptionCallback callback, boolean useLegacyApi);
    void updateSubscriptionNickname(int slotId, String iccid, String nickname,
    void updateSubscriptionNickname(int slotId, String iccid, String nickname,
            in IUpdateSubscriptionNicknameCallback callback);
            in IUpdateSubscriptionNicknameCallback callback);
    void eraseSubscriptions(int slotId, in IEraseSubscriptionsCallback callback);
    void eraseSubscriptions(int slotId, in IEraseSubscriptionsCallback callback);
+6 −54
Original line number Original line Diff line number Diff line
@@ -16,7 +16,6 @@
package android.telephony.euicc;
package android.telephony.euicc;


import android.Manifest;
import android.Manifest;
import android.annotation.CallbackExecutor;
import android.annotation.IntDef;
import android.annotation.IntDef;
import android.annotation.NonNull;
import android.annotation.NonNull;
import android.annotation.Nullable;
import android.annotation.Nullable;
@@ -29,7 +28,6 @@ import android.content.Context;
import android.content.Intent;
import android.content.Intent;
import android.content.IntentSender;
import android.content.IntentSender;
import android.content.pm.PackageManager;
import android.content.pm.PackageManager;
import android.os.Binder;
import android.os.Bundle;
import android.os.Bundle;
import android.os.RemoteException;
import android.os.RemoteException;
import android.telephony.TelephonyFrameworkInitializer;
import android.telephony.TelephonyFrameworkInitializer;
@@ -37,13 +35,11 @@ import android.telephony.TelephonyManager;
import android.telephony.euicc.EuiccCardManager.ResetOption;
import android.telephony.euicc.EuiccCardManager.ResetOption;


import com.android.internal.telephony.euicc.IEuiccController;
import com.android.internal.telephony.euicc.IEuiccController;
import com.android.internal.telephony.euicc.IResultCallback;


import java.lang.annotation.Retention;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.RetentionPolicy;
import java.util.Collections;
import java.util.Collections;
import java.util.List;
import java.util.List;
import java.util.concurrent.Executor;
import java.util.stream.Collectors;
import java.util.stream.Collectors;


/**
/**
@@ -218,20 +214,6 @@ public class EuiccManager {
    public static final String ACTION_START_EUICC_ACTIVATION =
    public static final String ACTION_START_EUICC_ACTIVATION =
            "android.telephony.euicc.action.START_EUICC_ACTIVATION";
            "android.telephony.euicc.action.START_EUICC_ACTIVATION";


    /**
     * Result codes passed to the ResultListener by
     * {@link #switchToSubscription(int, int, Executor, ResultListener)}
     *
     * @hide
     */
    @Retention(RetentionPolicy.SOURCE)
    @IntDef(prefix = {"EMBEDDED_SUBSCRIPTION_RESULT_"}, value = {
            EMBEDDED_SUBSCRIPTION_RESULT_OK,
            EMBEDDED_SUBSCRIPTION_RESULT_ERROR,
            EMBEDDED_SUBSCRIPTION_RESULT_RESOLVABLE_ERROR
    })
    public @interface ResultCode{}

    /**
    /**
     * Result code for an operation indicating that the operation succeeded.
     * Result code for an operation indicating that the operation succeeded.
     */
     */
@@ -1145,7 +1127,7 @@ public class EuiccManager {
     * @param callbackIntent a PendingIntent to launch when the operation completes.
     * @param callbackIntent a PendingIntent to launch when the operation completes.
     *
     *
     * @deprecated From T, callers should use
     * @deprecated From T, callers should use
     * {@link #switchToSubscription(int, int, Executor, ResultListener)} instead to specify a port
     * {@link #switchToSubscription(int, int, PendingIntent)} instead to specify a port
     * index on the card to switch to.
     * index on the card to switch to.
     */
     */
    @Deprecated
    @Deprecated
@@ -1188,46 +1170,23 @@ public class EuiccManager {
     *     permission, or the calling app must be authorized to manage the active subscription on
     *     permission, or the calling app must be authorized to manage the active subscription on
     *     the target eUICC.
     *     the target eUICC.
     * @param portIndex the index of the port to target for the enabled subscription
     * @param portIndex the index of the port to target for the enabled subscription
     * @param executor an Executor on which to run the callback
     * @param callbackIntent a PendingIntent to launch when the operation completes.
     * @param callback a {@link ResultListener} which will run when the operation completes
     */
     */
    @RequiresPermission(Manifest.permission.WRITE_EMBEDDED_SUBSCRIPTIONS)
    @RequiresPermission(Manifest.permission.WRITE_EMBEDDED_SUBSCRIPTIONS)
    public void switchToSubscription(int subscriptionId, int portIndex,
    public void switchToSubscription(int subscriptionId, int portIndex,
            @NonNull @CallbackExecutor Executor executor,
            @NonNull PendingIntent callbackIntent) {
            @NonNull ResultListener callback) {
        if (!isEnabled()) {
        if (!isEnabled()) {
            sendUnavailableErrorToCallback(executor, callback);
            sendUnavailableError(callbackIntent);
            return;
            return;
        }
        }
        try {
        try {
            IResultCallback internalCallback = new IResultCallback.Stub() {
            getIEuiccController().switchToSubscriptionWithPort(mCardId,
                @Override
                    subscriptionId, portIndex, mContext.getOpPackageName(), callbackIntent);
                public void onComplete(int result, Intent resultIntent) {
                    executor.execute(() -> Binder.withCleanCallingIdentity(
                            () -> callback.onComplete(result, resultIntent)));
                }
            };
            getIEuiccController().switchToSubscriptionWithPort(mCardId, portIndex,
                    subscriptionId, mContext.getOpPackageName(), internalCallback);
        } catch (RemoteException e) {
        } catch (RemoteException e) {
            throw e.rethrowFromSystemServer();
            throw e.rethrowFromSystemServer();
        }
        }
    }
    }


    /**
     * Callback to receive the result of an EuiccManager API.
     */
    public interface ResultListener {
        /**
         * Called on completion of some operation.
         * @param resultCode representing success or specific failure of the operation
         *                   (See {@link ResultCode})
         * @param resultIntent an intent used to start a resolution activity when an error
         *                     occurs that can be resolved by the user
         */
        void onComplete(@ResultCode int resultCode, @Nullable Intent resultIntent);
    }

    /**
    /**
     * Update the nickname for the given subscription.
     * Update the nickname for the given subscription.
     *
     *
@@ -1499,13 +1458,6 @@ public class EuiccManager {
        }
        }
    }
    }


    private static void sendUnavailableErrorToCallback(@NonNull Executor executor,
            ResultListener callback) {
        Integer result = EMBEDDED_SUBSCRIPTION_RESULT_ERROR;
        executor.execute(() ->
                Binder.withCleanCallingIdentity(() -> callback.onComplete(result, null)));
    }

    private static IEuiccController getIEuiccController() {
    private static IEuiccController getIEuiccController() {
        return IEuiccController.Stub.asInterface(
        return IEuiccController.Stub.asInterface(
                TelephonyFrameworkInitializer
                TelephonyFrameworkInitializer
Loading