AI 143308: am: CL 143159 am: CL 142855 Fix SHOW_OR_CREATE intent to correctly handle duplicate E-mail or IM entries for a person.
Added a new WITH_EMAIL_OR_IM_FILTER_URI to find people with a given string as either an E-mail or IM address. This cleans up the original code, and lets us handle duplicates when there are multiple ContactMethod matches for a single person. (We don't get GROUP BY through the ContentProvider interface.)
In ContactsListActivity we don't show possibly-incorrect labels when in MODE_QUERY_PICK_TO_VIEW, as any labels and values would be identical. (The people appearing in that list are there because their ContactMethod matches the query.)
Original author: jsharkey
Merged from: //branches/cupcake/...
Original author: android-build
Merged from: //branches/donutburger/...
Automated import of CL 143308
diff --git a/src/com/android/contacts/ShowOrCreateActivity.java b/src/com/android/contacts/ShowOrCreateActivity.java
index 8d3cf0b..0732ffe 100755
--- a/src/com/android/contacts/ShowOrCreateActivity.java
+++ b/src/com/android/contacts/ShowOrCreateActivity.java
@@ -56,20 +56,17 @@
static final boolean LOGD = false;
static final String[] PHONES_PROJECTION = new String[] {
- Phones._ID,
Phones.PERSON_ID,
};
- static final String[] CONTACT_METHODS_PROJECTION = new String[] {
- ContactMethods._ID,
- ContactMethods.PERSON_ID,
+ static final String[] PEOPLE_PROJECTION = new String[] {
+ People._ID,
};
static final String SCHEME_MAILTO = "mailto";
static final String SCHEME_TEL = "tel";
- static final int ID_INDEX = 0;
- static final int PERSON_ID_INDEX = 1;
+ static final int PERSON_ID_INDEX = 0;
/**
* Query clause to filter {@link ContactMethods#CONTENT_URI} to only search
@@ -126,11 +123,9 @@
// Handle specific query request
if (SCHEME_MAILTO.equals(scheme)) {
createExtras.putString(Intents.Insert.EMAIL, ssp);
- mQueryHandler.startQuery(QUERY_TOKEN, null,
- ContactMethods.CONTENT_URI, CONTACT_METHODS_PROJECTION,
- QUERY_KIND_EMAIL_OR_IM + " AND " + ContactMethods.DATA + "=?",
- new String[] { ssp }, null);
-
+ Uri uri = Uri.withAppendedPath(People.WITH_EMAIL_OR_IM_FILTER_URI, Uri.encode(ssp));
+ mQueryHandler.startQuery(QUERY_TOKEN, null, uri,
+ PEOPLE_PROJECTION, null, null, null);
} else if (SCHEME_TEL.equals(scheme)) {
createExtras.putString(Intents.Insert.PHONE, ssp);
mQueryHandler.startQuery(QUERY_TOKEN, null,