From 84ba06586b8dc079fec476b0d39b3d71687354a0 Mon Sep 17 00:00:00 2001 From: Dmitri Plotnikov Date: Fri, 4 Sep 2009 15:59:05 -0700 Subject: Fixing a concurrency problem by changing the contact aggregation exception API. The current API requires a contact_id and a raw_contact_id There are at least two issues with this approach I did not recognize initially: 1. Contact_id may be changed asynchronously by aggregation or some other process. 2. A raw contacts may need to be added to an aggregate before the actual aggregation pass has gotten to it, so the client would need to wait for the aggregation to complete before it can set an aggregation exception. That's backwards. --- core/java/android/provider/ContactsContract.java | 36 ++++++++++++++++-------- 1 file changed, 24 insertions(+), 12 deletions(-) diff --git a/core/java/android/provider/ContactsContract.java b/core/java/android/provider/ContactsContract.java index a175c3757a19..6e3b28242fe6 100644 --- a/core/java/android/provider/ContactsContract.java +++ b/core/java/android/provider/ContactsContract.java @@ -1594,7 +1594,7 @@ public final class ContactsContract { "vnd.android.cursor.item/aggregation_exception"; /** - * The type of exception: {@link #TYPE_KEEP_IN}, {@link #TYPE_KEEP_OUT} or + * The type of exception: {@link #TYPE_KEEP_TOGETHER}, {@link #TYPE_KEEP_SEPARATE} or * {@link #TYPE_AUTOMATIC}. * *

Type: INTEGER

@@ -1602,33 +1602,45 @@ public final class ContactsContract { public static final String TYPE = "type"; /** - * Allows the provider to automatically decide whether the aggregate - * contact should include a particular raw contact or not. + * Allows the provider to automatically decide whether the specified raw contacts should + * be included in the same aggregate contact or not. */ public static final int TYPE_AUTOMATIC = 0; /** - * Makes sure that the specified raw contact is included in the - * specified aggregate contact. + * Makes sure that the specified raw contacts are included in the same + * aggregate contact. */ + public static final int TYPE_KEEP_TOGETHER = 1; + + @Deprecated public static final int TYPE_KEEP_IN = 1; /** - * Makes sure that the specified raw contact is NOT included in the - * specified aggregate contact. + * Makes sure that the specified raw contacts are NOT included in the same + * aggregate contact. */ + public static final int TYPE_KEEP_SEPARATE = 2; + + @Deprecated public static final int TYPE_KEEP_OUT = 2; - /** - * A reference to the {@link android.provider.ContactsContract.Contacts#_ID} of the - * aggregate contact that the rule applies to. - */ + @Deprecated public static final String CONTACT_ID = "contact_id"; + @Deprecated + public static final String RAW_CONTACT_ID = "raw_contact_id"; + /** * A reference to the {@link RawContacts#_ID} of the raw contact that the rule applies to. */ - public static final String RAW_CONTACT_ID = "raw_contact_id"; + public static final String RAW_CONTACT_ID1 = "raw_contact_id1"; + + /** + * A reference to the other {@link RawContacts#_ID} of the raw contact that the rule + * applies to. + */ + public static final String RAW_CONTACT_ID2 = "raw_contact_id2"; } private interface SettingsColumns { -- cgit v1.2.3-59-g8ed1b