From 53d1f0707323428edf9ec00da4ca98eeb1b5c092 Mon Sep 17 00:00:00 2001 From: vandwalle Date: Wed, 10 Dec 2014 13:25:47 -0800 Subject: [PATCH] make sure wificonfiguration scan cache doesnt grow unbounded Bug:18703749 Change-Id: I8e35d602a80b341668d9607db2da3ca6fdb970ae --- .../android/net/wifi/WifiConfiguration.java | 36 +++++++++++++++++++ 1 file changed, 36 insertions(+) diff --git a/wifi/java/android/net/wifi/WifiConfiguration.java b/wifi/java/android/net/wifi/WifiConfiguration.java index 0457dda4732af..12902bd55b2c8 100644 --- a/wifi/java/android/net/wifi/WifiConfiguration.java +++ b/wifi/java/android/net/wifi/WifiConfiguration.java @@ -927,6 +927,42 @@ public class WifiConfiguration implements Parcelable { } } + /** @hide + * trim the scan Result Cache + * @param: number of entries to keep in the cache + */ + public void trimScanResultsCache(int num) { + if (this.scanResultCache == null) { + return; + } + int currenSize = this.scanResultCache.size(); + if (currenSize <= num) { + return; // Nothing to trim + } + ArrayList list = new ArrayList(this.scanResultCache.values()); + if (list.size() != 0) { + // Sort by descending timestamp + Collections.sort(list, new Comparator() { + public int compare(Object o1, Object o2) { + ScanResult a = (ScanResult)o1; + ScanResult b = (ScanResult)o2; + if (a.seen > b.seen) { + return 1; + } + if (a.seen < b.seen) { + return -1; + } + return a.BSSID.compareTo(b.BSSID); + } + }); + } + for (int i = 0; i < currenSize - num ; i++) { + // Remove oldest results from scan cache + ScanResult result = list.get(i); + this.scanResultCache.remove(result.BSSID); + } + } + /* @hide */ private ArrayList sortScanResults() { ArrayList list = new ArrayList(this.scanResultCache.values());