From 37f14c0ef639a9b269ab708958e7879874376399 Mon Sep 17 00:00:00 2001 From: Qingxi Li Date: Fri, 5 Jan 2018 17:37:02 -0800 Subject: [PATCH] Add EID into SIM status dialog Bug: 68761649 Test: make RunSettingsRoboTests Change-Id: Ifdcf2abe6fa56a002841610d2652cc7364b23417 --- res/layout/dialog_sim_status.xml | 13 +++++ res/values/strings.xml | 2 + .../simstatus/SimStatusDialogController.java | 14 +++++- .../settings/wrapper/EuiccManagerWrapper.java | 49 +++++++++++++++++++ .../SimStatusDialogControllerTest.java | 18 ++++++- 5 files changed, 94 insertions(+), 2 deletions(-) create mode 100644 src/com/android/settings/wrapper/EuiccManagerWrapper.java diff --git a/res/layout/dialog_sim_status.xml b/res/layout/dialog_sim_status.xml index 66b17d7b796..66d583be31a 100644 --- a/res/layout/dialog_sim_status.xml +++ b/res/layout/dialog_sim_status.xml @@ -141,5 +141,18 @@ android:layout_width="match_parent" android:layout_height="wrap_content" android:text="@string/device_info_not_available"/> + + + diff --git a/res/values/strings.xml b/res/values/strings.xml index 4182fd95f3b..68bc0eee436 100644 --- a/res/values/strings.xml +++ b/res/values/strings.xml @@ -2755,6 +2755,8 @@ Operator info Mobile network state + + EID Service state diff --git a/src/com/android/settings/deviceinfo/simstatus/SimStatusDialogController.java b/src/com/android/settings/deviceinfo/simstatus/SimStatusDialogController.java index 91440f7d871..af898d55a57 100644 --- a/src/com/android/settings/deviceinfo/simstatus/SimStatusDialogController.java +++ b/src/com/android/settings/deviceinfo/simstatus/SimStatusDialogController.java @@ -26,6 +26,7 @@ import android.content.Intent; import android.content.IntentFilter; import android.content.pm.PackageManager; import android.content.res.Resources; +import android.os.AsyncTask; import android.os.Bundle; import android.os.PersistableBundle; import android.os.UserHandle; @@ -41,10 +42,12 @@ import android.telephony.SubscriptionManager; import android.telephony.TelephonyManager; import android.text.BidiFormatter; import android.text.TextDirectionHeuristics; +import android.telephony.euicc.EuiccManager; import android.text.TextUtils; import android.util.Log; import com.android.settings.R; +import com.android.settings.wrapper.EuiccManagerWrapper; import com.android.settingslib.DeviceInfoUtils; import com.android.settingslib.core.lifecycle.Lifecycle; import com.android.settingslib.core.lifecycle.LifecycleObserver; @@ -81,6 +84,8 @@ public class SimStatusDialogController implements LifecycleObserver, OnResume, O final static int ICCID_INFO_LABEL_ID = R.id.icc_id_label; @VisibleForTesting final static int ICCID_INFO_VALUE_ID = R.id.icc_id_value; + @VisibleForTesting + final static int EID_INFO_VALUE_ID = R.id.esim_id_value; private final static String CB_AREA_INFO_RECEIVED_ACTION = "com.android.cellbroadcastreceiver.CB_AREA_INFO_RECEIVED"; @@ -92,6 +97,7 @@ public class SimStatusDialogController implements LifecycleObserver, OnResume, O private final SubscriptionInfo mSubscriptionInfo; private final TelephonyManager mTelephonyManager; private final CarrierConfigManager mCarrierConfigManager; + private final EuiccManagerWrapper mEuiccManager; private final Resources mRes; private final Context mContext; @@ -116,7 +122,6 @@ public class SimStatusDialogController implements LifecycleObserver, OnResume, O } }; - private PhoneStateListener mPhoneStateListener; public SimStatusDialogController(@NonNull SimStatusDialogFragment dialog, Lifecycle lifecycle, @@ -128,6 +133,7 @@ public class SimStatusDialogController implements LifecycleObserver, OnResume, O TELEPHONY_SERVICE); mCarrierConfigManager = (CarrierConfigManager) mContext.getSystemService( CARRIER_CONFIG_SERVICE); + mEuiccManager = new EuiccManagerWrapper(mContext); mRes = mContext.getResources(); @@ -137,6 +143,8 @@ public class SimStatusDialogController implements LifecycleObserver, OnResume, O } public void initialize() { + updateEid(); + if (mSubscriptionInfo == null) { return; } @@ -363,6 +371,10 @@ public class SimStatusDialogController implements LifecycleObserver, OnResume, O } } + private void updateEid() { + mDialog.setText(EID_INFO_VALUE_ID, mEuiccManager.getEid()); + } + private SubscriptionInfo getPhoneSubscriptionInfo(int slotId) { final List subscriptionInfoList = SubscriptionManager.from( mContext).getActiveSubscriptionInfoList(); diff --git a/src/com/android/settings/wrapper/EuiccManagerWrapper.java b/src/com/android/settings/wrapper/EuiccManagerWrapper.java new file mode 100644 index 00000000000..2a515260941 --- /dev/null +++ b/src/com/android/settings/wrapper/EuiccManagerWrapper.java @@ -0,0 +1,49 @@ +/* + * 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.settings.wrapper; + +import android.annotation.Nullable; +import android.content.Context; +import android.telephony.euicc.EuiccManager; + +/** + * This class replicates a subset of the {@link android.telephony.euicc.EuiccManager}. + * The interface exists so that we can use a thin wrapper around the EuiccManager in + * production code and a mock in tests. + */ +public class EuiccManagerWrapper { + + private final EuiccManager mEuiccManager; + + public EuiccManagerWrapper(Context context) { + mEuiccManager = (EuiccManager) context.getSystemService(Context.EUICC_SERVICE); + } + + /** + * Returns the EID identifying the eUICC hardware. + * + *

Requires that the calling app has carrier privileges on the active subscription on the + * eUICC. + * + * @return the EID. May be null if {@link EuiccManager#isEnabled()} is false or the eUICC is not + * ready. + */ + @Nullable + public String getEid() { + return mEuiccManager.getEid(); + } +} diff --git a/tests/robotests/src/com/android/settings/deviceinfo/simstatus/SimStatusDialogControllerTest.java b/tests/robotests/src/com/android/settings/deviceinfo/simstatus/SimStatusDialogControllerTest.java index cea4580365c..b10de633151 100644 --- a/tests/robotests/src/com/android/settings/deviceinfo/simstatus/SimStatusDialogControllerTest.java +++ b/tests/robotests/src/com/android/settings/deviceinfo/simstatus/SimStatusDialogControllerTest.java @@ -18,6 +18,7 @@ package com.android.settings.deviceinfo.simstatus; import static com.android.settings.deviceinfo.simstatus.SimStatusDialogController .CELLULAR_NETWORK_TYPE_VALUE_ID; +import static com.android.settings.deviceinfo.simstatus.SimStatusDialogController.EID_INFO_VALUE_ID; import static com.android.settings.deviceinfo.simstatus.SimStatusDialogController .ICCID_INFO_LABEL_ID; import static com.android.settings.deviceinfo.simstatus.SimStatusDialogController @@ -60,6 +61,7 @@ import android.telephony.TelephonyManager; import com.android.settings.R; import com.android.settings.TestConfig; import com.android.settings.testutils.SettingsRobolectricTestRunner; +import com.android.settings.wrapper.EuiccManagerWrapper; import com.android.settingslib.core.lifecycle.Lifecycle; import org.junit.Before; @@ -91,7 +93,8 @@ public class SimStatusDialogControllerTest { private CarrierConfigManager mCarrierConfigManager; @Mock private PersistableBundle mPersistableBundle; - + @Mock + private EuiccManagerWrapper mEuiccManager; private SimStatusDialogController mController; private Context mContext; @@ -107,15 +110,18 @@ public class SimStatusDialogControllerTest { mLifecycle = new Lifecycle(mLifecycleOwner); mController = spy( new SimStatusDialogController(mDialog, mLifecycle, 0 /* phone id */)); + mEuiccManager = spy(new EuiccManagerWrapper(mContext)); doReturn(mServiceState).when(mController).getCurrentServiceState(); doReturn(0).when(mController).getDbm(any()); doReturn(0).when(mController).getAsuLevel(any()); doReturn(mPhoneStateListener).when(mController).getPhoneStateListener(); doReturn("").when(mController).getPhoneNumber(); doReturn(mSignalStrength).when(mController).getSignalStrength(); + doReturn("").when(mEuiccManager).getEid(); ReflectionHelpers.setField(mController, "mTelephonyManager", mTelephonyManager); ReflectionHelpers.setField(mController, "mCarrierConfigManager", mCarrierConfigManager); ReflectionHelpers.setField(mController, "mSubscriptionInfo", mSubscriptionInfo); + ReflectionHelpers.setField(mController, "mEuiccManager", mEuiccManager); when(mCarrierConfigManager.getConfigForSubId(anyInt())).thenReturn(mPersistableBundle); } @@ -273,4 +279,14 @@ public class SimStatusDialogControllerTest { verify(mDialog).setText(ICCID_INFO_VALUE_ID, iccid); } + + @Test + public void initialize_showEid_shouldSetEidToSetting() { + final String eid = "12351351231241"; + doReturn(eid).when(mEuiccManager).getEid(); + + mController.initialize(); + + verify(mDialog).setText(EID_INFO_VALUE_ID, eid); + } }