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

Commit bdfab1de authored by Kohsuke Yatoh's avatar Kohsuke Yatoh
Browse files

Define "Add network" preference in XML.

Move the definition from Java to XML, so that SearchIndexProvider can
include it in the getXmlResourcesToIndex().
Also update getNonIndexableKeys() to return the corresponding key when
the preference is hidden.

If the Internet settings are restricted, "Add network" still appears on
search. When clicked, it opens the Internet settings page in restricted
mode, so that users can know that the settings are restricted.

Bug: 224421762
Fix: 224421762
Test: atest SettingsRoboTests:NetworkProviderSettingsTest
Change-Id: Ie9ea58070843a390844b461ce766f0ce29e64fab
parent 07e0e5c8
Loading
Loading
Loading
Loading
+7 −1
Original line number Diff line number Diff line
@@ -65,7 +65,13 @@

    <PreferenceCategory
        android:key="access_points"
        android:layout="@layout/preference_category_no_label"/>
        android:layout="@layout/preference_category_no_label">

        <com.android.settings.wifi.AddWifiNetworkPreference
            android:key="add_wifi_network"
            android:title="@string/wifi_add_network"
            android:icon="@drawable/ic_add_24dp"/>
    </PreferenceCategory>

    <Preference
        android:key="configure_network_settings"
+9 −1
Original line number Diff line number Diff line
@@ -138,6 +138,8 @@ public class NetworkProviderSettings extends RestrictedSettingsFragment
    @VisibleForTesting
    static final String PREF_KEY_FIRST_ACCESS_POINTS = "first_access_points";
    private static final String PREF_KEY_ACCESS_POINTS = "access_points";
    @VisibleForTesting
    static final String PREF_KEY_ADD_WIFI_NETWORK = "add_wifi_network";
    private static final String PREF_KEY_CONFIGURE_NETWORK_SETTINGS = "configure_network_settings";
    private static final String PREF_KEY_SAVED_NETWORKS = "saved_networks";
    @VisibleForTesting
@@ -325,7 +327,10 @@ public class NetworkProviderSettings extends RestrictedSettingsFragment
        mWifiEntryPreferenceCategory = findPreference(PREF_KEY_ACCESS_POINTS);
        mConfigureWifiSettingsPreference = findPreference(PREF_KEY_CONFIGURE_NETWORK_SETTINGS);
        mSavedNetworksPreference = findPreference(PREF_KEY_SAVED_NETWORKS);
        mAddWifiNetworkPreference = new AddWifiNetworkPreference(getPrefContext());
        mAddWifiNetworkPreference = findPreference(PREF_KEY_ADD_WIFI_NETWORK);
        // Hide mAddWifiNetworkPreference by default. updateWifiEntryPreferences() will add it back
        // later when appropriate.
        mWifiEntryPreferenceCategory.removePreference(mAddWifiNetworkPreference);
        mDataUsagePreference = findPreference(PREF_KEY_DATA_USAGE);
        mDataUsagePreference.setVisible(DataUsageUtils.hasWifiRadio(getContext()));
        mDataUsagePreference.setTemplate(new NetworkTemplate.Builder(NetworkTemplate.MATCH_WIFI)
@@ -1312,6 +1317,9 @@ public class NetworkProviderSettings extends RestrictedSettingsFragment
            if (WifiSavedConfigUtils.getAllConfigsCount(context, wifiManager) == 0) {
                keys.add(PREF_KEY_SAVED_NETWORKS);
            }
            if (wifiManager.getWifiState() != WifiManager.WIFI_STATE_ENABLED) {
                keys.add(PREF_KEY_ADD_WIFI_NETWORK);
            }

            if (!DataUsageUtils.hasWifiRadio(context)) {
                keys.add(PREF_KEY_DATA_USAGE);
+6 −1
Original line number Diff line number Diff line
@@ -20,10 +20,12 @@ import android.content.Context;
import android.content.res.Resources;
import android.graphics.drawable.Drawable;
import android.os.UserManager;
import android.util.AttributeSet;
import android.util.Log;
import android.widget.ImageButton;

import androidx.annotation.DrawableRes;
import androidx.annotation.Nullable;
import androidx.preference.PreferenceViewHolder;

import com.android.settings.R;
@@ -40,8 +42,11 @@ public class AddWifiNetworkPreference extends RestrictedPreference {
    private final Drawable mScanIconDrawable;

    public AddWifiNetworkPreference(Context context) {
        super(context);
        this(context, null);
    }

    public AddWifiNetworkPreference(Context context, @Nullable AttributeSet attrs) {
        super(context, attrs);
        setLayoutResource(com.android.settingslib.R.layout.preference_access_point);
        setWidgetLayoutResource(R.layout.wifi_button_preference_widget);
        setIcon(R.drawable.ic_add_24dp);
+22 −0
Original line number Diff line number Diff line
@@ -796,6 +796,28 @@ public class NetworkProviderSettingsTest {
        assertThat(keys).contains(NetworkProviderSettings.PREF_KEY_WIFI_TOGGLE);
    }

    @Test
    public void getNonIndexableKeys_wifiStateEnabled_addWifiNetworkKeyNotReturned() {
        when(mWifiManager.getWifiState()).thenReturn(WifiManager.WIFI_STATE_ENABLED);
        NetworkProviderSettings.SearchIndexProvider searchIndexProvider =
                new NetworkProviderSettings.SearchIndexProvider(XML_RES, mWifiRestriction);

        final List<String> keys = searchIndexProvider.getNonIndexableKeys(mContext);

        assertThat(keys).doesNotContain(NetworkProviderSettings.PREF_KEY_ADD_WIFI_NETWORK);
    }

    @Test
    public void getNonIndexableKeys_wifiStateDisabled_addWifiNetworkKeyReturned() {
        when(mWifiManager.getWifiState()).thenReturn(WifiManager.WIFI_STATE_DISABLED);
        NetworkProviderSettings.SearchIndexProvider searchIndexProvider =
                new NetworkProviderSettings.SearchIndexProvider(XML_RES, mWifiRestriction);

        final List<String> keys = searchIndexProvider.getNonIndexableKeys(mContext);

        assertThat(keys).contains(NetworkProviderSettings.PREF_KEY_ADD_WIFI_NETWORK);
    }

    @Test
    public void launchConfigNewNetworkFragment_fragmentIsRestricted_ignoreWifiEntry() {
        mNetworkProviderSettings.mIsRestricted = true;