Fixing contact aggregation exception API.
diff --git a/src/com/android/contacts/ViewContactActivity.java b/src/com/android/contacts/ViewContactActivity.java
index a668f79..bbba2c2 100644
--- a/src/com/android/contacts/ViewContactActivity.java
+++ b/src/com/android/contacts/ViewContactActivity.java
@@ -85,6 +85,7 @@
 import android.widget.Toast;
 
 import java.util.ArrayList;
+import java.util.Iterator;
 
 /**
  * Displays the details of a specific contact.
@@ -749,8 +750,8 @@
         switch (requestCode) {
             case REQUEST_JOIN_CONTACT: {
                 if (resultCode == RESULT_OK && intent != null) {
-                    final long aggregateId = ContentUris.parseId(intent.getData());
-                    joinAggregate(aggregateId);
+                    final long contactId = ContentUris.parseId(intent.getData());
+                    joinAggregate(contactId);
                 }
                 break;
             }
@@ -768,7 +769,7 @@
     }
 
     private void splitContact(long rawContactId) {
-        setAggregationException(rawContactId, AggregationExceptions.TYPE_KEEP_OUT);
+        setAggregationException(rawContactId, AggregationExceptions.TYPE_KEEP_SEPARATE);
 
         // The split operation may have removed the original aggregate contact, so we need
         // to requery everything
@@ -776,14 +777,14 @@
         startEntityQuery();
     }
 
-    private void joinAggregate(final long aggregateId) {
+    private void joinAggregate(final long contactId) {
         Cursor c = mResolver.query(RawContacts.CONTENT_URI, new String[] {RawContacts._ID},
-                RawContacts.CONTACT_ID + "=" + aggregateId, null, null);
+                RawContacts.CONTACT_ID + "=" + contactId, null, null);
 
         try {
             while(c.moveToNext()) {
-                long contactId = c.getLong(0);
-                setAggregationException(contactId, AggregationExceptions.TYPE_KEEP_IN);
+                long rawContactId = c.getLong(0);
+                setAggregationException(rawContactId, AggregationExceptions.TYPE_KEEP_TOGETHER);
             }
         } finally {
             c.close();
@@ -799,10 +800,14 @@
      */
     protected void setAggregationException(long rawContactId, int exceptionType) {
         ContentValues values = new ContentValues(3);
-        values.put(AggregationExceptions.CONTACT_ID, ContentUris.parseId(mUri));
-        values.put(AggregationExceptions.RAW_CONTACT_ID, rawContactId);
-        values.put(AggregationExceptions.TYPE, exceptionType);
-        mResolver.update(AggregationExceptions.CONTENT_URI, values, null, null);
+        for (long aRawContactId : mRawContactIds) {
+            if (aRawContactId != rawContactId) {
+                values.put(AggregationExceptions.RAW_CONTACT_ID1, aRawContactId);
+                values.put(AggregationExceptions.RAW_CONTACT_ID2, rawContactId);
+                values.put(AggregationExceptions.TYPE, exceptionType);
+                mResolver.update(AggregationExceptions.CONTENT_URI, values, null, null);
+            }
+        }
     }
 
     private void showOptionsActivity() {