Include data set when getting raw contacts to add to label

Test: manually create group w/ some members for account
  types w/ and w/o a dataSet

Bug: 31393749
Change-Id: Iafcfd926f9c886d91ac7abbf1d3102a9f977eb7a
diff --git a/src/com/android/contacts/activities/GroupMembersActivity.java b/src/com/android/contacts/activities/GroupMembersActivity.java
index e887cb9..c32842a 100644
--- a/src/com/android/contacts/activities/GroupMembersActivity.java
+++ b/src/com/android/contacts/activities/GroupMembersActivity.java
@@ -88,15 +88,17 @@
         private final long mGroupId;
         private final String mAccountName;
         private final String mAccountType;
+        private final String mDataSet;
 
         private UpdateGroupMembersAsyncTask(int type, Context context, long[] contactIds,
-                long groupId, String accountName, String accountType) {
+                long groupId, String accountName, String accountType, String dataSet) {
             mContext = context;
             mType = type;
             mContactIds = contactIds;
             mGroupId = groupId;
             mAccountName = accountName;
             mAccountType = accountType;
+            mDataSet = dataSet;
         }
 
         @Override
@@ -127,10 +129,16 @@
         // ContactSaveService will log a warning if the raw contact is already a member and keep
         // going but it is not ideal, we could also prune raw contacts that are already members.
         private long[] getRawContactIds() {
-            final Uri rawContactUri = RawContacts.CONTENT_URI.buildUpon()
-                    .appendQueryParameter(RawContacts.ACCOUNT_NAME, mAccountName)
-                    .appendQueryParameter(RawContacts.ACCOUNT_TYPE, mAccountType)
-                    .build();
+            final Uri.Builder builder = RawContacts.CONTENT_URI.buildUpon();
+            // null account names are not valid, see ContactsProvider2#appendAccountFromParameter
+            if (mAccountName != null) {
+                builder.appendQueryParameter(RawContacts.ACCOUNT_NAME, mAccountName);
+                builder.appendQueryParameter(RawContacts.ACCOUNT_TYPE, mAccountType);
+            }
+            if (mDataSet != null) {
+                builder.appendQueryParameter(RawContacts.DATA_SET, mDataSet);
+            }
+            final Uri rawContactUri = builder.build();
             final String[] projection = new String[]{RawContacts._ID};
             final StringBuilder selection = new StringBuilder();
             final String[] selectionArgs = new String[mContactIds.length];
@@ -443,7 +451,7 @@
         final long[] contactIds = mMembersFragment.getAdapter().getSelectedContactIdsArray();
         new UpdateGroupMembersAsyncTask(UpdateGroupMembersAsyncTask.TYPE_REMOVE,
                 this, contactIds, mGroupMetaData.groupId, mGroupMetaData.accountName,
-                mGroupMetaData.accountType).execute();
+                mGroupMetaData.accountType, mGroupMetaData.dataSet).execute();
 
         mActionBarAdapter.setSelectionMode(false);
     }
@@ -489,7 +497,7 @@
             }
             new UpdateGroupMembersAsyncTask(UpdateGroupMembersAsyncTask.TYPE_ADD,
                     this, contactIds, mGroupMetaData.groupId, mGroupMetaData.accountName,
-                    mGroupMetaData.accountType).execute();
+                    mGroupMetaData.accountType, mGroupMetaData.dataSet).execute();
         }
     }
 
@@ -610,6 +618,6 @@
         contactIds[0] = contactId;
         new UpdateGroupMembersAsyncTask(UpdateGroupMembersAsyncTask.TYPE_REMOVE,
                 this, contactIds, mGroupMetaData.groupId, mGroupMetaData.accountName,
-                mGroupMetaData.accountType).execute();
+                mGroupMetaData.accountType, mGroupMetaData.dataSet).execute();
     }
 }
diff --git a/src/com/android/contacts/common/list/ContactListFilter.java b/src/com/android/contacts/common/list/ContactListFilter.java
index 81ee5c9..8e29308 100644
--- a/src/com/android/contacts/common/list/ContactListFilter.java
+++ b/src/com/android/contacts/common/list/ContactListFilter.java
@@ -330,9 +330,12 @@
             throw new IllegalStateException(
                     "filterType must be FILTER_TYPE_ACCOUNT or FILER_TYPE_GROUP_MEMBERS");
         }
-        uriBuilder.appendQueryParameter(RawContacts.ACCOUNT_NAME, accountName);
-        uriBuilder.appendQueryParameter(RawContacts.ACCOUNT_TYPE, accountType);
-        if (!TextUtils.isEmpty(dataSet)) {
+        // null account names are not valid, see ContactsProvider2#appendAccountFromParameter
+        if (accountName != null) {
+            uriBuilder.appendQueryParameter(RawContacts.ACCOUNT_NAME, accountName);
+            uriBuilder.appendQueryParameter(RawContacts.ACCOUNT_TYPE, accountType);
+        }
+        if (dataSet != null) {
             uriBuilder.appendQueryParameter(RawContacts.DATA_SET, dataSet);
         }
         return uriBuilder;