Remove Wi-Fi toggle in settings search
- Remove Wi-Fi toggle preferences in settings search if Wi-Fi state is disallowed to change - See the result screenshot in b/203168097#comment29 Bug: 203168097 Test: manual test make RunSettingsRoboTests ROBOTEST_FILTER=NetworkProviderSettingsTest Change-Id: Ibe352f3ec3413fb0774de0b2bd213bb705e919e0
This commit is contained in:
@@ -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;
|
||||
@@ -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;
|
||||
@@ -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";
|
||||
@@ -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;
|
||||
|
||||
@@ -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;
|
||||
|
@@ -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;
|
||||
@@ -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
|
||||
@@ -107,7 +117,6 @@ public class NetworkProviderSettingsTest {
|
||||
private AirplaneModeEnabler mAirplaneModeEnabler;
|
||||
@Mock
|
||||
private DataUsagePreference mDataUsagePreference;
|
||||
private Context mContext;
|
||||
private NetworkProviderSettings mNetworkProviderSettings;
|
||||
@Mock
|
||||
private WifiPickerTracker mMockWifiPickerTracker;
|
||||
@@ -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();
|
||||
@@ -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 {
|
||||
|
||||
|
Reference in New Issue
Block a user