diff options
| -rw-r--r-- | Android.bp | 2 | ||||
| -rw-r--r-- | Android.mk | 2 | ||||
| -rw-r--r-- | core/java/android/app/SystemServiceRegistry.java | 8 | ||||
| -rw-r--r-- | core/java/android/content/Context.java | 11 | ||||
| -rw-r--r-- | core/java/android/service/euicc/EuiccProfileInfo.aidl | 18 | ||||
| -rw-r--r-- | telephony/java/android/telephony/euicc/EuiccCardManager.java | 88 | ||||
| -rw-r--r-- | telephony/java/com/android/internal/telephony/euicc/IEuiccCardController.aidl | 24 | ||||
| -rw-r--r-- | telephony/java/com/android/internal/telephony/euicc/IGetAllProfilesCallback.aidl | 23 |
8 files changed, 175 insertions, 1 deletions
diff --git a/Android.bp b/Android.bp index b9a8dec036f0..a87e4c763f0a 100644 --- a/Android.bp +++ b/Android.bp @@ -519,7 +519,9 @@ java_library { "telephony/java/com/android/internal/telephony/ITelephony.aidl", "telephony/java/com/android/internal/telephony/ITelephonyRegistry.aidl", "telephony/java/com/android/internal/telephony/IWapPushManager.aidl", + "telephony/java/com/android/internal/telephony/euicc/IEuiccCardController.aidl", "telephony/java/com/android/internal/telephony/euicc/IEuiccController.aidl", + "telephony/java/com/android/internal/telephony/euicc/IGetAllProfilesCallback.aidl", "wifi/java/android/net/wifi/IWifiManager.aidl", "wifi/java/android/net/wifi/aware/IWifiAwareDiscoverySessionCallback.aidl", "wifi/java/android/net/wifi/aware/IWifiAwareEventCallback.aidl", diff --git a/Android.mk b/Android.mk index 8199c57bdb5f..3c6dd37acefe 100644 --- a/Android.mk +++ b/Android.mk @@ -829,4 +829,4 @@ ifeq (,$(ONE_SHOT_MAKEFILE)) include $(call first-makefiles-under,$(LOCAL_PATH)) endif -endif # ANDROID_BUILD_EMBEDDED +endif # ANDROID_BUILD_EMBEDDED
\ No newline at end of file diff --git a/core/java/android/app/SystemServiceRegistry.java b/core/java/android/app/SystemServiceRegistry.java index 6eb4783b55ed..6eafcc437447 100644 --- a/core/java/android/app/SystemServiceRegistry.java +++ b/core/java/android/app/SystemServiceRegistry.java @@ -136,6 +136,7 @@ import android.telecom.TelecomManager; import android.telephony.CarrierConfigManager; import android.telephony.SubscriptionManager; import android.telephony.TelephonyManager; +import android.telephony.euicc.EuiccCardManager; import android.telephony.euicc.EuiccManager; import android.util.Log; import android.util.StatsManager; @@ -519,6 +520,13 @@ final class SystemServiceRegistry { return new EuiccManager(ctx.getOuterContext()); }}); + registerService(Context.EUICC_CARD_SERVICE, EuiccCardManager.class, + new CachedServiceFetcher<EuiccCardManager>() { + @Override + public EuiccCardManager createService(ContextImpl ctx) { + return new EuiccCardManager(ctx.getOuterContext()); + }}); + registerService(Context.UI_MODE_SERVICE, UiModeManager.class, new CachedServiceFetcher<UiModeManager>() { @Override diff --git a/core/java/android/content/Context.java b/core/java/android/content/Context.java index 1a0d5aa9bbbc..f69e76445aa7 100644 --- a/core/java/android/content/Context.java +++ b/core/java/android/content/Context.java @@ -3660,6 +3660,17 @@ public abstract class Context { /** * Use with {@link #getSystemService(String)} to retrieve a + * {@link android.telephony.euicc.EuiccCardManager} to access the device eUICC (embedded SIM). + * + * @see #getSystemService(String) + * @see android.telephony.euicc.EuiccCardManager + * TODO(b/35851809): Make this a SystemApi. + * @hide + */ + public static final String EUICC_CARD_SERVICE = "euicc_card_service"; + + /** + * Use with {@link #getSystemService(String)} to retrieve a * {@link android.content.ClipboardManager} for accessing and modifying * the contents of the global clipboard. * diff --git a/core/java/android/service/euicc/EuiccProfileInfo.aidl b/core/java/android/service/euicc/EuiccProfileInfo.aidl new file mode 100644 index 000000000000..321021b5273c --- /dev/null +++ b/core/java/android/service/euicc/EuiccProfileInfo.aidl @@ -0,0 +1,18 @@ +/* + * Copyright (C) 2018 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 EuiccProfileInfo; diff --git a/telephony/java/android/telephony/euicc/EuiccCardManager.java b/telephony/java/android/telephony/euicc/EuiccCardManager.java new file mode 100644 index 000000000000..29849c1f9ccd --- /dev/null +++ b/telephony/java/android/telephony/euicc/EuiccCardManager.java @@ -0,0 +1,88 @@ +/* + * Copyright (C) 2018 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.telephony.euicc; + +import android.content.Context; +import android.os.RemoteException; +import android.os.ServiceManager; +import android.service.euicc.EuiccProfileInfo; +import android.util.Log; + +import com.android.internal.telephony.euicc.IEuiccCardController; +import com.android.internal.telephony.euicc.IGetAllProfilesCallback; + +/** + * EuiccCardManager is the application interface to an eSIM card. + * + * @hide + * + * TODO(b/35851809): Make this a SystemApi. + */ +public class EuiccCardManager { + private static final String TAG = "EuiccCardManager"; + + /** Result code of execution with no error. */ + public static final int RESULT_OK = 0; + + /** + * Callback to receive the result of an eUICC card API. + * + * @param <T> Type of the result. + */ + public interface ResultCallback<T> { + /** + * This method will be called when an eUICC card API call is completed. + * + * @param resultCode This can be {@link #RESULT_OK} or other positive values returned by the + * eUICC. + * @param result The result object. It can be null if the {@code resultCode} is not + * {@link #RESULT_OK}. + */ + void onComplete(int resultCode, T result); + } + + private final Context mContext; + + /** @hide */ + public EuiccCardManager(Context context) { + mContext = context; + } + + private IEuiccCardController getIEuiccCardController() { + return IEuiccCardController.Stub.asInterface( + ServiceManager.getService("euicc_card_controller")); + } + + /** + * Gets all the profiles on eUicc. + * + * @param callback the callback to get the result code and all the profiles. + */ + public void getAllProfiles(ResultCallback<EuiccProfileInfo[]> callback) { + try { + getIEuiccCardController().getAllProfiles(mContext.getOpPackageName(), + new IGetAllProfilesCallback.Stub() { + @Override + public void onComplete(int resultCode, EuiccProfileInfo[] profiles) { + callback.onComplete(resultCode, profiles); + } + }); + } catch (RemoteException e) { + Log.e(TAG, "Error calling getAllProfiles", e); + throw e.rethrowFromSystemServer(); + } + } +} diff --git a/telephony/java/com/android/internal/telephony/euicc/IEuiccCardController.aidl b/telephony/java/com/android/internal/telephony/euicc/IEuiccCardController.aidl new file mode 100644 index 000000000000..2846a1ad1f9f --- /dev/null +++ b/telephony/java/com/android/internal/telephony/euicc/IEuiccCardController.aidl @@ -0,0 +1,24 @@ +/* + * Copyright (C) 2018 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 com.android.internal.telephony.euicc.IGetAllProfilesCallback; + +/** @hide */ +interface IEuiccCardController { + oneway void getAllProfiles(String callingPackage, in IGetAllProfilesCallback callback); +} diff --git a/telephony/java/com/android/internal/telephony/euicc/IGetAllProfilesCallback.aidl b/telephony/java/com/android/internal/telephony/euicc/IGetAllProfilesCallback.aidl new file mode 100644 index 000000000000..97b076846534 --- /dev/null +++ b/telephony/java/com/android/internal/telephony/euicc/IGetAllProfilesCallback.aidl @@ -0,0 +1,23 @@ +/* + * Copyright (C) 2018 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.service.euicc.EuiccProfileInfo; + +/** @hide */ +oneway interface IGetAllProfilesCallback { + void onComplete(int resultCode, in EuiccProfileInfo[] profiles); +} |