Merge "Add EID into SIM status dialog"
diff --git a/res/layout/dialog_sim_status.xml b/res/layout/dialog_sim_status.xml
index 66b17d7..66d583b 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"/>
+
+ <TextView
+ style="@style/device_info_dialog_label"
+ android:id="@+id/esim_id_label"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:text="@string/status_esim_id"/>
+ <TextView
+ style="@style/device_info_dialog_value"
+ android:id="@+id/esim_id_value"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:text="@string/device_info_not_available"/>
</LinearLayout>
</ScrollView>
diff --git a/res/values/strings.xml b/res/values/strings.xml
index 4e76d5d..800113e 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -2765,6 +2765,8 @@
<string name="status_latest_area_info">Operator info</string>
<!-- About phone, status item title. The status of data access. For example, the value may be "Connected" -->
<string name="status_data_state">Mobile network state</string>
+ <!-- About phone, status item title. The ID of embedded SIM card. -->
+ <string name="status_esim_id">EID</string>
<!-- About phone, status item title. The status of whether we have service. for example, the value may be "In service" -->
<string name="status_service_state">Service state</string>
<!-- About phone, status item title. The current cell tower signal strength -->
diff --git a/src/com/android/settings/deviceinfo/simstatus/SimStatusDialogController.java b/src/com/android/settings/deviceinfo/simstatus/SimStatusDialogController.java
index 91440f7..af898d5 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.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.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 @@
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 @@
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 @@
}
};
-
private PhoneStateListener mPhoneStateListener;
public SimStatusDialogController(@NonNull SimStatusDialogFragment dialog, Lifecycle lifecycle,
@@ -128,6 +133,7 @@
TELEPHONY_SERVICE);
mCarrierConfigManager = (CarrierConfigManager) mContext.getSystemService(
CARRIER_CONFIG_SERVICE);
+ mEuiccManager = new EuiccManagerWrapper(mContext);
mRes = mContext.getResources();
@@ -137,6 +143,8 @@
}
public void initialize() {
+ updateEid();
+
if (mSubscriptionInfo == null) {
return;
}
@@ -363,6 +371,10 @@
}
}
+ private void updateEid() {
+ mDialog.setText(EID_INFO_VALUE_ID, mEuiccManager.getEid());
+ }
+
private SubscriptionInfo getPhoneSubscriptionInfo(int slotId) {
final List<SubscriptionInfo> 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 0000000..2a51526
--- /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.
+ *
+ * <p>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 cea4580..b10de63 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 @@
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 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 @@
private CarrierConfigManager mCarrierConfigManager;
@Mock
private PersistableBundle mPersistableBundle;
-
+ @Mock
+ private EuiccManagerWrapper mEuiccManager;
private SimStatusDialogController mController;
private Context mContext;
@@ -107,15 +110,18 @@
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 @@
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);
+ }
}