Gets list filtering and PICK actions working on the a-z list.
Intents with action "android.intent.action.PICK" should now work with
the following mimetypes:
vnd.android.cursor.dir/person_aggregate
vnd.android.cursor.dir/phone
vnd.android.cursor.dir/postal-address
List filtering works for the main a-z list and for the phone picking list.
diff --git a/AndroidManifest.xml b/AndroidManifest.xml
index 14e5fb0..809c82a 100644
--- a/AndroidManifest.xml
+++ b/AndroidManifest.xml
@@ -218,6 +218,7 @@
<intent-filter>
<action android:name="android.intent.action.PICK" />
<category android:name="android.intent.category.DEFAULT" />
+ <data android:mimeType="vnd.android.cursor.dir/person_aggregate" />
<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" />
diff --git a/res/layout-finger/contacts_list_item.xml b/res/layout-finger/contacts_list_item.xml
index d05bbbf..ca4f04f 100644
--- a/res/layout-finger/contacts_list_item.xml
+++ b/res/layout-finger/contacts_list_item.xml
@@ -59,7 +59,7 @@
android:textStyle="bold"
/>
- <TextView android:id="@+id/number"
+ <TextView android:id="@+id/data"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="5dip"
diff --git a/src/com/android/contacts/ContactsListActivity.java b/src/com/android/contacts/ContactsListActivity.java
index f104781..b8940fa 100644
--- a/src/com/android/contacts/ContactsListActivity.java
+++ b/src/com/android/contacts/ContactsListActivity.java
@@ -48,6 +48,8 @@
import android.provider.ContactsContract;
import android.provider.ContactsContract.Aggregates;
import android.provider.ContactsContract.CommonDataKinds;
+import android.provider.ContactsContract.CommonDataKinds.Phone;
+import android.provider.ContactsContract.CommonDataKinds.Postal;
import android.provider.ContactsContract.Data;
import android.text.TextUtils;
import android.util.Log;
@@ -125,25 +127,25 @@
// static final int MODE_GROUP = 5;
/** Show all contacts sorted alphabetically */
static final int MODE_ALL_CONTACTS = 10;
-// /** Show all contacts with phone numbers, sorted alphabetically */
-// static final int MODE_WITH_PHONES = 15;
+ /** Show all contacts with phone numbers, sorted alphabetically */
+ static final int MODE_WITH_PHONES = 15;
/** Show all starred contacts */
static final int MODE_STARRED = 20;
// /** Show frequently contacted contacts */
// static final int MODE_FREQUENT = 30;
// /** 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_CONTACT = 40 | MODE_MASK_PICKER;
-// /** Show all contacts as well as the option to create a new one */
-// static final int MODE_PICK_OR_CREATE_CONTACT = 42 | MODE_MASK_PICKER | MODE_MASK_CREATE_NEW;
+ /** Show all contacts and pick them when clicking */
+ static final int MODE_PICK_AGGREGATE = 40 | MODE_MASK_PICKER;
+ /** 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;
// /** 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 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 phone numbers and pick them when clicking */
+ static final int MODE_PICK_PHONE = 50 | MODE_MASK_PICKER | MODE_MASK_NO_PRESENCE;
+ /** 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;
// /** Run a search query */
// static final int MODE_QUERY = 60 | MODE_MASK_NO_FILTER;
// /** Run a search query in PICK mode, but that still launches to VIEW */
@@ -187,7 +189,7 @@
Aggregates.PRIMARY_EMAIL_ID, //4
};
- static final String[] AGGREGATES_PRIMARY_PHONE_PROJECTION = new String[] {
+ static final String[] AGGREGATES_SUMMARY_PROJECTION = new String[] {
Aggregates._ID, // 0
Aggregates.DISPLAY_NAME, // 1
Aggregates.STARRED, //2
@@ -196,15 +198,40 @@
CommonDataKinds.Phone.LABEL, //5
CommonDataKinds.Phone.NUMBER, //6
};
-
static final int ID_COLUMN_INDEX = 0;
- static final int NAME_COLUMN_INDEX = 1;
- static final int STARRED_COLUMN_INDEX = 2;
+ static final int SUMMARY_NAME_COLUMN_INDEX = 1;
+ static final int SUMMARY_STARRED_COLUMN_INDEX = 2;
static final int PRIMARY_PHONE_ID_COLUMN_INDEX = 3;
static final int PRIMARY_PHONE_TYPE_COLUMN_INDEX = 4;
static final int PRIMARY_PHONE_LABEL_COLUMN_INDEX = 5;
static final int PRIMARY_PHONE_NUMBER_COLUMN_INDEX = 6;
+ static final String[] PHONES_PROJECTION = new String[] {
+ Data._ID, //0
+ CommonDataKinds.Phone.TYPE, //1
+ CommonDataKinds.Phone.LABEL, //2
+ CommonDataKinds.Phone.NUMBER, //3
+ Aggregates.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;
+ static final int PHONE_NUMBER_COLUMN_INDEX = 3;
+ static final int PHONE_DISPLAY_NAME_COLUMN_INDEX = 4;
+
+ static final String[] POSTALS_PROJECTION = new String[] {
+ Data._ID, //0
+ CommonDataKinds.Postal.TYPE, //1
+ CommonDataKinds.Postal.LABEL, //2
+ CommonDataKinds.Postal.DATA, //3
+ Aggregates.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;
+ static final int POSTAL_ADDRESS_COLUMN_INDEX = 3;
+ static final int POSTAL_DISPLAY_NAME_COLUMN_INDEX = 4;
+
static final int PHONES_PERSON_ID_INDEX = 6;
static final int SIMPLE_CONTACTS_PERSON_ID_INDEX = 0;
@@ -318,34 +345,34 @@
return;
}
buildUserGroupUris(groupName);
- } else if (UI.LIST_ALL_CONTACTS_ACTION.equals(action)) {
+ }*/ else if (UI.LIST_ALL_CONTACTS_ACTION.equals(action)) {
mMode = MODE_ALL_CONTACTS;
- }*/ else if (UI.LIST_STARRED_ACTION.equals(action)) {
+ } else if (UI.LIST_STARRED_ACTION.equals(action)) {
mMode = MODE_STARRED;
} /*else if (UI.LIST_FREQUENT_ACTION.equals(action)) {
mMode = MODE_FREQUENT;
} else if (UI.LIST_STREQUENT_ACTION.equals(action)) {
mMode = MODE_STREQUENT;
- } else if (UI.LIST_CONTACTS_WITH_PHONES_ACTION.equals(action)) {
+ }*/ else if (UI.LIST_CONTACTS_WITH_PHONES_ACTION.equals(action)) {
mMode = MODE_WITH_PHONES;
} else if (Intent.ACTION_PICK.equals(action)) {
// XXX These should be showing the data from the URI given in
// the Intent.
final String type = intent.resolveType(this);
- if (People.CONTENT_TYPE.equals(type)) {
- mMode = MODE_PICK_CONTACT;
- } else if (Phones.CONTENT_TYPE.equals(type)) {
+ if (Aggregates.CONTENT_TYPE.equals(type)) {
+ mMode = MODE_PICK_AGGREGATE;
+ } else if (Phone.CONTENT_TYPE.equals(type)) {
mMode = MODE_PICK_PHONE;
- } else if (ContactMethods.CONTENT_POSTAL_TYPE.equals(type)) {
+ } else if (Postal.CONTENT_TYPE.equals(type)) {
mMode = MODE_PICK_POSTAL;
}
- } else if (Intent.ACTION_CREATE_SHORTCUT.equals(action)) {
- mMode = MODE_PICK_OR_CREATE_CONTACT;
+ } /*else if (Intent.ACTION_CREATE_SHORTCUT.equals(action)) {
+ mMode = MODE_PICK_OR_CREATE_AGGREGATE;
mCreateShortcut = true;
} else if (Intent.ACTION_GET_CONTENT.equals(action)) {
final String type = intent.resolveType(this);
if (People.CONTENT_ITEM_TYPE.equals(type)) {
- mMode = MODE_PICK_OR_CREATE_CONTACT;
+ mMode = MODE_PICK_OR_CREATE_AGGREGATE;
} else if (Phones.CONTENT_ITEM_TYPE.equals(type)) {
mMode = MODE_PICK_PHONE;
} else if (ContactMethods.CONTENT_POSTAL_ITEM_TYPE.equals(type)) {
@@ -486,9 +513,10 @@
empty.setText(getText(R.string.noFavorites));
break;
+ */
case MODE_WITH_PHONES:
empty.setText(getText(R.string.noContactsWithPhoneNumbers));
- break;*/
+ break;
default:
empty.setText(getText(R.string.noContacts));
@@ -529,13 +557,13 @@
// Lookup the group to display
mDisplayType = prefs.getInt(PREF_DISPLAY_TYPE, DISPLAY_TYPE_UNKNOWN);
switch (mDisplayType) {
- /* case DISPLAY_TYPE_ALL_WITH_PHONES: {
+ case DISPLAY_TYPE_ALL_WITH_PHONES: {
mMode = MODE_WITH_PHONES;
mDisplayInfo = null;
break;
}
- case DISPLAY_TYPE_SYSTEM_GROUP: {
+ /*case DISPLAY_TYPE_SYSTEM_GROUP: {
String systemId = prefs.getString(
PREF_DISPLAY_INFO, null);
if (!TextUtils.isEmpty(systemId)) {
@@ -834,7 +862,7 @@
Uri aggUri = ContentUris.withAppendedId(Aggregates.CONTENT_URI, id);
// Setup the menu header
- menu.setHeaderTitle(cursor.getString(NAME_COLUMN_INDEX));
+ menu.setHeaderTitle(cursor.getString(SUMMARY_NAME_COLUMN_INDEX));
// View contact details
menu.add(0, MENU_ITEM_VIEW_CONTACT, 0, R.string.menu_viewContact)
@@ -861,7 +889,7 @@
}
// Star toggling
- int starState = cursor.getInt(STARRED_COLUMN_INDEX);
+ int starState = cursor.getInt(SUMMARY_STARRED_COLUMN_INDEX);
if (starState == 0) {
menu.add(0, MENU_ITEM_TOGGLE_STAR, 0, R.string.menu_addStar);
} else {
@@ -890,7 +918,7 @@
case MENU_ITEM_TOGGLE_STAR: {
// Toggle the star
ContentValues values = new ContentValues(1);
- values.put(Aggregates.STARRED, cursor.getInt(STARRED_COLUMN_INDEX) == 0 ? 1 : 0);
+ values.put(Aggregates.STARRED, cursor.getInt(SUMMARY_STARRED_COLUMN_INDEX) == 0 ? 1 : 0);
Uri aggUri = ContentUris.withAppendedId(Aggregates.CONTENT_URI,
cursor.getInt(ID_COLUMN_INDEX));
getContentResolver().update(aggUri, values, null, null);
@@ -988,26 +1016,28 @@
ContentUris.withAppendedId(People.CONTENT_URI, personId));
startActivity(intent);
finish();
- } else if (mMode == MODE_PICK_CONTACT
- || mMode == MODE_PICK_OR_CREATE_CONTACT) {
- Uri uri = ContentUris.withAppendedId(People.CONTENT_URI, id);
- if (mCreateShortcut) {
+ }*/ else if (mMode == MODE_PICK_AGGREGATE
+ || mMode == MODE_PICK_OR_CREATE_AGGREGATE) {
+ Uri uri = ContentUris.withAppendedId(Aggregates.CONTENT_URI, id);
+ /*if (mCreateShortcut) {
// Subtract one if we have Create Contact at the top
Cursor c = (Cursor) mAdapter.getItem(position
- - (mMode == MODE_PICK_OR_CREATE_CONTACT? 1:0));
- returnPickerResult(c.getString(NAME_COLUMN_INDEX), uri);
+ - (mMode == MODE_PICK_OR_CREATE_AGGREGATE? 1:0));
+ returnPickerResult(c.getString(SUMMARY_NAME_COLUMN_INDEX), uri);
} else {
returnPickerResult(null, uri);
- }
+ } */
+ setResult(RESULT_OK, new Intent().setData(uri));
+ finish();
} else if (mMode == MODE_PICK_PHONE) {
setResult(RESULT_OK, new Intent().setData(
- ContentUris.withAppendedId(Phones.CONTENT_URI, id)));
+ ContentUris.withAppendedId(Data.CONTENT_URI, id)));
finish();
} else if (mMode == MODE_PICK_POSTAL) {
setResult(RESULT_OK, new Intent().setData(
- ContentUris.withAppendedId(ContactMethods.CONTENT_URI, id)));
+ ContentUris.withAppendedId(Data.CONTENT_URI, id)));
finish();
- } */
+ }
} else if ((mMode & MODE_MASK_CREATE_NEW) == MODE_MASK_CREATE_NEW
&& position == 0) {
Intent newContact = new Intent(Intents.Insert.ACTION, People.CONTENT_URI);
@@ -1044,32 +1074,32 @@
switch (mMode) {
/* case MODE_GROUP: */
case MODE_ALL_CONTACTS:
- /* case MODE_WITH_PHONES:
- case MODE_PICK_CONTACT:
- case MODE_PICK_OR_CREATE_CONTACT:
+ case MODE_WITH_PHONES:
+ case MODE_PICK_AGGREGATE:
+ /*case MODE_PICK_OR_CREATE_AGGREGATE:
case MODE_QUERY:*/
case MODE_STARRED:
/*case MODE_FREQUENT:
case MODE_INSERT_OR_EDIT_CONTACT: */
- return AGGREGATES_PRIMARY_PHONE_PROJECTION;
+ return AGGREGATES_SUMMARY_PROJECTION;
/* case MODE_STREQUENT:
return STREQUENT_PROJECTION;
-
+ */
case MODE_PICK_PHONE:
return PHONES_PROJECTION;
case MODE_PICK_POSTAL:
- return CONTACT_METHODS_PROJECTION; */
+ return POSTALS_PROJECTION;
}
return null;
}
- private Uri getPeopleFilterUri(String filter) {
+ private Uri getAggregateFilterUri(String filter) {
if (!TextUtils.isEmpty(filter)) {
- return Uri.withAppendedPath(People.CONTENT_FILTER_URI, Uri.encode(filter));
+ return Uri.withAppendedPath(Aggregates.CONTENT_SUMMARY_FILTER_URI, Uri.encode(filter));
} else {
- return People.CONTENT_URI;
+ return Aggregates.CONTENT_SUMMARY_URI;
}
}
@@ -1099,23 +1129,23 @@
break; */
case MODE_ALL_CONTACTS:
- /* case MODE_PICK_CONTACT:
- case MODE_PICK_OR_CREATE_CONTACT:
+ case MODE_PICK_AGGREGATE:
+ /*case MODE_PICK_OR_CREATE_AGGREGATE:
case MODE_INSERT_OR_EDIT_CONTACT: */
- mQueryHandler.startQuery(QUERY_TOKEN, null,
- ContactsContract.Aggregates.CONTENT_SUMMARY_URI,
- AGGREGATES_PRIMARY_PHONE_PROJECTION, null, null,
- getSortOrder(AGGREGATES_PRIMARY_PHONE_PROJECTION));
+ mQueryHandler.startQuery(QUERY_TOKEN, null, Aggregates.CONTENT_SUMMARY_URI,
+ AGGREGATES_SUMMARY_PROJECTION, null, null,
+ getSortOrder(AGGREGATES_SUMMARY_PROJECTION));
break;
- /* case MODE_WITH_PHONES:
- mQueryHandler.startQuery(QUERY_TOKEN, null, People.CONTENT_URI, CONTACTS_PROJECTION,
- People.PRIMARY_PHONE_ID + " IS NOT NULL", null,
- getSortOrder(CONTACTS_PROJECTION));
+ case MODE_WITH_PHONES:
+ mQueryHandler.startQuery(QUERY_TOKEN, null, Aggregates.CONTENT_SUMMARY_URI,
+ AGGREGATES_SUMMARY_PROJECTION,
+ Aggregates.PRIMARY_PHONE_ID + " IS NOT NULL", null,
+ getSortOrder(AGGREGATES_SUMMARY_PROJECTION));
break;
- case MODE_QUERY: {
+ /*case MODE_QUERY: {
mQuery = getIntent().getStringExtra(SearchManager.QUERY);
mQueryHandler.startQuery(QUERY_TOKEN, null, getPeopleFilterUri(mQuery),
CONTACTS_PROJECTION, null, null,
@@ -1145,11 +1175,9 @@
} */
case MODE_STARRED:
- mQueryHandler.startQuery(QUERY_TOKEN, null,
- Uri.parse(ContactsContract.AUTHORITY_URI + "/aggregates_primary_phone/*"),
- AGGREGATES_PRIMARY_PHONE_PROJECTION,
- Aggregates.STARRED + "=1", null,
- getSortOrder(AGGREGATES_PRIMARY_PHONE_PROJECTION));
+ mQueryHandler.startQuery(QUERY_TOKEN, null, Aggregates.CONTENT_SUMMARY_URI,
+ AGGREGATES_SUMMARY_PROJECTION, Aggregates.STARRED + "=1", null,
+ getSortOrder(AGGREGATES_SUMMARY_PROJECTION));
break;
/*case MODE_FREQUENT:
@@ -1164,18 +1192,16 @@
Uri.withAppendedPath(People.CONTENT_URI, "strequent"), STREQUENT_PROJECTION,
null, null, null);
break;
-
+ */
case MODE_PICK_PHONE:
- mQueryHandler.startQuery(QUERY_TOKEN, null, Phones.CONTENT_URI, PHONES_PROJECTION,
- null, null, getSortOrder(PHONES_PROJECTION));
+ mQueryHandler.startQuery(QUERY_TOKEN, null, Phone.CONTENT_URI,
+ PHONES_PROJECTION, null, null, getSortOrder(PHONES_PROJECTION));
break;
case MODE_PICK_POSTAL:
- mQueryHandler.startQuery(QUERY_TOKEN, null, ContactMethods.CONTENT_URI,
- CONTACT_METHODS_PROJECTION,
- ContactMethods.KIND + "=" + Contacts.KIND_POSTAL, null,
- getSortOrder(CONTACT_METHODS_PROJECTION));
- break; */
+ mQueryHandler.startQuery(QUERY_TOKEN, null, Postal.CONTENT_URI,
+ POSTALS_PROJECTION, null, null, getSortOrder(POSTALS_PROJECTION));
+ break;
}
}
@@ -1198,28 +1224,27 @@
}
return resolver.query(uri, CONTACTS_PROJECTION, null, null,
getSortOrder(CONTACTS_PROJECTION));
- }
+ } */
case MODE_ALL_CONTACTS:
- case MODE_PICK_CONTACT:
- case MODE_PICK_OR_CREATE_CONTACT:
- case MODE_INSERT_OR_EDIT_CONTACT: {
- return resolver.query(getPeopleFilterUri(filter),
- AGGREGATES_PRIMARY_PHONE_PROJECTION, null, null,
- getSortOrder(AGGREGATES_PRIMARY_PHONE_PROJECTION));
+ case MODE_PICK_AGGREGATE:
+ /*case MODE_PICK_OR_CREATE_AGGREGATE:
+ case MODE_INSERT_OR_EDIT_CONTACT:*/ {
+ return resolver.query(getAggregateFilterUri(filter), AGGREGATES_SUMMARY_PROJECTION,
+ null, null, getSortOrder(AGGREGATES_SUMMARY_PROJECTION));
}
case MODE_WITH_PHONES: {
- return resolver.query(getPeopleFilterUri(filter), CONTACTS_PROJECTION,
- People.PRIMARY_PHONE_ID + " IS NOT NULL", null,
- getSortOrder(CONTACTS_PROJECTION));
+ return resolver.query(getAggregateFilterUri(filter), AGGREGATES_SUMMARY_PROJECTION,
+ Aggregates.PRIMARY_PHONE_ID + " IS NOT NULL", null,
+ getSortOrder(AGGREGATES_SUMMARY_PROJECTION));
}
case MODE_STARRED: {
- return resolver.query(getPeopleFilterUri(filter),
- AGGREGATES_PRIMARY_PHONE_PROJECTION,
+ return resolver.query(getAggregateFilterUri(filter),
+ AGGREGATES_SUMMARY_PROJECTION,
Aggregates.STARRED + "=1", null,
- getSortOrder(AGGREGATES_PRIMARY_PHONE_PROJECTION));
+ getSortOrder(AGGREGATES_SUMMARY_PROJECTION));
}
/*case MODE_FREQUENT: {
@@ -1239,18 +1264,17 @@
}
return resolver.query(uri, STREQUENT_PROJECTION, null, null, null);
}
-
+ */
case MODE_PICK_PHONE: {
Uri uri;
if (!TextUtils.isEmpty(filter)) {
- uri = Uri.withAppendedPath(Phones.CONTENT_URI, "filter_name/"
- + Uri.encode(filter));
+ uri = Uri.withAppendedPath(Phone.CONTENT_FILTER_URI, Uri.encode(filter));
} else {
- uri = Phones.CONTENT_URI;
+ uri = Phone.CONTENT_URI;
}
return resolver.query(uri, PHONES_PROJECTION, null, null,
getSortOrder(PHONES_PROJECTION));
- } */
+ }
}
throw new UnsupportedOperationException("filtering not allowed in mode " + mMode);
}
@@ -1361,9 +1385,9 @@
} */
if (mMode == MODE_ALL_CONTACTS) {
currentIndex = DISPLAY_GROUP_INDEX_ALL_CONTACTS;
- } /* else if (mMode == MODE_WITH_PHONES) {
+ } else if (mMode == MODE_WITH_PHONES) {
currentIndex = DISPLAY_GROUP_INDEX_ALL_CONTACTS_WITH_PHONES;
- } */
+ }
mDisplayGroups = groups.toArray(new CharSequence[groups.size()]);
builder.setSingleChoiceItems(mDisplayGroups, currentIndex, this);
mDisplayGroupOriginalSelection = currentIndex;
@@ -1409,8 +1433,8 @@
public CharArrayBuffer nameBuffer = new CharArrayBuffer(128);
public TextView labelView;
public CharArrayBuffer labelBuffer = new CharArrayBuffer(128);
- public TextView numberView;
- public CharArrayBuffer numberBuffer = new CharArrayBuffer(128);
+ public TextView dataView;
+ public CharArrayBuffer dataBuffer = new CharArrayBuffer(128);
public ImageView presenceView;
public ImageView photoView;
}
@@ -1435,10 +1459,16 @@
mUnknownNameText = context.getText(android.R.string.unknownName);
switch (mMode) {
- /* case MODE_PICK_POSTAL:
- mLocalizedLabels = EditContactActivity.getLabelsForKind(mContext,
- Contacts.KIND_POSTAL);
- break; */
+ case MODE_PICK_POSTAL:
+ mLocalizedLabels = EditContactActivity.getLabelsForMimetype(mContext,
+ CommonDataKinds.Postal.CONTENT_ITEM_TYPE);
+ mDisplaySectionHeaders = false;
+ break;
+ case MODE_PICK_PHONE:
+ mLocalizedLabels = EditContactActivity.getLabelsForMimetype(mContext,
+ CommonDataKinds.Phone.CONTENT_ITEM_TYPE);
+ mDisplaySectionHeaders = false;
+ break;
default:
mLocalizedLabels = EditContactActivity.getLabelsForMimetype(mContext,
CommonDataKinds.Phone.CONTENT_ITEM_TYPE);
@@ -1460,7 +1490,7 @@
/* if (Locale.getDefault().equals(Locale.JAPAN)) {
return new JapaneseContactListIndexer(cursor, SORT_STRING_INDEX);
} else { */
- return new AlphabetIndexer(cursor, NAME_COLUMN_INDEX, mAlphabet);
+ return new AlphabetIndexer(cursor, SUMMARY_NAME_COLUMN_INDEX, mAlphabet);
/* } */
}
@@ -1551,7 +1581,7 @@
cache.header = (TextView) view.findViewById(R.id.header);
cache.nameView = (TextView) view.findViewById(R.id.name);
cache.labelView = (TextView) view.findViewById(R.id.label);
- cache.numberView = (TextView) view.findViewById(R.id.number);
+ cache.dataView = (TextView) view.findViewById(R.id.data);
cache.presenceView = (ImageView) view.findViewById(R.id.presence);
cache.photoView = (ImageView) view.findViewById(R.id.photo);
view.setTag(cache);
@@ -1563,8 +1593,41 @@
public void bindView(View view, Context context, Cursor cursor) {
final ContactListItemCache cache = (ContactListItemCache) view.getTag();
+ TextView dataView = cache.dataView;
+ TextView labelView = cache.labelView;
+ int typeColumnIndex;
+ int dataColumnIndex;
+ int labelColumnIndex;
+ int defaultType;
+ int nameColumnIndex;
+ switch(mMode) {
+ case MODE_PICK_PHONE: {
+ nameColumnIndex = PHONE_DISPLAY_NAME_COLUMN_INDEX;
+ dataColumnIndex = PHONE_NUMBER_COLUMN_INDEX;
+ typeColumnIndex = PHONE_TYPE_COLUMN_INDEX;
+ labelColumnIndex = PHONE_LABEL_COLUMN_INDEX;
+ defaultType = Phone.TYPE_HOME;
+ break;
+ }
+ case MODE_PICK_POSTAL: {
+ nameColumnIndex = POSTAL_DISPLAY_NAME_COLUMN_INDEX;
+ dataColumnIndex = POSTAL_ADDRESS_COLUMN_INDEX;
+ typeColumnIndex = POSTAL_TYPE_COLUMN_INDEX;
+ labelColumnIndex = POSTAL_LABEL_COLUMN_INDEX;
+ defaultType = Postal.TYPE_HOME;
+ break;
+ }
+ default: {
+ nameColumnIndex = SUMMARY_NAME_COLUMN_INDEX;
+ dataColumnIndex = PRIMARY_PHONE_NUMBER_COLUMN_INDEX;
+ typeColumnIndex = PRIMARY_PHONE_TYPE_COLUMN_INDEX;
+ labelColumnIndex = PRIMARY_PHONE_LABEL_COLUMN_INDEX;
+ defaultType = Phone.TYPE_HOME;
+ }
+ }
+
// Set the name
- cursor.copyStringToBuffer(NAME_COLUMN_INDEX, cache.nameBuffer);
+ cursor.copyStringToBuffer(nameColumnIndex, cache.nameBuffer);
int size = cache.nameBuffer.sizeCopied;
if (size != 0) {
cache.nameView.setText(cache.nameBuffer.data, 0, size);
@@ -1577,38 +1640,36 @@
// shown would be identical, and columns might not even be present
// in the returned cursor.
if (mQueryMode != QUERY_MODE_NONE) {
- cache.numberView.setVisibility(View.GONE);
+ cache.dataView.setVisibility(View.GONE);
cache.labelView.setVisibility(View.GONE);
cache.presenceView.setVisibility(View.GONE);
return;
}
- // Set the phone number
- TextView numberView = cache.numberView;
- TextView labelView = cache.labelView;
- cursor.copyStringToBuffer(PRIMARY_PHONE_NUMBER_COLUMN_INDEX, cache.numberBuffer);
- size = cache.numberBuffer.sizeCopied;
+ // Set the data.
+ cursor.copyStringToBuffer(dataColumnIndex, cache.dataBuffer);
+
+ size = cache.dataBuffer.sizeCopied;
if (size != 0) {
- numberView.setText(cache.numberBuffer.data, 0, size);
- numberView.setVisibility(View.VISIBLE);
- labelView.setVisibility(View.VISIBLE);
+ dataView.setText(cache.dataBuffer.data, 0, size);
+ dataView.setVisibility(View.VISIBLE);
} else {
- numberView.setVisibility(View.GONE);
- labelView.setVisibility(View.GONE);
+ dataView.setVisibility(View.GONE);
}
- // Set the label
- if (!cursor.isNull(PRIMARY_PHONE_TYPE_COLUMN_INDEX)) {
- int type = cursor.getInt(PRIMARY_PHONE_TYPE_COLUMN_INDEX);
+ // Set the label.
+ if (!cursor.isNull(typeColumnIndex)) {
+ labelView.setVisibility(View.VISIBLE);
+ int type = cursor.getInt(typeColumnIndex);
- if (type != People.Phones.TYPE_CUSTOM) {
+ if (type != CommonDataKinds.BaseTypes.TYPE_CUSTOM) {
try {
labelView.setText(mLocalizedLabels[type - 1]);
} catch (ArrayIndexOutOfBoundsException e) {
- labelView.setText(mLocalizedLabels[People.Phones.TYPE_HOME - 1]);
+ labelView.setText(mLocalizedLabels[defaultType - 1]);
}
} else {
- cursor.copyStringToBuffer(PRIMARY_PHONE_LABEL_COLUMN_INDEX, cache.labelBuffer);
+ cursor.copyStringToBuffer(labelColumnIndex, cache.labelBuffer);
// Don't check size, if it's zero just don't show anything
labelView.setText(cache.labelBuffer.data, 0, cache.labelBuffer.sizeCopied);
}