diff options
| author | 2022-01-19 05:32:56 +0000 | |
|---|---|---|
| committer | 2022-01-19 05:32:56 +0000 | |
| commit | 5ffaa0f9264303894796d042517da7140d800a66 (patch) | |
| tree | 90220c26b8c7888dfdbffa410c5a3ab269d1a69d | |
| parent | ad13719e710ef6a2384314cbc7133ffd3fbc103d (diff) | |
| parent | 9adebdf38dcbe1aa68dd5b8bae8c03a0f46b6f7d (diff) | |
Merge "[MEP] EuiccManager API modifications to support carrier apps"
| -rw-r--r-- | core/api/current.txt | 3 | ||||
| -rw-r--r-- | telephony/java/android/telephony/euicc/EuiccManager.java | 46 |
2 files changed, 30 insertions, 19 deletions
diff --git a/core/api/current.txt b/core/api/current.txt index 84e0b9f66c3f..688b66e7c00c 100644 --- a/core/api/current.txt +++ b/core/api/current.txt @@ -44436,7 +44436,7 @@ package android.telephony.euicc { method public boolean isEnabled(); 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 @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, android.app.PendingIntent); 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); field public static final String ACTION_MANAGE_EMBEDDED_SUBSCRIPTIONS = "android.telephony.euicc.action.MANAGE_EMBEDDED_SUBSCRIPTIONS"; @@ -44456,6 +44456,7 @@ package android.telephony.euicc { field public static final int ERROR_INSTALL_PROFILE = 10009; // 0x2719 field public static final int ERROR_INVALID_ACTIVATION_CODE = 10001; // 0x2711 field public static final int ERROR_INVALID_CONFIRMATION_CODE = 10002; // 0x2712 + field public static final int ERROR_INVALID_PORT = 10017; // 0x2721 field public static final int ERROR_INVALID_RESPONSE = 10015; // 0x271f field public static final int ERROR_NO_PROFILES_AVAILABLE = 10013; // 0x271d field public static final int ERROR_OPERATION_BUSY = 10016; // 0x2720 diff --git a/telephony/java/android/telephony/euicc/EuiccManager.java b/telephony/java/android/telephony/euicc/EuiccManager.java index 2e5402c53d73..a49a61b592ba 100644 --- a/telephony/java/android/telephony/euicc/EuiccManager.java +++ b/telephony/java/android/telephony/euicc/EuiccManager.java @@ -805,6 +805,13 @@ public class EuiccManager { */ public static final int ERROR_OPERATION_BUSY = 10016; + /** + * Failure due to target port is not supported. + * @see #switchToSubscription(int, int, PendingIntent) + */ + public static final int ERROR_INVALID_PORT = 10017; + + private final Context mContext; private int mCardId; @@ -1120,6 +1127,15 @@ public class EuiccManager { * intent to prompt the user to accept the download. The caller should also be authorized to * manage the subscription to be enabled. * + * <p> From Android T, devices might support MEP(Multiple Enabled Profile), the subscription + * can be installed on different port from the eUICC. Calling apps with carrier privilege + * (see {@link TelephonyManager#hasCarrierPrivileges}) over the currently active subscriptions + * can use {@link #switchToSubscription(int, int, PendingIntent)} to specify which port to + * enable the subscription. Otherwise, use this API to enable the subscription on the eUICC + * and the platform will internally resolve a port. If there is no available port, + * an {@link #EMBEDDED_SUBSCRIPTION_RESULT_RESOLVABLE_ERROR} might be returned in the callback + * intent to prompt the user to disable an already-active subscription. + * * @param subscriptionId the ID of the subscription to enable. May be * {@link android.telephony.SubscriptionManager#INVALID_SUBSCRIPTION_ID} to deactivate the * current profile without activating another profile to replace it. If it's a disable @@ -1127,12 +1143,7 @@ public class EuiccManager { * permission, or the calling app must be authorized to manage the active subscription on * the target eUICC. * @param callbackIntent a PendingIntent to launch when the operation completes. - * - * @deprecated From T, callers should use - * {@link #switchToSubscription(int, int, PendingIntent)} instead to specify a port - * index on the card to switch to. */ - @Deprecated @RequiresPermission(Manifest.permission.WRITE_EMBEDDED_SUBSCRIPTIONS) public void switchToSubscription(int subscriptionId, PendingIntent callbackIntent) { if (!isEnabled()) { @@ -1150,20 +1161,19 @@ public class EuiccManager { /** * Switch to (enable) the given subscription. * - * <p>Requires the {@code android.Manifest.permission#WRITE_EMBEDDED_SUBSCRIPTIONS} permission, - * or the calling app must be authorized to manage both the currently-active subscription and - * the subscription to be enabled according to the subscription metadata. Without the former, - * an {@link #EMBEDDED_SUBSCRIPTION_RESULT_RESOLVABLE_ERROR} will be returned in the callback - * intent to prompt the user to accept the download. + * <p> Requires the {@code android.Manifest.permission#WRITE_EMBEDDED_SUBSCRIPTIONS} permission, + * or the caller must be having both the carrier privileges + * (see {@link TelephonyManager#hasCarrierPrivileges}) over any currently active subscriptions + * and the subscription to be enabled according to the subscription metadata. + * Without the former permissions, an SecurityException is thrown. * - * <p>On a multi-active SIM device, requires the - * {@code android.Manifest.permission#WRITE_EMBEDDED_SUBSCRIPTIONS} permission, or a calling app - * only if the targeted eUICC does not currently have an active subscription or the calling app - * is authorized to manage the active subscription on the target eUICC, and the calling app is - * authorized to manage any active subscription on any SIM. Without it, an - * {@link #EMBEDDED_SUBSCRIPTION_RESULT_RESOLVABLE_ERROR} will be returned in the callback - * intent to prompt the user to accept the download. The caller should also be authorized to - * manage the subscription to be enabled. + * <p> If the caller is passing invalid port index, + * an {@link #EMBEDDED_SUBSCRIPTION_RESULT_ERROR} with detailed error code + * {@link #ERROR_INVALID_PORT} will be returned. + * + * <p> Depending on the target port and permission check, + * an {@link #EMBEDDED_SUBSCRIPTION_RESULT_RESOLVABLE_ERROR} might be returned to the callback + * intent to prompt the user to authorize before the switch. * * @param subscriptionId the ID of the subscription to enable. May be * {@link android.telephony.SubscriptionManager#INVALID_SUBSCRIPTION_ID} to deactivate the |