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