diff options
| author | 2019-10-28 13:21:48 -0700 | |
|---|---|---|
| committer | 2019-10-28 13:21:48 -0700 | |
| commit | bd0295df592c211df849420ebff7a9880c28e17a (patch) | |
| tree | 33c3364fb5e938704456963e0b480651cb170866 | |
| parent | 163e1565d9fe61e8d58b3e414d9a8a95f8c5f3fb (diff) | |
| parent | 479a640a72316475491a2ab7100395f6647ec7e8 (diff) | |
Merge "Add EuiccCardManager.ResetOption to eraseSubscriptions" am: ca01a7ee08 am: a0b42289aa
am: 479a640a72
Change-Id: Ica15801fe3b348964f975405e859f8f7b86a6938
5 files changed, 83 insertions, 5 deletions
diff --git a/api/system-current.txt b/api/system-current.txt index 88783e0151ee..a9d228971d22 100644 --- a/api/system-current.txt +++ b/api/system-current.txt @@ -6497,7 +6497,8 @@ package android.service.euicc { method public abstract int onDeleteSubscription(int, String); method public android.service.euicc.DownloadSubscriptionResult onDownloadSubscription(int, @NonNull android.telephony.euicc.DownloadableSubscription, boolean, boolean, @Nullable android.os.Bundle); method @Deprecated public int onDownloadSubscription(int, @NonNull android.telephony.euicc.DownloadableSubscription, boolean, boolean); - method public abstract int onEraseSubscriptions(int); + method @Deprecated public abstract int onEraseSubscriptions(int); + method public int onEraseSubscriptionsWithOptions(int, @android.telephony.euicc.EuiccCardManager.ResetOption int); method public abstract android.service.euicc.GetDefaultDownloadableSubscriptionListResult onGetDefaultDownloadableSubscriptionList(int, boolean); method public abstract android.service.euicc.GetDownloadableSubscriptionMetadataResult onGetDownloadableSubscriptionMetadata(int, android.telephony.euicc.DownloadableSubscription, boolean); method public abstract String onGetEid(int); @@ -8537,7 +8538,8 @@ package android.telephony.euicc { public class EuiccManager { method @RequiresPermission(android.Manifest.permission.WRITE_EMBEDDED_SUBSCRIPTIONS) public void continueOperation(android.content.Intent, android.os.Bundle); - method @RequiresPermission(android.Manifest.permission.WRITE_EMBEDDED_SUBSCRIPTIONS) public void eraseSubscriptions(android.app.PendingIntent); + method @Deprecated @RequiresPermission(android.Manifest.permission.WRITE_EMBEDDED_SUBSCRIPTIONS) public void eraseSubscriptions(@NonNull android.app.PendingIntent); + method @RequiresPermission(android.Manifest.permission.WRITE_EMBEDDED_SUBSCRIPTIONS) public void eraseSubscriptionsWithOptions(@android.telephony.euicc.EuiccCardManager.ResetOption int, @NonNull android.app.PendingIntent); method @RequiresPermission(android.Manifest.permission.WRITE_EMBEDDED_SUBSCRIPTIONS) public void getDefaultDownloadableSubscriptionList(android.app.PendingIntent); method @RequiresPermission(android.Manifest.permission.WRITE_EMBEDDED_SUBSCRIPTIONS) public void getDownloadableSubscriptionMetadata(android.telephony.euicc.DownloadableSubscription, android.app.PendingIntent); method @RequiresPermission(android.Manifest.permission.WRITE_EMBEDDED_SUBSCRIPTIONS) public int getOtaStatus(); diff --git a/core/java/android/service/euicc/EuiccService.java b/core/java/android/service/euicc/EuiccService.java index ff8b13506201..8a9f68942e9d 100644 --- a/core/java/android/service/euicc/EuiccService.java +++ b/core/java/android/service/euicc/EuiccService.java @@ -15,6 +15,8 @@ */ package android.service.euicc; +import static android.telephony.euicc.EuiccCardManager.ResetOption; + import android.annotation.CallSuper; import android.annotation.IntDef; import android.annotation.NonNull; @@ -503,7 +505,7 @@ public abstract class EuiccService extends Service { String nickname); /** - * Erase all of the subscriptions on the device. + * Erase all operational subscriptions on the device. * * <p>This is intended to be used for device resets. As such, the reset should be performed even * if an active SIM must be deactivated in order to access the eUICC. @@ -512,10 +514,31 @@ public abstract class EuiccService extends Service { * @return the result of the erase operation. May be one of the predefined {@code RESULT_} * constants or any implementation-specific code starting with {@link #RESULT_FIRST_USER}. * @see android.telephony.euicc.EuiccManager#eraseSubscriptions + * + * @deprecated From R, callers should specify a flag for specific set of subscriptions to erase + * and use @link{onEraseSubscriptionsWithOptions} instead */ + @Deprecated public abstract int onEraseSubscriptions(int slotId); /** + * Erase specific subscriptions on the device. + * + * <p>This is intended to be used for device resets. As such, the reset should be performed even + * if an active SIM must be deactivated in order to access the eUICC. + * + * @param slotIndex index of the SIM slot to use for the operation. + * @param options flag for specific group of subscriptions to erase + * @return the result of the erase operation. May be one of the predefined {@code RESULT_} + * constants or any implementation-specific code starting with {@link #RESULT_FIRST_USER}. + * @see android.telephony.euicc.EuiccManager#eraseSubscriptionsWithOptions + */ + public int onEraseSubscriptionsWithOptions(int slotIndex, @ResetOption int options) { + throw new UnsupportedOperationException( + "This method must be overridden to enable the ResetOption parameter"); + } + + /** * Ensure that subscriptions will be retained on the next factory reset. * * <p>Called directly before a factory reset. Assumes that a normal factory reset will lead to @@ -751,6 +774,23 @@ public abstract class EuiccService extends Service { } @Override + public void eraseSubscriptionsWithOptions( + int slotIndex, @ResetOption int options, IEraseSubscriptionsCallback callback) { + mExecutor.execute(new Runnable() { + @Override + public void run() { + int result = EuiccService.this.onEraseSubscriptionsWithOptions( + slotIndex, options); + try { + callback.onComplete(result); + } catch (RemoteException e) { + // Can't communicate with the phone process; ignore. + } + } + }); + } + + @Override public void retainSubscriptionsForFactoryReset(int slotId, IRetainSubscriptionsForFactoryResetCallback callback) { mExecutor.execute(new Runnable() { diff --git a/core/java/android/service/euicc/IEuiccService.aidl b/core/java/android/service/euicc/IEuiccService.aidl index c2cdf093706f..2acc47aae919 100644 --- a/core/java/android/service/euicc/IEuiccService.aidl +++ b/core/java/android/service/euicc/IEuiccService.aidl @@ -52,6 +52,8 @@ oneway interface IEuiccService { void updateSubscriptionNickname(int slotId, String iccid, String nickname, in IUpdateSubscriptionNicknameCallback callback); void eraseSubscriptions(int slotId, in IEraseSubscriptionsCallback callback); + void eraseSubscriptionsWithOptions( + int slotIndex, int options, in IEraseSubscriptionsCallback callback); void retainSubscriptionsForFactoryReset( int slotId, in IRetainSubscriptionsForFactoryResetCallback callback); }
\ No newline at end of file diff --git a/telephony/java/android/telephony/euicc/EuiccManager.java b/telephony/java/android/telephony/euicc/EuiccManager.java index cabd4dfd91f1..5a90cb13a548 100644 --- a/telephony/java/android/telephony/euicc/EuiccManager.java +++ b/telephony/java/android/telephony/euicc/EuiccManager.java @@ -32,6 +32,7 @@ import android.os.Bundle; import android.os.RemoteException; import android.os.ServiceManager; import android.telephony.TelephonyManager; +import android.telephony.euicc.EuiccCardManager.ResetOption; import com.android.internal.telephony.euicc.IEuiccController; @@ -821,17 +822,22 @@ public class EuiccManager { } /** - * Erase all subscriptions and reset the eUICC. + * Erase all operational subscriptions and reset the eUICC. * * <p>Requires that the calling app has the * {@code android.Manifest.permission#WRITE_EMBEDDED_SUBSCRIPTIONS} permission. * * @param callbackIntent a PendingIntent to launch when the operation completes. + * + * @deprecated From R, callers should specify a flag for specific set of subscriptions to erase + * and use @link{eraseSubscriptionsWithOptions} instead + * * @hide */ @SystemApi @RequiresPermission(Manifest.permission.WRITE_EMBEDDED_SUBSCRIPTIONS) - public void eraseSubscriptions(PendingIntent callbackIntent) { + @Deprecated + public void eraseSubscriptions(@NonNull PendingIntent callbackIntent) { if (!isEnabled()) { sendUnavailableError(callbackIntent); return; @@ -844,6 +850,32 @@ public class EuiccManager { } /** + * Erase all specific subscriptions and reset the eUICC. + * + * <p>Requires that the calling app has the + * {@code android.Manifest.permission#WRITE_EMBEDDED_SUBSCRIPTIONS} permission. + * + * @param options flag indicating specific set of subscriptions to erase + * @param callbackIntent a PendingIntent to launch when the operation completes. + * + * @hide + */ + @SystemApi + @RequiresPermission(Manifest.permission.WRITE_EMBEDDED_SUBSCRIPTIONS) + public void eraseSubscriptionsWithOptions( + @ResetOption int options, @NonNull PendingIntent callbackIntent) { + if (!isEnabled()) { + sendUnavailableError(callbackIntent); + return; + } + try { + getIEuiccController().eraseSubscriptionsWithOptions(mCardId, options, callbackIntent); + } catch (RemoteException e) { + throw e.rethrowFromSystemServer(); + } + } + + /** * Ensure that subscriptions will be retained on the next factory reset. * * <p>By default, all subscriptions on the eUICC are erased the first time a device boots (ever diff --git a/telephony/java/com/android/internal/telephony/euicc/IEuiccController.aidl b/telephony/java/com/android/internal/telephony/euicc/IEuiccController.aidl index 20169152539e..7422863d862c 100644 --- a/telephony/java/com/android/internal/telephony/euicc/IEuiccController.aidl +++ b/telephony/java/com/android/internal/telephony/euicc/IEuiccController.aidl @@ -44,5 +44,7 @@ interface IEuiccController { oneway void updateSubscriptionNickname(int cardId, int subscriptionId, String nickname, String callingPackage, in PendingIntent callbackIntent); oneway void eraseSubscriptions(int cardId, in PendingIntent callbackIntent); + oneway void eraseSubscriptionsWithOptions( + int cardId, int options, in PendingIntent callbackIntent); oneway void retainSubscriptionsForFactoryReset(int cardId, in PendingIntent callbackIntent); } |