Merge "[Setting] Use @SystemApi to replace the hidden api"
diff --git a/AndroidManifest.xml b/AndroidManifest.xml
index ba74aa8..94b8e12 100644
--- a/AndroidManifest.xml
+++ b/AndroidManifest.xml
@@ -39,6 +39,7 @@
<uses-permission android:name="android.permission.FOREGROUND_SERVICE"/>
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.CLEAR_APP_USER_DATA" />
+ <uses-permission android:name="android.permission.READ_PRIVILEGED_PHONE_STATE" />
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<uses-permission android:name="android.permission.MODIFY_PHONE_STATE" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
diff --git a/res/values/arrays.xml b/res/values/arrays.xml
index 65d9c2e..753e924 100644
--- a/res/values/arrays.xml
+++ b/res/values/arrays.xml
@@ -457,6 +457,11 @@
<item>1xRTT</item>
<item>IS95B</item>
<item>IS95A</item>
+ <item>GSM</item>
+ <item>TD_SCDMA</item>
+ <item>IWLAN</item>
+ <item>LTE_CA</item>
+ <item>NR</item>
</string-array>
<string-array translatable="false" name="bearer_values">
@@ -492,6 +497,16 @@
<item>5</item>
<!-- Do not translate. -->
<item>4</item>
+ <!-- Do not translate. -->
+ <item>16</item>
+ <!-- Do not translate. -->
+ <item>17</item>
+ <!-- Do not translate. -->
+ <item>18</item>
+ <!-- Do not translate. -->
+ <item>19</item>
+ <!-- Do not translate. -->
+ <item>20</item>
</string-array>
<!-- MVNO Info used in APN editor -->
diff --git a/res/values/dimens.xml b/res/values/dimens.xml
index f31a266..001578a 100755
--- a/res/values/dimens.xml
+++ b/res/values/dimens.xml
@@ -218,8 +218,8 @@
<dimen name="fingerprint_finish_max_size">288dp</dimen>
<!-- Face -->
- <dimen name="face_preview_translate_y">0dp</dimen>
- <dimen name="face_preview_translate_x">0dp</dimen>
+ <item name="face_preview_translate_y" format="float" type="dimen">0</item>
+ <item name="face_preview_translate_x" format="float" type="dimen">0</item>
<item name="face_preview_scale" format="float" type="dimen">1.0</item>
<!-- Confirm device credentials -->
diff --git a/src/com/android/settings/SettingsDumpService.java b/src/com/android/settings/SettingsDumpService.java
index a57e983..501536a 100644
--- a/src/com/android/settings/SettingsDumpService.java
+++ b/src/com/android/settings/SettingsDumpService.java
@@ -103,7 +103,7 @@
DataUsageController controller = new DataUsageController(this);
ConnectivityManager connectivityManager = getSystemService(ConnectivityManager.class);
SubscriptionManager manager = SubscriptionManager.from(this);
- TelephonyManager telephonyManager = TelephonyManager.from(this);
+ TelephonyManager telephonyManager = this.getSystemService(TelephonyManager.class);
if (connectivityManager.isNetworkSupported(ConnectivityManager.TYPE_MOBILE)) {
JSONArray array = new JSONArray();
for (SubscriptionInfo info : manager.getAllSubscriptionInfoList()) {
diff --git a/src/com/android/settings/biometrics/face/FaceEnrollPreviewFragment.java b/src/com/android/settings/biometrics/face/FaceEnrollPreviewFragment.java
index 8806712..853ca7c 100644
--- a/src/com/android/settings/biometrics/face/FaceEnrollPreviewFragment.java
+++ b/src/com/android/settings/biometrics/face/FaceEnrollPreviewFragment.java
@@ -18,6 +18,7 @@
import android.app.settings.SettingsEnums;
import android.content.Context;
+import android.graphics.Matrix;
import android.graphics.SurfaceTexture;
import android.hardware.camera2.CameraAccessException;
import android.hardware.camera2.CameraCaptureSession;
@@ -316,14 +317,19 @@
scaleX = scaleX / smaller;
scaleY = scaleY / smaller;
- // Apply the transformation/scale
- mTextureView.setTranslationX(getResources().getDimension(R.dimen.face_preview_translate_x));
- mTextureView.setTranslationY(getResources().getDimension(R.dimen.face_preview_translate_y));
-
+ final TypedValue tx = new TypedValue();
+ final TypedValue ty = new TypedValue();
final TypedValue scale = new TypedValue();
+ getResources().getValue(R.dimen.face_preview_translate_x, tx, true /* resolveRefs */);
+ getResources().getValue(R.dimen.face_preview_translate_y, ty, true /* resolveRefs */);
getResources().getValue(R.dimen.face_preview_scale, scale, true /* resolveRefs */);
- mTextureView.setScaleX(scaleX * scale.getFloat());
- mTextureView.setScaleY(scaleY * scale.getFloat());
+
+ // Apply the transformation/scale
+ final Matrix transform = new Matrix();
+ mTextureView.getTransform(transform);
+ transform.setScale(scaleX * scale.getFloat(), scaleY * scale.getFloat());
+ transform.postTranslate(tx.getFloat(), ty.getFloat());
+ mTextureView.setTransform(transform);
}
private void closeCamera() {
diff --git a/src/com/android/settings/datausage/DataUsageBaseFragment.java b/src/com/android/settings/datausage/DataUsageBaseFragment.java
index f6e88cc..299ce43 100644
--- a/src/com/android/settings/datausage/DataUsageBaseFragment.java
+++ b/src/com/android/settings/datausage/DataUsageBaseFragment.java
@@ -51,7 +51,7 @@
services.mPolicyEditor = new NetworkPolicyEditor(services.mPolicyManager);
- services.mTelephonyManager = TelephonyManager.from(context);
+ services.mTelephonyManager = context.getSystemService(TelephonyManager.class);
services.mSubscriptionManager = SubscriptionManager.from(context);
services.mUserManager = UserManager.get(context);
}
diff --git a/src/com/android/settings/datausage/DataUsageUtils.java b/src/com/android/settings/datausage/DataUsageUtils.java
index 0e400a2..ef3e7b6 100644
--- a/src/com/android/settings/datausage/DataUsageUtils.java
+++ b/src/com/android/settings/datausage/DataUsageUtils.java
@@ -33,7 +33,6 @@
import android.text.format.Formatter.BytesResult;
import android.util.Log;
-import java.util.ArrayList;
import java.util.List;
/**
@@ -72,7 +71,7 @@
return false;
}
- final TelephonyManager telephonyManager = TelephonyManager.from(context);
+ final TelephonyManager telephonyManager = context.getSystemService(TelephonyManager.class);
final NetworkStatsManager networkStatsManager =
context.getSystemService(NetworkStatsManager.class);
boolean hasEthernetUsage = false;
@@ -115,7 +114,7 @@
}
return false;
}
- final TelephonyManager tele = TelephonyManager.from(context);
+ final TelephonyManager tele = context.getSystemService(TelephonyManager.class);
// require both supported network and ready SIM
boolean isReady = true;
for (SubscriptionInfo subInfo : subInfoList) {
diff --git a/src/com/android/settings/deviceinfo/OWNERS b/src/com/android/settings/deviceinfo/OWNERS
new file mode 100644
index 0000000..bedbe16
--- /dev/null
+++ b/src/com/android/settings/deviceinfo/OWNERS
@@ -0,0 +1,6 @@
+# Default reviewers for this and subdirectories.
+andychou@google.com
+bonianchen@google.com
+allenwtsu@google.com
+
+# Emergency approvers in case the above are not available
diff --git a/src/com/android/settings/deviceinfo/simstatus/SimStatusDialogController.java b/src/com/android/settings/deviceinfo/simstatus/SimStatusDialogController.java
index 0751141..26d8e2b 100644
--- a/src/com/android/settings/deviceinfo/simstatus/SimStatusDialogController.java
+++ b/src/com/android/settings/deviceinfo/simstatus/SimStatusDialogController.java
@@ -25,6 +25,7 @@
import android.os.Bundle;
import android.os.PersistableBundle;
import android.os.UserHandle;
+import android.telephony.Annotation;
import android.telephony.CarrierConfigManager;
import android.telephony.CellSignalStrength;
import android.telephony.PhoneStateListener;
@@ -35,12 +36,14 @@
import android.telephony.SubscriptionManager;
import android.telephony.SubscriptionManager.OnSubscriptionsChangedListener;
import android.telephony.TelephonyManager;
+import android.telephony.UiccCardInfo;
import android.telephony.euicc.EuiccManager;
import android.text.TextUtils;
import androidx.annotation.NonNull;
import androidx.annotation.VisibleForTesting;
+import com.android.internal.telephony.PhoneConstants;
import com.android.settings.R;
import com.android.settingslib.DeviceInfoUtils;
import com.android.settingslib.Utils;
@@ -50,6 +53,7 @@
import com.android.settingslib.core.lifecycle.events.OnResume;
import java.util.List;
+import java.util.Map;
public class SimStatusDialogController implements LifecycleObserver, OnResume, OnPause {
@@ -82,6 +86,8 @@
@VisibleForTesting
final static int ICCID_INFO_VALUE_ID = R.id.icc_id_value;
@VisibleForTesting
+ final static int EID_INFO_LABEL_ID = R.id.esim_id_label;
+ @VisibleForTesting
final static int EID_INFO_VALUE_ID = R.id.esim_id_value;
@VisibleForTesting
final static int IMS_REGISTRATION_STATE_LABEL_ID = R.id.ims_reg_state_label;
@@ -100,15 +106,18 @@
public void onSubscriptionsChanged() {
mSubscriptionInfo = mSubscriptionManager.getActiveSubscriptionInfo(
mSubscriptionInfo.getSubscriptionId());
+ mTelephonyManager = mTelephonyManager.createForSubscriptionId(
+ mSubscriptionInfo.getSubscriptionId());
updateNetworkProvider();
}
};
private SubscriptionInfo mSubscriptionInfo;
- private int mSlotIndex;
+
+ private final int mSlotIndex;
+ private TelephonyManager mTelephonyManager;
private final SimStatusDialogFragment mDialog;
- private final TelephonyManager mTelephonyManager;
private final SubscriptionManager mSubscriptionManager;
private final CarrierConfigManager mCarrierConfigManager;
private final EuiccManager mEuiccManager;
@@ -166,11 +175,13 @@
mPhoneStateListener = getPhoneStateListener();
updateNetworkProvider();
- final ServiceState serviceState = getCurrentServiceState();
+ final ServiceState serviceState = mTelephonyManager.getServiceState();
+ final SignalStrength signalStrength = mTelephonyManager.getSignalStrength();
+
updatePhoneNumber();
updateLatestAreaInfo();
updateServiceState(serviceState);
- updateSignalStrength(getSignalStrength());
+ updateSignalStrength(signalStrength);
updateNetworkType();
updateRoamingStatus(serviceState);
updateIccidNumber();
@@ -182,12 +193,12 @@
if (mSubscriptionInfo == null) {
return;
}
-
- mTelephonyManager.createForSubscriptionId(mSubscriptionInfo.getSubscriptionId())
- .listen(mPhoneStateListener,
- PhoneStateListener.LISTEN_DATA_CONNECTION_STATE
- | PhoneStateListener.LISTEN_SIGNAL_STRENGTHS
- | PhoneStateListener.LISTEN_SERVICE_STATE);
+ mTelephonyManager = mTelephonyManager.createForSubscriptionId(
+ mSubscriptionInfo.getSubscriptionId());
+ mTelephonyManager.listen(mPhoneStateListener,
+ PhoneStateListener.LISTEN_DATA_CONNECTION_STATE
+ | PhoneStateListener.LISTEN_SIGNAL_STRENGTHS
+ | PhoneStateListener.LISTEN_SERVICE_STATE);
mSubscriptionManager.addOnSubscriptionsChangedListener(mOnSubscriptionsChangedListener);
if (mShowLatestAreaInfo) {
@@ -209,8 +220,7 @@
}
mSubscriptionManager.removeOnSubscriptionsChangedListener(mOnSubscriptionsChangedListener);
- mTelephonyManager.createForSubscriptionId(mSubscriptionInfo.getSubscriptionId())
- .listen(mPhoneStateListener, PhoneStateListener.LISTEN_NONE);
+ mTelephonyManager.listen(mPhoneStateListener, PhoneStateListener.LISTEN_NONE);
if (mShowLatestAreaInfo) {
mContext.unregisterReceiver(mAreaInfoReceiver);
@@ -313,7 +323,7 @@
return;
}
- ServiceState serviceState = getCurrentServiceState();
+ ServiceState serviceState = mTelephonyManager.getServiceState();
if (serviceState == null || !Utils.isInService(serviceState)) {
return;
}
@@ -342,13 +352,13 @@
String dataNetworkTypeName = null;
String voiceNetworkTypeName = null;
final int subId = mSubscriptionInfo.getSubscriptionId();
- final int actualDataNetworkType = mTelephonyManager.getDataNetworkType(subId);
- final int actualVoiceNetworkType = mTelephonyManager.getVoiceNetworkType(subId);
+ final int actualDataNetworkType = mTelephonyManager.getDataNetworkType();
+ final int actualVoiceNetworkType = mTelephonyManager.getVoiceNetworkType();
if (TelephonyManager.NETWORK_TYPE_UNKNOWN != actualDataNetworkType) {
- dataNetworkTypeName = mTelephonyManager.getNetworkTypeName(actualDataNetworkType);
+ dataNetworkTypeName = getNetworkTypeName(actualDataNetworkType);
}
if (TelephonyManager.NETWORK_TYPE_UNKNOWN != actualVoiceNetworkType) {
- voiceNetworkTypeName = mTelephonyManager.getNetworkTypeName(actualVoiceNetworkType);
+ voiceNetworkTypeName = getNetworkTypeName(actualVoiceNetworkType);
}
boolean show4GForLTE = false;
@@ -393,15 +403,48 @@
mDialog.removeSettingFromScreen(ICCID_INFO_LABEL_ID);
mDialog.removeSettingFromScreen(ICCID_INFO_VALUE_ID);
} else {
- mDialog.setText(ICCID_INFO_VALUE_ID, getSimSerialNumber(subscriptionId));
+ mDialog.setText(ICCID_INFO_VALUE_ID, mTelephonyManager.getSimSerialNumber());
}
}
private void updateEid() {
- if (mEuiccManager.isEnabled()) {
- mDialog.setText(EID_INFO_VALUE_ID, mEuiccManager.getEid());
- } else {
+ boolean shouldHaveEid = false;
+ String eid = null;
+
+ if (mTelephonyManager.getPhoneCount() > PhoneConstants.MAX_PHONE_COUNT_SINGLE_SIM) {
+ // Get EID per-SIM in multi-SIM mode
+ Map<Integer, Integer> mapping = mTelephonyManager.getLogicalToPhysicalSlotMapping();
+ int pSlotId = mapping.getOrDefault(mSlotIndex,
+ SubscriptionManager.INVALID_SIM_SLOT_INDEX);
+
+ if (pSlotId != SubscriptionManager.INVALID_SIM_SLOT_INDEX) {
+ List<UiccCardInfo> infos = mTelephonyManager.getUiccCardsInfo();
+
+ for (UiccCardInfo info : infos) {
+ if (info.getSlotIndex() == pSlotId) {
+ if (info.isEuicc()) {
+ shouldHaveEid = true;
+ eid = info.getEid();
+
+ if (TextUtils.isEmpty(eid)) {
+ eid = mEuiccManager.createForCardId(info.getCardId()).getEid();
+ }
+ }
+ break;
+ }
+ }
+ }
+ } else if (mEuiccManager.isEnabled()) {
+ // Get EID of default eSIM in single-SIM mode
+ shouldHaveEid = true;
+ eid = mEuiccManager.getEid();
+ }
+
+ if (!shouldHaveEid) {
+ mDialog.removeSettingFromScreen(EID_INFO_LABEL_ID);
mDialog.removeSettingFromScreen(EID_INFO_VALUE_ID);
+ } else if (!TextUtils.isEmpty(eid)) {
+ mDialog.setText(EID_INFO_VALUE_ID, eid);
}
}
@@ -426,12 +469,6 @@
return SubscriptionManager.from(mContext).getActiveSubscriptionInfoForSimSlotIndex(slotId);
}
- @VisibleForTesting
- ServiceState getCurrentServiceState() {
- return mTelephonyManager.getServiceStateForSubscriber(
- mSubscriptionInfo.getSubscriptionId());
- }
-
private int getDbm(SignalStrength signalStrength) {
List<CellSignalStrength> cellSignalStrengthList = signalStrength.getCellSignalStrengths();
int dbm = -1;
@@ -490,12 +527,50 @@
}
@VisibleForTesting
- SignalStrength getSignalStrength() {
- return mTelephonyManager.getSignalStrength();
- }
-
- @VisibleForTesting
- String getSimSerialNumber(int subscriptionId) {
- return mTelephonyManager.getSimSerialNumber(subscriptionId);
+ static String getNetworkTypeName(@Annotation.NetworkType int type) {
+ switch (type) {
+ case TelephonyManager.NETWORK_TYPE_GPRS:
+ return "GPRS";
+ case TelephonyManager.NETWORK_TYPE_EDGE:
+ return "EDGE";
+ case TelephonyManager.NETWORK_TYPE_UMTS:
+ return "UMTS";
+ case TelephonyManager.NETWORK_TYPE_HSDPA:
+ return "HSDPA";
+ case TelephonyManager.NETWORK_TYPE_HSUPA:
+ return "HSUPA";
+ case TelephonyManager.NETWORK_TYPE_HSPA:
+ return "HSPA";
+ case TelephonyManager.NETWORK_TYPE_CDMA:
+ return "CDMA";
+ case TelephonyManager.NETWORK_TYPE_EVDO_0:
+ return "CDMA - EvDo rev. 0";
+ case TelephonyManager.NETWORK_TYPE_EVDO_A:
+ return "CDMA - EvDo rev. A";
+ case TelephonyManager.NETWORK_TYPE_EVDO_B:
+ return "CDMA - EvDo rev. B";
+ case TelephonyManager.NETWORK_TYPE_1xRTT:
+ return "CDMA - 1xRTT";
+ case TelephonyManager.NETWORK_TYPE_LTE:
+ return "LTE";
+ case TelephonyManager.NETWORK_TYPE_EHRPD:
+ return "CDMA - eHRPD";
+ case TelephonyManager.NETWORK_TYPE_IDEN:
+ return "iDEN";
+ case TelephonyManager.NETWORK_TYPE_HSPAP:
+ return "HSPA+";
+ case TelephonyManager.NETWORK_TYPE_GSM:
+ return "GSM";
+ case TelephonyManager.NETWORK_TYPE_TD_SCDMA:
+ return "TD_SCDMA";
+ case TelephonyManager.NETWORK_TYPE_IWLAN:
+ return "IWLAN";
+ case TelephonyManager.NETWORK_TYPE_LTE_CA:
+ return "LTE_CA";
+ case TelephonyManager.NETWORK_TYPE_NR:
+ return "NR";
+ default:
+ return "UNKNOWN";
+ }
}
}
diff --git a/src/com/android/settings/network/MobileDataContentObserver.java b/src/com/android/settings/network/MobileDataContentObserver.java
index b8a1c8c..15e726f 100644
--- a/src/com/android/settings/network/MobileDataContentObserver.java
+++ b/src/com/android/settings/network/MobileDataContentObserver.java
@@ -33,9 +33,13 @@
super(handler);
}
- public static Uri getObservableUri(int subId) {
+ /**
+ * Return a URI of mobile data(ON vs OFF)
+ */
+ public static Uri getObservableUri(Context context, int subId) {
Uri uri = Settings.Global.getUriFor(Settings.Global.MOBILE_DATA);
- if (TelephonyManager.getDefault().getSimCount() != 1) {
+ TelephonyManager telephonyManager = context.getSystemService(TelephonyManager.class);
+ if (telephonyManager.getSimCount() != 1) {
uri = Settings.Global.getUriFor(Settings.Global.MOBILE_DATA + subId);
}
return uri;
@@ -54,7 +58,7 @@
}
public void register(Context context, int subId) {
- final Uri uri = getObservableUri(subId);
+ final Uri uri = getObservableUri(context, subId);
context.getContentResolver().registerContentObserver(uri, false, this);
}
diff --git a/src/com/android/settings/network/OWNERS b/src/com/android/settings/network/OWNERS
new file mode 100644
index 0000000..bedbe16
--- /dev/null
+++ b/src/com/android/settings/network/OWNERS
@@ -0,0 +1,6 @@
+# Default reviewers for this and subdirectories.
+andychou@google.com
+bonianchen@google.com
+allenwtsu@google.com
+
+# Emergency approvers in case the above are not available
diff --git a/src/com/android/settings/network/telephony/DataServiceSetupPreferenceController.java b/src/com/android/settings/network/telephony/DataServiceSetupPreferenceController.java
index d1fbd73..46f398c 100644
--- a/src/com/android/settings/network/telephony/DataServiceSetupPreferenceController.java
+++ b/src/com/android/settings/network/telephony/DataServiceSetupPreferenceController.java
@@ -63,7 +63,8 @@
public void init(int subId) {
mSubId = subId;
- mTelephonyManager = TelephonyManager.from(mContext).createForSubscriptionId(mSubId);
+ mTelephonyManager = mContext.getSystemService(TelephonyManager.class)
+ .createForSubscriptionId(mSubId);
}
@Override
diff --git a/src/com/android/settings/network/telephony/EnabledNetworkModePreferenceController.java b/src/com/android/settings/network/telephony/EnabledNetworkModePreferenceController.java
index 3abb36a..675a1ba 100644
--- a/src/com/android/settings/network/telephony/EnabledNetworkModePreferenceController.java
+++ b/src/com/android/settings/network/telephony/EnabledNetworkModePreferenceController.java
@@ -27,7 +27,6 @@
import android.provider.Settings;
import android.telephony.CarrierConfigManager;
import android.telephony.RadioAccessFamily;
-import android.telephony.ServiceState;
import android.telephony.SubscriptionManager;
import android.telephony.TelephonyManager;
import android.text.TextUtils;
@@ -148,7 +147,8 @@
public void init(Lifecycle lifecycle, int subId) {
mSubId = subId;
final PersistableBundle carrierConfig = mCarrierConfigManager.getConfigForSubId(mSubId);
- mTelephonyManager = TelephonyManager.from(mContext).createForSubscriptionId(mSubId);
+ mTelephonyManager = mContext.getSystemService(TelephonyManager.class)
+ .createForSubscriptionId(mSubId);
final boolean isLteOnCdma =
mTelephonyManager.getLteOnCdmaMode() == PhoneConstants.LTE_ON_CDMA_TRUE;
diff --git a/src/com/android/settings/network/telephony/MmsMessagePreferenceController.java b/src/com/android/settings/network/telephony/MmsMessagePreferenceController.java
index b8d2081..c1f2949 100644
--- a/src/com/android/settings/network/telephony/MmsMessagePreferenceController.java
+++ b/src/com/android/settings/network/telephony/MmsMessagePreferenceController.java
@@ -91,7 +91,8 @@
public void init(int subId) {
mSubId = subId;
- mTelephonyManager = TelephonyManager.from(mContext).createForSubscriptionId(mSubId);
+ mTelephonyManager = mContext.getSystemService(TelephonyManager.class)
+ .createForSubscriptionId(mSubId);
}
@Override
diff --git a/src/com/android/settings/network/telephony/MobileDataPreferenceController.java b/src/com/android/settings/network/telephony/MobileDataPreferenceController.java
index c06b78b..f18340a 100644
--- a/src/com/android/settings/network/telephony/MobileDataPreferenceController.java
+++ b/src/com/android/settings/network/telephony/MobileDataPreferenceController.java
@@ -138,7 +138,8 @@
public void init(FragmentManager fragmentManager, int subId) {
mFragmentManager = fragmentManager;
mSubId = subId;
- mTelephonyManager = TelephonyManager.from(mContext).createForSubscriptionId(mSubId);
+ mTelephonyManager = mContext.getSystemService(TelephonyManager.class)
+ .createForSubscriptionId(mSubId);
}
@VisibleForTesting
diff --git a/src/com/android/settings/network/telephony/MobileDataSlice.java b/src/com/android/settings/network/telephony/MobileDataSlice.java
index 152028c..c70ae1a 100644
--- a/src/com/android/settings/network/telephony/MobileDataSlice.java
+++ b/src/com/android/settings/network/telephony/MobileDataSlice.java
@@ -252,7 +252,7 @@
}
public void register(Context context, int subId) {
- final Uri uri = MobileDataContentObserver.getObservableUri(subId);
+ final Uri uri = MobileDataContentObserver.getObservableUri(context, subId);
context.getContentResolver().registerContentObserver(uri, false, this);
}
diff --git a/src/com/android/settings/network/telephony/MobileNetworkSettings.java b/src/com/android/settings/network/telephony/MobileNetworkSettings.java
index f1e0819..004291a 100644
--- a/src/com/android/settings/network/telephony/MobileNetworkSettings.java
+++ b/src/com/android/settings/network/telephony/MobileNetworkSettings.java
@@ -187,7 +187,8 @@
final Context context = getContext();
mUserManager = (UserManager) context.getSystemService(Context.USER_SERVICE);
- mTelephonyManager = TelephonyManager.from(context).createForSubscriptionId(mSubId);
+ mTelephonyManager = context.getSystemService(TelephonyManager.class)
+ .createForSubscriptionId(mSubId);
onRestoreInstance(icicle);
}
diff --git a/src/com/android/settings/network/telephony/PreferredNetworkModePreferenceController.java b/src/com/android/settings/network/telephony/PreferredNetworkModePreferenceController.java
index 7b24a93..89e2d5b8 100644
--- a/src/com/android/settings/network/telephony/PreferredNetworkModePreferenceController.java
+++ b/src/com/android/settings/network/telephony/PreferredNetworkModePreferenceController.java
@@ -20,7 +20,6 @@
import android.os.PersistableBundle;
import android.provider.Settings;
import android.telephony.CarrierConfigManager;
-import android.telephony.ServiceState;
import android.telephony.SubscriptionManager;
import android.telephony.TelephonyManager;
@@ -97,7 +96,8 @@
public void init(int subId) {
mSubId = subId;
final PersistableBundle carrierConfig = mCarrierConfigManager.getConfigForSubId(mSubId);
- mTelephonyManager = TelephonyManager.from(mContext).createForSubscriptionId(mSubId);
+ mTelephonyManager = mContext.getSystemService(TelephonyManager.class)
+ .createForSubscriptionId(mSubId);
final boolean isLteOnCdma =
mTelephonyManager.getLteOnCdmaMode() == PhoneConstants.LTE_ON_CDMA_TRUE;
diff --git a/src/com/android/settings/network/telephony/cdma/CdmaBasePreferenceController.java b/src/com/android/settings/network/telephony/cdma/CdmaBasePreferenceController.java
index ea7d82f..07805b0 100644
--- a/src/com/android/settings/network/telephony/cdma/CdmaBasePreferenceController.java
+++ b/src/com/android/settings/network/telephony/cdma/CdmaBasePreferenceController.java
@@ -73,7 +73,8 @@
public void init(PreferenceManager preferenceManager, int subId) {
mPreferenceManager = preferenceManager;
mSubId = subId;
- mTelephonyManager = TelephonyManager.from(mContext).createForSubscriptionId(mSubId);
+ mTelephonyManager = mContext.getSystemService(TelephonyManager.class)
+ .createForSubscriptionId(mSubId);
}
public void init(int subId) {
diff --git a/src/com/android/settings/network/telephony/cdma/CdmaListPreference.java b/src/com/android/settings/network/telephony/cdma/CdmaListPreference.java
index 14c7169..2cb1840 100644
--- a/src/com/android/settings/network/telephony/cdma/CdmaListPreference.java
+++ b/src/com/android/settings/network/telephony/cdma/CdmaListPreference.java
@@ -41,6 +41,7 @@
}
public void setSubId(int subId) {
- mTelephonyManager = TelephonyManager.from(getContext()).createForSubscriptionId(subId);
+ mTelephonyManager = getContext().getSystemService(TelephonyManager.class)
+ .createForSubscriptionId(subId);
}
}
diff --git a/src/com/android/settings/network/telephony/gsm/AutoSelectPreferenceController.java b/src/com/android/settings/network/telephony/gsm/AutoSelectPreferenceController.java
index 56d0b2d..626390a 100644
--- a/src/com/android/settings/network/telephony/gsm/AutoSelectPreferenceController.java
+++ b/src/com/android/settings/network/telephony/gsm/AutoSelectPreferenceController.java
@@ -144,7 +144,8 @@
public AutoSelectPreferenceController init(int subId) {
mSubId = subId;
- mTelephonyManager = TelephonyManager.from(mContext).createForSubscriptionId(mSubId);
+ mTelephonyManager = mContext.getSystemService(TelephonyManager.class)
+ .createForSubscriptionId(mSubId);
final PersistableBundle carrierConfig = mContext.getSystemService(
CarrierConfigManager.class).getConfigForSubId(mSubId);
mOnlyAutoSelectInHome = carrierConfig != null
@@ -187,4 +188,4 @@
public interface OnNetworkSelectModeListener {
void onNetworkSelectModeChanged();
}
-}
\ No newline at end of file
+}
diff --git a/src/com/android/settings/network/telephony/gsm/OpenNetworkSelectPagePreferenceController.java b/src/com/android/settings/network/telephony/gsm/OpenNetworkSelectPagePreferenceController.java
index d679373..8c3928d 100644
--- a/src/com/android/settings/network/telephony/gsm/OpenNetworkSelectPagePreferenceController.java
+++ b/src/com/android/settings/network/telephony/gsm/OpenNetworkSelectPagePreferenceController.java
@@ -29,7 +29,6 @@
import androidx.preference.PreferenceScreen;
import com.android.settings.R;
-import com.android.settings.core.BasePreferenceController;
import com.android.settings.core.SubSettingLauncher;
import com.android.settings.network.telephony.MobileNetworkUtils;
import com.android.settings.network.telephony.NetworkSelectSettings;
@@ -100,7 +99,8 @@
public OpenNetworkSelectPagePreferenceController init(int subId) {
mSubId = subId;
- mTelephonyManager = TelephonyManager.from(mContext).createForSubscriptionId(mSubId);
+ mTelephonyManager = mContext.getSystemService(TelephonyManager.class)
+ .createForSubscriptionId(mSubId);
return this;
}
diff --git a/src/com/android/settings/sim/OWNERS b/src/com/android/settings/sim/OWNERS
new file mode 100644
index 0000000..bedbe16
--- /dev/null
+++ b/src/com/android/settings/sim/OWNERS
@@ -0,0 +1,6 @@
+# Default reviewers for this and subdirectories.
+andychou@google.com
+bonianchen@google.com
+allenwtsu@google.com
+
+# Emergency approvers in case the above are not available
diff --git a/src/com/android/settings/slices/SliceBuilderUtils.java b/src/com/android/settings/slices/SliceBuilderUtils.java
index 0714b03..b3ddc58 100644
--- a/src/com/android/settings/slices/SliceBuilderUtils.java
+++ b/src/com/android/settings/slices/SliceBuilderUtils.java
@@ -240,6 +240,8 @@
searchDestination.putExtra(SettingsActivity.EXTRA_FRAGMENT_ARG_KEY, key)
.setAction("com.android.settings.SEARCH_RESULT_TRAMPOLINE")
.setComponent(null);
+ searchDestination.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_NEW_TASK);
+
return searchDestination;
}
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 2c0b4fc..782fb25 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.CELL_DATA_NETWORK_TYPE_VALUE_ID;
import static com.android.settings.deviceinfo.simstatus.SimStatusDialogController.CELL_VOICE_NETWORK_TYPE_VALUE_ID;
+import static com.android.settings.deviceinfo.simstatus.SimStatusDialogController.EID_INFO_LABEL_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.ICCID_INFO_VALUE_ID;
@@ -55,10 +56,12 @@
import android.telephony.SubscriptionInfo;
import android.telephony.SubscriptionManager;
import android.telephony.TelephonyManager;
+import android.telephony.UiccCardInfo;
import android.telephony.euicc.EuiccManager;
import androidx.lifecycle.LifecycleOwner;
+import com.android.internal.telephony.PhoneConstants;
import com.android.settings.R;
import com.android.settings.testutils.shadow.ShadowDeviceInfoUtils;
import com.android.settingslib.DeviceInfoUtils;
@@ -79,7 +82,9 @@
import org.robolectric.util.ReflectionHelpers;
import java.util.ArrayList;
+import java.util.HashMap;
import java.util.List;
+import java.util.Map;
@RunWith(RobolectricTestRunner.class)
@Config(shadows = {ShadowDeviceInfoUtils.class})
@@ -117,6 +122,9 @@
private LifecycleOwner mLifecycleOwner;
private Lifecycle mLifecycle;
+ private static final String TEST_EID_FROM_CARD = "11111111111111111111111111111111";
+ private static final String TEST_EID_FROM_MANAGER = "22222222222222222222222222222222";
+
@Before
public void setup() {
MockitoAnnotations.initMocks(this);
@@ -126,7 +134,6 @@
mLifecycle = new Lifecycle(mLifecycleOwner);
mController = spy(new SimStatusDialogController(mDialog, mLifecycle, 0 /* phone id */));
ShadowDeviceInfoUtils.setPhoneNumber("");
- doReturn(mServiceState).when(mController).getCurrentServiceState();
//CellSignalStrength setup
doReturn(0).when(mCellSignalStrengthCdma).getDbm();
doReturn(0).when(mCellSignalStrengthCdma).getAsuLevel();
@@ -137,20 +144,31 @@
doReturn(null).when(mSignalStrength).getCellSignalStrengths();
doReturn(mPhoneStateListener).when(mController).getPhoneStateListener();
- doReturn(mSignalStrength).when(mController).getSignalStrength();
doReturn(mSubscriptionInfo).when(mSubscriptionManager).getActiveSubscriptionInfo(anyInt());
- when(mEuiccManager.isEnabled()).thenReturn(true);
- when(mEuiccManager.getEid()).thenReturn("");
ReflectionHelpers.setField(mController, "mTelephonyManager", mTelephonyManager);
ReflectionHelpers.setField(mController, "mCarrierConfigManager", mCarrierConfigManager);
ReflectionHelpers.setField(mController, "mSubscriptionInfo", mSubscriptionInfo);
ReflectionHelpers.setField(mController, "mEuiccManager", mEuiccManager);
ReflectionHelpers.setField(mController, "mSubscriptionManager", mSubscriptionManager);
+
+ when(mTelephonyManager.getPhoneCount()).thenReturn(
+ PhoneConstants.MAX_PHONE_COUNT_SINGLE_SIM);
+ when(mTelephonyManager.getUiccCardsInfo()).thenReturn(new ArrayList<UiccCardInfo>());
+ when(mTelephonyManager.getLogicalToPhysicalSlotMapping()).thenReturn(
+ new HashMap<Integer, Integer>());
+
+ when(mEuiccManager.isEnabled()).thenReturn(false);
+ when(mEuiccManager.getEid()).thenReturn("");
+ when(mEuiccManager.createForCardId(anyInt())).thenReturn(mEuiccManager);
+
when(mCarrierConfigManager.getConfigForSubId(anyInt())).thenReturn(mPersistableBundle);
when(mPersistableBundle.getBoolean(
CarrierConfigManager.KEY_SHOW_SIGNAL_STRENGTH_IN_SIM_STATUS_BOOL))
.thenReturn(true);
+ when(mTelephonyManager.createForSubscriptionId(anyInt())).thenReturn(mTelephonyManager);
+ doReturn(mServiceState).when(mTelephonyManager).getServiceState();
+ doReturn(mSignalStrength).when(mTelephonyManager).getSignalStrength();
final ShadowPackageManager shadowPackageManager =
Shadows.shadowOf(RuntimeEnvironment.application.getPackageManager());
@@ -313,25 +331,25 @@
@Test
@Ignore
public void initialize_updateVoiceNetworkTypeWithEdge_shouldUpdateSettingToEdge() {
- when(mTelephonyManager.getVoiceNetworkType(anyInt())).thenReturn(
+ when(mTelephonyManager.getVoiceNetworkType()).thenReturn(
TelephonyManager.NETWORK_TYPE_EDGE);
mController.initialize();
verify(mDialog).setText(CELL_VOICE_NETWORK_TYPE_VALUE_ID,
- TelephonyManager.getNetworkTypeName(TelephonyManager.NETWORK_TYPE_EDGE));
+ SimStatusDialogController.getNetworkTypeName(TelephonyManager.NETWORK_TYPE_EDGE));
}
@Test
@Ignore
public void initialize_updateDataNetworkTypeWithEdge_shouldUpdateSettingToEdge() {
- when(mTelephonyManager.getDataNetworkType(anyInt())).thenReturn(
+ when(mTelephonyManager.getDataNetworkType()).thenReturn(
TelephonyManager.NETWORK_TYPE_EDGE);
mController.initialize();
verify(mDialog).setText(CELL_DATA_NETWORK_TYPE_VALUE_ID,
- TelephonyManager.getNetworkTypeName(TelephonyManager.NETWORK_TYPE_EDGE));
+ SimStatusDialogController.getNetworkTypeName(TelephonyManager.NETWORK_TYPE_EDGE));
}
@Test
@@ -400,7 +418,7 @@
final String iccid = "12351351231241";
when(mPersistableBundle.getBoolean(
CarrierConfigManager.KEY_SHOW_ICCID_IN_SIM_STATUS_BOOL)).thenReturn(true);
- doReturn(iccid).when(mController).getSimSerialNumber(anyInt());
+ doReturn(iccid).when(mTelephonyManager).getSimSerialNumber();
mController.initialize();
@@ -408,25 +426,283 @@
}
@Test
- @Ignore
- public void initialize_showEid_shouldSetEidToSetting() {
- final String eid = "12351351231241";
- when(mEuiccManager.getEid()).thenReturn(eid);
+ public void initialize_updateEid_shouldNotSetEid() {
+ when(mTelephonyManager.getPhoneCount()).thenReturn(PhoneConstants.MAX_PHONE_COUNT_DUAL_SIM);
+
+ ArrayList<UiccCardInfo> uiccCardInfos = new ArrayList<>();
+ UiccCardInfo uiccCardInfo1 = new UiccCardInfo(
+ false, // isEuicc
+ 0, // cardId
+ null, // eid
+ "123451234567890", // iccid
+ 0, // slotIndex
+ true); // isRemovable
+ uiccCardInfos.add(uiccCardInfo1);
+ UiccCardInfo uiccCardInfo2 = new UiccCardInfo(
+ true, // isEuicc
+ 1, // cardId
+ null, // eid (unavailable)
+ null, // iccid
+ 1, // slotIndex
+ false); // isRemovable
+ uiccCardInfos.add(uiccCardInfo2);
+ when(mTelephonyManager.getUiccCardsInfo()).thenReturn(uiccCardInfos);
+
+ Map<Integer, Integer> slotMapping = new HashMap<>();
+ slotMapping.put(0, 1);
+ slotMapping.put(1, 0);
+ when(mTelephonyManager.getLogicalToPhysicalSlotMapping()).thenReturn(slotMapping);
+
+ when(mEuiccManager.isEnabled()).thenReturn(true);
+ when(mEuiccManager.getEid()).thenReturn(null);
mController.initialize();
- verify(mDialog).setText(EID_INFO_VALUE_ID, eid);
+ // Keep 'Not available' if neither the card nor the associated manager can provide EID.
+ verify(mDialog, never()).setText(eq(EID_INFO_VALUE_ID), any());
verify(mDialog, never()).removeSettingFromScreen(eq(EID_INFO_VALUE_ID));
}
@Test
- @Ignore
- public void initialize_showEid_euiccManagerIsNotEnabled() {
- when(mEuiccManager.isEnabled()).thenReturn(false);
+ public void initialize_updateEid_shouldSetEidFromCard() {
+ when(mTelephonyManager.getPhoneCount()).thenReturn(PhoneConstants.MAX_PHONE_COUNT_DUAL_SIM);
+
+ ArrayList<UiccCardInfo> uiccCardInfos = new ArrayList<>();
+ UiccCardInfo uiccCardInfo1 = new UiccCardInfo(
+ true, // isEuicc
+ 0, // cardId
+ TEST_EID_FROM_CARD, // eid
+ null, // iccid
+ 0, // slotIndex
+ false); // isRemovable
+ uiccCardInfos.add(uiccCardInfo1);
+ UiccCardInfo uiccCardInfo2 = new UiccCardInfo(
+ false, // isEuicc
+ 1, // cardId
+ null, // eid
+ "123451234567890", // iccid
+ 1, // slotIndex
+ true); // isRemovable
+ uiccCardInfos.add(uiccCardInfo2);
+ when(mTelephonyManager.getUiccCardsInfo()).thenReturn(uiccCardInfos);
+
+ Map<Integer, Integer> slotMapping = new HashMap<>();
+ slotMapping.put(0, 0);
+ slotMapping.put(1, 1);
+ when(mTelephonyManager.getLogicalToPhysicalSlotMapping()).thenReturn(slotMapping);
+
+ when(mEuiccManager.isEnabled()).thenReturn(true);
+ when(mEuiccManager.getEid()).thenReturn(TEST_EID_FROM_MANAGER);
mController.initialize();
+ // Set EID retrieved from the card.
+ verify(mDialog).setText(EID_INFO_VALUE_ID, TEST_EID_FROM_CARD);
+ verify(mDialog, never()).removeSettingFromScreen(eq(EID_INFO_VALUE_ID));
+ }
+
+ @Test
+ public void initialize_updateEid_shouldSetEidFromManager() {
+ when(mTelephonyManager.getPhoneCount()).thenReturn(PhoneConstants.MAX_PHONE_COUNT_DUAL_SIM);
+
+ ArrayList<UiccCardInfo> uiccCardInfos = new ArrayList<>();
+ UiccCardInfo uiccCardInfo1 = new UiccCardInfo(
+ false, // isEuicc
+ 0, // cardId
+ null, // eid
+ "123451234567890", // iccid
+ 0, // slotIndex
+ true); // isRemovable
+ uiccCardInfos.add(uiccCardInfo1);
+ UiccCardInfo uiccCardInfo2 = new UiccCardInfo(
+ true, // isEuicc
+ 1, // cardId
+ null, // eid (unavailable)
+ null, // iccid
+ 1, // slotIndex
+ false); // isRemovable
+ uiccCardInfos.add(uiccCardInfo2);
+ when(mTelephonyManager.getUiccCardsInfo()).thenReturn(uiccCardInfos);
+
+ Map<Integer, Integer> slotMapping = new HashMap<>();
+ slotMapping.put(0, 1);
+ slotMapping.put(1, 0);
+ when(mTelephonyManager.getLogicalToPhysicalSlotMapping()).thenReturn(slotMapping);
+
+ when(mEuiccManager.isEnabled()).thenReturn(true);
+ when(mEuiccManager.getEid()).thenReturn(TEST_EID_FROM_MANAGER);
+ when(mEuiccManager.createForCardId(0)).thenThrow(
+ new RuntimeException("Unexpected card ID was specified"));
+ when(mEuiccManager.createForCardId(1)).thenReturn(mEuiccManager);
+
+ mController.initialize();
+
+ // Set EID retrieved from the manager associated with the card which cannot provide EID.
+ verify(mDialog).setText(EID_INFO_VALUE_ID, TEST_EID_FROM_MANAGER);
+ verify(mDialog, never()).removeSettingFromScreen(eq(EID_INFO_VALUE_ID));
+ }
+
+ @Test
+ public void initialize_updateEid_shouldRemoveEid() {
+ when(mTelephonyManager.getPhoneCount()).thenReturn(PhoneConstants.MAX_PHONE_COUNT_DUAL_SIM);
+
+ ArrayList<UiccCardInfo> uiccCardInfos = new ArrayList<>();
+ UiccCardInfo uiccCardInfo1 = new UiccCardInfo(
+ false, // isEuicc
+ 0, // cardId
+ null, // eid
+ "123451234567890", // iccid
+ 0, // slotIndex
+ true); // isRemovable
+ uiccCardInfos.add(uiccCardInfo1);
+ UiccCardInfo uiccCardInfo2 = new UiccCardInfo(
+ true, // isEuicc
+ 1, // cardId
+ TEST_EID_FROM_CARD, // eid
+ null, // iccid
+ 1, // slotIndex
+ false); // isRemovable
+ uiccCardInfos.add(uiccCardInfo2);
+ when(mTelephonyManager.getUiccCardsInfo()).thenReturn(uiccCardInfos);
+
+ Map<Integer, Integer> slotMapping = new HashMap<>();
+ slotMapping.put(0, 0);
+ slotMapping.put(1, 1);
+ when(mTelephonyManager.getLogicalToPhysicalSlotMapping()).thenReturn(slotMapping);
+
+ when(mEuiccManager.isEnabled()).thenReturn(true);
+ when(mEuiccManager.getEid()).thenReturn(TEST_EID_FROM_MANAGER);
+
+ mController.initialize();
+
+ // Remove EID if the card is not eUICC.
verify(mDialog, never()).setText(eq(EID_INFO_VALUE_ID), any());
+ verify(mDialog).removeSettingFromScreen(eq(EID_INFO_LABEL_ID));
+ verify(mDialog).removeSettingFromScreen(eq(EID_INFO_VALUE_ID));
+ }
+
+ @Test
+ public void initialize_updateEid_shouldNotSetEidInSingleSimMode() {
+ when(mTelephonyManager.getPhoneCount()).thenReturn(
+ PhoneConstants.MAX_PHONE_COUNT_SINGLE_SIM);
+
+ ArrayList<UiccCardInfo> uiccCardInfos = new ArrayList<>();
+ UiccCardInfo uiccCardInfo = new UiccCardInfo(
+ true, // isEuicc
+ 0, // cardId
+ TEST_EID_FROM_CARD, // eid (not used)
+ null, // iccid
+ 0, // slotIndex
+ false); // isRemovable
+ uiccCardInfos.add(uiccCardInfo);
+ when(mTelephonyManager.getUiccCardsInfo()).thenReturn(uiccCardInfos);
+
+ Map<Integer, Integer> slotMapping = new HashMap<>();
+ slotMapping.put(0, 0);
+ when(mTelephonyManager.getLogicalToPhysicalSlotMapping()).thenReturn(slotMapping);
+
+ when(mEuiccManager.isEnabled()).thenReturn(true);
+ when(mEuiccManager.getEid()).thenReturn(null);
+
+ mController.initialize();
+
+ // Keep 'Not available' if the default eUICC manager cannot provide EID in Single SIM mode.
+ verify(mDialog, never()).setText(eq(EID_INFO_VALUE_ID), any());
+ verify(mDialog, never()).removeSettingFromScreen(eq(EID_INFO_VALUE_ID));
+ }
+
+ @Test
+ public void initialize_updateEid_shouldSetEidInSingleSimModeWithEnabledEuicc() {
+ when(mTelephonyManager.getPhoneCount()).thenReturn(
+ PhoneConstants.MAX_PHONE_COUNT_SINGLE_SIM);
+
+ ArrayList<UiccCardInfo> uiccCardInfos = new ArrayList<>();
+ UiccCardInfo uiccCardInfo = new UiccCardInfo(
+ true, // isEuicc (eUICC slot is selected)
+ 0, // cardId
+ TEST_EID_FROM_CARD, // eid (not used)
+ null, // iccid
+ 0, // slotIndex
+ false); // isRemovable
+ uiccCardInfos.add(uiccCardInfo);
+ when(mTelephonyManager.getUiccCardsInfo()).thenReturn(uiccCardInfos);
+
+ Map<Integer, Integer> slotMapping = new HashMap<>();
+ slotMapping.put(0, 0);
+ when(mTelephonyManager.getLogicalToPhysicalSlotMapping()).thenReturn(slotMapping);
+
+ when(mEuiccManager.isEnabled()).thenReturn(true);
+ when(mEuiccManager.getEid()).thenReturn(TEST_EID_FROM_MANAGER);
+ when(mEuiccManager.createForCardId(anyInt())).thenThrow(
+ new RuntimeException("EID shall be retrieved from the default eUICC manager"));
+
+ mController.initialize();
+
+ // Set EID retrieved from the default eUICC manager in Single SIM mode.
+ verify(mDialog).setText(EID_INFO_VALUE_ID, TEST_EID_FROM_MANAGER);
+ verify(mDialog, never()).removeSettingFromScreen(eq(EID_INFO_VALUE_ID));
+ }
+
+ @Test
+ public void initialize_updateEid_shouldSetEidInSingleSimModeWithDisabledEuicc() {
+ when(mTelephonyManager.getPhoneCount()).thenReturn(
+ PhoneConstants.MAX_PHONE_COUNT_SINGLE_SIM);
+
+ ArrayList<UiccCardInfo> uiccCardInfos = new ArrayList<>();
+ UiccCardInfo uiccCardInfo = new UiccCardInfo(
+ false, // isEuicc (eUICC slot is not selected)
+ 0, // cardId
+ null, // eid
+ "123451234567890", // iccid
+ 0, // slotIndex
+ true); // isRemovable
+ uiccCardInfos.add(uiccCardInfo);
+ when(mTelephonyManager.getUiccCardsInfo()).thenReturn(uiccCardInfos);
+
+ Map<Integer, Integer> slotMapping = new HashMap<>();
+ slotMapping.put(0, 0);
+ when(mTelephonyManager.getLogicalToPhysicalSlotMapping()).thenReturn(slotMapping);
+
+ when(mEuiccManager.isEnabled()).thenReturn(true);
+ when(mEuiccManager.getEid()).thenReturn(TEST_EID_FROM_MANAGER);
+ when(mEuiccManager.createForCardId(anyInt())).thenThrow(
+ new RuntimeException("EID shall be retrieved from the default eUICC manager"));
+
+ mController.initialize();
+
+ // Set EID retrieved from the default eUICC manager in Single SIM mode.
+ verify(mDialog).setText(EID_INFO_VALUE_ID, TEST_EID_FROM_MANAGER);
+ verify(mDialog, never()).removeSettingFromScreen(eq(EID_INFO_VALUE_ID));
+ }
+
+ @Test
+ public void initialize_updateEid_shouldRemoveEidInSingleSimMode() {
+ when(mTelephonyManager.getPhoneCount()).thenReturn(
+ PhoneConstants.MAX_PHONE_COUNT_SINGLE_SIM);
+
+ ArrayList<UiccCardInfo> uiccCardInfos = new ArrayList<>();
+ UiccCardInfo uiccCardInfo = new UiccCardInfo(
+ false, // isEuicc
+ 0, // cardId
+ null, // eid
+ "123451234567890", // iccid
+ 0, // slotIndex
+ true); // isRemovable
+ uiccCardInfos.add(uiccCardInfo);
+ when(mTelephonyManager.getUiccCardsInfo()).thenReturn(uiccCardInfos);
+
+ Map<Integer, Integer> slotMapping = new HashMap<>();
+ slotMapping.put(0, 0);
+ when(mTelephonyManager.getLogicalToPhysicalSlotMapping()).thenReturn(slotMapping);
+
+ when(mEuiccManager.isEnabled()).thenReturn(false);
+ when(mEuiccManager.getEid()).thenReturn(null);
+
+ mController.initialize();
+
+ // Remove EID if the default eUICC manager indicates that eSIM is not enabled.
+ verify(mDialog, never()).setText(eq(EID_INFO_VALUE_ID), any());
+ verify(mDialog).removeSettingFromScreen(eq(EID_INFO_LABEL_ID));
verify(mDialog).removeSettingFromScreen(eq(EID_INFO_VALUE_ID));
}
@@ -482,7 +758,7 @@
@Test
@Ignore
public void initialize_nullSignalStrength_noCrash() {
- doReturn(null).when(mController).getSignalStrength();
+ doReturn(null).when(mTelephonyManager).getSignalStrength();
// we should not crash when running the following line
mController.initialize();
}
diff --git a/tests/robotests/src/com/android/settings/network/SubscriptionsPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/network/SubscriptionsPreferenceControllerTest.java
index 51f8ec0..6fd94c3 100644
--- a/tests/robotests/src/com/android/settings/network/SubscriptionsPreferenceControllerTest.java
+++ b/tests/robotests/src/com/android/settings/network/SubscriptionsPreferenceControllerTest.java
@@ -29,6 +29,7 @@
import static org.mockito.ArgumentMatchers.anyBoolean;
import static org.mockito.ArgumentMatchers.anyInt;
import static org.mockito.ArgumentMatchers.eq;
+import static org.mockito.Mockito.doNothing;
import static org.mockito.Mockito.doReturn;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.spy;
@@ -63,6 +64,7 @@
import org.mockito.MockitoAnnotations;
import org.robolectric.Robolectric;
import org.robolectric.RobolectricTestRunner;
+import org.robolectric.RuntimeEnvironment;
import org.robolectric.annotation.Config;
import org.robolectric.shadows.ShadowSubscriptionManager;
@@ -107,7 +109,7 @@
@Before
public void setUp() {
MockitoAnnotations.initMocks(this);
- mContext = spy(Robolectric.setupActivity(Activity.class));
+ mContext = spy(RuntimeEnvironment.application);
mLifecycleOwner = () -> mLifecycle;
mLifecycle = new Lifecycle(mLifecycleOwner);
when(mContext.getSystemService(SubscriptionManager.class)).thenReturn(mSubscriptionManager);
@@ -257,14 +259,14 @@
*/
private void runPreferenceClickTest(final int subscriptionCount, final int selectedPrefIndex) {
final List<SubscriptionInfo> subs = setupMockSubscriptions(subscriptionCount);
- mController.displayPreference(mScreen);
final ArgumentCaptor<Preference> prefCaptor = ArgumentCaptor.forClass(Preference.class);
+ mController.displayPreference(mScreen);
verify(mPreferenceCategory, times(subscriptionCount)).addPreference(prefCaptor.capture());
final List<Preference> prefs = prefCaptor.getAllValues();
final Preference pref = prefs.get(selectedPrefIndex);
- pref.getOnPreferenceClickListener().onPreferenceClick(pref);
final ArgumentCaptor<Intent> intentCaptor = ArgumentCaptor.forClass(Intent.class);
- verify(mContext).startActivity(intentCaptor.capture());
+ doNothing().when(mContext).startActivity(intentCaptor.capture());
+ pref.getOnPreferenceClickListener().onPreferenceClick(pref);
final Intent intent = intentCaptor.getValue();
assertThat(intent).isNotNull();
assertThat(intent.hasExtra(Settings.EXTRA_SUB_ID)).isTrue();
diff --git a/tests/robotests/src/com/android/settings/network/telephony/ApnPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/network/telephony/ApnPreferenceControllerTest.java
index ce4c9a2..d362837 100644
--- a/tests/robotests/src/com/android/settings/network/telephony/ApnPreferenceControllerTest.java
+++ b/tests/robotests/src/com/android/settings/network/telephony/ApnPreferenceControllerTest.java
@@ -21,6 +21,7 @@
import static com.google.common.truth.Truth.assertThat;
+import static org.mockito.Mockito.doNothing;
import static org.mockito.Mockito.doReturn;
import static org.mockito.Mockito.spy;
import static org.mockito.Mockito.verify;
@@ -47,6 +48,7 @@
import org.mockito.MockitoAnnotations;
import org.robolectric.Robolectric;
import org.robolectric.RobolectricTestRunner;
+import org.robolectric.RuntimeEnvironment;
@RunWith(RobolectricTestRunner.class)
public class ApnPreferenceControllerTest {
@@ -69,7 +71,7 @@
public void setUp() {
MockitoAnnotations.initMocks(this);
- mContext = spy(Robolectric.setupActivity(Activity.class));
+ mContext = spy(RuntimeEnvironment.application);
doReturn(mTelephonyManager).when(mContext).getSystemService(Context.TELEPHONY_SERVICE);
doReturn(mSubscriptionManager).when(mContext).getSystemService(SubscriptionManager.class);
doReturn(mTelephonyManager).when(mTelephonyManager).createForSubscriptionId(SUB_ID);
@@ -138,10 +140,10 @@
@Test
public void handPreferenceTreeClick_fireIntent() {
ArgumentCaptor<Intent> captor = ArgumentCaptor.forClass(Intent.class);
+ doNothing().when(mContext).startActivity(captor.capture());
mController.handlePreferenceTreeClick(mPreference);
- verify(mContext).startActivity(captor.capture());
final Intent intent = captor.getValue();
assertThat(intent.getAction()).isEqualTo(Settings.ACTION_APN_SETTINGS);
assertThat(intent.getIntExtra(ApnSettings.SUB_ID, 0)).isEqualTo(SUB_ID);
diff --git a/tests/robotests/src/com/android/settings/network/telephony/DataServiceSetupPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/network/telephony/DataServiceSetupPreferenceControllerTest.java
index 8907164..46e6978 100644
--- a/tests/robotests/src/com/android/settings/network/telephony/DataServiceSetupPreferenceControllerTest.java
+++ b/tests/robotests/src/com/android/settings/network/telephony/DataServiceSetupPreferenceControllerTest.java
@@ -21,6 +21,7 @@
import static com.google.common.truth.Truth.assertThat;
+import static org.mockito.Mockito.doNothing;
import static org.mockito.Mockito.doReturn;
import static org.mockito.Mockito.spy;
import static org.mockito.Mockito.verify;
@@ -49,6 +50,7 @@
import org.mockito.MockitoAnnotations;
import org.robolectric.Robolectric;
import org.robolectric.RobolectricTestRunner;
+import org.robolectric.RuntimeEnvironment;
@RunWith(RobolectricTestRunner.class)
public class DataServiceSetupPreferenceControllerTest {
@@ -72,7 +74,7 @@
public void setUp() {
MockitoAnnotations.initMocks(this);
- mContext = spy(Robolectric.setupActivity(Activity.class));
+ mContext = spy(RuntimeEnvironment.application);
doReturn(mTelephonyManager).when(mContext).getSystemService(Context.TELEPHONY_SERVICE);
doReturn(mTelephonyManager).when(mTelephonyManager).createForSubscriptionId(SUB_ID);
doReturn(mInvalidTelephonyManager).when(mTelephonyManager).createForSubscriptionId(
@@ -125,11 +127,10 @@
@Test
public void handlePreferenceTreeClick_startActivity() {
ArgumentCaptor<Intent> captor = ArgumentCaptor.forClass(Intent.class);
+ doNothing().when(mContext).startActivity(captor.capture());
mController.handlePreferenceTreeClick(mPreference);
- verify(mContext).startActivity(captor.capture());
-
final Intent intent = captor.getValue();
assertThat(intent.getAction()).isEqualTo(Intent.ACTION_VIEW);
assertThat(intent.getData()).isEqualTo(
diff --git a/tests/robotests/src/com/android/settings/network/telephony/DataUsagePreferenceControllerTest.java b/tests/robotests/src/com/android/settings/network/telephony/DataUsagePreferenceControllerTest.java
index 7a097e7..7681f44 100644
--- a/tests/robotests/src/com/android/settings/network/telephony/DataUsagePreferenceControllerTest.java
+++ b/tests/robotests/src/com/android/settings/network/telephony/DataUsagePreferenceControllerTest.java
@@ -17,6 +17,7 @@
package com.android.settings.network.telephony;
import static com.google.common.truth.Truth.assertThat;
+import static org.mockito.Mockito.doNothing;
import static org.mockito.Mockito.doReturn;
import static org.mockito.Mockito.spy;
import static org.mockito.Mockito.verify;
@@ -40,6 +41,7 @@
import org.mockito.MockitoAnnotations;
import org.robolectric.Robolectric;
import org.robolectric.RobolectricTestRunner;
+import org.robolectric.RuntimeEnvironment;
import org.robolectric.Shadows;
import org.robolectric.shadows.ShadowTelephonyManager;
import org.robolectric.util.ReflectionHelpers;
@@ -58,7 +60,7 @@
public void setUp() {
MockitoAnnotations.initMocks(this);
- mContext = spy(Robolectric.setupActivity(Activity.class));
+ mContext = spy(RuntimeEnvironment.application);
final TelephonyManager telephonyManager = mContext.getSystemService(TelephonyManager.class);
final ShadowTelephonyManager shadowTelephonyManager = Shadows.shadowOf(telephonyManager);
@@ -91,9 +93,10 @@
@Test
public void handlePreferenceTreeClick_needDialog_showDialog() {
final ArgumentCaptor<Intent> captor = ArgumentCaptor.forClass(Intent.class);
+ doNothing().when(mContext).startActivity(captor.capture());
+
mController.handlePreferenceTreeClick(mPreference);
- verify(mContext).startActivity(captor.capture());
final Intent intent = captor.getValue();
assertThat(intent.getAction()).isEqualTo(Settings.ACTION_MOBILE_DATA_USAGE);
diff --git a/tests/robotests/src/com/android/settings/network/telephony/EuiccPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/network/telephony/EuiccPreferenceControllerTest.java
index 7fbddb4..e4cf303 100644
--- a/tests/robotests/src/com/android/settings/network/telephony/EuiccPreferenceControllerTest.java
+++ b/tests/robotests/src/com/android/settings/network/telephony/EuiccPreferenceControllerTest.java
@@ -38,6 +38,7 @@
import org.mockito.MockitoAnnotations;
import org.robolectric.Robolectric;
import org.robolectric.RobolectricTestRunner;
+import org.robolectric.RuntimeEnvironment;
@RunWith(RobolectricTestRunner.class)
public class EuiccPreferenceControllerTest {
@@ -46,6 +47,9 @@
@Mock
private TelephonyManager mTelephonyManager;
+ @Mock
+ private Activity mActivity;
+
private EuiccPreferenceController mController;
private Preference mPreference;
private Context mContext;
@@ -54,12 +58,12 @@
public void setUp() {
MockitoAnnotations.initMocks(this);
- mContext = spy(Robolectric.setupActivity(Activity.class));
- doReturn(mTelephonyManager).when(mContext).getSystemService(Context.TELEPHONY_SERVICE);
+ mContext = spy(RuntimeEnvironment.application);
+ doReturn(mTelephonyManager).when(mActivity).getSystemService(Context.TELEPHONY_SERVICE);
doReturn(mTelephonyManager).when(mTelephonyManager).createForSubscriptionId(SUB_ID);
mPreference = new Preference(mContext);
- mController = new EuiccPreferenceController(mContext, "euicc");
+ mController = new EuiccPreferenceController(mActivity, "euicc");
mController.init(SUB_ID);
mPreference.setKey(mController.getPreferenceKey());
}
@@ -70,7 +74,7 @@
mController.handlePreferenceTreeClick(mPreference);
- verify(mContext).startActivity(captor.capture());
+ verify(mActivity).startActivity(captor.capture());
assertThat(captor.getValue().getAction()).isEqualTo(
EuiccManager.ACTION_MANAGE_EMBEDDED_SUBSCRIPTIONS);
}