From e96d71fc41dc512e353f194d1152e9977def8c0b Mon Sep 17 00:00:00 2001 From: Aleksander Morgado Date: Wed, 5 Mar 2025 00:02:26 +0000 Subject: [PATCH] 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 --- .../NetworkResetPreferenceController.java | 6 ++- .../NetworkResetPreferenceControllerTest.java | 51 +++++++++++++++++-- 2 files changed, 52 insertions(+), 5 deletions(-) diff --git a/src/com/android/settings/network/NetworkResetPreferenceController.java b/src/com/android/settings/network/NetworkResetPreferenceController.java index af288fa88a5..ef3dca2fcd5 100644 --- a/src/com/android/settings/network/NetworkResetPreferenceController.java +++ b/src/com/android/settings/network/NetworkResetPreferenceController.java @@ -20,6 +20,7 @@ import android.content.Context; 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 @@ public class NetworkResetPreferenceController extends AbstractPreferenceControll @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 73f4b6a0b7b..e263ea7e1df 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 @@ package com.android.settings.network; 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; @@ -34,28 +41,66 @@ import org.robolectric.util.ReflectionHelpers; @RunWith(RobolectricTestRunner.class) 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(); } }