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