Reloading contact list after settings change

Bug: 3151551
Change-Id: I384cafb655b278b694f985e2fb74ad0b780a3e3f
diff --git a/src/com/android/contacts/activities/ContactBrowserActivity.java b/src/com/android/contacts/activities/ContactBrowserActivity.java
index aa8b80d..2106f44 100644
--- a/src/com/android/contacts/activities/ContactBrowserActivity.java
+++ b/src/com/android/contacts/activities/ContactBrowserActivity.java
@@ -878,8 +878,6 @@
             }
 
             case SUBACTIVITY_SETTINGS:
-                // TODO: Force the ListFragment to reload its setting and update (don't lookup
-                // directories here)
                 break;
 
             // TODO: Using the new startActivityWithResultFromFragment API this should not be needed
diff --git a/src/com/android/contacts/list/ContactEntryListFragment.java b/src/com/android/contacts/list/ContactEntryListFragment.java
index fe80c3c..46597d1 100644
--- a/src/com/android/contacts/list/ContactEntryListFragment.java
+++ b/src/com/android/contacts/list/ContactEntryListFragment.java
@@ -290,14 +290,13 @@
             mProviderStatusLoader = new ProviderStatusLoader(mContext);
         }
 
-        loadPreferences();
+        mForceLoad = loadPreferences();
 
         if (mListView instanceof ContactEntryListView) {
             ContactEntryListView listView = (ContactEntryListView)mListView;
             listView.setSelectionVisible(isSelectionVisible());
         }
 
-        mForceLoad = false;
         mDirectoryListStatus = STATUS_NOT_LOADED;
         mLoadPriorityDirectoriesOnly = true;
 
@@ -637,13 +636,24 @@
         return mContextMenuAdapter;
     }
 
-    protected void loadPreferences() {
-        setContactNameDisplayOrder(mContactsPrefs.getDisplayOrder());
-        setSortOrder(mContactsPrefs.getSortOrder());
+    protected boolean loadPreferences() {
+        boolean changed = false;
+        if (getContactNameDisplayOrder() != mContactsPrefs.getDisplayOrder()) {
+            setContactNameDisplayOrder(mContactsPrefs.getDisplayOrder());
+            changed = true;
+        }
+
+        if (getSortOrder() != mContactsPrefs.getSortOrder()) {
+            setSortOrder(mContactsPrefs.getSortOrder());
+            changed = true;
+        }
+
         if (mListView instanceof ContactEntryListView) {
             ContactEntryListView listView = (ContactEntryListView)mListView;
             listView.setHighlightNamesWhenScrolling(isNameHighlighingEnabled());
         }
+
+        return changed;
     }
 
     @Override