Loading src/com/android/contacts/list/GroupMemberPickListAdapter.java +19 −13 Original line number Diff line number Diff line Loading @@ -19,6 +19,7 @@ import android.content.Context; import android.content.CursorLoader; import android.database.Cursor; import android.net.Uri; import android.provider.ContactsContract.CommonDataKinds.GroupMembership; import android.provider.ContactsContract.Data; import android.provider.ContactsContract.RawContacts; import android.text.TextUtils; Loading @@ -43,21 +44,21 @@ public class GroupMemberPickListAdapter extends ContactEntryListAdapter { static class GroupMembersQuery { private static final String[] PROJECTION_PRIMARY = new String[] { RawContacts._ID, // 0 RawContacts.CONTACT_ID, // 1 RawContacts.DISPLAY_NAME_PRIMARY, // 2 Data.RAW_CONTACT_ID, // 0 Data.CONTACT_ID, // 1 Data.DISPLAY_NAME_PRIMARY, // 2 // Dummy columns overwritten by the cursor wrapper RawContacts.SYNC1, // 3 RawContacts.SYNC2 // 4 Data.PHOTO_ID, // 3 Data.LOOKUP_KEY // 4 }; private static final String[] PROJECTION_ALTERNATIVE = new String[] { RawContacts._ID, // 0 RawContacts.CONTACT_ID, // 1 RawContacts.DISPLAY_NAME_ALTERNATIVE, // 2 Data.RAW_CONTACT_ID, // 0 Data.CONTACT_ID, // 1 Data.DISPLAY_NAME_ALTERNATIVE, // 2 // Dummy columns overwritten by the cursor wrapper RawContacts.SYNC1, // 3 RawContacts.SYNC2 // 4 Data.PHOTO_ID, // 3 Data.LOOKUP_KEY // 4 }; static final int RAW_CONTACT_ID = 0; Loading Loading @@ -101,7 +102,10 @@ public class GroupMemberPickListAdapter extends ContactEntryListAdapter { @Override public void configureLoader(CursorLoader loader, long directoryId) { loader.setUri(RawContacts.CONTENT_URI); final Uri uri = Data.CONTENT_URI.buildUpon() .appendQueryParameter(Data.VISIBLE_CONTACTS_ONLY, "true") .build(); loader.setUri(uri); loader.setProjection( getContactNameDisplayOrder() == ContactsPreferences.DISPLAY_ORDER_PRIMARY ? GroupMembersQuery.PROJECTION_PRIMARY Loading @@ -115,7 +119,8 @@ public class GroupMemberPickListAdapter extends ContactEntryListAdapter { private String getSelection() { // Select raw contacts by account String result = RawContacts.ACCOUNT_NAME + "=? AND " + RawContacts.ACCOUNT_TYPE + "=? AND "; String result = RawContacts.ACCOUNT_NAME + "=? AND " + RawContacts.ACCOUNT_TYPE + "=? AND " + Data.MIMETYPE + "=? AND "; if (TextUtils.isEmpty(mAccount.dataSet)) { result += Data.DATA_SET + " IS NULL"; } else { Loading @@ -128,6 +133,7 @@ public class GroupMemberPickListAdapter extends ContactEntryListAdapter { final ArrayList<String> result = new ArrayList<>(); result.add(mAccount.name); result.add(mAccount.type); result.add(GroupMembership.CONTENT_ITEM_TYPE); if (!TextUtils.isEmpty(mAccount.dataSet)) result.add(mAccount.dataSet); return result.toArray(new String[0]); } Loading @@ -135,7 +141,7 @@ public class GroupMemberPickListAdapter extends ContactEntryListAdapter { public Uri getRawContactUri(int position) { final Cursor cursor = (Cursor) getItem(position); final long rawContactId = cursor.getLong(GroupMembersQuery.RAW_CONTACT_ID); return RawContacts.CONTENT_URI.buildUpon() return Data.CONTENT_URI.buildUpon() .appendPath(Long.toString(rawContactId)) .build(); } Loading src/com/android/contacts/list/GroupMemberPickerFragment.java +25 −16 Original line number Diff line number Diff line Loading @@ -23,7 +23,7 @@ import android.database.CursorWrapper; import android.net.Uri; import android.os.Bundle; import android.provider.ContactsContract.Contacts; import android.provider.ContactsContract.RawContacts; import android.provider.ContactsContract.Data; import android.util.Log; import android.util.Pair; import android.view.LayoutInflater; Loading @@ -38,7 +38,9 @@ import com.android.contacts.list.GroupMemberPickListAdapter.GroupMembersQuery; import java.util.ArrayList; import java.util.HashMap; import java.util.HashSet; import java.util.Map; import java.util.Set; /** * Fragment containing raw contacts for a specified account that are not already in a group. Loading Loading @@ -84,12 +86,17 @@ public class GroupMemberPickerFragment extends + (mContactPhotosMap == null ? 0 : mContactPhotosMap.size())); } final Set<String> uniqueRawContactIds = new HashSet<String>(); for (int i = 0; i < mCount; i++) { super.moveToPosition(i); final String rawContactId = getString(GroupMembersQuery.RAW_CONTACT_ID); if (!mRawContactIds.contains(rawContactId)) { if (!mRawContactIds.contains(rawContactId) && !uniqueRawContactIds.contains(rawContactId)) { mIndex[mPos++] = i; } else if (mContactPhotosMap != null) { uniqueRawContactIds.add(rawContactId); } if (mRawContactIds.contains(rawContactId) && mContactPhotosMap != null) { final long contactId = getLong(GroupMembersQuery.CONTACT_ID); mContactPhotosMap.remove(contactId); } Loading Loading @@ -117,10 +124,10 @@ public class GroupMemberPickerFragment extends } private int getColumnIndexForContactColumn(String columnName) { if (Contacts.PHOTO_ID.equals(columnName)) { if (Data.PHOTO_ID.equals(columnName)) { return GroupMembersQuery.CONTACT_PHOTO_ID; } if (Contacts.LOOKUP_KEY.equals(columnName)) { if (Data.LOOKUP_KEY.equals(columnName)) { return GroupMembersQuery.CONTACT_LOOKUP_KEY; } return -1; Loading @@ -130,14 +137,14 @@ public class GroupMemberPickerFragment extends public String[] getColumnNames() { final String displayNameColumnName = getContactNameDisplayOrder() == ContactsPreferences.DISPLAY_ORDER_PRIMARY ? RawContacts.DISPLAY_NAME_PRIMARY : RawContacts.DISPLAY_NAME_ALTERNATIVE; ? Data.DISPLAY_NAME_PRIMARY : Data.DISPLAY_NAME_ALTERNATIVE; return new String[] { RawContacts._ID, RawContacts.CONTACT_ID, Data._ID, Data.CONTACT_ID, displayNameColumnName, Contacts.PHOTO_ID, Contacts.LOOKUP_KEY, Data.PHOTO_ID, Data.LOOKUP_KEY, }; } Loading Loading @@ -219,15 +226,15 @@ public class GroupMemberPickerFragment extends private final LoaderCallbacks<Cursor> mContactsEntityCallbacks = new LoaderCallbacks<Cursor>() { private final String[] PROJECTION = new String[] { Contacts._ID, Contacts.PHOTO_ID, Contacts.LOOKUP_KEY Data.CONTACT_ID, Data.PHOTO_ID, Data.LOOKUP_KEY }; @Override public CursorLoader onCreateLoader(int id, Bundle args) { final CursorLoader loader = new CursorLoader(getActivity()); loader.setUri(Contacts.CONTENT_URI); loader.setUri(Data.CONTENT_URI); loader.setProjection(PROJECTION); return loader; } Loading Loading @@ -311,8 +318,10 @@ public class GroupMemberPickerFragment extends @Override public void onLoadFinished(Loader<Cursor> loader, Cursor data) { if (data != null) { super.onLoadFinished(loader, new FilterCursorWrapper(data)); } } @Override protected GroupMemberPickListAdapter createListAdapter() { Loading Loading
src/com/android/contacts/list/GroupMemberPickListAdapter.java +19 −13 Original line number Diff line number Diff line Loading @@ -19,6 +19,7 @@ import android.content.Context; import android.content.CursorLoader; import android.database.Cursor; import android.net.Uri; import android.provider.ContactsContract.CommonDataKinds.GroupMembership; import android.provider.ContactsContract.Data; import android.provider.ContactsContract.RawContacts; import android.text.TextUtils; Loading @@ -43,21 +44,21 @@ public class GroupMemberPickListAdapter extends ContactEntryListAdapter { static class GroupMembersQuery { private static final String[] PROJECTION_PRIMARY = new String[] { RawContacts._ID, // 0 RawContacts.CONTACT_ID, // 1 RawContacts.DISPLAY_NAME_PRIMARY, // 2 Data.RAW_CONTACT_ID, // 0 Data.CONTACT_ID, // 1 Data.DISPLAY_NAME_PRIMARY, // 2 // Dummy columns overwritten by the cursor wrapper RawContacts.SYNC1, // 3 RawContacts.SYNC2 // 4 Data.PHOTO_ID, // 3 Data.LOOKUP_KEY // 4 }; private static final String[] PROJECTION_ALTERNATIVE = new String[] { RawContacts._ID, // 0 RawContacts.CONTACT_ID, // 1 RawContacts.DISPLAY_NAME_ALTERNATIVE, // 2 Data.RAW_CONTACT_ID, // 0 Data.CONTACT_ID, // 1 Data.DISPLAY_NAME_ALTERNATIVE, // 2 // Dummy columns overwritten by the cursor wrapper RawContacts.SYNC1, // 3 RawContacts.SYNC2 // 4 Data.PHOTO_ID, // 3 Data.LOOKUP_KEY // 4 }; static final int RAW_CONTACT_ID = 0; Loading Loading @@ -101,7 +102,10 @@ public class GroupMemberPickListAdapter extends ContactEntryListAdapter { @Override public void configureLoader(CursorLoader loader, long directoryId) { loader.setUri(RawContacts.CONTENT_URI); final Uri uri = Data.CONTENT_URI.buildUpon() .appendQueryParameter(Data.VISIBLE_CONTACTS_ONLY, "true") .build(); loader.setUri(uri); loader.setProjection( getContactNameDisplayOrder() == ContactsPreferences.DISPLAY_ORDER_PRIMARY ? GroupMembersQuery.PROJECTION_PRIMARY Loading @@ -115,7 +119,8 @@ public class GroupMemberPickListAdapter extends ContactEntryListAdapter { private String getSelection() { // Select raw contacts by account String result = RawContacts.ACCOUNT_NAME + "=? AND " + RawContacts.ACCOUNT_TYPE + "=? AND "; String result = RawContacts.ACCOUNT_NAME + "=? AND " + RawContacts.ACCOUNT_TYPE + "=? AND " + Data.MIMETYPE + "=? AND "; if (TextUtils.isEmpty(mAccount.dataSet)) { result += Data.DATA_SET + " IS NULL"; } else { Loading @@ -128,6 +133,7 @@ public class GroupMemberPickListAdapter extends ContactEntryListAdapter { final ArrayList<String> result = new ArrayList<>(); result.add(mAccount.name); result.add(mAccount.type); result.add(GroupMembership.CONTENT_ITEM_TYPE); if (!TextUtils.isEmpty(mAccount.dataSet)) result.add(mAccount.dataSet); return result.toArray(new String[0]); } Loading @@ -135,7 +141,7 @@ public class GroupMemberPickListAdapter extends ContactEntryListAdapter { public Uri getRawContactUri(int position) { final Cursor cursor = (Cursor) getItem(position); final long rawContactId = cursor.getLong(GroupMembersQuery.RAW_CONTACT_ID); return RawContacts.CONTENT_URI.buildUpon() return Data.CONTENT_URI.buildUpon() .appendPath(Long.toString(rawContactId)) .build(); } Loading
src/com/android/contacts/list/GroupMemberPickerFragment.java +25 −16 Original line number Diff line number Diff line Loading @@ -23,7 +23,7 @@ import android.database.CursorWrapper; import android.net.Uri; import android.os.Bundle; import android.provider.ContactsContract.Contacts; import android.provider.ContactsContract.RawContacts; import android.provider.ContactsContract.Data; import android.util.Log; import android.util.Pair; import android.view.LayoutInflater; Loading @@ -38,7 +38,9 @@ import com.android.contacts.list.GroupMemberPickListAdapter.GroupMembersQuery; import java.util.ArrayList; import java.util.HashMap; import java.util.HashSet; import java.util.Map; import java.util.Set; /** * Fragment containing raw contacts for a specified account that are not already in a group. Loading Loading @@ -84,12 +86,17 @@ public class GroupMemberPickerFragment extends + (mContactPhotosMap == null ? 0 : mContactPhotosMap.size())); } final Set<String> uniqueRawContactIds = new HashSet<String>(); for (int i = 0; i < mCount; i++) { super.moveToPosition(i); final String rawContactId = getString(GroupMembersQuery.RAW_CONTACT_ID); if (!mRawContactIds.contains(rawContactId)) { if (!mRawContactIds.contains(rawContactId) && !uniqueRawContactIds.contains(rawContactId)) { mIndex[mPos++] = i; } else if (mContactPhotosMap != null) { uniqueRawContactIds.add(rawContactId); } if (mRawContactIds.contains(rawContactId) && mContactPhotosMap != null) { final long contactId = getLong(GroupMembersQuery.CONTACT_ID); mContactPhotosMap.remove(contactId); } Loading Loading @@ -117,10 +124,10 @@ public class GroupMemberPickerFragment extends } private int getColumnIndexForContactColumn(String columnName) { if (Contacts.PHOTO_ID.equals(columnName)) { if (Data.PHOTO_ID.equals(columnName)) { return GroupMembersQuery.CONTACT_PHOTO_ID; } if (Contacts.LOOKUP_KEY.equals(columnName)) { if (Data.LOOKUP_KEY.equals(columnName)) { return GroupMembersQuery.CONTACT_LOOKUP_KEY; } return -1; Loading @@ -130,14 +137,14 @@ public class GroupMemberPickerFragment extends public String[] getColumnNames() { final String displayNameColumnName = getContactNameDisplayOrder() == ContactsPreferences.DISPLAY_ORDER_PRIMARY ? RawContacts.DISPLAY_NAME_PRIMARY : RawContacts.DISPLAY_NAME_ALTERNATIVE; ? Data.DISPLAY_NAME_PRIMARY : Data.DISPLAY_NAME_ALTERNATIVE; return new String[] { RawContacts._ID, RawContacts.CONTACT_ID, Data._ID, Data.CONTACT_ID, displayNameColumnName, Contacts.PHOTO_ID, Contacts.LOOKUP_KEY, Data.PHOTO_ID, Data.LOOKUP_KEY, }; } Loading Loading @@ -219,15 +226,15 @@ public class GroupMemberPickerFragment extends private final LoaderCallbacks<Cursor> mContactsEntityCallbacks = new LoaderCallbacks<Cursor>() { private final String[] PROJECTION = new String[] { Contacts._ID, Contacts.PHOTO_ID, Contacts.LOOKUP_KEY Data.CONTACT_ID, Data.PHOTO_ID, Data.LOOKUP_KEY }; @Override public CursorLoader onCreateLoader(int id, Bundle args) { final CursorLoader loader = new CursorLoader(getActivity()); loader.setUri(Contacts.CONTENT_URI); loader.setUri(Data.CONTENT_URI); loader.setProjection(PROJECTION); return loader; } Loading Loading @@ -311,8 +318,10 @@ public class GroupMemberPickerFragment extends @Override public void onLoadFinished(Loader<Cursor> loader, Cursor data) { if (data != null) { super.onLoadFinished(loader, new FilterCursorWrapper(data)); } } @Override protected GroupMemberPickListAdapter createListAdapter() { Loading