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();
     }
 }