diff --git a/res/values/config.xml b/res/values/config.xml index 93d82a8c6f3..205b9b5baa5 100755 --- a/res/values/config.xml +++ b/res/values/config.xml @@ -636,4 +636,8 @@ false + + + true + diff --git a/res/xml/my_device_info.xml b/res/xml/my_device_info.xml index 9547318a86e..9b804104e56 100644 --- a/res/xml/my_device_info.xml +++ b/res/xml/my_device_info.xml @@ -58,6 +58,7 @@ android:title="@string/status_number" android:summary="@string/summary_placeholder" android:selectable="false" + settings:isPreferenceVisible="@bool/config_show_sim_info" settings:controller="com.android.settings.deviceinfo.PhoneNumberPreferenceController" settings:enableCopying="true"/> @@ -99,6 +100,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"/> @@ -120,6 +122,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/res/xml/network_provider_internet.xml b/res/xml/network_provider_internet.xml index 07e797a07c1..c9c576e6b1b 100644 --- a/res/xml/network_provider_internet.xml +++ b/res/xml/network_provider_internet.xml @@ -37,6 +37,7 @@ android:icon="@drawable/ic_calls_sms" android:order="-20" android:summary="@string/summary_placeholder" + settings:isPreferenceVisible="@bool/config_show_sim_info" settings:allowDividerBelow="true" settings:keywords="@string/calls_and_sms" settings:useAdminDisabledSummary="true" /> @@ -49,6 +50,7 @@ android:order="-15" settings:keywords="@string/keywords_more_mobile_networks" settings:userRestriction="no_config_mobile_networks" + settings:isPreferenceVisible="@bool/config_show_sim_info" settings:allowDividerAbove="true" settings:useAdminDisabledSummary="true" /> @@ -66,6 +68,7 @@ android:persistent="false" android:order="19" settings:userRestriction="no_config_mobile_networks" + settings:isPreferenceVisible="@bool/config_show_sim_info" settings:useAdminDisabledSummary="true" /> 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 @@ public class IccLockSettings extends SettingsPreferenceFragment 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/MainClear.java b/src/com/android/settings/MainClear.java index 2b0f01036ea..1434d7216a9 100644 --- a/src/com/android/settings/MainClear.java +++ b/src/com/android/settings/MainClear.java @@ -64,6 +64,7 @@ import androidx.annotation.VisibleForTesting; import com.android.settings.core.InstrumentedFragment; import com.android.settings.enterprise.ActionDisabledByAdminDialogHelper; +import com.android.settings.network.SubscriptionUtil; import com.android.settings.password.ChooseLockSettingsHelper; import com.android.settings.password.ConfirmLockPattern; import com.android.settingslib.RestrictedLockUtilsInternal; @@ -381,6 +382,14 @@ public class MainClear extends InstrumentedFragment implements OnGlobalLayoutLis mScrollView.getViewTreeObserver().addOnGlobalLayoutListener(this); } + /** + * Whether to show any UI which is SIM related. + */ + @VisibleForTesting + boolean showAnySubscriptionInfo(Context context) { + return (context != null) && SubscriptionUtil.isSimHardwareVisible(context); + } + /** * Whether to show strings indicating that the eUICC will be wiped. * @@ -390,7 +399,7 @@ public class MainClear extends InstrumentedFragment implements OnGlobalLayoutLis @VisibleForTesting boolean showWipeEuicc() { Context context = getContext(); - if (!isEuiccEnabled(context)) { + if (!showAnySubscriptionInfo(context) || !isEuiccEnabled(context)) { return false; } ContentResolver cr = context.getContentResolver(); diff --git a/src/com/android/settings/ResetNetwork.java b/src/com/android/settings/ResetNetwork.java index 7e58c0b9808..1529a237237 100644 --- a/src/com/android/settings/ResetNetwork.java +++ b/src/com/android/settings/ResetNetwork.java @@ -239,6 +239,9 @@ public class ResetNetwork extends InstrumentedFragment { } private List getActiveSubscriptionInfoList() { + if (!SubscriptionUtil.isSimHardwareVisible(getActivity())) { + return Collections.emptyList(); + } SubscriptionManager mgr = getActivity().getSystemService(SubscriptionManager.class); if (mgr == null) { Log.w(TAG, "No SubscriptionManager"); diff --git a/src/com/android/settings/deviceinfo/PhoneNumberPreferenceController.java b/src/com/android/settings/deviceinfo/PhoneNumberPreferenceController.java index 99c572d527e..5b247f88c2b 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 @@ -62,6 +64,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 027e8c806ca..d6f8a513e28 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); @@ -118,7 +122,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 4204ec14f9e..96f8b62d23f 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/EraseEuiccDataController.java b/src/com/android/settings/network/EraseEuiccDataController.java index b1f964b2190..091b6d7748c 100644 --- a/src/com/android/settings/network/EraseEuiccDataController.java +++ b/src/com/android/settings/network/EraseEuiccDataController.java @@ -51,7 +51,8 @@ public class EraseEuiccDataController extends BasePreferenceController { @Override public int getAvailabilityStatus() { - return mContext.getPackageManager().hasSystemFeature( + return SubscriptionUtil.isSimHardwareVisible(mContext) && + mContext.getPackageManager().hasSystemFeature( PackageManager.FEATURE_TELEPHONY_EUICC) ? AVAILABLE_UNSEARCHABLE : UNSUPPORTED_ON_DEVICE; } diff --git a/src/com/android/settings/network/MobileNetworkListFragment.java b/src/com/android/settings/network/MobileNetworkListFragment.java index 7881690e106..ea7031ae132 100644 --- a/src/com/android/settings/network/MobileNetworkListFragment.java +++ b/src/com/android/settings/network/MobileNetworkListFragment.java @@ -60,6 +60,10 @@ public class MobileNetworkListFragment extends DashboardFragment { @Override protected List createPreferenceControllers(Context context) { final List controllers = new ArrayList<>(); + if (!SubscriptionUtil.isSimHardwareVisible(getContext())) { + finish(); + return controllers; + } NetworkProviderSimsCategoryController simCategoryPrefCtrl = new NetworkProviderSimsCategoryController(context, KEY_PREFERENCE_CATEGORY_SIM, @@ -88,7 +92,8 @@ public class MobileNetworkListFragment extends DashboardFragment { @Override protected boolean isPageSearchEnabled(Context context) { - return context.getSystemService(UserManager.class).isAdminUser(); + return SubscriptionUtil.isSimHardwareVisible(context) && + context.getSystemService(UserManager.class).isAdminUser(); } }; } diff --git a/src/com/android/settings/network/MobileNetworkSummaryController.java b/src/com/android/settings/network/MobileNetworkSummaryController.java index 1a85a7fa341..61dd079cb35 100644 --- a/src/com/android/settings/network/MobileNetworkSummaryController.java +++ b/src/com/android/settings/network/MobileNetworkSummaryController.java @@ -206,7 +206,8 @@ public class MobileNetworkSummaryController extends AbstractPreferenceController @Override public boolean isAvailable() { - return !Utils.isWifiOnly(mContext) && mUserManager.isAdminUser(); + return SubscriptionUtil.isSimHardwareVisible(mContext) && + !Utils.isWifiOnly(mContext) && mUserManager.isAdminUser(); } @Override diff --git a/src/com/android/settings/network/NetworkProviderCallsSmsController.java b/src/com/android/settings/network/NetworkProviderCallsSmsController.java index c8b1c49b7bf..585c99e0bbe 100644 --- a/src/com/android/settings/network/NetworkProviderCallsSmsController.java +++ b/src/com/android/settings/network/NetworkProviderCallsSmsController.java @@ -190,7 +190,8 @@ public class NetworkProviderCallsSmsController extends AbstractPreferenceControl @Override public boolean isAvailable() { - return mUserManager.isAdminUser(); + return SubscriptionUtil.isSimHardwareVisible(mContext) && + mUserManager.isAdminUser(); } @Override diff --git a/src/com/android/settings/network/NetworkProviderCallsSmsFragment.java b/src/com/android/settings/network/NetworkProviderCallsSmsFragment.java index aad9b10403c..b2cf74e0a82 100644 --- a/src/com/android/settings/network/NetworkProviderCallsSmsFragment.java +++ b/src/com/android/settings/network/NetworkProviderCallsSmsFragment.java @@ -100,7 +100,8 @@ public class NetworkProviderCallsSmsFragment extends DashboardFragment { @Override protected boolean isPageSearchEnabled(Context context) { - return context.getSystemService(UserManager.class).isAdminUser(); + return SubscriptionUtil.isSimHardwareVisible(context) && + context.getSystemService(UserManager.class).isAdminUser(); } }; } diff --git a/src/com/android/settings/network/NetworkProviderSettings.java b/src/com/android/settings/network/NetworkProviderSettings.java index c5295e67d88..19ebd36d881 100644 --- a/src/com/android/settings/network/NetworkProviderSettings.java +++ b/src/com/android/settings/network/NetworkProviderSettings.java @@ -342,7 +342,18 @@ public class NetworkProviderSettings extends RestrictedSettingsFragment } } + /** + * Whether to show any UI which is SIM related. + */ + @VisibleForTesting + boolean showAnySubscriptionInfo(Context context) { + return (context != null) && SubscriptionUtil.isSimHardwareVisible(context); + } + private void addNetworkMobileProviderController() { + if (!showAnySubscriptionInfo(getContext())) { + return; + } if (mNetworkMobileProviderController == null) { mNetworkMobileProviderController = new NetworkMobileProviderController( getContext(), PREF_KEY_PROVIDER_MOBILE_NETWORK); 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/src/com/android/settings/network/telephony/MobileNetworkSettings.java b/src/com/android/settings/network/telephony/MobileNetworkSettings.java index 94b6aaf1bcc..05e58e96ed7 100644 --- a/src/com/android/settings/network/telephony/MobileNetworkSettings.java +++ b/src/com/android/settings/network/telephony/MobileNetworkSettings.java @@ -120,6 +120,10 @@ public class MobileNetworkSettings extends AbstractMobileNetworkSettings { @Override protected List createPreferenceControllers(Context context) { + if (!SubscriptionUtil.isSimHardwareVisible(context)) { + finish(); + return Arrays.asList(); + } if (getArguments() == null) { Intent intent = getIntent(); if (intent != null) { @@ -398,7 +402,8 @@ public class MobileNetworkSettings extends AbstractMobileNetworkSettings { /** suppress full page if user is not admin */ @Override protected boolean isPageSearchEnabled(Context context) { - return context.getSystemService(UserManager.class).isAdminUser(); + return SubscriptionUtil.isSimHardwareVisible(context) && + context.getSystemService(UserManager.class).isAdminUser(); } }; diff --git a/src/com/android/settings/network/telephony/MobileNetworkUtils.java b/src/com/android/settings/network/telephony/MobileNetworkUtils.java index e769a4eed7d..8305c4a20da 100644 --- a/src/com/android/settings/network/telephony/MobileNetworkUtils.java +++ b/src/com/android/settings/network/telephony/MobileNetworkUtils.java @@ -263,6 +263,9 @@ public class MobileNetworkUtils { * the user has enabled development mode. */ public static boolean showEuiccSettings(Context context) { + if (!SubscriptionUtil.isSimHardwareVisible(context)) { + return false; + } long timeForAccess = SystemClock.elapsedRealtime(); try { Boolean isShow = ((Future) ThreadUtils.postOnBackgroundThread(() -> { 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.Preference; 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 class SimLockPreferenceController extends BasePreferenceController { @Override public int getAvailabilityStatus() { + if (!SubscriptionUtil.isSimHardwareVisible(mContext)) { + return UNSUPPORTED_ON_DEVICE; + } + final List subInfoList = mSubscriptionManager.getActiveSubscriptionInfoList(); diff --git a/src/com/android/settings/sim/SimDialogActivity.java b/src/com/android/settings/sim/SimDialogActivity.java index 9c4f8f18915..464ba9b4a51 100644 --- a/src/com/android/settings/sim/SimDialogActivity.java +++ b/src/com/android/settings/sim/SimDialogActivity.java @@ -35,6 +35,7 @@ import androidx.fragment.app.FragmentActivity; import androidx.fragment.app.FragmentManager; import com.android.settings.R; +import com.android.settings.network.SubscriptionUtil; import com.android.settings.network.telephony.SubscriptionActionDialogActivity; import java.util.List; @@ -65,6 +66,11 @@ public class SimDialogActivity extends FragmentActivity { protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); + if (!SubscriptionUtil.isSimHardwareVisible(this)) { + Log.d(TAG, "Not support on device without SIM."); + finish(); + return; + } SimDialogProhibitService.supportDismiss(this); getWindow().addSystemFlags( diff --git a/src/com/android/settings/sim/SimSelectNotification.java b/src/com/android/settings/sim/SimSelectNotification.java index 9d3f860a014..9b235cea931 100644 --- a/src/com/android/settings/sim/SimSelectNotification.java +++ b/src/com/android/settings/sim/SimSelectNotification.java @@ -77,6 +77,10 @@ public class SimSelectNotification extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { + if (!SubscriptionUtil.isSimHardwareVisible(context)) { + Log.w(TAG, "Received unexpected intent with null action."); + return; + } String action = intent.getAction(); if (action == null) { diff --git a/src/com/android/settings/sim/smartForwarding/SmartForwardingActivity.java b/src/com/android/settings/sim/smartForwarding/SmartForwardingActivity.java index 217801e5a17..070e65a1d56 100644 --- a/src/com/android/settings/sim/smartForwarding/SmartForwardingActivity.java +++ b/src/com/android/settings/sim/smartForwarding/SmartForwardingActivity.java @@ -38,6 +38,7 @@ import androidx.core.content.ContextCompat; import com.android.settings.R; import com.android.settings.core.SettingsBaseActivity; +import com.android.settings.network.SubscriptionUtil; import com.google.common.util.concurrent.FutureCallback; import com.google.common.util.concurrent.Futures; @@ -48,6 +49,7 @@ import com.google.common.util.concurrent.MoreExecutors; import java.util.concurrent.Executors; public class SmartForwardingActivity extends SettingsBaseActivity { + static final String LOG_TAG = SmartForwardingActivity.class.toString(); final ListeningExecutorService service = MoreExecutors.listeningDecorator(Executors.newSingleThreadExecutor()); @@ -55,6 +57,12 @@ public class SmartForwardingActivity extends SettingsBaseActivity { protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); + if (!SubscriptionUtil.isSimHardwareVisible(this)) { + Log.d(LOG_TAG, "Not support on device without SIM."); + finish(); + return; + } + final Toolbar toolbar = findViewById(R.id.action_bar); toolbar.setVisibility(View.VISIBLE); setActionBar(toolbar); @@ -166,4 +174,4 @@ public class SmartForwardingActivity extends SettingsBaseActivity { .create(); mDialog.show(); } -} \ No newline at end of file +} diff --git a/tests/robotests/src/com/android/settings/MainClearTest.java b/tests/robotests/src/com/android/settings/MainClearTest.java index ec33fadfd02..9795092a657 100644 --- a/tests/robotests/src/com/android/settings/MainClearTest.java +++ b/tests/robotests/src/com/android/settings/MainClearTest.java @@ -102,7 +102,10 @@ public class MainClearTest { @Before public void setUp() { MockitoAnnotations.initMocks(this); - mMainClear = spy(new MainClear()); + mMainClear = spy(new MainClear() { + @Override + boolean showAnySubscriptionInfo(Context context) { return true; } + }); mActivity = Robolectric.setupActivity(FragmentActivity.class); mShadowActivity = Shadows.shadowOf(mActivity); UserManager userManager = mActivity.getSystemService(UserManager.class); 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/robotests/src/com/android/settings/network/MobileNetworkListFragmentTest.java b/tests/robotests/src/com/android/settings/network/MobileNetworkListFragmentTest.java index fd2b520929f..2e04ea751f0 100644 --- a/tests/robotests/src/com/android/settings/network/MobileNetworkListFragmentTest.java +++ b/tests/robotests/src/com/android/settings/network/MobileNetworkListFragmentTest.java @@ -21,8 +21,10 @@ import static com.google.common.truth.Truth.assertThat; import static org.mockito.Mockito.when; import android.content.Context; +import android.content.res.Resources; import android.os.UserManager; +import com.android.settings.R; import com.android.settings.search.BaseSearchIndexProvider; import org.junit.Before; @@ -38,6 +40,8 @@ public class MobileNetworkListFragmentTest { @Mock private Context mContext; @Mock + private Resources mResources; + @Mock private UserManager mUserManager; private MobileNetworkListFragment mFragment; @@ -55,6 +59,9 @@ public class MobileNetworkListFragmentTest { final BaseSearchIndexProvider provider = (BaseSearchIndexProvider) mFragment.SEARCH_INDEX_DATA_PROVIDER; + when(mContext.getResources()).thenReturn(mResources); + when(mResources.getBoolean(R.bool.config_show_sim_info)).thenReturn(true); + final Object obj = ReflectionHelpers.callInstanceMethod(provider, "isPageSearchEnabled", ReflectionHelpers.ClassParameter.from(Context.class, mContext)); final boolean isEnabled = (Boolean) obj; @@ -69,6 +76,9 @@ public class MobileNetworkListFragmentTest { final BaseSearchIndexProvider provider = (BaseSearchIndexProvider) mFragment.SEARCH_INDEX_DATA_PROVIDER; + when(mContext.getResources()).thenReturn(mResources); + when(mResources.getBoolean(R.bool.config_show_sim_info)).thenReturn(true); + final Object obj = ReflectionHelpers.callInstanceMethod(provider, "isPageSearchEnabled", ReflectionHelpers.ClassParameter.from(Context.class, mContext)); final boolean isEnabled = (Boolean) obj; diff --git a/tests/robotests/src/com/android/settings/network/NetworkProviderSettingsTest.java b/tests/robotests/src/com/android/settings/network/NetworkProviderSettingsTest.java index 35891843c1b..b347ac086b7 100644 --- a/tests/robotests/src/com/android/settings/network/NetworkProviderSettingsTest.java +++ b/tests/robotests/src/com/android/settings/network/NetworkProviderSettingsTest.java @@ -147,7 +147,10 @@ public class NetworkProviderSettingsTest { @Before public void setUp() { - mNetworkProviderSettings = spy(new NetworkProviderSettings()); + mNetworkProviderSettings = spy(new NetworkProviderSettings() { + @Override + boolean showAnySubscriptionInfo(Context context) { return true; } + }); doReturn(mContext).when(mNetworkProviderSettings).getContext(); doReturn(mPreferenceManager).when(mNetworkProviderSettings).getPreferenceManager(); doReturn(mPowerManager).when(mContext).getSystemService(PowerManager.class); diff --git a/tests/robotests/src/com/android/settings/network/telephony/MobileNetworkSettingsTest.java b/tests/robotests/src/com/android/settings/network/telephony/MobileNetworkSettingsTest.java index 44611cec616..3e219a412ce 100644 --- a/tests/robotests/src/com/android/settings/network/telephony/MobileNetworkSettingsTest.java +++ b/tests/robotests/src/com/android/settings/network/telephony/MobileNetworkSettingsTest.java @@ -29,6 +29,7 @@ import static org.mockito.Mockito.when; import android.app.Activity; import android.app.usage.NetworkStatsManager; import android.content.Context; +import android.content.res.Resources; import android.net.NetworkPolicyManager; import android.os.Bundle; import android.os.UserManager; @@ -37,6 +38,7 @@ import android.telephony.TelephonyManager; import androidx.fragment.app.FragmentActivity; +import com.android.settings.R; import com.android.settings.datausage.DataUsageSummaryPreferenceController; import com.android.settings.search.BaseSearchIndexProvider; import com.android.settings.testutils.shadow.ShadowEntityHeaderController; @@ -68,12 +70,18 @@ public class MobileNetworkSettingsTest { private FragmentActivity mActivity; private Context mContext; + private Resources mResources; private MobileNetworkSettings mFragment; @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); + when(mActivity.getSystemService(TelephonyManager.class)).thenReturn(mTelephonyManager); when(mTelephonyManager.createForSubscriptionId(anyInt())).thenReturn(mTelephonyManager); when(mContext.getSystemService(NetworkStatsManager.class)).thenReturn(mNetworkStatsManager); 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 com.google.common.truth.Truth.assertThat; 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 android.telephony.TelephonyManager; 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 class SimLockPreferenceControllerTest { 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 class SimLockPreferenceControllerTest { @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 class SimLockPreferenceControllerTest { @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 class SimLockPreferenceControllerTest { @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 @@ public class SimLockPreferenceControllerTest { } 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); diff --git a/tests/robotests/src/com/android/settings/sim/SimSelectNotificationTest.java b/tests/robotests/src/com/android/settings/sim/SimSelectNotificationTest.java index b33e94ba52e..e1b2b4ed84e 100644 --- a/tests/robotests/src/com/android/settings/sim/SimSelectNotificationTest.java +++ b/tests/robotests/src/com/android/settings/sim/SimSelectNotificationTest.java @@ -143,6 +143,7 @@ public class SimSelectNotificationTest { when(mSubInfo.getDisplayName()).thenReturn(mFakeDisplayName); when(mContext.getResources()).thenReturn(mResources); + when(mResources.getBoolean(R.bool.config_show_sim_info)).thenReturn(true); when(mResources.getText(R.string.enable_sending_mms_notification_title)) .thenReturn(mFakeNotificationTitle); when(mResources.getText(R.string.enable_mms_notification_channel_title)) 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)); + } }