diff --git a/res/values/config.xml b/res/values/config.xml
index 4b84bbac932..50e06ba1e66 100755
--- a/res/values/config.xml
+++ b/res/values/config.xml
@@ -639,4 +639,8 @@
false
+
+
+ true
+
diff --git a/res/xml/my_device_info.xml b/res/xml/my_device_info.xml
index 9165745f472..08d3e6cc928 100644
--- a/res/xml/my_device_info.xml
+++ b/res/xml/my_device_info.xml
@@ -57,6 +57,7 @@
android:order="3"
android:title="@string/status_number"
android:summary="@string/summary_placeholder"
+ settings:isPreferenceVisible="@bool/config_show_sim_info"
settings:controller="com.android.settings.deviceinfo.PhoneNumberPreferenceController"
settings:enableCopying="true"/>
@@ -98,6 +99,7 @@
android:title="@string/sim_status_title"
settings:keywords="@string/keywords_sim_status"
android:summary="@string/summary_placeholder"
+ settings:isPreferenceVisible="@bool/config_show_sim_info"
settings:enableCopying="true"/>
@@ -119,6 +121,7 @@
android:summary="@string/summary_placeholder"
settings:keywords="@string/keywords_imei_info"
settings:enableCopying="true"
+ settings:isPreferenceVisible="@bool/config_show_sim_info"
settings:controller="com.android.settings.deviceinfo.imei.ImeiInfoPreferenceController"/>
diff --git a/src/com/android/settings/deviceinfo/PhoneNumberPreferenceController.java b/src/com/android/settings/deviceinfo/PhoneNumberPreferenceController.java
index eb8add5dbe9..f91b98f249e 100644
--- a/src/com/android/settings/deviceinfo/PhoneNumberPreferenceController.java
+++ b/src/com/android/settings/deviceinfo/PhoneNumberPreferenceController.java
@@ -29,6 +29,7 @@ import androidx.preference.PreferenceScreen;
import com.android.settings.R;
import com.android.settings.core.BasePreferenceController;
+import com.android.settings.network.SubscriptionUtil;
import com.android.settingslib.DeviceInfoUtils;
import java.util.ArrayList;
@@ -51,7 +52,8 @@ public class PhoneNumberPreferenceController extends BasePreferenceController {
@Override
public int getAvailabilityStatus() {
- return mTelephonyManager.isVoiceCapable() ? AVAILABLE : UNSUPPORTED_ON_DEVICE;
+ return SubscriptionUtil.isSimHardwareVisible(mContext) ?
+ AVAILABLE : UNSUPPORTED_ON_DEVICE;
}
@Override
@@ -79,6 +81,9 @@ public class PhoneNumberPreferenceController extends BasePreferenceController {
@Override
public void displayPreference(PreferenceScreen screen) {
super.displayPreference(screen);
+ if (!SubscriptionUtil.isSimHardwareVisible(mContext)) {
+ return;
+ }
final Preference preference = screen.findPreference(getPreferenceKey());
final PreferenceCategory category = screen.findPreference(KEY_PREFERENCE_CATEGORY);
mPreferenceList.add(preference);
diff --git a/src/com/android/settings/deviceinfo/imei/ImeiInfoPreferenceController.java b/src/com/android/settings/deviceinfo/imei/ImeiInfoPreferenceController.java
index e90477270e0..9b7359b0c8d 100644
--- a/src/com/android/settings/deviceinfo/imei/ImeiInfoPreferenceController.java
+++ b/src/com/android/settings/deviceinfo/imei/ImeiInfoPreferenceController.java
@@ -33,6 +33,7 @@ import androidx.preference.PreferenceScreen;
import com.android.settings.R;
import com.android.settings.core.BasePreferenceController;
import com.android.settings.deviceinfo.PhoneNumberSummaryPreference;
+import com.android.settings.network.SubscriptionUtil;
import com.android.settingslib.Utils;
import java.util.ArrayList;
@@ -63,6 +64,9 @@ public class ImeiInfoPreferenceController extends BasePreferenceController {
@Override
public void displayPreference(PreferenceScreen screen) {
super.displayPreference(screen);
+ if (!SubscriptionUtil.isSimHardwareVisible(mContext)) {
+ return;
+ }
final Preference preference = screen.findPreference(getPreferenceKey());
final PreferenceCategory category = screen.findPreference(KEY_PREFERENCE_CATEGORY);
@@ -119,7 +123,8 @@ public class ImeiInfoPreferenceController extends BasePreferenceController {
@Override
public int getAvailabilityStatus() {
- return mContext.getSystemService(UserManager.class).isAdminUser()
+ return SubscriptionUtil.isSimHardwareVisible(mContext) &&
+ mContext.getSystemService(UserManager.class).isAdminUser()
&& !Utils.isWifiOnly(mContext) ? AVAILABLE : UNSUPPORTED_ON_DEVICE;
}
diff --git a/src/com/android/settings/deviceinfo/simstatus/SimStatusPreferenceController.java b/src/com/android/settings/deviceinfo/simstatus/SimStatusPreferenceController.java
index e392bd6cc90..f811d2a86d2 100644
--- a/src/com/android/settings/deviceinfo/simstatus/SimStatusPreferenceController.java
+++ b/src/com/android/settings/deviceinfo/simstatus/SimStatusPreferenceController.java
@@ -29,6 +29,7 @@ import androidx.preference.PreferenceScreen;
import com.android.settings.R;
import com.android.settings.core.PreferenceControllerMixin;
+import com.android.settings.network.SubscriptionUtil;
import com.android.settingslib.deviceinfo.AbstractSimStatusImeiInfoPreferenceController;
import java.util.ArrayList;
@@ -59,9 +60,18 @@ public class SimStatusPreferenceController extends
return KEY_SIM_STATUS;
}
+ @Override
+ public boolean isAvailable() {
+ return SubscriptionUtil.isSimHardwareVisible(mContext) &&
+ super.isAvailable();
+ }
+
@Override
public void displayPreference(PreferenceScreen screen) {
super.displayPreference(screen);
+ if (!SubscriptionUtil.isSimHardwareVisible(mContext)) {
+ return;
+ }
final Preference preference = screen.findPreference(getPreferenceKey());
if (!isAvailable() || preference == null || !preference.isVisible()) {
return;
diff --git a/src/com/android/settings/network/SubscriptionUtil.java b/src/com/android/settings/network/SubscriptionUtil.java
index 0bba86fafed..ccfcfb0a752 100644
--- a/src/com/android/settings/network/SubscriptionUtil.java
+++ b/src/com/android/settings/network/SubscriptionUtil.java
@@ -86,6 +86,14 @@ public class SubscriptionUtil {
return subscriptions;
}
+ /**
+ * Check if SIM hardware is visible to the end user.
+ */
+ public static boolean isSimHardwareVisible(Context context) {
+ return context.getResources()
+ .getBoolean(R.bool.config_show_sim_info);
+ }
+
@VisibleForTesting
static boolean isInactiveInsertedPSim(UiccSlotInfo slotInfo) {
if (slotInfo == null) {
diff --git a/tests/robotests/src/com/android/settings/deviceinfo/imei/ImeiInfoPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/deviceinfo/imei/ImeiInfoPreferenceControllerTest.java
index 55194add83d..bae629ced42 100644
--- a/tests/robotests/src/com/android/settings/deviceinfo/imei/ImeiInfoPreferenceControllerTest.java
+++ b/tests/robotests/src/com/android/settings/deviceinfo/imei/ImeiInfoPreferenceControllerTest.java
@@ -29,6 +29,7 @@ import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;
import android.content.Context;
+import android.content.res.Resources;
import android.os.UserManager;
import android.telephony.TelephonyManager;
@@ -69,12 +70,18 @@ public class ImeiInfoPreferenceControllerTest {
private PreferenceCategory mCategory;
private Context mContext;
+ private Resources mResources;
private ImeiInfoPreferenceController mController;
@Before
public void setUp() {
MockitoAnnotations.initMocks(this);
mContext = spy(RuntimeEnvironment.application);
+
+ mResources = spy(mContext.getResources());
+ when(mContext.getResources()).thenReturn(mResources);
+ when(mResources.getBoolean(R.bool.config_show_sim_info)).thenReturn(true);
+
doReturn(mUserManager).when(mContext).getSystemService(UserManager.class);
mController = spy(new ImeiInfoPreferenceController(mContext, "imei_info"));
mController.setHost(mFragment);
diff --git a/tests/robotests/src/com/android/settings/deviceinfo/simstatus/SimStatusPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/deviceinfo/simstatus/SimStatusPreferenceControllerTest.java
index 85a6fac765a..4ffaf7ae6ec 100644
--- a/tests/robotests/src/com/android/settings/deviceinfo/simstatus/SimStatusPreferenceControllerTest.java
+++ b/tests/robotests/src/com/android/settings/deviceinfo/simstatus/SimStatusPreferenceControllerTest.java
@@ -25,6 +25,7 @@ import static org.mockito.Mockito.when;
import android.content.Context;
import android.os.UserManager;
+import android.content.res.Resources;
import android.telephony.TelephonyManager;
import androidx.fragment.app.Fragment;
@@ -64,12 +65,18 @@ public class SimStatusPreferenceControllerTest {
private PreferenceCategory mCategory;
private Context mContext;
+ private Resources mResources;
private SimStatusPreferenceController mController;
@Before
public void setUp() {
MockitoAnnotations.initMocks(this);
mContext = spy(RuntimeEnvironment.application);
+
+ mResources = spy(mContext.getResources());
+ when(mContext.getResources()).thenReturn(mResources);
+ when(mResources.getBoolean(R.bool.config_show_sim_info)).thenReturn(true);
+
doReturn(mUserManager).when(mContext).getSystemService(UserManager.class);
mController = spy(new SimStatusPreferenceController(mContext, mFragment));
doReturn(true).when(mController).isAvailable();
diff --git a/tests/unit/src/com/android/settings/network/SubscriptionUtilTest.java b/tests/unit/src/com/android/settings/network/SubscriptionUtilTest.java
index 43a32b51fbc..63dca7e88eb 100644
--- a/tests/unit/src/com/android/settings/network/SubscriptionUtilTest.java
+++ b/tests/unit/src/com/android/settings/network/SubscriptionUtilTest.java
@@ -25,11 +25,14 @@ import static org.mockito.Mockito.spy;
import static org.mockito.Mockito.when;
import android.content.Context;
+import android.content.res.Resources;
import android.telephony.SubscriptionInfo;
import android.telephony.SubscriptionManager;
import android.telephony.TelephonyManager;
import android.text.TextUtils;
+import com.android.settings.R;
+
import androidx.test.core.app.ApplicationProvider;
import androidx.test.ext.junit.runners.AndroidJUnit4;
@@ -58,6 +61,8 @@ public class SubscriptionUtilTest {
private SubscriptionManager mSubMgr;
@Mock
private TelephonyManager mTelMgr;
+ @Mock
+ private Resources mResources;
@Before
@@ -443,4 +448,22 @@ public class SubscriptionUtilTest {
public void isInactiveInsertedPSim_nullSubInfo_doesNotCrash() {
assertThat(SubscriptionUtil.isInactiveInsertedPSim(null)).isFalse();
}
+
+ @Test
+ public void isSimHardwareVisible_configAsInvisible_returnFalse() {
+ when(mContext.getResources()).thenReturn(mResources);
+ when(mResources.getBoolean(R.bool.config_show_sim_info))
+ .thenReturn(false);
+
+ assertThat(SubscriptionUtil.isSimHardwareVisible(mContext)).isFalse();
+ }
+
+ @Test
+ public void isSimHardwareVisible_configAsVisible_returnTrue() {
+ when(mContext.getResources()).thenReturn(mResources);
+ when(mResources.getBoolean(R.bool.config_show_sim_info))
+ .thenReturn(true);
+
+ assertTrue(SubscriptionUtil.isSimHardwareVisible(mContext));
+ }
}