Merge "Fix name editor data loss on rotation"
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);