OSDN Git Service

Don't scroll when removing saved networks.
authorSundeep Ghuman <sghuman@google.com>
Tue, 27 Jun 2017 00:22:08 +0000 (17:22 -0700)
committerSundeep Ghuman <sghuman@google.com>
Thu, 29 Jun 2017 03:27:15 +0000 (20:27 -0700)
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

src/com/android/settings/wifi/SavedAccessPointsWifiSettings.java
src/com/android/settings/wifi/WifiSettings.java

index bf67565..ee4acd1 100644 (file)
@@ -127,17 +127,25 @@ public class SavedAccessPointsWifiSettings extends SettingsPreferenceFragment
         final List<AccessPoint> 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!");
         }
index 92846a6..593e88c 100644 (file)
@@ -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) {