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() {