Loading src/com/android/settings/network/NetworkProviderSettings.java +48 −16 Original line number Diff line number Diff line Loading @@ -49,6 +49,7 @@ import android.view.MenuItem; import android.view.View; import android.widget.Toast; import androidx.annotation.Nullable; import androidx.annotation.VisibleForTesting; import androidx.appcompat.app.AlertDialog; import androidx.fragment.app.Fragment; Loading Loading @@ -87,6 +88,7 @@ import com.android.settingslib.search.SearchIndexable; import com.android.settingslib.utils.ThreadUtils; import com.android.settingslib.widget.FooterPreference; import com.android.settingslib.widget.LayoutPreference; import com.android.settingslib.wifi.WifiEnterpriseRestrictionUtils; import com.android.settingslib.wifi.WifiSavedConfigUtils; import com.android.wifitrackerlib.WifiEntry; import com.android.wifitrackerlib.WifiEntry.ConnectCallback; Loading Loading @@ -127,6 +129,8 @@ public class NetworkProviderSettings extends RestrictedSettingsFragment private static final String PREF_KEY_AIRPLANE_MODE_MSG = "airplane_mode_message"; private static final String PREF_KEY_EMPTY_WIFI_LIST = "wifi_empty_list"; @VisibleForTesting static final String PREF_KEY_WIFI_TOGGLE = "main_toggle_wifi"; // TODO(b/70983952): Rename these to use WifiEntry instead of AccessPoint. @VisibleForTesting static final String PREF_KEY_CONNECTED_ACCESS_POINTS = "connected_access_point"; Loading Loading @@ -1236,13 +1240,33 @@ public class NetworkProviderSettings extends RestrictedSettingsFragment } }; public static final BaseSearchIndexProvider SEARCH_INDEX_DATA_PROVIDER = new BaseSearchIndexProvider(R.xml.network_provider_settings) { public static final SearchIndexProvider SEARCH_INDEX_DATA_PROVIDER = new SearchIndexProvider(R.xml.network_provider_settings); @VisibleForTesting static class SearchIndexProvider extends BaseSearchIndexProvider { private final WifiRestriction mWifiRestriction; SearchIndexProvider(int xmlRes) { super(xmlRes); mWifiRestriction = new WifiRestriction(); } @VisibleForTesting SearchIndexProvider(int xmlRes, WifiRestriction wifiRestriction) { super(xmlRes); mWifiRestriction = wifiRestriction; } @Override public List<String> getNonIndexableKeys(Context context) { final List<String> keys = super.getNonIndexableKeys(context); if (!mWifiRestriction.isChangeWifiStateAllowed(context)) { keys.add(PREF_KEY_WIFI_TOGGLE); } final WifiManager wifiManager = context.getSystemService(WifiManager.class); if (wifiManager == null) return keys; Loading @@ -1255,7 +1279,15 @@ public class NetworkProviderSettings extends RestrictedSettingsFragment } return keys; } }; } @VisibleForTesting static class WifiRestriction { public boolean isChangeWifiStateAllowed(@Nullable Context context) { if (context == null) return true; return WifiEnterpriseRestrictionUtils.isChangeWifiStateAllowed(context); } } private class WifiEntryConnectCallback implements ConnectCallback { final WifiEntry mConnectWifiEntry; Loading tests/robotests/src/com/android/settings/network/NetworkProviderSettingsTest.java +36 −6 Original line number Diff line number Diff line Loading @@ -60,6 +60,7 @@ import androidx.preference.PreferenceFragmentCompat; import androidx.preference.PreferenceManager; import androidx.preference.PreferenceScreen; import androidx.recyclerview.widget.RecyclerView; import androidx.test.core.app.ApplicationProvider; import com.android.settings.AirplaneModeEnabler; import com.android.settings.R; Loading @@ -77,24 +78,33 @@ import com.android.wifitrackerlib.WifiEntry; import com.android.wifitrackerlib.WifiPickerTracker; import org.junit.Before; import org.junit.Rule; import org.junit.Test; import org.junit.runner.RunWith; import org.mockito.Mock; import org.mockito.Mockito; import org.mockito.MockitoAnnotations; import org.mockito.Spy; import org.mockito.junit.MockitoJUnit; import org.mockito.junit.MockitoRule; import org.robolectric.RobolectricTestRunner; import org.robolectric.RuntimeEnvironment; import org.robolectric.annotation.Config; import org.robolectric.annotation.Implementation; import org.robolectric.annotation.Implements; import org.robolectric.shadows.ShadowToast; import java.util.List; @RunWith(RobolectricTestRunner.class) public class NetworkProviderSettingsTest { private static final int XML_RES = R.xml.wifi_tether_settings; private static final int NUM_NETWORKS = 4; private static final String FAKE_URI_STRING = "fakeuri"; @Rule public final MockitoRule mMockitoRule = MockitoJUnit.rule(); @Spy Context mContext = ApplicationProvider.getApplicationContext(); @Mock private PowerManager mPowerManager; @Mock Loading @@ -107,7 +117,6 @@ public class NetworkProviderSettingsTest { private AirplaneModeEnabler mAirplaneModeEnabler; @Mock private DataUsagePreference mDataUsagePreference; private Context mContext; private NetworkProviderSettings mNetworkProviderSettings; @Mock private WifiPickerTracker mMockWifiPickerTracker; Loading @@ -131,12 +140,11 @@ public class NetworkProviderSettingsTest { PreferenceCategory mConnectedWifiEntryPreferenceCategory; @Mock PreferenceCategory mFirstWifiEntryPreferenceCategory; @Mock NetworkProviderSettings.WifiRestriction mWifiRestriction; @Before public void setUp() { MockitoAnnotations.initMocks(this); mContext = spy(RuntimeEnvironment.application); mNetworkProviderSettings = spy(new NetworkProviderSettings()); doReturn(mContext).when(mNetworkProviderSettings).getContext(); doReturn(mPreferenceManager).when(mNetworkProviderSettings).getPreferenceManager(); Loading Loading @@ -721,6 +729,28 @@ public class NetworkProviderSettingsTest { verify(mContextMenu, never()).add(anyInt(), eq(MENU_ID_FORGET), anyInt(), anyInt()); } @Test public void getNonIndexableKeys_allowedChangeWifiState_keyNotReturned() { when(mWifiRestriction.isChangeWifiStateAllowed(mContext)).thenReturn(true); NetworkProviderSettings.SearchIndexProvider searchIndexProvider = new NetworkProviderSettings.SearchIndexProvider(XML_RES, mWifiRestriction); final List<String> keys = searchIndexProvider.getNonIndexableKeys(mContext); assertThat(keys).doesNotContain(NetworkProviderSettings.PREF_KEY_WIFI_TOGGLE); } @Test public void getNonIndexableKeys_disallowedChangeWifiState_keyReturned() { when(mWifiRestriction.isChangeWifiStateAllowed(mContext)).thenReturn(false); NetworkProviderSettings.SearchIndexProvider searchIndexProvider = new NetworkProviderSettings.SearchIndexProvider(XML_RES, mWifiRestriction); final List<String> keys = searchIndexProvider.getNonIndexableKeys(mContext); assertThat(keys).contains(NetworkProviderSettings.PREF_KEY_WIFI_TOGGLE); } @Implements(PreferenceFragmentCompat.class) public static class ShadowPreferenceFragmentCompat { Loading Loading
src/com/android/settings/network/NetworkProviderSettings.java +48 −16 Original line number Diff line number Diff line Loading @@ -49,6 +49,7 @@ import android.view.MenuItem; import android.view.View; import android.widget.Toast; import androidx.annotation.Nullable; import androidx.annotation.VisibleForTesting; import androidx.appcompat.app.AlertDialog; import androidx.fragment.app.Fragment; Loading Loading @@ -87,6 +88,7 @@ import com.android.settingslib.search.SearchIndexable; import com.android.settingslib.utils.ThreadUtils; import com.android.settingslib.widget.FooterPreference; import com.android.settingslib.widget.LayoutPreference; import com.android.settingslib.wifi.WifiEnterpriseRestrictionUtils; import com.android.settingslib.wifi.WifiSavedConfigUtils; import com.android.wifitrackerlib.WifiEntry; import com.android.wifitrackerlib.WifiEntry.ConnectCallback; Loading Loading @@ -127,6 +129,8 @@ public class NetworkProviderSettings extends RestrictedSettingsFragment private static final String PREF_KEY_AIRPLANE_MODE_MSG = "airplane_mode_message"; private static final String PREF_KEY_EMPTY_WIFI_LIST = "wifi_empty_list"; @VisibleForTesting static final String PREF_KEY_WIFI_TOGGLE = "main_toggle_wifi"; // TODO(b/70983952): Rename these to use WifiEntry instead of AccessPoint. @VisibleForTesting static final String PREF_KEY_CONNECTED_ACCESS_POINTS = "connected_access_point"; Loading Loading @@ -1236,13 +1240,33 @@ public class NetworkProviderSettings extends RestrictedSettingsFragment } }; public static final BaseSearchIndexProvider SEARCH_INDEX_DATA_PROVIDER = new BaseSearchIndexProvider(R.xml.network_provider_settings) { public static final SearchIndexProvider SEARCH_INDEX_DATA_PROVIDER = new SearchIndexProvider(R.xml.network_provider_settings); @VisibleForTesting static class SearchIndexProvider extends BaseSearchIndexProvider { private final WifiRestriction mWifiRestriction; SearchIndexProvider(int xmlRes) { super(xmlRes); mWifiRestriction = new WifiRestriction(); } @VisibleForTesting SearchIndexProvider(int xmlRes, WifiRestriction wifiRestriction) { super(xmlRes); mWifiRestriction = wifiRestriction; } @Override public List<String> getNonIndexableKeys(Context context) { final List<String> keys = super.getNonIndexableKeys(context); if (!mWifiRestriction.isChangeWifiStateAllowed(context)) { keys.add(PREF_KEY_WIFI_TOGGLE); } final WifiManager wifiManager = context.getSystemService(WifiManager.class); if (wifiManager == null) return keys; Loading @@ -1255,7 +1279,15 @@ public class NetworkProviderSettings extends RestrictedSettingsFragment } return keys; } }; } @VisibleForTesting static class WifiRestriction { public boolean isChangeWifiStateAllowed(@Nullable Context context) { if (context == null) return true; return WifiEnterpriseRestrictionUtils.isChangeWifiStateAllowed(context); } } private class WifiEntryConnectCallback implements ConnectCallback { final WifiEntry mConnectWifiEntry; Loading
tests/robotests/src/com/android/settings/network/NetworkProviderSettingsTest.java +36 −6 Original line number Diff line number Diff line Loading @@ -60,6 +60,7 @@ import androidx.preference.PreferenceFragmentCompat; import androidx.preference.PreferenceManager; import androidx.preference.PreferenceScreen; import androidx.recyclerview.widget.RecyclerView; import androidx.test.core.app.ApplicationProvider; import com.android.settings.AirplaneModeEnabler; import com.android.settings.R; Loading @@ -77,24 +78,33 @@ import com.android.wifitrackerlib.WifiEntry; import com.android.wifitrackerlib.WifiPickerTracker; import org.junit.Before; import org.junit.Rule; import org.junit.Test; import org.junit.runner.RunWith; import org.mockito.Mock; import org.mockito.Mockito; import org.mockito.MockitoAnnotations; import org.mockito.Spy; import org.mockito.junit.MockitoJUnit; import org.mockito.junit.MockitoRule; import org.robolectric.RobolectricTestRunner; import org.robolectric.RuntimeEnvironment; import org.robolectric.annotation.Config; import org.robolectric.annotation.Implementation; import org.robolectric.annotation.Implements; import org.robolectric.shadows.ShadowToast; import java.util.List; @RunWith(RobolectricTestRunner.class) public class NetworkProviderSettingsTest { private static final int XML_RES = R.xml.wifi_tether_settings; private static final int NUM_NETWORKS = 4; private static final String FAKE_URI_STRING = "fakeuri"; @Rule public final MockitoRule mMockitoRule = MockitoJUnit.rule(); @Spy Context mContext = ApplicationProvider.getApplicationContext(); @Mock private PowerManager mPowerManager; @Mock Loading @@ -107,7 +117,6 @@ public class NetworkProviderSettingsTest { private AirplaneModeEnabler mAirplaneModeEnabler; @Mock private DataUsagePreference mDataUsagePreference; private Context mContext; private NetworkProviderSettings mNetworkProviderSettings; @Mock private WifiPickerTracker mMockWifiPickerTracker; Loading @@ -131,12 +140,11 @@ public class NetworkProviderSettingsTest { PreferenceCategory mConnectedWifiEntryPreferenceCategory; @Mock PreferenceCategory mFirstWifiEntryPreferenceCategory; @Mock NetworkProviderSettings.WifiRestriction mWifiRestriction; @Before public void setUp() { MockitoAnnotations.initMocks(this); mContext = spy(RuntimeEnvironment.application); mNetworkProviderSettings = spy(new NetworkProviderSettings()); doReturn(mContext).when(mNetworkProviderSettings).getContext(); doReturn(mPreferenceManager).when(mNetworkProviderSettings).getPreferenceManager(); Loading Loading @@ -721,6 +729,28 @@ public class NetworkProviderSettingsTest { verify(mContextMenu, never()).add(anyInt(), eq(MENU_ID_FORGET), anyInt(), anyInt()); } @Test public void getNonIndexableKeys_allowedChangeWifiState_keyNotReturned() { when(mWifiRestriction.isChangeWifiStateAllowed(mContext)).thenReturn(true); NetworkProviderSettings.SearchIndexProvider searchIndexProvider = new NetworkProviderSettings.SearchIndexProvider(XML_RES, mWifiRestriction); final List<String> keys = searchIndexProvider.getNonIndexableKeys(mContext); assertThat(keys).doesNotContain(NetworkProviderSettings.PREF_KEY_WIFI_TOGGLE); } @Test public void getNonIndexableKeys_disallowedChangeWifiState_keyReturned() { when(mWifiRestriction.isChangeWifiStateAllowed(mContext)).thenReturn(false); NetworkProviderSettings.SearchIndexProvider searchIndexProvider = new NetworkProviderSettings.SearchIndexProvider(XML_RES, mWifiRestriction); final List<String> keys = searchIndexProvider.getNonIndexableKeys(mContext); assertThat(keys).contains(NetworkProviderSettings.PREF_KEY_WIFI_TOGGLE); } @Implements(PreferenceFragmentCompat.class) public static class ShadowPreferenceFragmentCompat { Loading