Hide 'Reset mobile network settings' if not telephony capable
The entry is hidden either via the build-time
config_show_sim_info=false boolean flag, or when not
declaring the PackageManager.FEATURE_TELEPHONY_DATA feature flag.
Bug: 399208058
Test: mm && atest NetworkResetPreferenceControllerTest
Flag: EXEMPT bugfix
Change-Id: I178a0cae9d4ffd1ea4492a6b1feca697373d6e20
diff --git a/src/com/android/settings/network/NetworkResetPreferenceController.java b/src/com/android/settings/network/NetworkResetPreferenceController.java
index af288fa..ef3dca2 100644
--- a/src/com/android/settings/network/NetworkResetPreferenceController.java
+++ b/src/com/android/settings/network/NetworkResetPreferenceController.java
@@ -20,6 +20,7 @@
import com.android.settings.core.PreferenceControllerMixin;
import com.android.settings.network.SubscriptionUtil;
+import com.android.settingslib.Utils;
import com.android.settingslib.core.AbstractPreferenceController;
public class NetworkResetPreferenceController extends AbstractPreferenceController
@@ -34,8 +35,9 @@
@Override
public boolean isAvailable() {
- return (SubscriptionUtil.isSimHardwareVisible(mContext) &&
- (!mRestrictionChecker.hasUserRestriction()));
+ return (SubscriptionUtil.isSimHardwareVisible(mContext)
+ && !Utils.isWifiOnly(mContext)
+ && !mRestrictionChecker.hasUserRestriction());
}
@Override
diff --git a/tests/robotests/src/com/android/settings/network/NetworkResetPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/network/NetworkResetPreferenceControllerTest.java
index 73f4b6a..e263ea7 100644
--- a/tests/robotests/src/com/android/settings/network/NetworkResetPreferenceControllerTest.java
+++ b/tests/robotests/src/com/android/settings/network/NetworkResetPreferenceControllerTest.java
@@ -19,9 +19,16 @@
import static com.google.common.truth.Truth.assertThat;
import static org.mockito.Mockito.never;
+import static org.mockito.Mockito.spy;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;
+import android.content.Context;
+import android.content.res.Resources;
+import android.telephony.TelephonyManager;
+
+import com.android.settings.R;
+
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
@@ -35,27 +42,65 @@
public class NetworkResetPreferenceControllerTest {
@Mock
+ private TelephonyManager mTelephonyManager;
+ @Mock
private NetworkResetRestrictionChecker mRestrictionChecker;
private NetworkResetPreferenceController mController;
+ private Context mContext;
+ private Resources mResources;
@Before
public void setUp() {
MockitoAnnotations.initMocks(this);
- mController = new NetworkResetPreferenceController(RuntimeEnvironment.application);
+ mContext = spy(RuntimeEnvironment.application);
+
+ mResources = spy(mContext.getResources());
+ when(mContext.getResources()).thenReturn(mResources);
+ when(mContext.getSystemService(Context.TELEPHONY_SERVICE)).thenReturn(mTelephonyManager);
+
+ mController = new NetworkResetPreferenceController(mContext);
ReflectionHelpers.setField(mController, "mRestrictionChecker", mRestrictionChecker);
+
+ // Availability defaults
+ when(mTelephonyManager.isDataCapable()).thenReturn(true);
+ when(mResources.getBoolean(R.bool.config_show_sim_info)).thenReturn(true);
+ when(mRestrictionChecker.isRestrictionEnforcedByAdmin()).thenReturn(false);
}
@Test
- public void testIsAvailable_shouldReturnTrueWhenNoUserRestriction() {
- when(mRestrictionChecker.isRestrictionEnforcedByAdmin()).thenReturn(true);
+ public void testIsAvailable_showSimInfo_notWifiOnly() {
+ assertThat(mController.isAvailable()).isTrue();
+ }
+ @Test
+ public void testIsAvailable_hideSimInfo_notWifiOnly() {
+ when(mResources.getBoolean(R.bool.config_show_sim_info)).thenReturn(false);
+ assertThat(mController.isAvailable()).isFalse();
+ }
+
+ @Test
+ public void testIsAvailable_showSimInfo_wifiOnly() {
+ when(mTelephonyManager.isDataCapable()).thenReturn(false);
+ assertThat(mController.isAvailable()).isFalse();
+ }
+
+ @Test
+ public void testIsAvailable_userRestriction() {
+ when(mRestrictionChecker.isRestrictionEnforcedByAdmin()).thenReturn(true);
when(mRestrictionChecker.hasUserRestriction()).thenReturn(true);
assertThat(mController.isAvailable()).isFalse();
+ verify(mRestrictionChecker, never()).isRestrictionEnforcedByAdmin();
+ }
+
+ @Test
+ public void testIsAvailable_noUserRestriction() {
+ when(mRestrictionChecker.isRestrictionEnforcedByAdmin()).thenReturn(true);
when(mRestrictionChecker.hasUserRestriction()).thenReturn(false);
assertThat(mController.isAvailable()).isTrue();
+
verify(mRestrictionChecker, never()).isRestrictionEnforcedByAdmin();
}
}