Make switchToSubscription use PendingIntent
Bug: 205504646 Test: manual Change-Id: Ieec385ee6b054d2c6392c4a45eb501eb876cdd0a
This commit is contained in:
@@ -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 {
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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) {
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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;
|
||||
|
||||
/**
|
||||
@@ -218,20 +214,6 @@ public class EuiccManager {
|
||||
public static final String 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.
|
||||
*/
|
||||
@@ -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,46 +1170,23 @@ 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.
|
||||
*
|
||||
@@ -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
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
Reference in New Issue
Block a user