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);