From 48828f54daafda2edb122258c4c6a7d2ca704128 Mon Sep 17 00:00:00 2001 From: Dmitri Plotnikov Date: Fri, 18 Sep 2009 20:22:27 -0700 Subject: Adding support for contacts/data/phones/#, contacts/data/emails/# and contacts/data/postals/# Change-Id: I6f22e419d29b08b9d9e136d700cc4bd8f35a2397 --- .../providers/contacts/ContactsProvider2.java | 67 +++++++++++++++++++--- 1 file changed, 60 insertions(+), 7 deletions(-) (limited to 'src/com/android') diff --git a/src/com/android/providers/contacts/ContactsProvider2.java b/src/com/android/providers/contacts/ContactsProvider2.java index c51b85e..14ab008 100644 --- a/src/com/android/providers/contacts/ContactsProvider2.java +++ b/src/com/android/providers/contacts/ContactsProvider2.java @@ -161,11 +161,14 @@ public class ContactsProvider2 extends SQLiteContentProvider implements OnAccoun private static final int DATA = 3000; private static final int DATA_ID = 3001; private static final int PHONES = 3002; - private static final int PHONES_FILTER = 3003; - private static final int EMAILS = 3004; - private static final int EMAILS_LOOKUP = 3005; - private static final int EMAILS_FILTER = 3006; - private static final int POSTALS = 3007; + private static final int PHONES_ID = 3003; + private static final int PHONES_FILTER = 3004; + private static final int EMAILS = 3005; + private static final int EMAILS_ID = 3006; + private static final int EMAILS_LOOKUP = 3007; + private static final int EMAILS_FILTER = 3008; + private static final int POSTALS = 3009; + private static final int POSTALS_ID = 3010; private static final int PHONE_LOOKUP = 4000; @@ -363,13 +366,16 @@ public class ContactsProvider2 extends SQLiteContentProvider implements OnAccoun matcher.addURI(ContactsContract.AUTHORITY, "data", DATA); matcher.addURI(ContactsContract.AUTHORITY, "data/#", DATA_ID); matcher.addURI(ContactsContract.AUTHORITY, "data/phones", PHONES); + matcher.addURI(ContactsContract.AUTHORITY, "data/phones/#", PHONES_ID); matcher.addURI(ContactsContract.AUTHORITY, "data/phones/filter", PHONES_FILTER); matcher.addURI(ContactsContract.AUTHORITY, "data/phones/filter/*", PHONES_FILTER); matcher.addURI(ContactsContract.AUTHORITY, "data/emails", EMAILS); + matcher.addURI(ContactsContract.AUTHORITY, "data/emails/#", EMAILS_ID); matcher.addURI(ContactsContract.AUTHORITY, "data/emails/lookup/*", EMAILS_LOOKUP); matcher.addURI(ContactsContract.AUTHORITY, "data/emails/filter", EMAILS_FILTER); matcher.addURI(ContactsContract.AUTHORITY, "data/emails/filter/*", EMAILS_FILTER); matcher.addURI(ContactsContract.AUTHORITY, "data/postals", POSTALS); + matcher.addURI(ContactsContract.AUTHORITY, "data/postals/#", POSTALS_ID); matcher.addURI(ContactsContract.AUTHORITY, "groups", GROUPS); matcher.addURI(ContactsContract.AUTHORITY, "groups/#", GROUPS_ID); @@ -2313,7 +2319,10 @@ public class ContactsProvider2 extends SQLiteContentProvider implements OnAccoun callerIsSyncAdapter); } - case DATA_ID: { + case DATA_ID: + case PHONES_ID: + case EMAILS_ID: + case POSTALS_ID: { long dataId = ContentUris.parseId(uri); mSyncToNetwork |= !callerIsSyncAdapter; return deleteData(Data._ID + "=" + dataId, null, callerIsSyncAdapter); @@ -2504,7 +2513,10 @@ public class ContactsProvider2 extends SQLiteContentProvider implements OnAccoun break; } - case DATA_ID: { + case DATA_ID: + case PHONES_ID: + case EMAILS_ID: + case POSTALS_ID: { count = updateData(uri, values, selection, selectionArgs, callerIsSyncAdapter); if (count > 0) { mSyncToNetwork |= !callerIsSyncAdapter; @@ -2816,6 +2828,7 @@ public class ContactsProvider2 extends SQLiteContentProvider implements OnAccoun mDb.beginTransaction(); try { + for (String table : new String[]{Tables.RAW_CONTACTS, Tables.GROUPS, Tables.SETTINGS}) { // Find all the accounts the contacts DB knows about, mark the ones that aren't // in the valid set for deletion. @@ -3020,6 +3033,15 @@ public class ContactsProvider2 extends SQLiteContentProvider implements OnAccoun break; } + case PHONES_ID: { + qb.setTables(mOpenHelper.getDataView()); + qb.setProjectionMap(sDataProjectionMap); + appendAccountFromParameter(qb, uri); + qb.appendWhere(" AND " + Data.MIMETYPE + " = '" + Phone.CONTENT_ITEM_TYPE + "'"); + qb.appendWhere(" AND " + Data._ID + "=" + uri.getLastPathSegment()); + break; + } + case PHONES_FILTER: { qb.setTables(mOpenHelper.getDataView()); qb.setProjectionMap(sDistinctDataProjectionMap); @@ -3066,6 +3088,15 @@ public class ContactsProvider2 extends SQLiteContentProvider implements OnAccoun break; } + case EMAILS_ID: { + qb.setTables(mOpenHelper.getDataView()); + qb.setProjectionMap(sDataProjectionMap); + appendAccountFromParameter(qb, uri); + qb.appendWhere(" AND " + Data.MIMETYPE + " = '" + Email.CONTENT_ITEM_TYPE + "'"); + qb.appendWhere(" AND " + Data._ID + "=" + uri.getLastPathSegment()); + break; + } + case EMAILS_LOOKUP: { qb.setTables(mOpenHelper.getDataView()); qb.setProjectionMap(sDataProjectionMap); @@ -3113,6 +3144,16 @@ public class ContactsProvider2 extends SQLiteContentProvider implements OnAccoun break; } + case POSTALS_ID: { + qb.setTables(mOpenHelper.getDataView()); + qb.setProjectionMap(sDataProjectionMap); + appendAccountFromParameter(qb, uri); + qb.appendWhere(" AND " + Data.MIMETYPE + " = '" + + StructuredPostal.CONTENT_ITEM_TYPE + "'"); + qb.appendWhere(" AND " + Data._ID + "=" + uri.getLastPathSegment()); + break; + } + case RAW_CONTACTS: { qb.setTables(mOpenHelper.getRawContactView()); qb.setProjectionMap(sRawContactsProjectionMap); @@ -4095,6 +4136,18 @@ public class ContactsProvider2 extends SQLiteContentProvider implements OnAccoun return RawContacts.CONTENT_ITEM_TYPE; case DATA_ID: return mOpenHelper.getDataMimeType(ContentUris.parseId(uri)); + case PHONES: + return Phone.CONTENT_TYPE; + case PHONES_ID: + return Phone.CONTENT_ITEM_TYPE; + case EMAILS: + return Email.CONTENT_TYPE; + case EMAILS_ID: + return Email.CONTENT_ITEM_TYPE; + case POSTALS: + return StructuredPostal.CONTENT_TYPE; + case POSTALS_ID: + return StructuredPostal.CONTENT_ITEM_TYPE; case AGGREGATION_EXCEPTIONS: return AggregationExceptions.CONTENT_TYPE; case AGGREGATION_EXCEPTION_ID: -- cgit v1.1