summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Jordan Liu <jminjie@google.com> 2021-12-15 12:18:49 -0800
committer Jordan Liu <jminjie@google.com> 2021-12-30 19:22:22 -0800
commit805e7d12b7f727f6fefb04d8aec0b67eb6d04f17 (patch)
treefe3ebfe41522dd2d3070393b7aaa52c9387b4e4b
parent65094b9d544e15d442e185bd37d3221770c2cebd (diff)
Make switchToSubscription use PendingIntent
Bug: 205504646 Test: manual Change-Id: Ieec385ee6b054d2c6392c4a45eb501eb876cdd0a
-rw-r--r--core/api/current.txt6
-rw-r--r--core/api/system-current.txt1
-rw-r--r--telephony/java/android/service/euicc/EuiccService.java24
-rw-r--r--telephony/java/android/service/euicc/IEuiccService.aidl2
-rw-r--r--telephony/java/android/telephony/euicc/EuiccManager.java60
-rw-r--r--telephony/java/com/android/internal/telephony/euicc/IEuiccController.aidl6
-rw-r--r--telephony/java/com/android/internal/telephony/euicc/IResultCallback.aidl23
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);
-}