Squashed merge of master-sim into master.
Includes the following commits: == New system feature: eUICC. Presence of this feature implies that eUICC-related APIs are expected to function as long as an eUICC is present in the device. Note that an eUICC may be embedded in the device but may also be removable. == Add empty EuiccManager API and plumbing. == Add stub EuiccService. EuiccService is the class that the LPA app must implement; for now, just define the action and priority so that the implementation can be found. Actual methods will come later. Also declare two relevant permissions: BIND_EUICC_SERVICE, which the implementation must require (so that nobody else can bind to the service directly), and WRITE_EMBEDDED_SUBSCRIPTIONS, which permits signature|privileged apps and CTS (via development) to access EuiccManager APIs. == Add UiccAccessRule based off UiccCarrierPrivilegeRules#AccessRule. This class can be used to transfer access rules between an EuiccService implementation and the platform. We also add a simple encoding/decoding of a list of rules so that they may be stored in the subscription info table. == Add getEid() to EuiccManager/EuiccService. getEid() fetches the EID. It requires either a privileged permission (READ_PRIVILEGED_PHONE_STATE) or carrier privileges on the currently-active profile. Until there is a use case that requires opening this up to apps with only READ_PHONE_STATE, we shouldn't do so. To avoid churn in the future, the API signatures for EuiccService include a slot ID to identify which SIM slot is being used. However, this parameter is currently not populated correctly (nor is it usable, as no Telephony APIs accept a slot ID to address commands). There is no need to expose it yet in the EuiccManager APIs as we expect to follow the TelephonyManager pattern of allowing per-slot instances of EuiccManager in the future while keeping other method signatures the same. == Define Euicc UI actions in EuiccManager/EuiccService. The EuiccManager actions are to be implemented by the platform (and only the platform), which forwards the actions to the active implementation. Also, remove our explicit priority meta-data tag as we can just rely on android:priority in the corresponding intent-filter. == APIs for downloading embedded subscriptions. Includes: -getDownloadableSubscriptionMetadata, used by the platform and LUI to fetch metadata about a downloadable subscription. The platform will use this to perform the necessary permission checks (only allowing otherwise-unprivileged apps to download profiles that are permitted per the subscription metadata), and the LUI can use this to present the name of the profile. -downloadSubscription, to actually perform a profile download. The stub for startResolutionActivity is included but not implemented; resolution activities will be handled in a follow-up change. == Test: TreeHugger Change-Id: I47b1da5a69f0736012cb137e02cd6c4e07fdaace
This commit is contained in:
@@ -118,6 +118,7 @@ import android.os.health.SystemHealthManager;
|
||||
import android.os.storage.StorageManager;
|
||||
import android.print.IPrintManager;
|
||||
import android.print.PrintManager;
|
||||
import android.telephony.euicc.EuiccManager;
|
||||
import android.view.autofill.AutofillManager;
|
||||
import android.view.autofill.IAutoFillManager;
|
||||
import android.service.persistentdata.IPersistentDataBlockService;
|
||||
@@ -493,6 +494,13 @@ final class SystemServiceRegistry {
|
||||
return new TelecomManager(ctx.getOuterContext());
|
||||
}});
|
||||
|
||||
registerService(Context.EUICC_SERVICE, EuiccManager.class,
|
||||
new CachedServiceFetcher<EuiccManager>() {
|
||||
@Override
|
||||
public EuiccManager createService(ContextImpl ctx) {
|
||||
return new EuiccManager(ctx.getOuterContext());
|
||||
}});
|
||||
|
||||
registerService(Context.UI_MODE_SERVICE, UiModeManager.class,
|
||||
new CachedServiceFetcher<UiModeManager>() {
|
||||
@Override
|
||||
|
||||
@@ -3453,6 +3453,17 @@ public abstract class Context {
|
||||
*/
|
||||
public static final String CARRIER_CONFIG_SERVICE = "carrier_config";
|
||||
|
||||
/**
|
||||
* Use with {@link #getSystemService} to retrieve a
|
||||
* {@link android.telephony.euicc.EuiccManager} to manage the device eUICC (embedded SIM).
|
||||
*
|
||||
* @see #getSystemService
|
||||
* @see android.telephony.euicc.EuiccManager
|
||||
* TODO(b/35851809): Unhide this API.
|
||||
* @hide
|
||||
*/
|
||||
public static final String EUICC_SERVICE = "euicc_service";
|
||||
|
||||
/**
|
||||
* Use with {@link #getSystemService} to retrieve a
|
||||
* {@link android.text.ClipboardManager} for accessing and modifying
|
||||
|
||||
@@ -1957,6 +1957,15 @@ public abstract class PackageManager {
|
||||
public static final String FEATURE_TELEPHONY_CARRIERLOCK =
|
||||
"android.hardware.telephony.carrierlock";
|
||||
|
||||
/**
|
||||
* Feature for {@link #getSystemAvailableFeatures} and {@link #hasSystemFeature}: The device
|
||||
* supports embedded subscriptions on eUICCs.
|
||||
* TODO(b/35851809): Make this public.
|
||||
* @hide
|
||||
*/
|
||||
@SdkConstant(SdkConstantType.FEATURE)
|
||||
public static final String FEATURE_TELEPHONY_EUICC = "android.hardware.telephony.euicc";
|
||||
|
||||
/**
|
||||
* Feature for {@link #getSystemAvailableFeatures} and
|
||||
* {@link #hasSystemFeature}: The device supports connecting to USB devices
|
||||
|
||||
19
core/java/android/service/euicc/DownloadResult.aidl
Normal file
19
core/java/android/service/euicc/DownloadResult.aidl
Normal file
@@ -0,0 +1,19 @@
|
||||
/*
|
||||
* Copyright (C) 2017 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 android.service.euicc;
|
||||
|
||||
parcelable DownloadResult;
|
||||
107
core/java/android/service/euicc/DownloadResult.java
Normal file
107
core/java/android/service/euicc/DownloadResult.java
Normal file
@@ -0,0 +1,107 @@
|
||||
/*
|
||||
* Copyright (C) 2017 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 android.service.euicc;
|
||||
|
||||
import android.annotation.IntDef;
|
||||
import android.os.Parcel;
|
||||
import android.os.Parcelable;
|
||||
|
||||
import java.lang.annotation.Retention;
|
||||
import java.lang.annotation.RetentionPolicy;
|
||||
|
||||
/**
|
||||
* Result of a {@link EuiccService#downloadSubscription} operation.
|
||||
* @hide
|
||||
*
|
||||
* TODO(b/35851809): Make this a SystemApi.
|
||||
*/
|
||||
public final class DownloadResult implements Parcelable {
|
||||
|
||||
public static final Creator<DownloadResult> CREATOR = new Creator<DownloadResult>() {
|
||||
@Override
|
||||
public DownloadResult createFromParcel(Parcel in) {
|
||||
return new DownloadResult(in);
|
||||
}
|
||||
|
||||
@Override
|
||||
public DownloadResult[] newArray(int size) {
|
||||
return new DownloadResult[size];
|
||||
}
|
||||
};
|
||||
|
||||
/** @hide */
|
||||
@IntDef({
|
||||
RESULT_OK,
|
||||
RESULT_GENERIC_ERROR,
|
||||
RESULT_MUST_DEACTIVATE_REMOVABLE_SIM,
|
||||
})
|
||||
@Retention(RetentionPolicy.SOURCE)
|
||||
public @interface ResultCode {}
|
||||
|
||||
public static final int RESULT_OK = 0;
|
||||
public static final int RESULT_GENERIC_ERROR = 1;
|
||||
public static final int RESULT_MUST_DEACTIVATE_REMOVABLE_SIM = 2;
|
||||
|
||||
/** Result of the operation - one of the RESULT_* constants. */
|
||||
public final @ResultCode int result;
|
||||
|
||||
/** Implementation-defined detailed error code in case of a failure not covered here. */
|
||||
public final int detailedCode;
|
||||
|
||||
private DownloadResult(int result, int detailedCode) {
|
||||
this.result = result;
|
||||
this.detailedCode = detailedCode;
|
||||
}
|
||||
|
||||
private DownloadResult(Parcel in) {
|
||||
this.result = in.readInt();
|
||||
this.detailedCode = in.readInt();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void writeToParcel(Parcel dest, int flags) {
|
||||
dest.writeInt(result);
|
||||
dest.writeInt(detailedCode);
|
||||
}
|
||||
|
||||
/** Return a result indicating that the download was successful. */
|
||||
public static DownloadResult success() {
|
||||
return new DownloadResult(RESULT_OK, 0);
|
||||
}
|
||||
|
||||
/**
|
||||
* Return a result indicating that the removable SIM must be deactivated to perform the
|
||||
* operation.
|
||||
*/
|
||||
public static DownloadResult mustDeactivateRemovableSim() {
|
||||
return new DownloadResult(RESULT_MUST_DEACTIVATE_REMOVABLE_SIM, 0);
|
||||
}
|
||||
|
||||
/**
|
||||
* Return a result indicating that an error occurred for which no other more specific error
|
||||
* code has been defined.
|
||||
*
|
||||
* @param detailedCode an implemenation-defined detailed error code for debugging purposes.
|
||||
*/
|
||||
public static DownloadResult genericError(int detailedCode) {
|
||||
return new DownloadResult(RESULT_GENERIC_ERROR, detailedCode);
|
||||
}
|
||||
|
||||
@Override
|
||||
public int describeContents() {
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
169
core/java/android/service/euicc/EuiccService.java
Normal file
169
core/java/android/service/euicc/EuiccService.java
Normal file
@@ -0,0 +1,169 @@
|
||||
/*
|
||||
* Copyright (C) 2017 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 android.service.euicc;
|
||||
|
||||
import android.annotation.CallSuper;
|
||||
import android.app.Service;
|
||||
import android.content.Intent;
|
||||
import android.os.IBinder;
|
||||
import android.os.RemoteException;
|
||||
import android.telephony.euicc.DownloadableSubscription;
|
||||
|
||||
/**
|
||||
* Service interface linking the system with an eUICC local profile assistant (LPA) application.
|
||||
*
|
||||
* <p>An LPA consists of two separate components (which may both be implemented in the same APK):
|
||||
* the LPA backend, and the LPA UI or LUI.
|
||||
*
|
||||
* <p>To implement the LPA backend, you must extend this class and declare this service in your
|
||||
* manifest file. The service must require the
|
||||
* {@link android.Manifest.permission#BIND_EUICC_SERVICE} permission and include an intent filter
|
||||
* with the {@link #EUICC_SERVICE_INTERFACE} action. The priority of the intent filter must be set
|
||||
* to a non-zero value in case multiple implementations are present on the device. For example:
|
||||
*
|
||||
* <pre>{@code
|
||||
* <service android:name=".MyEuiccService"
|
||||
* android:permission="android.permission.BIND_EUICC_SERVICE">
|
||||
* <intent-filter android:priority="100">
|
||||
* <action android:name="android.service.euicc.EuiccService" />
|
||||
* </intent-filter>
|
||||
* </service>
|
||||
* }</pre>
|
||||
*
|
||||
* <p>To implement the LUI, you must provide an activity for the following actions:
|
||||
*
|
||||
* <ul>
|
||||
* <li>{@link #ACTION_MANAGE_EMBEDDED_SUBSCRIPTIONS}
|
||||
* <li>{@link #ACTION_PROVISION_EMBEDDED_SUBSCRIPTION}
|
||||
* </ul>
|
||||
*
|
||||
* <p>As with the service, each activity must require the
|
||||
* {@link android.Manifest.permission#BIND_EUICC_SERVICE} permission. Each should have an intent
|
||||
* filter with the appropriate action, the {@link #CATEGORY_EUICC_UI} category, and a non-zero
|
||||
* priority.
|
||||
*
|
||||
* TODO(b/35851809): Make this a SystemApi.
|
||||
* @hide
|
||||
*/
|
||||
public abstract class EuiccService extends Service {
|
||||
/** Action which must be included in this service's intent filter. */
|
||||
public static final String EUICC_SERVICE_INTERFACE = "android.service.euicc.EuiccService";
|
||||
|
||||
/** Category which must be defined to all UI actions, for efficient lookup. */
|
||||
public static final String CATEGORY_EUICC_UI = "android.service.euicc.category.EUICC_UI";
|
||||
|
||||
// LUI actions. These are passthroughs of the corresponding EuiccManager actions.
|
||||
|
||||
/** @see android.telephony.euicc.EuiccManager#ACTION_MANAGE_EMBEDDED_SUBSCRIPTIONS */
|
||||
public static final String ACTION_MANAGE_EMBEDDED_SUBSCRIPTIONS =
|
||||
"android.service.euicc.action.MANAGE_EMBEDDED_SUBSCRIPTIONS";
|
||||
/** @see android.telephony.euicc.EuiccManager#ACTION_PROVISION_EMBEDDED_SUBSCRIPTION */
|
||||
public static final String ACTION_PROVISION_EMBEDDED_SUBSCRIPTION =
|
||||
"android.service.euicc.action.PROVISION_EMBEDDED_SUBSCRIPTION";
|
||||
|
||||
private final IEuiccService.Stub mStubWrapper;
|
||||
|
||||
public EuiccService() {
|
||||
mStubWrapper = new IEuiccServiceWrapper();
|
||||
}
|
||||
|
||||
/**
|
||||
* If overriding this method, call through to the super method for any unknown actions.
|
||||
* {@inheritDoc}
|
||||
*/
|
||||
@Override
|
||||
@CallSuper
|
||||
public IBinder onBind(Intent intent) {
|
||||
return mStubWrapper;
|
||||
}
|
||||
|
||||
/**
|
||||
* Return the EID of the eUICC.
|
||||
*
|
||||
* @param slotId ID of the SIM slot being queried. This is currently not populated but is here
|
||||
* to future-proof the APIs.
|
||||
* @return the EID.
|
||||
* @see android.telephony.euicc.EuiccManager#getEid
|
||||
*/
|
||||
// TODO(b/36260308): Update doc when we have multi-SIM support.
|
||||
public abstract String onGetEid(int slotId);
|
||||
|
||||
/**
|
||||
* Populate {@link DownloadableSubscription} metadata for the given downloadable subscription.
|
||||
*
|
||||
* @param slotId ID of the SIM slot to use when starting the download. This is currently not
|
||||
* populated but is here to future-proof the APIs.
|
||||
* @param subscription A subscription whose metadata needs to be populated.
|
||||
* @return The result of the operation.
|
||||
* @see android.telephony.euicc.EuiccManager#getDownloadableSubscriptionMetadata
|
||||
*/
|
||||
public abstract GetDownloadableSubscriptionMetadataResult getDownloadableSubscriptionMetadata(
|
||||
int slotId, DownloadableSubscription subscription);
|
||||
|
||||
/**
|
||||
* Download the given subscription.
|
||||
*
|
||||
* @param slotId ID of the SIM slot onto which the subscription should be downloaded. This is
|
||||
* currently not populated but is here to future-proof the APIs.
|
||||
* @param subscription The subscription to download.
|
||||
* @param switchAfterDownload If true, the subscription should be enabled upon successful
|
||||
* download.
|
||||
* @return the result of the download operation.
|
||||
* @see android.telephony.euicc.EuiccManager#downloadSubscription
|
||||
*/
|
||||
public abstract DownloadResult downloadSubscription(int slotId,
|
||||
DownloadableSubscription subscription, boolean switchAfterDownload);
|
||||
|
||||
/**
|
||||
* Wrapper around IEuiccService that forwards calls to implementations of {@link EuiccService}.
|
||||
*/
|
||||
private class IEuiccServiceWrapper extends IEuiccService.Stub {
|
||||
@Override
|
||||
public void downloadSubscription(int slotId, DownloadableSubscription subscription,
|
||||
boolean switchAfterDownload, IDownloadSubscriptionCallback callback) {
|
||||
DownloadResult result = EuiccService.this.downloadSubscription(
|
||||
slotId, subscription, switchAfterDownload);
|
||||
try {
|
||||
callback.onComplete(result);
|
||||
} catch (RemoteException e) {
|
||||
// Can't communicate with the phone process; ignore.
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void getEid(int slotId, IGetEidCallback callback) {
|
||||
String eid = EuiccService.this.onGetEid(slotId);
|
||||
try {
|
||||
callback.onSuccess(eid);
|
||||
} catch (RemoteException e) {
|
||||
// Can't communicate with the phone process; ignore.
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void getDownloadableSubscriptionMetadata(int slotId,
|
||||
DownloadableSubscription subscription,
|
||||
IGetDownloadableSubscriptionMetadataCallback callback) {
|
||||
GetDownloadableSubscriptionMetadataResult result =
|
||||
EuiccService.this.getDownloadableSubscriptionMetadata(slotId, subscription);
|
||||
try {
|
||||
callback.onComplete(result);
|
||||
} catch (RemoteException e) {
|
||||
// Can't communicate with the phone process; ignore.
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,19 @@
|
||||
/*
|
||||
* Copyright (C) 2017 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 android.service.euicc;
|
||||
|
||||
parcelable GetDownloadableSubscriptionMetadataResult;
|
||||
@@ -0,0 +1,126 @@
|
||||
/*
|
||||
* Copyright (C) 2017 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 android.service.euicc;
|
||||
|
||||
import android.annotation.IntDef;
|
||||
import android.annotation.Nullable;
|
||||
import android.os.Parcel;
|
||||
import android.os.Parcelable;
|
||||
import android.telephony.euicc.DownloadableSubscription;
|
||||
|
||||
import java.lang.annotation.Retention;
|
||||
import java.lang.annotation.RetentionPolicy;
|
||||
|
||||
/**
|
||||
* Result of a {@link EuiccService#getDownloadableSubscriptionMetadata} operation.
|
||||
* @hide
|
||||
*
|
||||
* TODO(b/35851809): Make this a SystemApi.
|
||||
*/
|
||||
public final class GetDownloadableSubscriptionMetadataResult implements Parcelable {
|
||||
|
||||
public static final Creator<GetDownloadableSubscriptionMetadataResult> CREATOR =
|
||||
new Creator<GetDownloadableSubscriptionMetadataResult>() {
|
||||
@Override
|
||||
public GetDownloadableSubscriptionMetadataResult createFromParcel(Parcel in) {
|
||||
return new GetDownloadableSubscriptionMetadataResult(in);
|
||||
}
|
||||
|
||||
@Override
|
||||
public GetDownloadableSubscriptionMetadataResult[] newArray(int size) {
|
||||
return new GetDownloadableSubscriptionMetadataResult[size];
|
||||
}
|
||||
};
|
||||
|
||||
/** @hide */
|
||||
@IntDef({
|
||||
RESULT_OK,
|
||||
RESULT_GENERIC_ERROR,
|
||||
RESULT_MUST_DEACTIVATE_REMOVABLE_SIM,
|
||||
})
|
||||
@Retention(RetentionPolicy.SOURCE)
|
||||
public @interface ResultCode {}
|
||||
|
||||
public static final int RESULT_OK = 0;
|
||||
public static final int RESULT_MUST_DEACTIVATE_REMOVABLE_SIM = 1;
|
||||
public static final int RESULT_GENERIC_ERROR = 2;
|
||||
|
||||
/** Result of the operation - one of the RESULT_* constants. */
|
||||
public final @ResultCode int result;
|
||||
|
||||
/**
|
||||
* The {@link DownloadableSubscription} with filled-in metadata.
|
||||
*
|
||||
* <p>Only non-null if {@link #result} is {@link #RESULT_OK}.
|
||||
*/
|
||||
@Nullable
|
||||
public final DownloadableSubscription subscription;
|
||||
|
||||
/** Implementation-defined detailed error code in case of a failure not covered here. */
|
||||
public final int detailedCode;
|
||||
|
||||
private GetDownloadableSubscriptionMetadataResult(int result,
|
||||
@Nullable DownloadableSubscription subscription, int detailedCode) {
|
||||
this.result = result;
|
||||
this.subscription = subscription;
|
||||
this.detailedCode = detailedCode;
|
||||
}
|
||||
|
||||
private GetDownloadableSubscriptionMetadataResult(Parcel in) {
|
||||
this.result = in.readInt();
|
||||
this.subscription = DownloadableSubscription.CREATOR.createFromParcel(in);
|
||||
this.detailedCode = in.readInt();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void writeToParcel(Parcel dest, int flags) {
|
||||
dest.writeInt(result);
|
||||
this.subscription.writeToParcel(dest, 0);
|
||||
dest.writeInt(detailedCode);
|
||||
}
|
||||
|
||||
/** Return a result indicating that the download was successful. */
|
||||
public static GetDownloadableSubscriptionMetadataResult success(
|
||||
DownloadableSubscription subscription) {
|
||||
return new GetDownloadableSubscriptionMetadataResult(RESULT_OK, subscription,
|
||||
0 /* detailedCode */);
|
||||
}
|
||||
|
||||
/**
|
||||
* Return a result indicating that the removable SIM must be deactivated to perform the
|
||||
* operation.
|
||||
*/
|
||||
public static GetDownloadableSubscriptionMetadataResult mustDeactivateRemovableSim() {
|
||||
return new GetDownloadableSubscriptionMetadataResult(RESULT_MUST_DEACTIVATE_REMOVABLE_SIM,
|
||||
null /* subscription */, 0 /* detailedCode */);
|
||||
}
|
||||
|
||||
/**
|
||||
* Return a result indicating that an error occurred for which no other more specific error
|
||||
* code has been defined.
|
||||
*
|
||||
* @param detailedCode an implementation-defined detailed error code for debugging purposes.
|
||||
*/
|
||||
public static GetDownloadableSubscriptionMetadataResult genericError(int detailedCode) {
|
||||
return new GetDownloadableSubscriptionMetadataResult(RESULT_GENERIC_ERROR,
|
||||
null /* subscription */, detailedCode);
|
||||
}
|
||||
|
||||
@Override
|
||||
public int describeContents() {
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,24 @@
|
||||
/*
|
||||
* Copyright (C) 2017 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 android.service.euicc;
|
||||
|
||||
import android.service.euicc.DownloadResult;
|
||||
|
||||
/** @hide */
|
||||
oneway interface IDownloadSubscriptionCallback {
|
||||
void onComplete(in DownloadResult result);
|
||||
}
|
||||
31
core/java/android/service/euicc/IEuiccService.aidl
Normal file
31
core/java/android/service/euicc/IEuiccService.aidl
Normal file
@@ -0,0 +1,31 @@
|
||||
/*
|
||||
* Copyright (C) 2017 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 android.service.euicc;
|
||||
|
||||
import android.service.euicc.IDownloadSubscriptionCallback;
|
||||
import android.service.euicc.IGetDownloadableSubscriptionMetadataCallback;
|
||||
import android.service.euicc.IGetEidCallback;
|
||||
import android.telephony.euicc.DownloadableSubscription;
|
||||
|
||||
/** @hide */
|
||||
oneway interface IEuiccService {
|
||||
void downloadSubscription(int slotId, in DownloadableSubscription subscription,
|
||||
boolean switchAfterDownload, in IDownloadSubscriptionCallback callback);
|
||||
void getDownloadableSubscriptionMetadata(int slotId, in DownloadableSubscription subscription,
|
||||
in IGetDownloadableSubscriptionMetadataCallback callback);
|
||||
void getEid(int slotId, in IGetEidCallback callback);
|
||||
}
|
||||
@@ -0,0 +1,24 @@
|
||||
/*
|
||||
* Copyright (C) 2017 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 android.service.euicc;
|
||||
|
||||
import android.service.euicc.GetDownloadableSubscriptionMetadataResult;
|
||||
|
||||
/** @hide */
|
||||
oneway interface IGetDownloadableSubscriptionMetadataCallback {
|
||||
void onComplete(in GetDownloadableSubscriptionMetadataResult result);
|
||||
}
|
||||
22
core/java/android/service/euicc/IGetEidCallback.aidl
Normal file
22
core/java/android/service/euicc/IGetEidCallback.aidl
Normal file
@@ -0,0 +1,22 @@
|
||||
/*
|
||||
* Copyright (C) 2017 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 android.service.euicc;
|
||||
|
||||
/** @hide */
|
||||
oneway interface IGetEidCallback {
|
||||
void onSuccess(String eid);
|
||||
}
|
||||
Reference in New Issue
Block a user