diff --git a/src/com/android/settings/wifi/SavedAccessPointsWifiSettings.java b/src/com/android/settings/wifi/SavedAccessPointsWifiSettings.java index b9ffcaf8166..07495ee55df 100644 --- a/src/com/android/settings/wifi/SavedAccessPointsWifiSettings.java +++ b/src/com/android/settings/wifi/SavedAccessPointsWifiSettings.java @@ -20,7 +20,9 @@ import android.app.Dialog; import android.content.Context; import android.content.res.Resources; import android.icu.text.Collator; +import android.net.wifi.WifiConfiguration; import android.net.wifi.WifiManager; +import android.net.wifi.hotspot2.PasspointConfiguration; import android.os.Bundle; import android.provider.SearchIndexableResource; import android.support.v7.preference.Preference; @@ -110,8 +112,7 @@ public class SavedAccessPointsWifiSettings extends SettingsPreferenceFragment PreferenceScreen preferenceScreen = getPreferenceScreen(); final Context context = getPrefContext(); - final List accessPoints = WifiTracker.getCurrentAccessPoints(context, true, - false, true); + final List accessPoints = getSavedConfigs(context, mWifiManager); Collections.sort(accessPoints, SAVED_NETWORK_COMPARATOR); preferenceScreen.removeAll(); @@ -129,6 +130,39 @@ public class SavedAccessPointsWifiSettings extends SettingsPreferenceFragment } } + /** + * Retrieved the list of saved network configurations from {@link WifiManager}. + * Each configuration is represented by {@link AccessPoint}. + * + * @param context The application context + * @param wifiManager An instance of {@link WifiManager} + * @return List of {@link AccessPoint} + */ + private static List getSavedConfigs(Context context, WifiManager wifiManager) { + List savedConfigs = new ArrayList<>(); + List savedNetworks = wifiManager.getConfiguredNetworks(); + for (WifiConfiguration network : savedNetworks) { + // Configuration for Passpoint network is configured temporary by WifiService for + // connection attempt only. The underlying configuration is saved as Passpoint + // configuration, which will be retrieved with WifiManager#getPasspointConfiguration + // call below. + if (network.isPasspoint()) { + continue; + } + savedConfigs.add(new AccessPoint(context, network)); + } + try { + List savedPasspointConfigs = + wifiManager.getPasspointConfigurations(); + for (PasspointConfiguration config : savedPasspointConfigs) { + savedConfigs.add(new AccessPoint(context, config)); + } + } catch (UnsupportedOperationException e) { + // Passpoint not supported. + } + return savedConfigs; + } + private void showDialog(LongPressAccessPointPreference accessPoint, boolean edit) { if (mDialog != null) { removeDialog(WifiSettings.WIFI_DIALOG_ID); @@ -187,7 +221,17 @@ public class SavedAccessPointsWifiSettings extends SettingsPreferenceFragment @Override public void onForget(WifiDialog dialog) { if (mSelectedAccessPoint != null) { - mWifiManager.forget(mSelectedAccessPoint.getConfig().networkId, null); + if (mSelectedAccessPoint.isPasspointConfig()) { + try { + mWifiManager.removePasspointConfiguration( + mSelectedAccessPoint.getPasspointFqdn()); + } catch (RuntimeException e) { + Log.e(TAG, "Failed to remove Passpoint configuration for " + + mSelectedAccessPoint.getConfigName()); + } + } else { + mWifiManager.forget(mSelectedAccessPoint.getConfig().networkId, null); + } mSelectedAccessPoint = null; initPreferences(); } @@ -235,8 +279,8 @@ public class SavedAccessPointsWifiSettings extends SettingsPreferenceFragment result.add(data); // Add available Wi-Fi access points - final List accessPoints = WifiTracker.getCurrentAccessPoints(context, - true, false, true); + final List accessPoints = + getSavedConfigs(context, context.getSystemService(WifiManager.class)); final int accessPointsSize = accessPoints.size(); for (int i = 0; i < accessPointsSize; ++i){ diff --git a/src/com/android/settings/wifi/WifiConfigController.java b/src/com/android/settings/wifi/WifiConfigController.java index 460d2102d2a..4380cbe1fae 100644 --- a/src/com/android/settings/wifi/WifiConfigController.java +++ b/src/com/android/settings/wifi/WifiConfigController.java @@ -217,7 +217,11 @@ public class WifiConfigController implements TextWatcher, mConfigUi.setSubmitButton(res.getString(R.string.wifi_save)); } else { - mConfigUi.setTitle(mAccessPoint.getSsid()); + if (!mAccessPoint.isPasspointConfig()) { + mConfigUi.setTitle(mAccessPoint.getSsid()); + } else { + mConfigUi.setTitle(mAccessPoint.getConfigName()); + } ViewGroup group = (ViewGroup) mView.findViewById(R.id.info); @@ -258,7 +262,8 @@ public class WifiConfigController implements TextWatcher, } } - if ((!mAccessPoint.isSaved() && !mAccessPoint.isActive()) + if ((!mAccessPoint.isSaved() && !mAccessPoint.isActive() + && !mAccessPoint.isPasspointConfig()) || mMode != WifiConfigUiBase.MODE_VIEW) { showSecurityFields(); showIpConfigFields(); @@ -326,7 +331,8 @@ public class WifiConfigController implements TextWatcher, addRow(group, R.string.wifi_security, mAccessPoint.getSecurityString(false)); mView.findViewById(R.id.ip_fields).setVisibility(View.GONE); } - if (mAccessPoint.isSaved() || mAccessPoint.isActive()) { + if (mAccessPoint.isSaved() || mAccessPoint.isActive() + || mAccessPoint.isPasspointConfig()) { mConfigUi.setForgetButton(res.getString(R.string.wifi_forget)); } }