Merge "Fix incorrect updating of headers in Settings" into jb-dev
diff --git a/src/com/android/settings/Settings.java b/src/com/android/settings/Settings.java
index 37b47c2..e8a8f46 100644
--- a/src/com/android/settings/Settings.java
+++ b/src/com/android/settings/Settings.java
@@ -52,6 +52,7 @@
 import android.view.View.OnClickListener;
 import android.view.ViewGroup;
 import android.widget.ArrayAdapter;
+import android.widget.BaseAdapter;
 import android.widget.Button;
 import android.widget.ImageView;
 import android.widget.ListAdapter;
@@ -71,6 +72,7 @@
         implements ButtonBarHandler, OnAccountsUpdateListener {
 
     private static final String LOG_TAG = "Settings";
+
     private static final String META_DATA_KEY_HEADER_ID =
         "com.android.settings.TOP_LEVEL_HEADER_ID";
     private static final String META_DATA_KEY_FRAGMENT_CLASS =
@@ -108,7 +110,6 @@
     // TODO: Update Call Settings based on airplane mode state.
 
     protected HashMap<Integer, Integer> mHeaderIndexMap = new HashMap<Integer, Integer>();
-    private List<Header> mHeaders;
 
     private AuthenticatorHelper mAuthenticatorHelper;
     private Header mLastHeader;
@@ -189,6 +190,7 @@
         if (listAdapter instanceof HeaderAdapter) {
             ((HeaderAdapter) listAdapter).resume();
         }
+        invalidateHeaders();
     }
 
     @Override
@@ -360,7 +362,7 @@
         intent.setClass(this, SubSettings.class);
         return intent;
     }
-    
+
     /**
      * Populate the activity with the top-level headers.
      */
@@ -369,8 +371,6 @@
         loadHeadersFromResource(R.xml.settings_headers, headers);
 
         updateHeaderList(headers);
-
-        mHeaders = headers;
     }
 
     private void updateHeaderList(List<Header> target) {
@@ -730,17 +730,11 @@
 
     @Override
     public void setListAdapter(ListAdapter adapter) {
-        if (mHeaders == null) {
-            mHeaders = new ArrayList<Header>();
-            // When the saved state provides the list of headers, onBuildHeaders is not called
-            // Copy the list of Headers from the adapter, preserving their order
-            for (int i = 0; i < adapter.getCount(); i++) {
-                mHeaders.add((Header) adapter.getItem(i));
-            }
+        if (adapter == null) {
+            super.setListAdapter(null);
+        } else {
+            super.setListAdapter(new HeaderAdapter(this, getHeaders(), mAuthenticatorHelper));
         }
-
-        // Ignore the adapter provided by PreferenceActivity and substitute ours instead
-        super.setListAdapter(new HeaderAdapter(this, mHeaders, mAuthenticatorHelper));
     }
 
     @Override