PickRawContactLoader.java revision ba10be290e9a1b105743784ab6cc602bbf3078d8
1a6c80b378e03ebdf6b654dbdb12f2c665fe98a80Gary Maipackage com.android.contacts.editor; 2a6c80b378e03ebdf6b654dbdb12f2c665fe98a80Gary Mai 3a6c80b378e03ebdf6b654dbdb12f2c665fe98a80Gary Maiimport android.content.Context; 4a6c80b378e03ebdf6b654dbdb12f2c665fe98a80Gary Maiimport android.content.CursorLoader; 5a6c80b378e03ebdf6b654dbdb12f2c665fe98a80Gary Maiimport android.database.Cursor; 6a6c80b378e03ebdf6b654dbdb12f2c665fe98a80Gary Maiimport android.net.Uri; 7ba10be290e9a1b105743784ab6cc602bbf3078d8Gary Maiimport android.provider.ContactsContract; 8a6c80b378e03ebdf6b654dbdb12f2c665fe98a80Gary Maiimport android.provider.ContactsContract.Contacts; 9a6c80b378e03ebdf6b654dbdb12f2c665fe98a80Gary Maiimport android.provider.ContactsContract.RawContacts; 10a6c80b378e03ebdf6b654dbdb12f2c665fe98a80Gary Mai 11a6c80b378e03ebdf6b654dbdb12f2c665fe98a80Gary Mai/** 12a6c80b378e03ebdf6b654dbdb12f2c665fe98a80Gary Mai * Loader for the pick a raw contact to edit activity. Loads all raw contact metadata for the 13a6c80b378e03ebdf6b654dbdb12f2c665fe98a80Gary Mai * given Contact {@link Uri}. 14a6c80b378e03ebdf6b654dbdb12f2c665fe98a80Gary Mai */ 15a6c80b378e03ebdf6b654dbdb12f2c665fe98a80Gary Maipublic class PickRawContactLoader extends CursorLoader { 16a6c80b378e03ebdf6b654dbdb12f2c665fe98a80Gary Mai private Uri mContactUri; 17ba10be290e9a1b105743784ab6cc602bbf3078d8Gary Mai private boolean mIsUserProfile; 18a6c80b378e03ebdf6b654dbdb12f2c665fe98a80Gary Mai 19a6c80b378e03ebdf6b654dbdb12f2c665fe98a80Gary Mai public static final String[] COLUMNS = new String[] { 20a6c80b378e03ebdf6b654dbdb12f2c665fe98a80Gary Mai RawContacts.ACCOUNT_NAME, 21a6c80b378e03ebdf6b654dbdb12f2c665fe98a80Gary Mai RawContacts.ACCOUNT_TYPE, 22a6c80b378e03ebdf6b654dbdb12f2c665fe98a80Gary Mai RawContacts.DATA_SET, 23a6c80b378e03ebdf6b654dbdb12f2c665fe98a80Gary Mai RawContacts._ID, 24a6c80b378e03ebdf6b654dbdb12f2c665fe98a80Gary Mai RawContacts.DISPLAY_NAME_PRIMARY, 25a6c80b378e03ebdf6b654dbdb12f2c665fe98a80Gary Mai RawContacts.DISPLAY_NAME_ALTERNATIVE 26a6c80b378e03ebdf6b654dbdb12f2c665fe98a80Gary Mai }; 27a6c80b378e03ebdf6b654dbdb12f2c665fe98a80Gary Mai 28a6c80b378e03ebdf6b654dbdb12f2c665fe98a80Gary Mai public static final String SELECTION = RawContacts.CONTACT_ID + "=?"; 29a6c80b378e03ebdf6b654dbdb12f2c665fe98a80Gary Mai 30a6c80b378e03ebdf6b654dbdb12f2c665fe98a80Gary Mai public static final int ACCOUNT_NAME = 0; 31a6c80b378e03ebdf6b654dbdb12f2c665fe98a80Gary Mai public static final int ACCOUNT_TYPE = 1; 32a6c80b378e03ebdf6b654dbdb12f2c665fe98a80Gary Mai public static final int DATA_SET = 2; 33a6c80b378e03ebdf6b654dbdb12f2c665fe98a80Gary Mai public static final int RAW_CONTACT_ID = 3; 34a6c80b378e03ebdf6b654dbdb12f2c665fe98a80Gary Mai public static final int DISPLAY_NAME_PRIMARY = 4; 35a6c80b378e03ebdf6b654dbdb12f2c665fe98a80Gary Mai public static final int DISPLAY_NAME_ALTERNATIVE = 5; 36a6c80b378e03ebdf6b654dbdb12f2c665fe98a80Gary Mai 37a6c80b378e03ebdf6b654dbdb12f2c665fe98a80Gary Mai public PickRawContactLoader(Context context, Uri contactUri) { 38a6c80b378e03ebdf6b654dbdb12f2c665fe98a80Gary Mai super(context, ensureIsContactUri(contactUri), COLUMNS, SELECTION, null, RawContacts._ID); 39a6c80b378e03ebdf6b654dbdb12f2c665fe98a80Gary Mai mContactUri = contactUri; 40a6c80b378e03ebdf6b654dbdb12f2c665fe98a80Gary Mai } 41a6c80b378e03ebdf6b654dbdb12f2c665fe98a80Gary Mai 42a6c80b378e03ebdf6b654dbdb12f2c665fe98a80Gary Mai @Override 43a6c80b378e03ebdf6b654dbdb12f2c665fe98a80Gary Mai public Cursor loadInBackground() { 44a6c80b378e03ebdf6b654dbdb12f2c665fe98a80Gary Mai // Get the id of the contact we're looking at. 45a6c80b378e03ebdf6b654dbdb12f2c665fe98a80Gary Mai final Cursor cursor = getContext().getContentResolver() 46ba10be290e9a1b105743784ab6cc602bbf3078d8Gary Mai .query(mContactUri, new String[] { Contacts._ID, Contacts.IS_USER_PROFILE }, null, 47a6c80b378e03ebdf6b654dbdb12f2c665fe98a80Gary Mai null, null); 48a6c80b378e03ebdf6b654dbdb12f2c665fe98a80Gary Mai 49a6c80b378e03ebdf6b654dbdb12f2c665fe98a80Gary Mai if (cursor == null) { 50a6c80b378e03ebdf6b654dbdb12f2c665fe98a80Gary Mai return null; 51a6c80b378e03ebdf6b654dbdb12f2c665fe98a80Gary Mai } 52a6c80b378e03ebdf6b654dbdb12f2c665fe98a80Gary Mai 53a6c80b378e03ebdf6b654dbdb12f2c665fe98a80Gary Mai if (cursor.getCount() < 1) { 54a6c80b378e03ebdf6b654dbdb12f2c665fe98a80Gary Mai cursor.close(); 55a6c80b378e03ebdf6b654dbdb12f2c665fe98a80Gary Mai return null; 56a6c80b378e03ebdf6b654dbdb12f2c665fe98a80Gary Mai } 57a6c80b378e03ebdf6b654dbdb12f2c665fe98a80Gary Mai 58a6c80b378e03ebdf6b654dbdb12f2c665fe98a80Gary Mai cursor.moveToFirst(); 59ba10be290e9a1b105743784ab6cc602bbf3078d8Gary Mai final long contactId = cursor.getLong(/* Contacts._ID */ 0); 60ba10be290e9a1b105743784ab6cc602bbf3078d8Gary Mai mIsUserProfile = cursor.getInt(/* Contacts.IS_USER_PROFILE */ 1) == 1; 61ba10be290e9a1b105743784ab6cc602bbf3078d8Gary Mai 62a6c80b378e03ebdf6b654dbdb12f2c665fe98a80Gary Mai cursor.close(); 63a6c80b378e03ebdf6b654dbdb12f2c665fe98a80Gary Mai // Update selection arguments and uri. 64a6c80b378e03ebdf6b654dbdb12f2c665fe98a80Gary Mai setSelectionArgs(new String[]{ Long.toString(contactId) }); 65ba10be290e9a1b105743784ab6cc602bbf3078d8Gary Mai if (mIsUserProfile) { 66ba10be290e9a1b105743784ab6cc602bbf3078d8Gary Mai setUri(ContactsContract.Profile.CONTENT_RAW_CONTACTS_URI); 67ba10be290e9a1b105743784ab6cc602bbf3078d8Gary Mai } else { 68ba10be290e9a1b105743784ab6cc602bbf3078d8Gary Mai setUri(RawContacts.CONTENT_URI); 69ba10be290e9a1b105743784ab6cc602bbf3078d8Gary Mai } 70a6c80b378e03ebdf6b654dbdb12f2c665fe98a80Gary Mai return super.loadInBackground(); 71a6c80b378e03ebdf6b654dbdb12f2c665fe98a80Gary Mai } 72a6c80b378e03ebdf6b654dbdb12f2c665fe98a80Gary Mai 73ba10be290e9a1b105743784ab6cc602bbf3078d8Gary Mai public boolean isUserProfile() { 74ba10be290e9a1b105743784ab6cc602bbf3078d8Gary Mai return mIsUserProfile; 75ba10be290e9a1b105743784ab6cc602bbf3078d8Gary Mai } 76ba10be290e9a1b105743784ab6cc602bbf3078d8Gary Mai 77a6c80b378e03ebdf6b654dbdb12f2c665fe98a80Gary Mai /** 78a6c80b378e03ebdf6b654dbdb12f2c665fe98a80Gary Mai * Ensures that this is a valid contact URI. If invalid, then an exception is 79a6c80b378e03ebdf6b654dbdb12f2c665fe98a80Gary Mai * thrown. Otherwise, the original URI is returned. 80a6c80b378e03ebdf6b654dbdb12f2c665fe98a80Gary Mai */ 81a6c80b378e03ebdf6b654dbdb12f2c665fe98a80Gary Mai private static Uri ensureIsContactUri(final Uri uri) { 82a6c80b378e03ebdf6b654dbdb12f2c665fe98a80Gary Mai if (uri == null) { 83a6c80b378e03ebdf6b654dbdb12f2c665fe98a80Gary Mai throw new IllegalArgumentException("Uri must not be null"); 84a6c80b378e03ebdf6b654dbdb12f2c665fe98a80Gary Mai } 85a6c80b378e03ebdf6b654dbdb12f2c665fe98a80Gary Mai if (!uri.toString().startsWith(Contacts.CONTENT_URI.toString())) { 86a6c80b378e03ebdf6b654dbdb12f2c665fe98a80Gary Mai throw new IllegalArgumentException("Invalid contact Uri: " + uri); 87a6c80b378e03ebdf6b654dbdb12f2c665fe98a80Gary Mai } 88a6c80b378e03ebdf6b654dbdb12f2c665fe98a80Gary Mai return uri; 89a6c80b378e03ebdf6b654dbdb12f2c665fe98a80Gary Mai } 90a6c80b378e03ebdf6b654dbdb12f2c665fe98a80Gary Mai} 91