Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 9dfbd9da authored by Weng Su's avatar Weng Su
Browse files

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
parent e99683f0
Loading
Loading
Loading
Loading
+48 −16
Original line number Diff line number Diff line
@@ -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;
+36 −6
Original line number Diff line number Diff line
@@ -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 {