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
This commit is contained in:
Kohsuke Yatoh
2023-08-03 08:34:58 +00:00
parent 07e0e5c86f
commit bdfab1de26
4 changed files with 44 additions and 3 deletions

View File

@@ -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"

View File

@@ -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);

View File

@@ -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);

View File

@@ -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;