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:
Sundeep Ghuman
2017-06-15 17:55:21 -07:00
parent 627fbf8157
commit 2412817201

View File

@@ -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) {