Routing "view contact" requests to proper directories
Change-Id: I006a5f7a9f88ebb0e3ae2872ad646de87d4d6405
diff --git a/src/com/android/contacts/list/ContactBrowseListFragment.java b/src/com/android/contacts/list/ContactBrowseListFragment.java
index 81c4a2b..85b70fe 100644
--- a/src/com/android/contacts/list/ContactBrowseListFragment.java
+++ b/src/com/android/contacts/list/ContactBrowseListFragment.java
@@ -56,8 +56,10 @@
@Override
public void onLoadFinished(Loader<Cursor> loader, Cursor data) {
long selectedId = ListView.INVALID_ROW_ID;
- if (data.moveToFirst()) {
- selectedId = data.getLong(0);
+ if (data != null) {
+ if (data.moveToFirst()) {
+ selectedId = data.getLong(0);
+ }
}
getAdapter().setSelectedContactId(selectedId);
return;
diff --git a/src/com/android/contacts/list/ContactListAdapter.java b/src/com/android/contacts/list/ContactListAdapter.java
index cb1e63f..2389dfb 100644
--- a/src/com/android/contacts/list/ContactListAdapter.java
+++ b/src/com/android/contacts/list/ContactListAdapter.java
@@ -21,6 +21,7 @@
import android.provider.ContactsContract;
import android.provider.ContactsContract.ContactCounts;
import android.provider.ContactsContract.Contacts;
+import android.provider.ContactsContract.Directory;
import android.provider.ContactsContract.SearchSnippetColumns;
import android.view.View;
import android.view.ViewGroup;
@@ -146,14 +147,20 @@
* {@link ListView} position.
*/
public Uri getContactUri(int position) {
+ int partitionIndex = getPartitionForPosition(position);
Cursor item = (Cursor)getItem(position);
- return item != null ? getContactUri(item) : null;
+ return item != null ? getContactUri(partitionIndex, item) : null;
}
- public Uri getContactUri(Cursor cursor) {
+ public Uri getContactUri(int partitionIndex, Cursor cursor) {
long contactId = cursor.getLong(CONTACT_ID_COLUMN_INDEX);
String lookupKey = cursor.getString(CONTACT_LOOKUP_KEY_COLUMN_INDEX);
- return Contacts.getLookupUri(contactId, lookupKey);
+ Uri uri = Contacts.getLookupUri(contactId, lookupKey);
+ if (partitionIndex != Directory.DEFAULT && partitionIndex != Directory.LOCAL_INVISIBLE) {
+ uri = uri.buildUpon().appendQueryParameter(
+ ContactsContract.DIRECTORY_PARAM_KEY, String.valueOf(partitionIndex)).build();
+ }
+ return uri;
}
@Override
@@ -181,14 +188,15 @@
getPhotoLoader().loadPhoto(view.getPhotoView(), photoId);
}
- protected void bindQuickContact(final ContactListItemView view, Cursor cursor) {
+ protected void bindQuickContact(
+ final ContactListItemView view, int partitionIndex, Cursor cursor) {
long photoId = 0;
if (!cursor.isNull(CONTACT_PHOTO_ID_COLUMN_INDEX)) {
photoId = cursor.getLong(CONTACT_PHOTO_ID_COLUMN_INDEX);
}
QuickContactBadge quickContact = view.getQuickContact();
- quickContact.assignContactUri(getContactUri(cursor));
+ quickContact.assignContactUri(getContactUri(partitionIndex, cursor));
getPhotoLoader().loadPhoto(quickContact, photoId);
}
diff --git a/src/com/android/contacts/list/DefaultContactListAdapter.java b/src/com/android/contacts/list/DefaultContactListAdapter.java
index c1bb1e8..ec261c8 100644
--- a/src/com/android/contacts/list/DefaultContactListAdapter.java
+++ b/src/com/android/contacts/list/DefaultContactListAdapter.java
@@ -105,7 +105,7 @@
bindSectionHeaderAndDivider(view, position);
if (isQuickContactEnabled()) {
- bindQuickContact(view, cursor);
+ bindQuickContact(view, partition, cursor);
} else {
bindPhoto(view, cursor);
}
diff --git a/src/com/android/contacts/list/JoinContactListAdapter.java b/src/com/android/contacts/list/JoinContactListAdapter.java
index 7e162db..8b636cf 100644
--- a/src/com/android/contacts/list/JoinContactListAdapter.java
+++ b/src/com/android/contacts/list/JoinContactListAdapter.java
@@ -224,7 +224,7 @@
}
@Override
- public Uri getContactUri(Cursor cursor) {
+ public Uri getContactUri(int partitionIndex, Cursor cursor) {
long contactId = cursor.getLong(CONTACT_ID_COLUMN_INDEX);
String lookupKey = cursor.getString(CONTACT_LOOKUP_KEY_COLUMN_INDEX);
return Contacts.getLookupUri(contactId, lookupKey);
diff --git a/src/com/android/contacts/list/StrequentContactListAdapter.java b/src/com/android/contacts/list/StrequentContactListAdapter.java
index c198c38..886f5b3 100644
--- a/src/com/android/contacts/list/StrequentContactListAdapter.java
+++ b/src/com/android/contacts/list/StrequentContactListAdapter.java
@@ -203,7 +203,7 @@
}
bindName(view, cursor);
- bindQuickContact(view, cursor);
+ bindQuickContact(view, partition, cursor);
bindPresence(view, cursor);
// Make the call button visible if requested.