Loading packages/SettingsLib/res/values/strings.xml +4 −0 Original line number Diff line number Diff line Loading @@ -67,6 +67,10 @@ <!-- Status message of Wi-Fi when it is connected by a Wi-Fi assistant application. [CHAR LIMIT=NONE] --> <string name="connected_via_wfa">Connected via Wi\u2011Fi assistant</string> <!-- Status message of Wi-Fi when it is connected by Passpoint configuration. [CHAR LIMIT=NONE] --> <string name="connected_via_passpoint">Connected via %1$s</string> <!-- Status message of Wi-Fi when network has matching passpoint credentials. [CHAR LIMIT=NONE] --> <string name="available_via_passpoint">Available via %1$s</string> <!-- Bluetooth settings. Message when a device is disconnected --> <string name="bluetooth_disconnected">Disconnected</string> Loading packages/SettingsLib/src/com/android/settingslib/wifi/AccessPoint.java +65 −10 Original line number Diff line number Diff line Loading @@ -26,6 +26,7 @@ import android.net.wifi.WifiConfiguration.KeyMgmt; import android.net.wifi.WifiInfo; import android.net.wifi.WifiManager; import android.os.Bundle; import android.text.TextUtils; import android.util.Log; import android.util.LruCache; Loading Loading @@ -199,6 +200,9 @@ public class AccessPoint implements Comparable<AccessPoint> { } public boolean matches(WifiConfiguration config) { if (config.isPasspoint() && mConfig != null && mConfig.isPasspoint()) return config.FQDN.equals(mConfig.providerFriendlyName); else return ssid.equals(removeDoubleQuotes(config.SSID)) && security == getSecurity(config); } Loading Loading @@ -265,19 +269,47 @@ public class AccessPoint implements Comparable<AccessPoint> { return ssid; } public String getConfigName() { if (mConfig != null && mConfig.isPasspoint()) { return mConfig.providerFriendlyName; } else { return ssid; } } public DetailedState getDetailedState() { return mNetworkInfo != null ? mNetworkInfo.getDetailedState() : null; } public String getSavedNetworkSummary() { // Update to new summary if (mConfig != null && mConfig.isPasspoint()) { return ""; } else { return getSettingsSummary(); } } public String getSummary() { return getSettingsSummary(); } public String getSettingsSummary() { // Update to new summary StringBuilder summary = new StringBuilder(); if (isActive()) { // This is the active connection if (isActive() && mConfig != null && mConfig.isPasspoint()) { // This is the active connection on passpoint summary.append(getSummary(mContext, getDetailedState(), false, mConfig.providerFriendlyName)); } else if (isActive()) { // This is the active connection on non-passpoint network summary.append(getSummary(mContext, getDetailedState(), networkId == WifiConfiguration.INVALID_NETWORK_ID)); } else if (mConfig != null && mConfig.hasNoInternetAccess()) { } else if (mConfig != null && mConfig.isPasspoint()) { String format = mContext.getString(R.string.available_via_passpoint); summary.append(String.format(format, mConfig.providerFriendlyName)); } else if (mConfig != null && mConfig.hasNoInternetAccess()) { summary.append(mContext.getString(R.string.wifi_no_internet)); } else if (mConfig != null && ((mConfig.status == WifiConfiguration.Status.DISABLED && mConfig.disableReason != WifiConfiguration.DISABLED_UNKNOWN_REASON) Loading Loading @@ -559,7 +591,11 @@ public class AccessPoint implements Comparable<AccessPoint> { } void loadConfig(WifiConfiguration config) { if (config.isPasspoint()) ssid = config.providerFriendlyName; else ssid = (config.SSID == null ? "" : removeDoubleQuotes(config.SSID)); security = getSecurity(config); networkId = config.networkId; mConfig = config; Loading Loading @@ -643,12 +679,26 @@ public class AccessPoint implements Comparable<AccessPoint> { return reorder; } void update(WifiConfiguration config) { mConfig = config; networkId = config.networkId; if (mAccessPointListener != null) { mAccessPointListener.onAccessPointChanged(this); } } public static String getSummary(Context context, String ssid, DetailedState state, boolean isEphemeral) { if (state == DetailedState.CONNECTED && isEphemeral && ssid == null) { boolean isEphemeral, String passpointProvider) { if (state == DetailedState.CONNECTED && ssid == null) { if (TextUtils.isEmpty(passpointProvider) == false) { // Special case for connected + passpoint networks. String format = context.getString(R.string.connected_via_passpoint); return String.format(format, passpointProvider); } else if (isEphemeral) { // Special case for connected + ephemeral networks. return context.getString(R.string.connected_via_wfa); } } String[] formats = context.getResources().getStringArray((ssid == null) ? R.array.wifi_status : R.array.wifi_status_with_ssid); Loading @@ -661,7 +711,12 @@ public class AccessPoint implements Comparable<AccessPoint> { } public static String getSummary(Context context, DetailedState state, boolean isEphemeral) { return getSummary(context, null, state, isEphemeral); return getSummary(context, null, state, isEphemeral, null); } public static String getSummary(Context context, DetailedState state, boolean isEphemeral, String passpointProvider) { return getSummary(context, null, state, isEphemeral, passpointProvider); } public static String convertToQuotedString(String string) { Loading packages/SettingsLib/src/com/android/settingslib/wifi/WifiTracker.java +41 −8 Original line number Diff line number Diff line Loading @@ -61,6 +61,7 @@ public class WifiTracker { private final WifiListener mListener; private final boolean mIncludeSaved; private final boolean mIncludeScans; private final boolean mIncludePasspoints; private boolean mSavedNetworksExist; private boolean mRegistered; Loading @@ -75,13 +76,17 @@ public class WifiTracker { public WifiTracker(Context context, WifiListener wifiListener, boolean includeSaved, boolean includeScans) { this(context, wifiListener, includeSaved, includeScans, this(context, wifiListener, includeSaved, includeScans, false); } public WifiTracker(Context context, WifiListener wifiListener, boolean includeSaved, boolean includeScans, boolean includePasspoints) { this(context, wifiListener, includeSaved, includeScans, includePasspoints, (WifiManager) context.getSystemService(Context.WIFI_SERVICE)); } @VisibleForTesting WifiTracker(Context context, WifiListener wifiListener, boolean includeSaved, boolean includeScans, WifiManager wifiManager) { boolean includeScans, boolean includePasspoints, WifiManager wifiManager) { if (!includeSaved && !includeScans) { throw new IllegalArgumentException("Must include either saved or scans"); } Loading @@ -89,6 +94,7 @@ public class WifiTracker { mWifiManager = wifiManager; mIncludeSaved = includeSaved; mIncludeScans = includeScans; mIncludePasspoints = includePasspoints; mListener = wifiListener; // check if verbose logging has been turned on or off Loading Loading @@ -220,21 +226,31 @@ public class WifiTracker { /** 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<String, AccessPoint> apMap = new Multimap<String, AccessPoint>(); WifiConfiguration connectionConfig = null; final List<WifiConfiguration> configs = mWifiManager.getConfiguredNetworks(); if (configs != null) { mSavedNetworksExist = configs.size() != 0; for (WifiConfiguration config : configs) { if (mLastInfo != null && mLastInfo.getNetworkId() == config.networkId) { connectionConfig = config; } if (config.selfAdded && config.numAssociation == 0) { continue; } AccessPoint accessPoint = getCachedOrCreate(config); if (mLastInfo != null && mLastNetworkInfo != null) { if (config.isPasspoint() == false) { accessPoint.update(mLastInfo, mLastNetworkInfo); } } if (mIncludeSaved) { if (!config.isPasspoint() || mIncludePasspoints) mAccessPoints.add(accessPoint); if (config.isPasspoint() == false) { apMap.put(accessPoint.getSsid(), accessPoint); } } else { // If we aren't using saved networks, drop them into the cache so that // we have access to their saved info. Loading Loading @@ -264,6 +280,22 @@ public class WifiTracker { if (mLastInfo != null && mLastNetworkInfo != null) { accessPoint.update(mLastInfo, mLastNetworkInfo); } if (result.passpointNetwork) { WifiConfiguration config = mWifiManager.getMatchingWifiConfig(result); if (config != null) { accessPoint.update(config); } } if (mLastInfo != null && mLastInfo.getBSSID() != null && mLastInfo.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); } mAccessPoints.add(accessPoint); apMap.put(accessPoint.getSsid(), accessPoint); } Loading Loading @@ -354,8 +386,9 @@ public class WifiTracker { } public static List<AccessPoint> getCurrentAccessPoints(Context context, boolean includeSaved, boolean includeScans) { WifiTracker tracker = new WifiTracker(context, null, includeSaved, includeScans); boolean includeScans, boolean includePasspoints) { WifiTracker tracker = new WifiTracker(context, null, includeSaved, includeScans, includePasspoints); tracker.forceUpdate(); return tracker.getAccessPoints(); } Loading Loading
packages/SettingsLib/res/values/strings.xml +4 −0 Original line number Diff line number Diff line Loading @@ -67,6 +67,10 @@ <!-- Status message of Wi-Fi when it is connected by a Wi-Fi assistant application. [CHAR LIMIT=NONE] --> <string name="connected_via_wfa">Connected via Wi\u2011Fi assistant</string> <!-- Status message of Wi-Fi when it is connected by Passpoint configuration. [CHAR LIMIT=NONE] --> <string name="connected_via_passpoint">Connected via %1$s</string> <!-- Status message of Wi-Fi when network has matching passpoint credentials. [CHAR LIMIT=NONE] --> <string name="available_via_passpoint">Available via %1$s</string> <!-- Bluetooth settings. Message when a device is disconnected --> <string name="bluetooth_disconnected">Disconnected</string> Loading
packages/SettingsLib/src/com/android/settingslib/wifi/AccessPoint.java +65 −10 Original line number Diff line number Diff line Loading @@ -26,6 +26,7 @@ import android.net.wifi.WifiConfiguration.KeyMgmt; import android.net.wifi.WifiInfo; import android.net.wifi.WifiManager; import android.os.Bundle; import android.text.TextUtils; import android.util.Log; import android.util.LruCache; Loading Loading @@ -199,6 +200,9 @@ public class AccessPoint implements Comparable<AccessPoint> { } public boolean matches(WifiConfiguration config) { if (config.isPasspoint() && mConfig != null && mConfig.isPasspoint()) return config.FQDN.equals(mConfig.providerFriendlyName); else return ssid.equals(removeDoubleQuotes(config.SSID)) && security == getSecurity(config); } Loading Loading @@ -265,19 +269,47 @@ public class AccessPoint implements Comparable<AccessPoint> { return ssid; } public String getConfigName() { if (mConfig != null && mConfig.isPasspoint()) { return mConfig.providerFriendlyName; } else { return ssid; } } public DetailedState getDetailedState() { return mNetworkInfo != null ? mNetworkInfo.getDetailedState() : null; } public String getSavedNetworkSummary() { // Update to new summary if (mConfig != null && mConfig.isPasspoint()) { return ""; } else { return getSettingsSummary(); } } public String getSummary() { return getSettingsSummary(); } public String getSettingsSummary() { // Update to new summary StringBuilder summary = new StringBuilder(); if (isActive()) { // This is the active connection if (isActive() && mConfig != null && mConfig.isPasspoint()) { // This is the active connection on passpoint summary.append(getSummary(mContext, getDetailedState(), false, mConfig.providerFriendlyName)); } else if (isActive()) { // This is the active connection on non-passpoint network summary.append(getSummary(mContext, getDetailedState(), networkId == WifiConfiguration.INVALID_NETWORK_ID)); } else if (mConfig != null && mConfig.hasNoInternetAccess()) { } else if (mConfig != null && mConfig.isPasspoint()) { String format = mContext.getString(R.string.available_via_passpoint); summary.append(String.format(format, mConfig.providerFriendlyName)); } else if (mConfig != null && mConfig.hasNoInternetAccess()) { summary.append(mContext.getString(R.string.wifi_no_internet)); } else if (mConfig != null && ((mConfig.status == WifiConfiguration.Status.DISABLED && mConfig.disableReason != WifiConfiguration.DISABLED_UNKNOWN_REASON) Loading Loading @@ -559,7 +591,11 @@ public class AccessPoint implements Comparable<AccessPoint> { } void loadConfig(WifiConfiguration config) { if (config.isPasspoint()) ssid = config.providerFriendlyName; else ssid = (config.SSID == null ? "" : removeDoubleQuotes(config.SSID)); security = getSecurity(config); networkId = config.networkId; mConfig = config; Loading Loading @@ -643,12 +679,26 @@ public class AccessPoint implements Comparable<AccessPoint> { return reorder; } void update(WifiConfiguration config) { mConfig = config; networkId = config.networkId; if (mAccessPointListener != null) { mAccessPointListener.onAccessPointChanged(this); } } public static String getSummary(Context context, String ssid, DetailedState state, boolean isEphemeral) { if (state == DetailedState.CONNECTED && isEphemeral && ssid == null) { boolean isEphemeral, String passpointProvider) { if (state == DetailedState.CONNECTED && ssid == null) { if (TextUtils.isEmpty(passpointProvider) == false) { // Special case for connected + passpoint networks. String format = context.getString(R.string.connected_via_passpoint); return String.format(format, passpointProvider); } else if (isEphemeral) { // Special case for connected + ephemeral networks. return context.getString(R.string.connected_via_wfa); } } String[] formats = context.getResources().getStringArray((ssid == null) ? R.array.wifi_status : R.array.wifi_status_with_ssid); Loading @@ -661,7 +711,12 @@ public class AccessPoint implements Comparable<AccessPoint> { } public static String getSummary(Context context, DetailedState state, boolean isEphemeral) { return getSummary(context, null, state, isEphemeral); return getSummary(context, null, state, isEphemeral, null); } public static String getSummary(Context context, DetailedState state, boolean isEphemeral, String passpointProvider) { return getSummary(context, null, state, isEphemeral, passpointProvider); } public static String convertToQuotedString(String string) { Loading
packages/SettingsLib/src/com/android/settingslib/wifi/WifiTracker.java +41 −8 Original line number Diff line number Diff line Loading @@ -61,6 +61,7 @@ public class WifiTracker { private final WifiListener mListener; private final boolean mIncludeSaved; private final boolean mIncludeScans; private final boolean mIncludePasspoints; private boolean mSavedNetworksExist; private boolean mRegistered; Loading @@ -75,13 +76,17 @@ public class WifiTracker { public WifiTracker(Context context, WifiListener wifiListener, boolean includeSaved, boolean includeScans) { this(context, wifiListener, includeSaved, includeScans, this(context, wifiListener, includeSaved, includeScans, false); } public WifiTracker(Context context, WifiListener wifiListener, boolean includeSaved, boolean includeScans, boolean includePasspoints) { this(context, wifiListener, includeSaved, includeScans, includePasspoints, (WifiManager) context.getSystemService(Context.WIFI_SERVICE)); } @VisibleForTesting WifiTracker(Context context, WifiListener wifiListener, boolean includeSaved, boolean includeScans, WifiManager wifiManager) { boolean includeScans, boolean includePasspoints, WifiManager wifiManager) { if (!includeSaved && !includeScans) { throw new IllegalArgumentException("Must include either saved or scans"); } Loading @@ -89,6 +94,7 @@ public class WifiTracker { mWifiManager = wifiManager; mIncludeSaved = includeSaved; mIncludeScans = includeScans; mIncludePasspoints = includePasspoints; mListener = wifiListener; // check if verbose logging has been turned on or off Loading Loading @@ -220,21 +226,31 @@ public class WifiTracker { /** 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<String, AccessPoint> apMap = new Multimap<String, AccessPoint>(); WifiConfiguration connectionConfig = null; final List<WifiConfiguration> configs = mWifiManager.getConfiguredNetworks(); if (configs != null) { mSavedNetworksExist = configs.size() != 0; for (WifiConfiguration config : configs) { if (mLastInfo != null && mLastInfo.getNetworkId() == config.networkId) { connectionConfig = config; } if (config.selfAdded && config.numAssociation == 0) { continue; } AccessPoint accessPoint = getCachedOrCreate(config); if (mLastInfo != null && mLastNetworkInfo != null) { if (config.isPasspoint() == false) { accessPoint.update(mLastInfo, mLastNetworkInfo); } } if (mIncludeSaved) { if (!config.isPasspoint() || mIncludePasspoints) mAccessPoints.add(accessPoint); if (config.isPasspoint() == false) { apMap.put(accessPoint.getSsid(), accessPoint); } } else { // If we aren't using saved networks, drop them into the cache so that // we have access to their saved info. Loading Loading @@ -264,6 +280,22 @@ public class WifiTracker { if (mLastInfo != null && mLastNetworkInfo != null) { accessPoint.update(mLastInfo, mLastNetworkInfo); } if (result.passpointNetwork) { WifiConfiguration config = mWifiManager.getMatchingWifiConfig(result); if (config != null) { accessPoint.update(config); } } if (mLastInfo != null && mLastInfo.getBSSID() != null && mLastInfo.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); } mAccessPoints.add(accessPoint); apMap.put(accessPoint.getSsid(), accessPoint); } Loading Loading @@ -354,8 +386,9 @@ public class WifiTracker { } public static List<AccessPoint> getCurrentAccessPoints(Context context, boolean includeSaved, boolean includeScans) { WifiTracker tracker = new WifiTracker(context, null, includeSaved, includeScans); boolean includeScans, boolean includePasspoints) { WifiTracker tracker = new WifiTracker(context, null, includeSaved, includeScans, includePasspoints); tracker.forceUpdate(); return tracker.getAccessPoints(); } Loading