Fixing directory handling for contact detail entries.
Data URIs were not constructed correctly for data
rows coming from a remote directory: the directory ID
was not included in the URI.
Change-Id: Ie575b88a1216c119ad9beff1dfd2b93b240f7afd
diff --git a/src/com/android/contacts/detail/ContactDetailFragment.java b/src/com/android/contacts/detail/ContactDetailFragment.java
index a3666da..42b3293 100644
--- a/src/com/android/contacts/detail/ContactDetailFragment.java
+++ b/src/com/android/contacts/detail/ContactDetailFragment.java
@@ -60,6 +60,7 @@
import android.os.Bundle;
import android.os.RemoteException;
import android.os.ServiceManager;
+import android.provider.ContactsContract;
import android.provider.ContactsContract.CommonDataKinds.Email;
import android.provider.ContactsContract.CommonDataKinds.Event;
import android.provider.ContactsContract.CommonDataKinds.GroupMembership;
@@ -409,7 +410,8 @@
if (kind == null) continue;
final ViewEntry entry = ViewEntry.fromValues(mContext, mimeType, kind, dataId,
- entryValues);
+ entryValues, mContactData.isDirectoryEntry(),
+ mContactData.getDirectoryId());
final boolean hasData = !TextUtils.isEmpty(entry.data);
Integer superPrimary = entryValues.getAsInteger(Data.IS_SUPER_PRIMARY);
@@ -462,8 +464,9 @@
final String imMime = Im.CONTENT_ITEM_TYPE;
final DataKind imKind = accountTypes.getKindOrFallback(accountType,
imMime);
- final ViewEntry imEntry = ViewEntry.fromValues(mContext,
- imMime, imKind, dataId, entryValues);
+ final ViewEntry imEntry = ViewEntry.fromValues(mContext, imMime, imKind,
+ dataId, entryValues, mContactData.isDirectoryEntry(),
+ mContactData.getDirectoryId());
buildImActions(imEntry, entryValues);
imEntry.applyStatus(status, false);
mImEntries.add(imEntry);
@@ -546,7 +549,8 @@
mRelationEntries.add(entry);
} else {
// Handle showing custom rows
- entry.intent = new Intent(Intent.ACTION_VIEW, entry.uri);
+ entry.intent = new Intent(Intent.ACTION_VIEW);
+ entry.intent.setDataAndType(entry.uri, entry.mimetype);
// Use social summary when requested by external source
final DataStatus status = mContactData.getStatuses().get(entry.id);
@@ -720,11 +724,15 @@
* Build new {@link ViewEntry} and populate from the given values.
*/
public static ViewEntry fromValues(Context context, String mimeType, DataKind kind,
- long dataId, ContentValues values) {
+ long dataId, ContentValues values, boolean isDirectoryEntry, long directoryId) {
final ViewEntry entry = new ViewEntry();
entry.context = context;
entry.id = dataId;
entry.uri = ContentUris.withAppendedId(Data.CONTENT_URI, entry.id);
+ if (isDirectoryEntry) {
+ entry.uri = entry.uri.buildUpon().appendQueryParameter(
+ ContactsContract.DIRECTORY_PARAM_KEY, String.valueOf(directoryId)).build();
+ }
entry.mimetype = mimeType;
entry.kind = (kind.titleRes == -1 || kind.titleRes == 0) ? ""
: context.getString(kind.titleRes);