APs from old scans should not have RSSI values set.
This change creates parity between 'initWithScanResult' and 'update(ScanResult)' so that RSSIs are set similarly. This avoids an edge case problem when starting WifiSettings and only having very old scan results available (eg, coming from a screen off state), in which the old APs would have been shown and then instantly removed due to a sequential WifiTracker call to update the APs based on sticky broadcasts. Otherwise worded, creating an AP with a scan result and then instantly updating it with that same scan result would drastically change the state of the AccessPoint object. Bug: b/38212080 Test: With old scan results in the scanner (screen off more than 15 seconds), start wifi settings. Old APs should not be shown and then instantly removed. Change-Id: Ida13713dc115ba04882a7651eab4ebfd5cccbe7c
This commit is contained in:
@@ -511,7 +511,10 @@ public class AccessPoint implements Comparable<AccessPoint> {
|
||||
}
|
||||
}
|
||||
|
||||
mSeen = seen;
|
||||
// Only replace the previous value if we have a recent scan result to use
|
||||
if (seen != 0) {
|
||||
mSeen = seen;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -940,8 +943,10 @@ public class AccessPoint implements Comparable<AccessPoint> {
|
||||
security = getSecurity(result);
|
||||
if (security == SECURITY_PSK)
|
||||
pskType = getPskType(result);
|
||||
mRssi = result.level;
|
||||
mSeen = result.timestamp;
|
||||
|
||||
mScanResultCache.put(result.BSSID, result);
|
||||
updateRssi();
|
||||
mSeen = result.timestamp; // even if the timestamp is old it is still valid
|
||||
}
|
||||
|
||||
public void saveWifiState(Bundle savedState) {
|
||||
|
||||
Reference in New Issue
Block a user