diff --git a/packages/SettingsLib/src/com/android/settingslib/wifi/WifiTracker.java b/packages/SettingsLib/src/com/android/settingslib/wifi/WifiTracker.java index 68803b39ea1dc..f32493375e9eb 100644 --- a/packages/SettingsLib/src/com/android/settingslib/wifi/WifiTracker.java +++ b/packages/SettingsLib/src/com/android/settingslib/wifi/WifiTracker.java @@ -205,7 +205,9 @@ public class WifiTracker { * Gets the current list of access points. */ public List getAccessPoints() { - return mAccessPoints; + synchronized (mAccessPoints) { + return new ArrayList<>(mAccessPoints); + } } public WifiManager getManager() { @@ -230,14 +232,14 @@ public class WifiTracker { public void dump(PrintWriter pw) { pw.println(" - wifi tracker ------"); - for (AccessPoint accessPoint : mAccessPoints) { + for (AccessPoint accessPoint : getAccessPoints()) { pw.println(" " + accessPoint); } } private void updateAccessPoints() { // Swap the current access points into a cached list. - ArrayList cachedAccessPoints = new ArrayList<>(mAccessPoints); + List cachedAccessPoints = getAccessPoints(); ArrayList accessPoints = new ArrayList<>(); // Clear out the configs so we don't think something is saved when it isn't. @@ -330,7 +332,7 @@ public class WifiTracker { mMainHandler.sendEmptyMessage(MainHandler.MSG_ACCESS_POINT_CHANGED); } - private AccessPoint getCachedOrCreate(ScanResult result, ArrayList cache) { + private AccessPoint getCachedOrCreate(ScanResult result, List cache) { final int N = cache.size(); for (int i = 0; i < N; i++) { if (cache.get(i).matches(result)) { @@ -342,7 +344,7 @@ public class WifiTracker { return new AccessPoint(mContext, result); } - private AccessPoint getCachedOrCreate(WifiConfiguration config, ArrayList cache) { + private AccessPoint getCachedOrCreate(WifiConfiguration config, List cache) { final int N = cache.size(); for (int i = 0; i < N; i++) { if (cache.get(i).matches(config)) { @@ -380,7 +382,9 @@ public class WifiTracker { } } if (reorder) { - Collections.sort(mAccessPoints); + synchronized (mAccessPoints) { + Collections.sort(mAccessPoints); + } mMainHandler.sendEmptyMessage(MainHandler.MSG_ACCESS_POINT_CHANGED); } }