Adds URI for querying Contacts joined with RawContacts.
diff --git a/src/com/android/providers/contacts/ContactsProvider2.java b/src/com/android/providers/contacts/ContactsProvider2.java
index fafabc4..438e470 100644
--- a/src/com/android/providers/contacts/ContactsProvider2.java
+++ b/src/com/android/providers/contacts/ContactsProvider2.java
@@ -104,11 +104,12 @@
private static final int CONTACTS_ID = 1001;
private static final int CONTACTS_DATA = 1002;
private static final int CONTACTS_SUMMARY = 1003;
- private static final int CONTACTS_SUMMARY_ID = 1004;
- private static final int CONTACTS_SUMMARY_FILTER = 1005;
- private static final int CONTACTS_SUMMARY_STREQUENT = 1006;
- private static final int CONTACTS_SUMMARY_STREQUENT_FILTER = 1007;
- private static final int CONTACTS_SUMMARY_GROUP = 1008;
+ private static final int CONTACTS_RAW_CONTACTS = 1004;
+ private static final int CONTACTS_SUMMARY_ID = 1005;
+ private static final int CONTACTS_SUMMARY_FILTER = 1006;
+ private static final int CONTACTS_SUMMARY_STREQUENT = 1007;
+ private static final int CONTACTS_SUMMARY_STREQUENT_FILTER = 1008;
+ private static final int CONTACTS_SUMMARY_GROUP = 1009;
private static final int RAW_CONTACTS = 2002;
private static final int RAW_CONTACTS_ID = 2003;
@@ -293,6 +294,8 @@
private static final HashMap<String, String> sDataContactsContactProjectionMap;
/** Contains the data, contacts, group sourceid and contact columns, for joined tables. */
private static final HashMap<String, String> sDataContactsGroupsContactProjectionMap;
+ /** Contains the contacts, and raw contact columns, for joined tables. */
+ private static final HashMap<String, String> sRawContactsContactsProjectionMap;
/** Contains just the contacts columns */
private static final HashMap<String, String> sRawContactsProjectionMap;
/** Contains just the data columns */
@@ -344,6 +347,7 @@
matcher.addURI(ContactsContract.AUTHORITY, "contacts", CONTACTS);
matcher.addURI(ContactsContract.AUTHORITY, "contacts/#", CONTACTS_ID);
matcher.addURI(ContactsContract.AUTHORITY, "contacts/#/data", CONTACTS_DATA);
+ matcher.addURI(ContactsContract.AUTHORITY, "contacts/#/raw_contacts", CONTACTS_RAW_CONTACTS);
matcher.addURI(ContactsContract.AUTHORITY, "contacts_summary", CONTACTS_SUMMARY);
matcher.addURI(ContactsContract.AUTHORITY, "contacts_summary/#", CONTACTS_SUMMARY_ID);
matcher.addURI(ContactsContract.AUTHORITY, "contacts_summary/filter/*",
@@ -446,6 +450,11 @@
+ " AS " + RawContacts.DELETED);
sRawContactsProjectionMap = columns;
+ columns = new HashMap<String, String>();
+ columns.putAll(sContactsProjectionMap);
+ columns.putAll(sRawContactsProjectionMap);
+ sRawContactsContactsProjectionMap = columns;
+
// Data projection map
columns = new HashMap<String, String>();
columns.put(Data._ID, Tables.DATA + "." + Data._ID + " AS _id");
@@ -2094,6 +2103,15 @@
break;
}
+ case CONTACTS_RAW_CONTACTS: {
+ long contactId = Long.parseLong(uri.getPathSegments().get(1));
+ qb.setTables(Tables.RAW_CONTACTS_JOIN_CONTACTS);
+ qb.setProjectionMap(sRawContactsContactsProjectionMap);
+ qb.appendWhere(RawContacts.CONTACT_ID + "=" + contactId + " AND ");
+ applyDataRestrictionExceptions(qb);
+ break;
+ }
+
case PHONES_FILTER: {
qb.setTables(Tables.DATA_JOIN_PACKAGES_MIMETYPES_RAW_CONTACTS_CONTACTS);
qb.setProjectionMap(sDataContactsContactProjectionMap);
diff --git a/src/com/android/providers/contacts/OpenHelper.java b/src/com/android/providers/contacts/OpenHelper.java
index 7c65d61..74e2761 100644
--- a/src/com/android/providers/contacts/OpenHelper.java
+++ b/src/com/android/providers/contacts/OpenHelper.java
@@ -110,6 +110,9 @@
+ "LEFT OUTER JOIN raw_contacts ON (data.raw_contact_id = raw_contacts._id) "
+ "LEFT OUTER JOIN contacts ON (raw_contacts.contact_id = contacts._id)";
+ public static final String RAW_CONTACTS_JOIN_CONTACTS = "raw_contacts "
+ + "LEFT OUTER JOIN contacts ON (raw_contacts.contact_id = contacts._id)";
+
public static final String DATA_JOIN_MIMETYPES_RAW_CONTACTS_CONTACTS = "data "
+ "LEFT OUTER JOIN mimetypes ON (data.mimetype_id = mimetypes._id) "
+ "LEFT OUTER JOIN raw_contacts ON (data.raw_contact_id = raw_contacts._id) "