From 52727dd1fbca7612c2179b50689cd77f8f939b1a Mon Sep 17 00:00:00 2001 From: Irfan Sheriff Date: Wed, 17 Nov 2010 12:17:35 -0800 Subject: [PATCH] Restore compareTo behavior of access point list The Comparator with TreeList that was added during wifi set up changes does not work well since access point can change later. Restore the old compareTo behavior. Change-Id: I75681fea616792e9fd134c0d71762b4e0d46ffd6 --- .../android/settings/wifi/AccessPoint.java | 54 +++++++++---------- .../android/settings/wifi/WifiSettings.java | 7 ++- 2 files changed, 30 insertions(+), 31 deletions(-) diff --git a/src/com/android/settings/wifi/AccessPoint.java b/src/com/android/settings/wifi/AccessPoint.java index c932978abf7..774ac58330c 100644 --- a/src/com/android/settings/wifi/AccessPoint.java +++ b/src/com/android/settings/wifi/AccessPoint.java @@ -35,33 +35,6 @@ class AccessPoint extends Preference { private static final int[] STATE_SECURED = {R.attr.state_encrypted}; private static final int[] STATE_NONE = {}; - public static final class Comparater - implements Comparator { - @Override - public int compare(AccessPoint accessPoint1, AccessPoint accessPoint2) { - // Active one goes first. - if (accessPoint1.mInfo != accessPoint2.mInfo) { - return (accessPoint1.mInfo != null) ? -1 : 1; - } - - // Reachable one goes before unreachable one. - if ((accessPoint1.mRssi ^ accessPoint2.mRssi) < 0) { - return (accessPoint1.mRssi != Integer.MAX_VALUE) ? -1 : 1; - } - // Configured one goes before unconfigured one. - if ((accessPoint1.networkId ^ accessPoint2.networkId) < 0) { - return (accessPoint1.networkId != -1) ? -1 : 1; - } - // Sort by signal strength. - int difference = WifiManager.compareSignalLevel( - accessPoint2.mRssi, accessPoint1.mRssi); - if (difference != 0) { - return difference; - } - // Sort by ssid. - return accessPoint1.ssid.compareToIgnoreCase(accessPoint2.ssid); - } - } static final int SECURITY_NONE = 0; static final int SECURITY_WEP = 1; @@ -140,6 +113,33 @@ class AccessPoint extends Preference { super.onBindView(view); } + @Override + public int compareTo(Preference preference) { + if (!(preference instanceof AccessPoint)) { + return 1; + } + AccessPoint other = (AccessPoint) preference; + // Active one goes first. + if (mInfo != other.mInfo) { + return (mInfo != null) ? -1 : 1; + } + // Reachable one goes before unreachable one. + if ((mRssi ^ other.mRssi) < 0) { + return (mRssi != Integer.MAX_VALUE) ? -1 : 1; + } + // Configured one goes before unconfigured one. + if ((networkId ^ other.networkId) < 0) { + return (networkId != -1) ? -1 : 1; + } + // Sort by signal strength. + int difference = WifiManager.compareSignalLevel(other.mRssi, mRssi); + if (difference != 0) { + return difference; + } + // Sort by ssid. + return ssid.compareToIgnoreCase(other.ssid); + } + boolean update(ScanResult result) { // We do not call refresh() since this is called before onBindView(). diff --git a/src/com/android/settings/wifi/WifiSettings.java b/src/com/android/settings/wifi/WifiSettings.java index 1f7a1dae8d2..fefbdfcd2c7 100644 --- a/src/com/android/settings/wifi/WifiSettings.java +++ b/src/com/android/settings/wifi/WifiSettings.java @@ -56,9 +56,9 @@ import android.view.View; import android.widget.AdapterView.AdapterContextMenuInfo; import android.widget.Toast; +import java.util.ArrayList; import java.util.Collection; import java.util.List; -import java.util.TreeSet; /** * This currently provides three types of UI. @@ -184,7 +184,7 @@ public class WifiSettings extends SettingsPreferenceFragment final ProgressCategoryBase preference = (ProgressCategoryBase) findPreference("access_points"); mAccessPoints = preference; - mAccessPoints.setOrderingAsAdded(true); + mAccessPoints.setOrderingAsAdded(false); mAddNetwork = findPreference("add_network"); registerForContextMenu(getListView()); @@ -379,8 +379,7 @@ public class WifiSettings extends SettingsPreferenceFragment } private Collection constructAccessPoints() { - Collection accessPoints = - new TreeSet(new AccessPoint.Comparater()); + Collection accessPoints = new ArrayList(); final List configs = mWifiManager.getConfiguredNetworks(); if (configs != null) {