diff --git a/res/xml/security_advanced_settings.xml b/res/xml/security_advanced_settings.xml index 6d43fe77451..b36fc73fdd2 100644 --- a/res/xml/security_advanced_settings.xml +++ b/res/xml/security_advanced_settings.xml @@ -64,6 +64,7 @@ android:order="50" android:key="sim_lock_settings" android:title="@string/sim_lock_settings_category" + settings:isPreferenceVisible="@bool/config_show_sim_info" settings:controller="com.android.settings.security.SimLockPreferenceController"> diff --git a/src/com/android/settings/IccLockSettings.java b/src/com/android/settings/IccLockSettings.java index 71eb0f20e30..8e54e3196f7 100644 --- a/src/com/android/settings/IccLockSettings.java +++ b/src/com/android/settings/IccLockSettings.java @@ -174,8 +174,9 @@ private String getSummary(Context context) { public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); - if (Utils.isMonkeyRunning()) { - finish(); + if (Utils.isMonkeyRunning() || + !SubscriptionUtil.isSimHardwareVisible(getContext())) { + finishFragment(); return; } diff --git a/src/com/android/settings/security/SimLockPreferenceController.java b/src/com/android/settings/security/SimLockPreferenceController.java index 6f663c2409c..3057c987ee2 100644 --- a/src/com/android/settings/security/SimLockPreferenceController.java +++ b/src/com/android/settings/security/SimLockPreferenceController.java @@ -28,6 +28,7 @@ import androidx.preference.PreferenceScreen; import com.android.settings.core.BasePreferenceController; +import com.android.settings.network.SubscriptionUtil; import java.util.List; @@ -50,6 +51,10 @@ public SimLockPreferenceController(Context context, String key) { @Override public int getAvailabilityStatus() { + if (!SubscriptionUtil.isSimHardwareVisible(mContext)) { + return UNSUPPORTED_ON_DEVICE; + } + final List subInfoList = mSubscriptionManager.getActiveSubscriptionInfoList(); diff --git a/tests/robotests/src/com/android/settings/security/SimLockPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/security/SimLockPreferenceControllerTest.java index ef5973c1d5b..f38cc4948d4 100644 --- a/tests/robotests/src/com/android/settings/security/SimLockPreferenceControllerTest.java +++ b/tests/robotests/src/com/android/settings/security/SimLockPreferenceControllerTest.java @@ -22,9 +22,11 @@ import static org.mockito.ArgumentMatchers.anyInt; import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.spy; import static org.mockito.Mockito.when; import android.content.Context; +import android.content.res.Resources; import android.os.PersistableBundle; import android.os.UserManager; import android.telephony.CarrierConfigManager; @@ -35,6 +37,7 @@ import androidx.preference.Preference; import androidx.preference.PreferenceScreen; +import com.android.settings.R; import com.android.settings.core.BasePreferenceController; import org.junit.Before; @@ -66,6 +69,7 @@ public class SimLockPreferenceControllerTest { private SimLockPreferenceController mController; private Preference mPreference; private Context mContext; + private Resources mResources; @Before public void setUp() { @@ -76,15 +80,28 @@ public void setUp() { shadowApplication.setSystemService(Context.CARRIER_CONFIG_SERVICE, mCarrierManager); shadowApplication.setSystemService(Context.USER_SERVICE, mUserManager); shadowApplication.setSystemService(Context.TELEPHONY_SERVICE, mTelephonyManager); - mContext = RuntimeEnvironment.application; + mContext = spy(RuntimeEnvironment.application); + + mResources = spy(mContext.getResources()); + when(mContext.getResources()).thenReturn(mResources); + mController = new SimLockPreferenceController(mContext, "key"); mPreference = new Preference(mContext); mPreference.setKey(mController.getPreferenceKey()); when(mScreen.findPreference(mController.getPreferenceKey())).thenReturn(mPreference); } + @Test + public void isAvailable_notShowSimUi_false() { + when(mResources.getBoolean(R.bool.config_show_sim_info)).thenReturn(false); + + assertThat(mController.getAvailabilityStatus()) + .isEqualTo(BasePreferenceController.UNSUPPORTED_ON_DEVICE); + } + @Test public void isAvailable_notAdmin_false() { + when(mResources.getBoolean(R.bool.config_show_sim_info)).thenReturn(true); when(mUserManager.isAdminUser()).thenReturn(false); assertThat(mController.getAvailabilityStatus()) @@ -93,6 +110,7 @@ public void isAvailable_notAdmin_false() { @Test public void isAvailable_simIccNotReady_false() { + when(mResources.getBoolean(R.bool.config_show_sim_info)).thenReturn(true); when(mUserManager.isAdminUser()).thenReturn(true); assertThat(mController.getAvailabilityStatus()) @@ -124,6 +142,7 @@ public void isAvailable_true() { @Test public void displayPreference_simReady_enablePreference() { + when(mResources.getBoolean(R.bool.config_show_sim_info)).thenReturn(true); mController.displayPreference(mScreen); assertThat(mPreference.isEnabled()).isFalse(); @@ -140,12 +159,14 @@ public void displayPreference_simNotReady_disablePreference() { @Test public void getPreferenceKey_whenGivenValue_returnsGivenValue() { + when(mResources.getBoolean(R.bool.config_show_sim_info)).thenReturn(true); mController = new SimLockPreferenceController(mContext, "key"); assertThat(mController.getPreferenceKey()).isEqualTo("key"); } private void setupMockIcc() { + when(mResources.getBoolean(R.bool.config_show_sim_info)).thenReturn(true); final List subscriptionInfoList = new ArrayList<>(); SubscriptionInfo info = mock(SubscriptionInfo.class); subscriptionInfoList.add(info); @@ -156,6 +177,7 @@ private void setupMockIcc() { } private void setupMockSimReady() { + when(mResources.getBoolean(R.bool.config_show_sim_info)).thenReturn(true); final List subscriptionInfoList = new ArrayList<>(); SubscriptionInfo info = mock(SubscriptionInfo.class); subscriptionInfoList.add(info);