diff options
| author | 2021-12-15 12:18:49 -0800 | |
|---|---|---|
| committer | 2021-12-30 19:22:22 -0800 | |
| commit | 805e7d12b7f727f6fefb04d8aec0b67eb6d04f17 (patch) | |
| tree | fe3ebfe41522dd2d3070393b7aaa52c9387b4e4b | |
| parent | 65094b9d544e15d442e185bd37d3221770c2cebd (diff) | |
Make switchToSubscription use PendingIntent
Bug: 205504646
Test: manual
Change-Id: Ieec385ee6b054d2c6392c4a45eb501eb876cdd0a
7 files changed, 30 insertions, 92 deletions
diff --git a/core/api/current.txt b/core/api/current.txt index b6b91daedf98..2fe64e46d2b7 100644 --- a/core/api/current.txt +++ b/core/api/current.txt @@ -43967,7 +43967,7 @@ package android.telephony.euicc { 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, 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); 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"; @@ -44013,10 +44013,6 @@ package android.telephony.euicc { 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 { diff --git a/core/api/system-current.txt b/core/api/system-current.txt index 99e47b1c6b90..3bbbe3d415ce 100644 --- a/core/api/system-current.txt +++ b/core/api/system-current.txt @@ -10689,6 +10689,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_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_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 int RESOLVABLE_ERROR_CONFIRMATION_CODE = 1; // 0x1 field public static final int RESOLVABLE_ERROR_POLICY_RULES = 2; // 0x2 diff --git a/telephony/java/android/service/euicc/EuiccService.java b/telephony/java/android/service/euicc/EuiccService.java index fabe612743bb..184e1541f1b0 100644 --- a/telephony/java/android/service/euicc/EuiccService.java +++ b/telephony/java/android/service/euicc/EuiccService.java @@ -23,6 +23,7 @@ import android.annotation.NonNull; import android.annotation.Nullable; import android.annotation.SdkConstant; import android.annotation.SystemApi; +import android.app.PendingIntent; import android.app.Service; import android.content.Intent; import android.os.Bundle; @@ -261,6 +262,14 @@ public abstract class EuiccService extends Service { public static final String 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 */ @Retention(RetentionPolicy.SOURCE) @IntDef(prefix = { "RESULT_" }, value = { @@ -852,14 +861,19 @@ public abstract class EuiccService extends Service { } @Override public void switchToSubscription(int slotId, int portIndex, String iccid, - boolean forceDeactivateSim, ISwitchToSubscriptionCallback callback) { + boolean forceDeactivateSim, ISwitchToSubscriptionCallback callback, + boolean usePortIndex) { mExecutor.execute(new Runnable() { @Override public void run() { - // TODO(b/207392528: use portIndex API once implemented) - int result = - EuiccService.this.onSwitchToSubscription( - slotId, iccid, forceDeactivateSim); + int result = 0; + if (usePortIndex) { + result = EuiccService.this.onSwitchToSubscriptionWithPort( + slotId, portIndex, iccid, forceDeactivateSim); + } else { + result = EuiccService.this.onSwitchToSubscription( + slotId, iccid, forceDeactivateSim); + } try { callback.onComplete(result); } catch (RemoteException e) { diff --git a/telephony/java/android/service/euicc/IEuiccService.aidl b/telephony/java/android/service/euicc/IEuiccService.aidl index aa30c9e88462..030e11aee993 100644 --- a/telephony/java/android/service/euicc/IEuiccService.aidl +++ b/telephony/java/android/service/euicc/IEuiccService.aidl @@ -49,7 +49,7 @@ oneway interface IEuiccService { void getEuiccInfo(int slotId, in IGetEuiccInfoCallback callback); void deleteSubscription(int slotId, String iccid, in IDeleteSubscriptionCallback callback); 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, in IUpdateSubscriptionNicknameCallback callback); void eraseSubscriptions(int slotId, in IEraseSubscriptionsCallback callback); diff --git a/telephony/java/android/telephony/euicc/EuiccManager.java b/telephony/java/android/telephony/euicc/EuiccManager.java index aa514b99dad3..c59f410c3c5b 100644 --- a/telephony/java/android/telephony/euicc/EuiccManager.java +++ b/telephony/java/android/telephony/euicc/EuiccManager.java @@ -16,7 +16,6 @@ package android.telephony.euicc; import android.Manifest; -import android.annotation.CallbackExecutor; import android.annotation.IntDef; import android.annotation.NonNull; import android.annotation.Nullable; @@ -29,7 +28,6 @@ import android.content.Context; import android.content.Intent; import android.content.IntentSender; import android.content.pm.PackageManager; -import android.os.Binder; import android.os.Bundle; import android.os.RemoteException; import android.telephony.TelephonyFrameworkInitializer; @@ -37,13 +35,11 @@ import android.telephony.TelephonyManager; import android.telephony.euicc.EuiccCardManager.ResetOption; import com.android.internal.telephony.euicc.IEuiccController; -import com.android.internal.telephony.euicc.IResultCallback; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.util.Collections; import java.util.List; -import java.util.concurrent.Executor; import java.util.stream.Collectors; /** @@ -219,20 +215,6 @@ public class EuiccManager { "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. */ public static final int EMBEDDED_SUBSCRIPTION_RESULT_OK = 0; @@ -1145,7 +1127,7 @@ public class EuiccManager { * @param callbackIntent a PendingIntent to launch when the operation completes. * * @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. */ @Deprecated @@ -1188,47 +1170,24 @@ public class EuiccManager { * permission, or the calling app must be authorized to manage the active subscription on * the target eUICC. * @param portIndex the index of the port to target for the enabled subscription - * @param executor an Executor on which to run the callback - * @param callback a {@link ResultListener} which will run when the operation completes + * @param callbackIntent a PendingIntent to launch when the operation completes. */ @RequiresPermission(Manifest.permission.WRITE_EMBEDDED_SUBSCRIPTIONS) public void switchToSubscription(int subscriptionId, int portIndex, - @NonNull @CallbackExecutor Executor executor, - @NonNull ResultListener callback) { + @NonNull PendingIntent callbackIntent) { if (!isEnabled()) { - sendUnavailableErrorToCallback(executor, callback); + sendUnavailableError(callbackIntent); return; } try { - IResultCallback internalCallback = new IResultCallback.Stub() { - @Override - public void onComplete(int result, Intent resultIntent) { - executor.execute(() -> Binder.withCleanCallingIdentity( - () -> callback.onComplete(result, resultIntent))); - } - }; - getIEuiccController().switchToSubscriptionWithPort(mCardId, portIndex, - subscriptionId, mContext.getOpPackageName(), internalCallback); + getIEuiccController().switchToSubscriptionWithPort(mCardId, + subscriptionId, portIndex, mContext.getOpPackageName(), callbackIntent); } catch (RemoteException e) { 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. * * <p>Requires that the calling app has carrier privileges according to the metadata of the @@ -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() { return IEuiccController.Stub.asInterface( TelephonyFrameworkInitializer diff --git a/telephony/java/com/android/internal/telephony/euicc/IEuiccController.aidl b/telephony/java/com/android/internal/telephony/euicc/IEuiccController.aidl index 7f5982f128e3..dda95b159552 100644 --- a/telephony/java/com/android/internal/telephony/euicc/IEuiccController.aidl +++ b/telephony/java/com/android/internal/telephony/euicc/IEuiccController.aidl @@ -22,8 +22,6 @@ import android.os.Bundle; import android.telephony.euicc.DownloadableSubscription; import android.telephony.euicc.EuiccInfo; -import com.android.internal.telephony.euicc.IResultCallback; - import java.util.List; /** @hide */ @@ -45,8 +43,8 @@ interface IEuiccController { in PendingIntent callbackIntent); oneway void switchToSubscription(int cardId, int subscriptionId, String callingPackage, in PendingIntent callbackIntent); - oneway void switchToSubscriptionWithPort(int cardId, int portIndex, int subscriptionId, - String callingPackage, in IResultCallback callback); + oneway void switchToSubscriptionWithPort(int cardId, int subscriptionId, int portIndex, + String callingPackage, in PendingIntent callbackIntent); oneway void updateSubscriptionNickname(int cardId, int subscriptionId, String nickname, String callingPackage, in PendingIntent callbackIntent); oneway void eraseSubscriptions(int cardId, in PendingIntent callbackIntent); diff --git a/telephony/java/com/android/internal/telephony/euicc/IResultCallback.aidl b/telephony/java/com/android/internal/telephony/euicc/IResultCallback.aidl deleted file mode 100644 index 69f479c683d1..000000000000 --- a/telephony/java/com/android/internal/telephony/euicc/IResultCallback.aidl +++ /dev/null @@ -1,23 +0,0 @@ -/* - * Copyright (C) 2021 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package com.android.internal.telephony.euicc; - -import android.content.Intent; - -/** @hide */ -oneway interface IResultCallback { - void onComplete(int resultCode, in Intent resultIntent); -} |