resolve merge conflicts of 3cf4db4 to master

Change-Id: I990bc8cf9dc3d1ecd1ade5fc60aa21c120ead7d5
diff --git a/src/com/android/contacts/common/list/ContactListFilter.java b/src/com/android/contacts/common/list/ContactListFilter.java
index 63eae17..c6baf41 100644
--- a/src/com/android/contacts/common/list/ContactListFilter.java
+++ b/src/com/android/contacts/common/list/ContactListFilter.java
@@ -335,9 +335,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;
diff --git a/src/com/android/contacts/group/GroupMembersFragment.java b/src/com/android/contacts/group/GroupMembersFragment.java
index 66bd509..f7897bc 100644
--- a/src/com/android/contacts/group/GroupMembersFragment.java
+++ b/src/com/android/contacts/group/GroupMembersFragment.java
@@ -318,7 +318,7 @@
         final long[] contactIds = getAdapter().getSelectedContactIdsArray();
         new UpdateGroupMembersAsyncTask(UpdateGroupMembersAsyncTask.TYPE_REMOVE,
                 getContext(), contactIds, mGroupMetaData.groupId, mGroupMetaData.accountName,
-                mGroupMetaData.accountType).execute();
+                mGroupMetaData.accountType, mGroupMetaData.dataSet).execute();
 
         mActionBarAdapter.setSelectionMode(false);
     }
@@ -340,7 +340,7 @@
             new UpdateGroupMembersAsyncTask(
                     UpdateGroupMembersAsyncTask.TYPE_ADD,
                     getContext(), contactIds, mGroupMetaData.groupId, mGroupMetaData.accountName,
-                    mGroupMetaData.accountType).execute();
+                    mGroupMetaData.accountType, mGroupMetaData.dataSet).execute();
         }
     }
 
@@ -636,7 +636,7 @@
             contactIds[0] = contactId;
             new UpdateGroupMembersAsyncTask(UpdateGroupMembersAsyncTask.TYPE_REMOVE,
                     getContext(), contactIds, mGroupMetaData.groupId, mGroupMetaData.accountName,
-                    mGroupMetaData.accountType).execute();
+                    mGroupMetaData.accountType, mGroupMetaData.dataSet).execute();
         }
     }
 
diff --git a/src/com/android/contacts/group/UpdateGroupMembersAsyncTask.java b/src/com/android/contacts/group/UpdateGroupMembersAsyncTask.java
index 46aa674..9b255eb 100644
--- a/src/com/android/contacts/group/UpdateGroupMembersAsyncTask.java
+++ b/src/com/android/contacts/group/UpdateGroupMembersAsyncTask.java
@@ -22,6 +22,7 @@
 import android.net.Uri;
 import android.os.AsyncTask;
 import android.provider.ContactsContract;
+import android.provider.ContactsContract.RawContacts;
 import android.widget.Toast;
 
 import com.android.contacts.ContactSaveService;
@@ -42,15 +43,17 @@
     private final long mGroupId;
     private final String mAccountName;
     private final String mAccountType;
+    private final String mDataSet;
 
     public 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
@@ -81,10 +84,16 @@
     // TODO(wjang): prune raw contacts that are already in the group; ContactSaveService will
     // log a warning if the raw contact is already a member and keep going but it is not ideal.
     private long[] getRawContactIds() {
-        final Uri rawContactUri = ContactsContract.RawContacts.CONTENT_URI.buildUpon()
-                .appendQueryParameter(ContactsContract.RawContacts.ACCOUNT_NAME, mAccountName)
-                .appendQueryParameter(ContactsContract.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[]{ContactsContract.RawContacts._ID};
         final StringBuilder selection = new StringBuilder();
         final String[] selectionArgs = new String[mContactIds.length];