Merge "Remove noisy debug logs."
diff --git a/src/com/android/contacts/GroupMemberLoader.java b/src/com/android/contacts/GroupMemberLoader.java
index 9605747..a75da48 100644
--- a/src/com/android/contacts/GroupMemberLoader.java
+++ b/src/com/android/contacts/GroupMemberLoader.java
@@ -16,6 +16,7 @@
 package com.android.contacts;
 
 import com.android.contacts.list.ContactListAdapter;
+import com.android.contacts.preference.ContactsPreferences;
 
 import android.content.Context;
 import android.content.CursorLoader;
@@ -81,7 +82,13 @@
         setProjection(PROJECTION_DATA);
         setSelection(createSelection());
         setSelectionArgs(createSelectionArgs());
-        setSortOrder(Contacts.SORT_KEY_ALTERNATIVE);
+
+        ContactsPreferences prefs = new ContactsPreferences(context);
+        if (prefs.getSortOrder() == ContactsContract.Preferences.SORT_ORDER_PRIMARY) {
+            setSortOrder(Contacts.SORT_KEY_PRIMARY);
+        } else {
+            setSortOrder(Contacts.SORT_KEY_ALTERNATIVE);
+        }
     }
 
     private Uri createUri() {
diff --git a/src/com/android/contacts/editor/StructuredNameEditorView.java b/src/com/android/contacts/editor/StructuredNameEditorView.java
index 5a2ffd3..6911628 100644
--- a/src/com/android/contacts/editor/StructuredNameEditorView.java
+++ b/src/com/android/contacts/editor/StructuredNameEditorView.java
@@ -77,18 +77,18 @@
         if (!isFieldChanged(column, value)) {
             return;
         }
+        super.onFieldChanged(column, value);
 
         mChanged = true;
 
+        // Make sure the display name and the structured name are synced
         if (hasShortAndLongForms()) {
             if (areOptionalFieldsVisible()) {
-                eraseFullName(getValues());
+                rebuildFullName(getValues());
             } else {
-                eraseStructuredName(getValues());
+                rebuildStructuredName(getValues());
             }
         }
-
-        super.onFieldChanged(column, value);
     }
 
     @Override
@@ -165,12 +165,28 @@
         values.putNull(StructuredName.DISPLAY_NAME);
     }
 
+    private void rebuildFullName(ValuesDelta values) {
+        Map<String, String> structuredNameMap = valuesToStructuredNameMap(values);
+        String displayName = NameConverter.structuredNameToDisplayName(getContext(),
+                structuredNameMap);
+        values.put(StructuredName.DISPLAY_NAME, displayName);
+    }
+
     private void eraseStructuredName(ValuesDelta values) {
         for (String field : NameConverter.STRUCTURED_NAME_FIELDS) {
             values.putNull(field);
         }
     }
 
+    private void rebuildStructuredName(ValuesDelta values) {
+        String displayName = values.getAsString(StructuredName.DISPLAY_NAME);
+        Map<String, String> structuredNameMap = NameConverter.displayNameToStructuredName(
+                getContext(), displayName);
+        for (String field : structuredNameMap.keySet()) {
+            values.put(field, structuredNameMap.get(field));
+        }
+    }
+
     private static void appendQueryParameter(Uri.Builder builder, String field, String value) {
         if (!TextUtils.isEmpty(value)) {
             builder.appendQueryParameter(field, value);