From 14cc864122dae1b515c92fbade644d2a1ce27e71 Mon Sep 17 00:00:00 2001 From: Sundeep Ghuman Date: Mon, 26 Jun 2017 17:22:08 -0700 Subject: [PATCH] Don't scroll when removing saved networks. Bug: b/62374459 Test: Open saved networks from WifiSettings. Remove a saved network. Screen should not scroll to the top of the list. Change-Id: Ia78fc0b5435f659c8fe31abee8b76006d7986b66 --- .../wifi/SavedAccessPointsWifiSettings.java | 20 +++++++++++++------ .../android/settings/wifi/WifiSettings.java | 15 +------------- 2 files changed, 15 insertions(+), 20 deletions(-) diff --git a/src/com/android/settings/wifi/SavedAccessPointsWifiSettings.java b/src/com/android/settings/wifi/SavedAccessPointsWifiSettings.java index bf67565ea94..ee4acd1301c 100644 --- a/src/com/android/settings/wifi/SavedAccessPointsWifiSettings.java +++ b/src/com/android/settings/wifi/SavedAccessPointsWifiSettings.java @@ -127,17 +127,25 @@ public class SavedAccessPointsWifiSettings extends SettingsPreferenceFragment final List accessPoints = WifiSavedConfigUtils.getAllConfigs(context, mWifiManager); Collections.sort(accessPoints, SAVED_NETWORK_COMPARATOR); - preferenceScreen.removeAll(); + cacheRemoveAllPrefs(preferenceScreen); final int accessPointsSize = accessPoints.size(); - for (int i = 0; i < accessPointsSize; ++i){ + for (int i = 0; i < accessPointsSize; ++i) { + AccessPoint ap = accessPoints.get(i); + String key = AccessPointPreference.generatePreferenceKey(ap); LongPressAccessPointPreference preference = - new LongPressAccessPointPreference(accessPoints.get(i), context, - mUserBadgeCache, true, this); - preference.setIcon(null); - preferenceScreen.addPreference(preference); + (LongPressAccessPointPreference) getCachedPreference(key); + if (preference == null) { + preference = new LongPressAccessPointPreference( + ap, context, mUserBadgeCache, true, this); + preference.setKey(key); + preference.setIcon(null); + preferenceScreen.addPreference(preference); + } } + removeCachedPrefs(preferenceScreen); + if(getPreferenceScreen().getPreferenceCount() < 1) { Log.w(TAG, "Saved networks activity loaded, but there are no saved networks!"); } diff --git a/src/com/android/settings/wifi/WifiSettings.java b/src/com/android/settings/wifi/WifiSettings.java index 92846a602f9..593e88cb63d 100644 --- a/src/com/android/settings/wifi/WifiSettings.java +++ b/src/com/android/settings/wifi/WifiSettings.java @@ -43,7 +43,6 @@ import android.provider.Settings; import android.support.annotation.VisibleForTesting; import android.support.v7.preference.Preference; import android.support.v7.preference.PreferenceCategory; -import android.text.TextUtils; import android.util.Log; import android.view.ContextMenu; import android.view.ContextMenu.ContextMenuInfo; @@ -749,7 +748,7 @@ public class WifiSettings extends RestrictedSettingsFragment AccessPoint accessPoint = accessPoints.get(index); // Ignore access points that are out of range. if (accessPoint.isReachable()) { - String key = generateKey(accessPoint); + String key = AccessPointPreference.generatePreferenceKey(accessPoint); hasAvailableAccessPoints = true; LongPressAccessPointPreference pref = (LongPressAccessPointPreference) getCachedPreference(key); @@ -791,18 +790,6 @@ public class WifiSettings extends RestrictedSettingsFragment } } - private String generateKey(AccessPoint accessPoint) { - StringBuilder key = new StringBuilder(); - String bssid = accessPoint.getBssid(); - if (TextUtils.isEmpty(bssid)) { - key.append(accessPoint.getSsidStr()); - } else { - key.append(bssid); - } - key.append(',').append(accessPoint.getSecurity()); - return key.toString(); - } - @NonNull private LongPressAccessPointPreference createLongPressActionPointPreference( AccessPoint accessPoint) {