Return appropriate URI for PICKER intents.
Based on under which authority the calling activity is asking, return
either a legacy style URI or new style URI as a result of a PICK
intent.
Change-Id: Icd7cf220c6355ff3fd14a5f9a39fc071aa7c0434
diff --git a/AndroidManifest.xml b/AndroidManifest.xml
index 24becae..de4f925 100644
--- a/AndroidManifest.xml
+++ b/AndroidManifest.xml
@@ -209,19 +209,23 @@
<intent-filter>
<action android:name="android.intent.action.PICK" />
<category android:name="android.intent.category.DEFAULT" />
- <data android:mimeType="vnd.android.cursor.dir/contact" />
- <data android:mimeType="vnd.android.cursor.dir/person" />
- <data android:mimeType="vnd.android.cursor.dir/phone" />
- <data android:mimeType="vnd.android.cursor.dir/postal-address" />
+ <data android:mimeType="vnd.android.cursor.dir/contact" android:host="com.android.contacts" />
+ <data android:mimeType="vnd.android.cursor.dir/person" android:host="contacts" />
+ <data android:mimeType="vnd.android.cursor.dir/phone_v2" android:host="com.android.contacts" />
+ <data android:mimeType="vnd.android.cursor.dir/phone" android:host="contacts" />
+ <data android:mimeType="vnd.android.cursor.dir/postal-address_v2" android:host="com.android.contacts" />
+ <data android:mimeType="vnd.android.cursor.dir/postal-address" android:host="contacts" />
</intent-filter>
<intent-filter>
<action android:name="android.intent.action.GET_CONTENT" />
<category android:name="android.intent.category.DEFAULT" />
- <data android:mimeType="vnd.android.cursor.item/contact" />
- <data android:mimeType="vnd.android.cursor.item/person" />
- <data android:mimeType="vnd.android.cursor.item/phone" />
- <data android:mimeType="vnd.android.cursor.item/postal-address" />
+ <data android:mimeType="vnd.android.cursor.dir/contact" android:host="com.android.contacts" />
+ <data android:mimeType="vnd.android.cursor.dir/person" android:host="contacts" />
+ <data android:mimeType="vnd.android.cursor.dir/phone_v2" android:host="com.android.contacts" />
+ <data android:mimeType="vnd.android.cursor.dir/phone" android:host="contacts" />
+ <data android:mimeType="vnd.android.cursor.dir/postal-address_v2" android:host="com.android.contacts" />
+ <data android:mimeType="vnd.android.cursor.dir/postal-address" android:host="contacts" />
</intent-filter>
<intent-filter>
diff --git a/src/com/android/contacts/ContactsListActivity.java b/src/com/android/contacts/ContactsListActivity.java
index cefbf11..8da6c72 100644
--- a/src/com/android/contacts/ContactsListActivity.java
+++ b/src/com/android/contacts/ContactsListActivity.java
@@ -35,6 +35,7 @@
import android.content.res.Resources;
import android.database.CharArrayBuffer;
import android.database.Cursor;
+import android.database.DatabaseUtils;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
@@ -53,6 +54,7 @@
import android.provider.Settings;
import android.provider.Contacts.ContactMethods;
import android.provider.Contacts.People;
+import android.provider.Contacts.PeopleColumns;
import android.provider.Contacts.Phones;
import android.provider.ContactsContract.CommonDataKinds;
import android.provider.ContactsContract.Contacts;
@@ -170,16 +172,26 @@
/** Show starred and the frequent */
static final int MODE_STREQUENT = 35 | MODE_MASK_SHOW_PHOTOS;
/** Show all contacts and pick them when clicking */
- static final int MODE_PICK_AGGREGATE = 40 | MODE_MASK_PICKER | MODE_MASK_SHOW_PHOTOS;
+ static final int MODE_PICK_CONTACT = 40 | MODE_MASK_PICKER | MODE_MASK_SHOW_PHOTOS;
/** Show all contacts as well as the option to create a new one */
- static final int MODE_PICK_OR_CREATE_AGGREGATE = 42 | MODE_MASK_PICKER | MODE_MASK_CREATE_NEW;
+ static final int MODE_PICK_OR_CREATE_CONTACT = 42 | MODE_MASK_PICKER | MODE_MASK_CREATE_NEW;
+ /** Show all people through the legacy provider and pick them when clicking */
+ static final int MODE_LEGACY_PICK_PERSON = 43 | MODE_MASK_PICKER;
+ /** Show all people through the legacy provider as well as the option to create a new one */
+ static final int MODE_LEGACY_PICK_OR_CREATE_PERSON = 44 | MODE_MASK_PICKER | MODE_MASK_CREATE_NEW;
/** Show all contacts and pick them when clicking, and allow creating a new contact */
static final int MODE_INSERT_OR_EDIT_CONTACT = 45 | MODE_MASK_PICKER | MODE_MASK_CREATE_NEW;
/** Show all phone numbers and pick them when clicking */
static final int MODE_PICK_PHONE = 50 | MODE_MASK_PICKER | MODE_MASK_NO_PRESENCE;
+ /** Show all phone numbers through the legacy provider and pick them when clicking */
+ static final int MODE_LEGACY_PICK_PHONE =
+ 51 | MODE_MASK_PICKER | MODE_MASK_NO_PRESENCE | MODE_MASK_NO_FILTER;
/** Show all postal addresses and pick them when clicking */
static final int MODE_PICK_POSTAL =
55 | MODE_MASK_PICKER | MODE_MASK_NO_PRESENCE | MODE_MASK_NO_FILTER;
+ /** Show all postal addresses and pick them when clicking */
+ static final int MODE_LEGACY_PICK_POSTAL =
+ 56 | MODE_MASK_PICKER | MODE_MASK_NO_PRESENCE | MODE_MASK_NO_FILTER;
static final int MODE_GROUP = 57 | MODE_MASK_SHOW_PHOTOS;
/** Run a search query */
static final int MODE_QUERY = 60 | MODE_MASK_NO_FILTER;
@@ -188,7 +200,7 @@
/*static final int MODE_QUERY_PICK_TO_VIEW = 65 | MODE_MASK_NO_FILTER | MODE_MASK_PICKER;*/
/** Show join suggestions followed by an A-Z list */
- static final int MODE_JOIN_AGGREGATE = 70 | MODE_MASK_PICKER | MODE_MASK_NO_PRESENCE
+ static final int MODE_JOIN_CONTACT = 70 | MODE_MASK_PICKER | MODE_MASK_NO_PRESENCE
| MODE_MASK_NO_DATA | MODE_MASK_SHOW_PHOTOS;
/** Maximum number of suggestions shown for joining aggregates */
@@ -197,26 +209,33 @@
static final String NAME_COLUMN = Contacts.DISPLAY_NAME;
//static final String SORT_STRING = People.SORT_STRING;
- static final String[] AGGREGATES_PROJECTION = new String[] {
+ static final String[] CONTACTS_PROJECTION = new String[] {
Contacts._ID, // 0
Contacts.DISPLAY_NAME, // 1
Contacts.STARRED, //2
};
- static final String[] AGGREGATES_SUMMARY_PROJECTION = new String[] {
+ static final String[] CONTACTS_SUMMARY_PROJECTION = new String[] {
Contacts._ID, // 0
Contacts.DISPLAY_NAME, // 1
Contacts.STARRED, //2
Contacts.TIMES_CONTACTED, //3
+ Presence.PRESENCE_STATUS, //4
Contacts.PHOTO_ID, //4
- Presence.PRESENCE_STATUS, //5
+ };
+ static final String[] LEGACY_PEOPLE_PROJECTION = new String[] {
+ People._ID, // 0
+ People.DISPLAY_NAME, // 1
+ People.STARRED, //2
+ PeopleColumns.TIMES_CONTACTED, //3
+ People.PRESENCE_STATUS, //4
};
static final int ID_COLUMN_INDEX = 0;
static final int SUMMARY_NAME_COLUMN_INDEX = 1;
static final int SUMMARY_STARRED_COLUMN_INDEX = 2;
static final int SUMMARY_TIMES_CONTACTED_COLUMN_INDEX = 3;
- static final int SUMMARY_PHOTO_ID_COLUMN_INDEX = 4;
- static final int SUMMARY_PRESENCE_STATUS_COLUMN_INDEX = 5;
+ static final int SUMMARY_PRESENCE_STATUS_COLUMN_INDEX = 4;
+ static final int SUMMARY_PHOTO_ID_COLUMN_INDEX = 5;
static final String[] PHONES_PROJECTION = new String[] {
Data._ID, //0
@@ -225,6 +244,13 @@
CommonDataKinds.Phone.NUMBER, //3
Contacts.DISPLAY_NAME, // 4
};
+ static final String[] LEGACY_PHONES_PROJECTION = new String[] {
+ Phones._ID, //0
+ Phones.TYPE, //1
+ Phones.LABEL, //2
+ Phones.NUMBER, //3
+ People.DISPLAY_NAME, // 4
+ };
static final int PHONE_ID_COLUMN_INDEX = 0;
static final int PHONE_TYPE_COLUMN_INDEX = 1;
static final int PHONE_LABEL_COLUMN_INDEX = 2;
@@ -238,6 +264,13 @@
CommonDataKinds.StructuredPostal.DATA, //3
Contacts.DISPLAY_NAME, // 4
};
+ static final String[] LEGACY_POSTALS_PROJECTION = new String[] {
+ ContactMethods._ID, //0
+ ContactMethods.TYPE, //1
+ ContactMethods.LABEL, //2
+ ContactMethods.DATA, //3
+ People.DISPLAY_NAME, // 4
+ };
static final int POSTAL_ID_COLUMN_INDEX = 0;
static final int POSTAL_TYPE_COLUMN_INDEX = 1;
static final int POSTAL_LABEL_COLUMN_INDEX = 2;
@@ -386,11 +419,17 @@
// the Intent.
final String type = intent.resolveType(this);
if (Contacts.CONTENT_TYPE.equals(type)) {
- mMode = MODE_PICK_AGGREGATE;
+ mMode = MODE_PICK_CONTACT;
+ } else if (People.CONTENT_TYPE.equals(type)) {
+ mMode = MODE_LEGACY_PICK_PERSON;
} else if (Phone.CONTENT_TYPE.equals(type)) {
mMode = MODE_PICK_PHONE;
+ } else if (Phones.CONTENT_TYPE.equals(type)) {
+ mMode = MODE_LEGACY_PICK_PHONE;
} else if (StructuredPostal.CONTENT_TYPE.equals(type)) {
mMode = MODE_PICK_POSTAL;
+ } else if (ContactMethods.CONTENT_POSTAL_TYPE.equals(type)) {
+ mMode = MODE_LEGACY_PICK_POSTAL;
}
} else if (Intent.ACTION_CREATE_SHORTCUT.equals(action)) {
if (intent.getComponent().getClassName().equals("alias.DialShortcut")) {
@@ -402,7 +441,7 @@
mShortcutAction = Intent.ACTION_SENDTO;
setTitle(R.string.messageShortcutActivityTitle);
} else {
- mMode = MODE_PICK_OR_CREATE_AGGREGATE;
+ mMode = MODE_PICK_OR_CREATE_CONTACT;
mShortcutAction = Intent.ACTION_VIEW;
setTitle(R.string.shortcutActivityTitle);
}
@@ -410,11 +449,15 @@
} else if (Intent.ACTION_GET_CONTENT.equals(action)) {
final String type = intent.resolveType(this);
if (Contacts.CONTENT_ITEM_TYPE.equals(type)) {
- mMode = MODE_PICK_OR_CREATE_AGGREGATE;
+ mMode = MODE_PICK_OR_CREATE_CONTACT;
} else if (Phone.CONTENT_ITEM_TYPE.equals(type)) {
mMode = MODE_PICK_PHONE;
+ } else if (Phones.CONTENT_TYPE.equals(type)) {
+ mMode = MODE_LEGACY_PICK_PHONE;
} else if (StructuredPostal.CONTENT_ITEM_TYPE.equals(type)) {
mMode = MODE_PICK_POSTAL;
+ } else if (ContactMethods.CONTENT_POSTAL_TYPE.equals(type)) {
+ mMode = MODE_LEGACY_PICK_POSTAL;
}
} else if (Intent.ACTION_INSERT_OR_EDIT.equals(action)) {
mMode = MODE_INSERT_OR_EDIT_CONTACT;
@@ -477,7 +520,7 @@
}
if (JOIN_AGGREGATE.equals(action)) {
- mMode = MODE_JOIN_AGGREGATE;
+ mMode = MODE_JOIN_CONTACT;
mQueryAggregateId = intent.getLongExtra(EXTRA_AGGREGATE_ID, -1);
if (mQueryAggregateId == -1) {
Log.e(TAG, "Intent " + action + " is missing required extra: "
@@ -524,7 +567,7 @@
// We manually save/restore the listview state
list.setSaveEnabled(false);
- if (mMode == MODE_JOIN_AGGREGATE) {
+ if (mMode == MODE_JOIN_CONTACT) {
mQueryHandler = new SuggestionsQueryHandler(this, mQueryAggregateId);
} else {
mQueryHandler = new QueryHandler(this);
@@ -595,7 +638,7 @@
}
private void buildUserGroupUri(String group) {
- mGroupUri = Uri.withAppendedPath(Contacts.CONTENT_SUMMARY_GROUP_URI, group);
+ mGroupUri = Uri.withAppendedPath(Contacts.CONTENT_GROUP_URI, group);
}
/**
@@ -989,14 +1032,13 @@
}
startActivity(intent);
finish();
- } else
- if (id != -1) {
+ } else if (id != -1) {
+ Uri uri = getPickerResultUri(id);
if ((mMode & MODE_MASK_PICKER) == 0) {
Intent intent = new Intent(Intent.ACTION_VIEW,
ContentUris.withAppendedId(Contacts.CONTENT_URI, id));
startActivityForResult(intent, SUBACTIVITY_VIEW_CONTACT);
- } else if (mMode == MODE_JOIN_AGGREGATE) {
- Uri uri = ContentUris.withAppendedId(Contacts.CONTENT_URI, id);
+ } else if (mMode == MODE_JOIN_CONTACT) {
returnPickerResult(null, null, uri, id);
}
@@ -1008,35 +1050,34 @@
ContentUris.withAppendedId(People.CONTENT_URI, personId));
startActivity(intent);
finish();
- }*/ else if (mMode == MODE_PICK_AGGREGATE
- || mMode == MODE_PICK_OR_CREATE_AGGREGATE) {
- Uri uri = ContentUris.withAppendedId(Contacts.CONTENT_URI, id);
+ }*/ else if (mMode == MODE_PICK_CONTACT
+ || mMode == MODE_PICK_OR_CREATE_CONTACT
+ || mMode == MODE_LEGACY_PICK_PERSON
+ || mMode == MODE_LEGACY_PICK_OR_CREATE_PERSON) {
if (mShortcutAction != null) {
// Subtract one if we have Create Contact at the top
Cursor c = (Cursor) mAdapter.getItem(position
- - (mMode == MODE_PICK_OR_CREATE_AGGREGATE? 1:0));
+ - (mMode == MODE_PICK_OR_CREATE_CONTACT
+ || mMode == MODE_LEGACY_PICK_OR_CREATE_PERSON ? 1:0));
returnPickerResult(c, c.getString(SUMMARY_NAME_COLUMN_INDEX), uri, id);
} else {
returnPickerResult(null, null, uri, id);
}
- setResult(RESULT_OK, new Intent().setData(uri));
- finish();
} else if (mMode == MODE_PICK_PHONE) {
- Uri uri = ContentUris.withAppendedId(Data.CONTENT_URI, id);
if (mShortcutAction != null) {
Cursor c = (Cursor) mAdapter.getItem(position);
returnPickerResult(c, c.getString(SUMMARY_NAME_COLUMN_INDEX), uri, id);
} else {
returnPickerResult(null, null, uri, id);
}
- } else if (mMode == MODE_PICK_POSTAL) {
- setResult(RESULT_OK, new Intent().setData(
- ContentUris.withAppendedId(Data.CONTENT_URI, id)));
- finish();
+ } else if (mMode == MODE_PICK_POSTAL
+ || mMode == MODE_LEGACY_PICK_POSTAL
+ || mMode == MODE_LEGACY_PICK_PHONE) {
+ returnPickerResult(null, null, uri, id);
}
} else if ((mMode & MODE_MASK_CREATE_NEW) == MODE_MASK_CREATE_NEW
&& position == 0) {
- // Hook this up to new edit contact activity.
+ // Hook this up to new edit contact activity (bug 2092559)
/*Intent newContact = new Intent(Intents.Insert.ACTION, People.CONTENT_URI);
startActivityForResult(newContact, SUBACTIVITY_NEW_CONTACT);*/
} else {
@@ -1204,17 +1245,106 @@
}
}
- String[] getProjection() {
- switch (mMode) {
- case MODE_PICK_PHONE:
- return PHONES_PROJECTION;
+ Uri getUriToQuery() {
+ switch(mMode) {
+ case MODE_JOIN_CONTACT:
+ case MODE_FREQUENT:
+ case MODE_STARRED:
+ case MODE_DEFAULT:
+ case MODE_INSERT_OR_EDIT_CONTACT:
+ case MODE_PICK_CONTACT:
+ case MODE_PICK_OR_CREATE_CONTACT:{
+ return Contacts.CONTENT_URI;
+ }
+ case MODE_STREQUENT: {
+ return Contacts.CONTENT_STREQUENT_URI;
+ }
+ case MODE_LEGACY_PICK_PERSON:
+ case MODE_LEGACY_PICK_OR_CREATE_PERSON: {
+ return People.CONTENT_URI;
+ }
+ case MODE_PICK_PHONE: {
+ return Phone.CONTENT_URI;
+ }
+ case MODE_LEGACY_PICK_PHONE: {
+ return Phones.CONTENT_URI;
+ }
+ case MODE_PICK_POSTAL: {
+ return StructuredPostal.CONTENT_URI;
+ }
+ case MODE_LEGACY_PICK_POSTAL: {
+ return ContactMethods.CONTENT_URI;
+ }
+ default: {
+ return null;
+ }
+ }
+ }
- case MODE_PICK_POSTAL:
+ Uri getPickerResultUri(long id) {
+ switch(mMode) {
+ case MODE_PICK_CONTACT:
+ case MODE_PICK_OR_CREATE_CONTACT: {
+ return ContentUris.withAppendedId(Contacts.CONTENT_URI, id);
+ }
+ case MODE_LEGACY_PICK_PERSON:
+ case MODE_LEGACY_PICK_OR_CREATE_PERSON: {
+ return ContentUris.withAppendedId(People.CONTENT_URI, id);
+ }
+ case MODE_PICK_PHONE: {
+ return ContentUris.withAppendedId(Data.CONTENT_URI, id);
+ }
+ case MODE_LEGACY_PICK_PHONE: {
+ return ContentUris.withAppendedId(Phones.CONTENT_URI, id);
+ }
+ case MODE_PICK_POSTAL: {
+ return ContentUris.withAppendedId(Data.CONTENT_URI, id);
+ }
+ case MODE_LEGACY_PICK_POSTAL: {
+ return ContentUris.withAppendedId(ContactMethods.CONTENT_URI, id);
+ }
+ default: {
+ return null;
+ }
+ }
+ }
+
+ String[] getProjectionForQuery() {
+ switch(mMode) {
+ case MODE_JOIN_CONTACT: {
+ return CONTACTS_PROJECTION;
+ }
+ case MODE_STREQUENT:
+ case MODE_FREQUENT:
+ case MODE_STARRED:
+ case MODE_QUERY:
+ case MODE_DEFAULT:
+ case MODE_INSERT_OR_EDIT_CONTACT:
+ case MODE_GROUP:
+ case MODE_PICK_CONTACT:
+ case MODE_PICK_OR_CREATE_CONTACT: {
+ return CONTACTS_SUMMARY_PROJECTION;
+ }
+ case MODE_LEGACY_PICK_PERSON:
+ case MODE_LEGACY_PICK_OR_CREATE_PERSON: {
+ return LEGACY_PEOPLE_PROJECTION ;
+ }
+ case MODE_PICK_PHONE: {
+ return PHONES_PROJECTION;
+ }
+ case MODE_LEGACY_PICK_PHONE: {
+ return LEGACY_PHONES_PROJECTION;
+ }
+ case MODE_PICK_POSTAL: {
return POSTALS_PROJECTION;
+ }
+ case MODE_LEGACY_PICK_POSTAL: {
+ return LEGACY_POSTALS_PROJECTION;
+ }
}
// Default to normal aggregate projection
- return AGGREGATES_SUMMARY_PROJECTION;
+ return CONTACTS_SUMMARY_PROJECTION;
}
private Bitmap loadContactPhoto(long dataId, BitmapFactory.Options options) {
@@ -1238,7 +1368,7 @@
* Return the selection arguments for a default query based on
* {@link #mDisplayAll} and {@link #mDisplayOnlyPhones} flags.
*/
- private String getAggregateSelection() {
+ private String getContactSelection() {
if (mDisplayOnlyPhones) {
return CLAUSE_ONLY_VISIBLE + " AND " + CLAUSE_ONLY_PHONES;
} else {
@@ -1246,11 +1376,19 @@
}
}
- private Uri getAggregateFilterUri(String filter) {
+ private Uri getContactFilterUri(String filter) {
if (!TextUtils.isEmpty(filter)) {
- return Uri.withAppendedPath(Contacts.CONTENT_SUMMARY_FILTER_URI, Uri.encode(filter));
+ return Uri.withAppendedPath(Contacts.CONTENT_FILTER_URI, Uri.encode(filter));
} else {
- return Contacts.CONTENT_SUMMARY_URI;
+ return Contacts.CONTENT_URI;
+ }
+ }
+
+ private Uri getPeopleFilterUri(String filter) {
+ if (!TextUtils.isEmpty(filter)) {
+ return Uri.withAppendedPath(People.CONTENT_FILTER_URI, Uri.encode(filter));
+ } else {
+ return People.CONTENT_URI;
}
}
@@ -1271,28 +1409,38 @@
// Cancel any pending queries
mQueryHandler.cancelOperation(QUERY_TOKEN);
+ String[] projection = getProjectionForQuery();
+ Uri uri = getUriToQuery();
+
// Kick off the new query
switch (mMode) {
case MODE_GROUP:
mQueryHandler.startQuery(QUERY_TOKEN, null,
- mGroupUri, AGGREGATES_SUMMARY_PROJECTION, getAggregateSelection(), null,
- getSortOrder(AGGREGATES_SUMMARY_PROJECTION));
+ mGroupUri, projection, getContactSelection(), null,
+ getSortOrder(projection));
break;
case MODE_DEFAULT:
- case MODE_PICK_AGGREGATE:
- case MODE_PICK_OR_CREATE_AGGREGATE:
+ case MODE_PICK_CONTACT:
+ case MODE_PICK_OR_CREATE_CONTACT:
case MODE_INSERT_OR_EDIT_CONTACT:
- mQueryHandler.startQuery(QUERY_TOKEN, null, Contacts.CONTENT_SUMMARY_URI,
- AGGREGATES_SUMMARY_PROJECTION, getAggregateSelection(), null,
- getSortOrder(AGGREGATES_SUMMARY_PROJECTION));
+ mQueryHandler.startQuery(QUERY_TOKEN, null, uri,
+ projection, getContactSelection(), null,
+ getSortOrder(projection));
+ break;
+
+ case MODE_LEGACY_PICK_PERSON:
+ case MODE_LEGACY_PICK_OR_CREATE_PERSON:
+ mQueryHandler.startQuery(QUERY_TOKEN, null, uri,
+ projection, null, null,
+ getSortOrder(projection));
break;
case MODE_QUERY: {
mQuery = getIntent().getStringExtra(SearchManager.QUERY);
- mQueryHandler.startQuery(QUERY_TOKEN, null, getAggregateFilterUri(mQuery),
- AGGREGATES_SUMMARY_PROJECTION, null, null,
- getSortOrder(AGGREGATES_SUMMARY_PROJECTION));
+ mQueryHandler.startQuery(QUERY_TOKEN, null, getContactFilterUri(mQuery),
+ projection, null, null,
+ getSortOrder(projection));
break;
}
@@ -1318,42 +1466,48 @@
*/
case MODE_STARRED:
- mQueryHandler.startQuery(QUERY_TOKEN, null, Contacts.CONTENT_SUMMARY_URI,
- AGGREGATES_SUMMARY_PROJECTION, Contacts.STARRED + "=1", null,
- getSortOrder(AGGREGATES_SUMMARY_PROJECTION));
+ mQueryHandler.startQuery(QUERY_TOKEN, null, uri,
+ projection, Contacts.STARRED + "=1", null,
+ getSortOrder(projection));
break;
case MODE_FREQUENT:
- mQueryHandler.startQuery(QUERY_TOKEN, null, Contacts.CONTENT_SUMMARY_URI,
- AGGREGATES_SUMMARY_PROJECTION,
+ mQueryHandler.startQuery(QUERY_TOKEN, null, uri,
+ projection,
Contacts.TIMES_CONTACTED + " > 0", null,
Contacts.TIMES_CONTACTED + " DESC, "
- + getSortOrder(AGGREGATES_SUMMARY_PROJECTION));
+ + getSortOrder(projection));
break;
case MODE_STREQUENT:
- mQueryHandler.startQuery(QUERY_TOKEN, null,
- Contacts.CONTENT_SUMMARY_STREQUENT_URI, AGGREGATES_SUMMARY_PROJECTION,
- null, null, null);
+ mQueryHandler.startQuery(QUERY_TOKEN, null, uri, projection, null, null, null);
break;
case MODE_PICK_PHONE:
- mQueryHandler.startQuery(QUERY_TOKEN, null, Phone.CONTENT_URI,
- PHONES_PROJECTION, null, null, getSortOrder(PHONES_PROJECTION));
+ case MODE_LEGACY_PICK_PHONE:
+ mQueryHandler.startQuery(QUERY_TOKEN, null, uri,
+ projection, null, null, getSortOrder(projection));
break;
case MODE_PICK_POSTAL:
- mQueryHandler.startQuery(QUERY_TOKEN, null, StructuredPostal.CONTENT_URI,
- POSTALS_PROJECTION, null, null, getSortOrder(POSTALS_PROJECTION));
+ mQueryHandler.startQuery(QUERY_TOKEN, null, uri,
+ projection, null, null, getSortOrder(projection));
break;
- case MODE_JOIN_AGGREGATE:
+ case MODE_LEGACY_PICK_POSTAL:
+ mQueryHandler.startQuery(QUERY_TOKEN, null, getUriToQuery(),
+ projection,
+ ContactMethods.KIND + "=" + android.provider.Contacts.KIND_POSTAL, null,
+ getSortOrder(projection));
+ break;
+
+ case MODE_JOIN_CONTACT:
Uri suggestionsUri = Contacts.CONTENT_URI.buildUpon()
.appendEncodedPath(String.valueOf(mQueryAggregateId))
.appendEncodedPath(AggregationSuggestions.CONTENT_DIRECTORY)
.appendQueryParameter("limit", String.valueOf(MAX_SUGGESTIONS))
.build();
- mQueryHandler.startQuery(QUERY_TOKEN, null, suggestionsUri, AGGREGATES_PROJECTION,
+ mQueryHandler.startQuery(QUERY_TOKEN, null, suggestionsUri, projection,
null, null, null);
break;
}
@@ -1368,48 +1522,58 @@
Cursor doFilter(String filter) {
final ContentResolver resolver = getContentResolver();
+ String[] projection = getProjectionForQuery();
+
switch (mMode) {
case MODE_DEFAULT:
- case MODE_PICK_AGGREGATE:
- case MODE_PICK_OR_CREATE_AGGREGATE:
+ case MODE_PICK_CONTACT:
+ case MODE_PICK_OR_CREATE_CONTACT:
case MODE_INSERT_OR_EDIT_CONTACT: {
- return resolver.query(getAggregateFilterUri(filter), AGGREGATES_SUMMARY_PROJECTION,
- getAggregateSelection(), null, getSortOrder(AGGREGATES_SUMMARY_PROJECTION));
+ return resolver.query(getContactFilterUri(filter), projection,
+ getContactSelection(), null, getSortOrder(projection));
+ }
+
+ case MODE_LEGACY_PICK_PERSON:
+ case MODE_LEGACY_PICK_OR_CREATE_PERSON: {
+ return resolver.query(getPeopleFilterUri(filter), projection, null, null,
+ getSortOrder(projection));
}
case MODE_STARRED: {
- return resolver.query(getAggregateFilterUri(filter), AGGREGATES_SUMMARY_PROJECTION,
+ return resolver.query(getContactFilterUri(filter), projection,
Contacts.STARRED + "=1", null,
- getSortOrder(AGGREGATES_SUMMARY_PROJECTION));
+ getSortOrder(projection));
}
case MODE_FREQUENT: {
- return resolver.query(getAggregateFilterUri(filter), AGGREGATES_SUMMARY_PROJECTION,
+ return resolver.query(getContactFilterUri(filter), projection,
Contacts.TIMES_CONTACTED + " > 0", null,
Contacts.TIMES_CONTACTED + " DESC, "
- + getSortOrder(AGGREGATES_SUMMARY_PROJECTION));
+ + getSortOrder(projection));
}
case MODE_STREQUENT: {
Uri uri;
if (!TextUtils.isEmpty(filter)) {
- uri = Uri.withAppendedPath(Contacts.CONTENT_SUMMARY_STREQUENT_FILTER_URI,
+ uri = Uri.withAppendedPath(Contacts.CONTENT_STREQUENT_FILTER_URI,
Uri.encode(filter));
} else {
- uri = Contacts.CONTENT_SUMMARY_STREQUENT_URI;
+ uri = Contacts.CONTENT_STREQUENT_URI;
}
- return resolver.query(uri, AGGREGATES_SUMMARY_PROJECTION, null, null, null);
+ return resolver.query(uri, projection, null, null, null);
}
case MODE_PICK_PHONE: {
- Uri uri;
+ Uri uri = getUriToQuery();
if (!TextUtils.isEmpty(filter)) {
uri = Uri.withAppendedPath(Phone.CONTENT_FILTER_URI, Uri.encode(filter));
- } else {
- uri = Phone.CONTENT_URI;
}
- return resolver.query(uri, PHONES_PROJECTION, null, null,
- getSortOrder(PHONES_PROJECTION));
+ return resolver.query(uri, projection, null, null,
+ getSortOrder(projection));
+ }
+
+ case MODE_LEGACY_PICK_PHONE: {
+ //TODO: Support filtering here (bug 2092503)
}
}
throw new UnsupportedOperationException("filtering not allowed in mode " + mMode);
@@ -1517,9 +1681,9 @@
} else {
activity.mAdapter.setSuggestionsCursor(null);
}
- startQuery(QUERY_TOKEN, null, Contacts.CONTENT_URI, AGGREGATES_PROJECTION,
+ startQuery(QUERY_TOKEN, null, Contacts.CONTENT_URI, CONTACTS_PROJECTION,
Contacts._ID + " != " + mAggregateId, null,
- getSortOrder(AGGREGATES_PROJECTION));
+ getSortOrder(CONTACTS_PROJECTION));
} else {
cursor.close();
@@ -1804,7 +1968,8 @@
int nameColumnIndex;
boolean displayAdditionalData = mDisplayAdditionalData;
switch(mMode) {
- case MODE_PICK_PHONE: {
+ case MODE_PICK_PHONE:
+ case MODE_LEGACY_PICK_PHONE: {
nameColumnIndex = PHONE_DISPLAY_NAME_COLUMN_INDEX;
dataColumnIndex = PHONE_NUMBER_COLUMN_INDEX;
typeColumnIndex = PHONE_TYPE_COLUMN_INDEX;
@@ -1812,7 +1977,8 @@
defaultType = Phone.TYPE_HOME;
break;
}
- case MODE_PICK_POSTAL: {
+ case MODE_PICK_POSTAL:
+ case MODE_LEGACY_PICK_POSTAL: {
nameColumnIndex = POSTAL_DISPLAY_NAME_COLUMN_INDEX;
dataColumnIndex = POSTAL_ADDRESS_COLUMN_INDEX;
typeColumnIndex = POSTAL_TYPE_COLUMN_INDEX;