From 15b4c84c315f3998308e7e58ebcfdc388800e6a6 Mon Sep 17 00:00:00 2001 From: Vinit Deshpande Date: Tue, 24 Mar 2015 19:10:42 -0700 Subject: [PATCH] Fix settings UI for passpoint networks This change includes showing the friendly name in saved networks list and 'Connected via provider' addition for passpoint connections. Change-Id: I613770e0468f888c280e82a89b8a012a841d5bbd --- res/values/strings.xml | 2 ++ .../android/settings/wifi/AccessPoint.java | 16 ++++++++++-- src/com/android/settings/wifi/Summary.java | 26 +++++++++++++++---- .../android/settings/wifi/WifiSettings.java | 23 ++++++++++++++++ 4 files changed, 60 insertions(+), 7 deletions(-) diff --git a/res/values/strings.xml b/res/values/strings.xml index 4301e39c45d..b3aadaedc40 100644 --- a/res/values/strings.xml +++ b/res/values/strings.xml @@ -1333,6 +1333,8 @@ Wi\u2011Fi Assistant Connected via Wi\u2011Fi assistant + + Connected via %1$s Cast screen diff --git a/src/com/android/settings/wifi/AccessPoint.java b/src/com/android/settings/wifi/AccessPoint.java index 1bf1a5c5a13..1d5f8ce1fed 100644 --- a/src/com/android/settings/wifi/AccessPoint.java +++ b/src/com/android/settings/wifi/AccessPoint.java @@ -230,7 +230,11 @@ class AccessPoint extends Preference { } private void loadConfig(WifiConfiguration config) { - ssid = (config.SSID == null ? "" : removeDoubleQuotes(config.SSID)); + if (config.isPasspoint()) + ssid = config.providerFriendlyName; + else + ssid = (config.SSID == null ? "" : removeDoubleQuotes(config.SSID)); + bssid = config.BSSID; security = getSecurity(config); networkId = config.networkId; @@ -360,6 +364,7 @@ class AccessPoint extends Preference { refresh(); return true; } + return false; } @@ -394,6 +399,11 @@ class AccessPoint extends Preference { } } + void update(WifiConfiguration config) { + mConfig = config; + refresh(); + } + int getLevel() { if (mRssi == Integer.MAX_VALUE) { return -1; @@ -617,8 +627,10 @@ class AccessPoint extends Preference { StringBuilder summary = new StringBuilder(); if (isActive()) { // This is the active connection + String passpointProvider = (mConfig != null && mConfig.isPasspoint()) ? + mConfig.providerFriendlyName : null; summary.append(Summary.get(context, getState(), - networkId == WifiConfiguration.INVALID_NETWORK_ID)); + networkId == WifiConfiguration.INVALID_NETWORK_ID, passpointProvider)); } else if (mConfig != null && mConfig.hasNoInternetAccess()) { summary.append(context.getString(R.string.wifi_no_internet)); diff --git a/src/com/android/settings/wifi/Summary.java b/src/com/android/settings/wifi/Summary.java index 123f64a8a73..2abe3b95299 100644 --- a/src/com/android/settings/wifi/Summary.java +++ b/src/com/android/settings/wifi/Summary.java @@ -20,12 +20,20 @@ import com.android.settings.R; import android.content.Context; import android.net.NetworkInfo.DetailedState; +import android.text.TextUtils; class Summary { - static String get(Context context, String ssid, DetailedState state, boolean isEphemeral) { - if (state == DetailedState.CONNECTED && isEphemeral && ssid == null) { - // Special case for connected + ephemeral networks. - return context.getString(R.string.connected_via_wfa); + static String get(Context context, String ssid, DetailedState state, boolean isEphemeral, + String passpointProvider) { + if (state == DetailedState.CONNECTED) { + if (TextUtils.isEmpty(passpointProvider) == false) { + // Special case for connected + ephemeral networks. + String format = context.getString(R.string.connected_via_passpoint); + return String.format(format, passpointProvider); + } else if (isEphemeral && ssid == null) { + // Special case for connected + ephemeral networks. + return context.getString(R.string.connected_via_wfa); + } } String[] formats = context.getResources().getStringArray((ssid == null) @@ -38,7 +46,15 @@ class Summary { return String.format(formats[index], ssid); } + static String get(Context context, String ssid, DetailedState state, boolean isEphemeral) { + return get(context, ssid, state, isEphemeral, null); + } static String get(Context context, DetailedState state, boolean isEphemeral) { - return get(context, null, state, isEphemeral); + return get(context, null, state, isEphemeral, null); + } + + static String get(Context context, DetailedState state, boolean isEphemeral, + String passpointProvider) { + return get(context, null, state, isEphemeral, passpointProvider); } } diff --git a/src/com/android/settings/wifi/WifiSettings.java b/src/com/android/settings/wifi/WifiSettings.java index 54ebc6d6147..2fd695d838d 100644 --- a/src/com/android/settings/wifi/WifiSettings.java +++ b/src/com/android/settings/wifi/WifiSettings.java @@ -653,6 +653,7 @@ public class WifiSettings extends RestrictedSettingsFragment switch (wifiState) { case WifiManager.WIFI_STATE_ENABLED: // AccessPoints are automatically sorted with TreeSet. + mLastInfo = mWifiManager.getConnectionInfo(); final Collection accessPoints = constructAccessPoints(getActivity(), mWifiManager, mLastInfo, mLastNetworkInfo); @@ -721,6 +722,7 @@ public class WifiSettings extends RestrictedSettingsFragment /** Lookup table to more quickly update AccessPoints by only considering objects with the * correct SSID. Maps SSID -> List of AccessPoints with the given SSID. */ Multimap apMap = new Multimap(); + WifiConfiguration connectionConfig = null; final List configs = wifiManager.getConfiguredNetworks(); if (configs != null) { @@ -732,13 +734,23 @@ public class WifiSettings extends RestrictedSettingsFragment } } for (WifiConfiguration config : configs) { + if (lastInfo != null && lastInfo.getNetworkId() == config.networkId) { + connectionConfig = config; + } + if (config.selfAdded && config.numAssociation == 0) { continue; } + + if (config.isPasspoint()) { + continue; + } + AccessPoint accessPoint = new AccessPoint(context, config); if (lastInfo != null && lastNetworkInfo != null) { accessPoint.update(lastInfo, lastNetworkInfo); } + accessPoints.add(accessPoint); apMap.put(accessPoint.ssid, accessPoint); } @@ -758,11 +770,22 @@ public class WifiSettings extends RestrictedSettingsFragment if (accessPoint.update(result)) found = true; } + if (!found) { + AccessPoint accessPoint = new AccessPoint(context, result); if (lastInfo != null && lastNetworkInfo != null) { accessPoint.update(lastInfo, lastNetworkInfo); } + + if (lastInfo != null && lastInfo.getBSSID() != null + && lastInfo.getBSSID().equals(result.BSSID) + && connectionConfig != null && connectionConfig.isPasspoint()) { + /* This network is connected via this passpoint config */ + /* SSID match is not going to work for it; so update explicitly */ + accessPoint.update(connectionConfig); + } + accessPoints.add(accessPoint); apMap.put(accessPoint.ssid, accessPoint); }