Implement 'Available via Passpoint' feature
This also fixes the issues related to explicit connection to passpoint AP, and fixes occassional mention of 'connected via Wi-Fi Assistent' Change-Id: I152cebafa6259194f1d09a6972a3508156335cb6
This commit is contained in:
@@ -69,6 +69,8 @@
|
||||
<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>
|
||||
|
||||
@@ -200,7 +200,10 @@ public class AccessPoint implements Comparable<AccessPoint> {
|
||||
}
|
||||
|
||||
public boolean matches(WifiConfiguration config) {
|
||||
return ssid.equals(removeDoubleQuotes(config.SSID)) && security == getSecurity(config);
|
||||
if (config.isPasspoint() && mConfig != null && mConfig.isPasspoint())
|
||||
return config.FQDN.equals(mConfig.providerFriendlyName);
|
||||
else
|
||||
return ssid.equals(removeDoubleQuotes(config.SSID)) && security == getSecurity(config);
|
||||
}
|
||||
|
||||
public WifiConfiguration getConfig() {
|
||||
@@ -266,21 +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
|
||||
String passpointProvider = (mConfig != null && mConfig.isPasspoint()) ?
|
||||
mConfig.providerFriendlyName : null;
|
||||
if (isActive() && mConfig != null && mConfig.isPasspoint()) {
|
||||
// This is the active connection on passpoint
|
||||
summary.append(getSummary(mContext, getDetailedState(),
|
||||
networkId == WifiConfiguration.INVALID_NETWORK_ID, passpointProvider));
|
||||
} else if (mConfig != null
|
||||
&& mConfig.hasNoInternetAccess()) {
|
||||
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.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)
|
||||
@@ -652,16 +681,20 @@ public class AccessPoint implements Comparable<AccessPoint> {
|
||||
|
||||
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, String passpointProvider) {
|
||||
if (state == DetailedState.CONNECTED && isEphemeral && ssid == null) {
|
||||
if (state == DetailedState.CONNECTED && ssid == null) {
|
||||
if (TextUtils.isEmpty(passpointProvider) == false) {
|
||||
// Special case for connected + ephemeral networks.
|
||||
// Special case for connected + passpoint networks.
|
||||
String format = context.getString(R.string.connected_via_passpoint);
|
||||
return String.format(format, passpointProvider);
|
||||
} else if (isEphemeral && ssid == null) {
|
||||
} else if (isEphemeral) {
|
||||
// Special case for connected + ephemeral networks.
|
||||
return context.getString(R.string.connected_via_wfa);
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
@@ -74,14 +75,18 @@ public class WifiTracker {
|
||||
Scanner mScanner;
|
||||
|
||||
public WifiTracker(Context context, WifiListener wifiListener, boolean includeSaved,
|
||||
boolean includeScans) {
|
||||
this(context, wifiListener, includeSaved, includeScans,
|
||||
boolean 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");
|
||||
}
|
||||
@@ -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
|
||||
@@ -232,16 +238,19 @@ public class WifiTracker {
|
||||
if (config.selfAdded && config.numAssociation == 0) {
|
||||
continue;
|
||||
}
|
||||
if (config.isPasspoint()) {
|
||||
continue;
|
||||
}
|
||||
AccessPoint accessPoint = getCachedOrCreate(config);
|
||||
if (mLastInfo != null && mLastNetworkInfo != null) {
|
||||
accessPoint.update(mLastInfo, mLastNetworkInfo);
|
||||
if (config.isPasspoint() == false) {
|
||||
accessPoint.update(mLastInfo, mLastNetworkInfo);
|
||||
}
|
||||
}
|
||||
if (mIncludeSaved) {
|
||||
mAccessPoints.add(accessPoint);
|
||||
apMap.put(accessPoint.getSsid(), accessPoint);
|
||||
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.
|
||||
@@ -272,6 +281,13 @@ public class WifiTracker {
|
||||
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()) {
|
||||
@@ -370,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();
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user