diff options
| -rw-r--r-- | Android.bp | 1 | ||||
| -rw-r--r-- | core/java/android/service/euicc/EuiccService.java | 42 | ||||
| -rw-r--r-- | core/java/android/service/euicc/IEuiccService.aidl | 2 | ||||
| -rw-r--r-- | core/java/android/service/euicc/IOtaStatusChangedCallback.aidl | 22 | ||||
| -rw-r--r-- | core/res/AndroidManifest.xml | 1 | ||||
| -rw-r--r-- | telephony/java/android/telephony/euicc/EuiccManager.java | 14 |
6 files changed, 82 insertions, 0 deletions
diff --git a/Android.bp b/Android.bp index 69ee848cadad..77c8f1b0e978 100644 --- a/Android.bp +++ b/Android.bp @@ -257,6 +257,7 @@ java_library { "core/java/android/service/euicc/IGetEuiccInfoCallback.aidl", "core/java/android/service/euicc/IGetEuiccProfileInfoListCallback.aidl", "core/java/android/service/euicc/IGetOtaStatusCallback.aidl", + "core/java/android/service/euicc/IOtaStatusChangedCallback.aidl", "core/java/android/service/euicc/IRetainSubscriptionsForFactoryResetCallback.aidl", "core/java/android/service/euicc/ISwitchToSubscriptionCallback.aidl", "core/java/android/service/euicc/IUpdateSubscriptionNicknameCallback.aidl", diff --git a/core/java/android/service/euicc/EuiccService.java b/core/java/android/service/euicc/EuiccService.java index fb530074d5b0..be8580074f73 100644 --- a/core/java/android/service/euicc/EuiccService.java +++ b/core/java/android/service/euicc/EuiccService.java @@ -193,6 +193,18 @@ public abstract class EuiccService extends Service { } /** + * Callback class for {@link #onStartOtaIfNecessary(int, OtaStatusChangedCallback)} + * + * The status of OTA which can be {@code android.telephony.euicc.EuiccManager#EUICC_OTA_} + * + * @see IEuiccService#startOtaIfNecessary + */ + public interface OtaStatusChangedCallback { + /** Called when OTA status is changed. */ + void onOtaStatusChanged(int status); + } + + /** * Return the EID of the eUICC. * * @param slotId ID of the SIM slot being queried. This is currently not populated but is here @@ -214,6 +226,16 @@ public abstract class EuiccService extends Service { public abstract @OtaStatus int onGetOtaStatus(int slotId); /** + * Perform OTA if current OS is not the latest one. + * + * @param slotId ID of the SIM slot to use for the operation. This is currently not populated + * but is here to future-proof the APIs. + * @param statusChangedCallback Function called when OTA status changed. + */ + public abstract void onStartOtaIfNecessary( + int slotId, OtaStatusChangedCallback statusChangedCallback); + + /** * Populate {@link DownloadableSubscription} metadata for the given downloadable subscription. * * @param slotId ID of the SIM slot to use for the operation. This is currently not populated @@ -396,6 +418,26 @@ public abstract class EuiccService extends Service { } @Override + public void startOtaIfNecessary( + int slotId, IOtaStatusChangedCallback statusChangedCallback) { + mExecutor.execute(new Runnable() { + @Override + public void run() { + EuiccService.this.onStartOtaIfNecessary(slotId, new OtaStatusChangedCallback() { + @Override + public void onOtaStatusChanged(int status) { + try { + statusChangedCallback.onOtaStatusChanged(status); + } catch (RemoteException e) { + // Can't communicate with the phone process; ignore. + } + } + }); + } + }); + } + + @Override public void getOtaStatus(int slotId, IGetOtaStatusCallback callback) { mExecutor.execute(new Runnable() { @Override diff --git a/core/java/android/service/euicc/IEuiccService.aidl b/core/java/android/service/euicc/IEuiccService.aidl index a24e5c35c1cb..45be52740f32 100644 --- a/core/java/android/service/euicc/IEuiccService.aidl +++ b/core/java/android/service/euicc/IEuiccService.aidl @@ -25,6 +25,7 @@ import android.service.euicc.IGetEidCallback; import android.service.euicc.IGetEuiccInfoCallback; import android.service.euicc.IGetEuiccProfileInfoListCallback; import android.service.euicc.IGetOtaStatusCallback; +import android.service.euicc.IOtaStatusChangedCallback; import android.service.euicc.IRetainSubscriptionsForFactoryResetCallback; import android.service.euicc.ISwitchToSubscriptionCallback; import android.service.euicc.IUpdateSubscriptionNicknameCallback; @@ -39,6 +40,7 @@ oneway interface IEuiccService { boolean forceDeactivateSim, in IGetDownloadableSubscriptionMetadataCallback callback); void getEid(int slotId, in IGetEidCallback callback); void getOtaStatus(int slotId, in IGetOtaStatusCallback callback); + void startOtaIfNecessary(int slotId, in IOtaStatusChangedCallback statusChangedCallback); void getEuiccProfileInfoList(int slotId, in IGetEuiccProfileInfoListCallback callback); void getDefaultDownloadableSubscriptionList(int slotId, boolean forceDeactivateSim, in IGetDefaultDownloadableSubscriptionListCallback callback); diff --git a/core/java/android/service/euicc/IOtaStatusChangedCallback.aidl b/core/java/android/service/euicc/IOtaStatusChangedCallback.aidl new file mode 100644 index 000000000000..caec75f13f61 --- /dev/null +++ b/core/java/android/service/euicc/IOtaStatusChangedCallback.aidl @@ -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 IOtaStatusChangedCallback { + void onOtaStatusChanged(int status); +}
\ No newline at end of file diff --git a/core/res/AndroidManifest.xml b/core/res/AndroidManifest.xml index 52bfcdebf436..e49bb1234833 100644 --- a/core/res/AndroidManifest.xml +++ b/core/res/AndroidManifest.xml @@ -566,6 +566,7 @@ <!-- Made protected in P (was introduced in JB-MR2) --> <protected-broadcast android:name="android.intent.action.GET_RESTRICTION_ENTRIES" /> + <protected-broadcast android:name="android.telephony.euicc.action.OTA_STATUS_CHANGED" /> <!-- ====================================================================== --> <!-- RUNTIME PERMISSIONS --> diff --git a/telephony/java/android/telephony/euicc/EuiccManager.java b/telephony/java/android/telephony/euicc/EuiccManager.java index 176057ddc23e..39c6c2b3bb38 100644 --- a/telephony/java/android/telephony/euicc/EuiccManager.java +++ b/telephony/java/android/telephony/euicc/EuiccManager.java @@ -60,6 +60,20 @@ public class EuiccManager { public static final String ACTION_MANAGE_EMBEDDED_SUBSCRIPTIONS = "android.telephony.euicc.action.MANAGE_EMBEDDED_SUBSCRIPTIONS"; + + /** + * Broadcast Action: The eUICC OTA status is changed. + * <p class="note"> + * Requires the {@link android.Manifest.permission#WRITE_EMBEDDED_SUBSCRIPTIONS} permission. + * + * <p class="note">This is a protected intent that can only be sent + * by the system. + * TODO(b/35851809): Make this a SystemApi. + */ + @SdkConstant(SdkConstant.SdkConstantType.BROADCAST_INTENT_ACTION) + public static final String ACTION_OTA_STATUS_CHANGED + = "android.telephony.euicc.action.OTA_STATUS_CHANGED"; + /** * Intent action to provision an embedded subscription. * |