QuickContactBadge.java revision 0050ee36398c3ab6e5f1ee0038609aff8cf4f0e9
1e727f18cf2649d07a89aba19ecefed93c9d0b305Evan Millar/*
2e727f18cf2649d07a89aba19ecefed93c9d0b305Evan Millar * Copyright (C) 2009 The Android Open Source Project
3e727f18cf2649d07a89aba19ecefed93c9d0b305Evan Millar *
4e727f18cf2649d07a89aba19ecefed93c9d0b305Evan Millar * Licensed under the Apache License, Version 2.0 (the "License");
5e727f18cf2649d07a89aba19ecefed93c9d0b305Evan Millar * you may not use this file except in compliance with the License.
6e727f18cf2649d07a89aba19ecefed93c9d0b305Evan Millar * You may obtain a copy of the License at
7e727f18cf2649d07a89aba19ecefed93c9d0b305Evan Millar *
8e727f18cf2649d07a89aba19ecefed93c9d0b305Evan Millar *      http://www.apache.org/licenses/LICENSE-2.0
9e727f18cf2649d07a89aba19ecefed93c9d0b305Evan Millar *
10e727f18cf2649d07a89aba19ecefed93c9d0b305Evan Millar * Unless required by applicable law or agreed to in writing, software
11e727f18cf2649d07a89aba19ecefed93c9d0b305Evan Millar * distributed under the License is distributed on an "AS IS" BASIS,
12e727f18cf2649d07a89aba19ecefed93c9d0b305Evan Millar * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13e727f18cf2649d07a89aba19ecefed93c9d0b305Evan Millar * See the License for the specific language governing permissions and
14e727f18cf2649d07a89aba19ecefed93c9d0b305Evan Millar * limitations under the License.
15e727f18cf2649d07a89aba19ecefed93c9d0b305Evan Millar */
16e727f18cf2649d07a89aba19ecefed93c9d0b305Evan Millar
17e727f18cf2649d07a89aba19ecefed93c9d0b305Evan Millarpackage android.widget;
18e727f18cf2649d07a89aba19ecefed93c9d0b305Evan Millar
19e727f18cf2649d07a89aba19ecefed93c9d0b305Evan Millarimport android.content.AsyncQueryHandler;
20e727f18cf2649d07a89aba19ecefed93c9d0b305Evan Millarimport android.content.ContentResolver;
21e727f18cf2649d07a89aba19ecefed93c9d0b305Evan Millarimport android.content.Context;
22e727f18cf2649d07a89aba19ecefed93c9d0b305Evan Millarimport android.content.Intent;
23e727f18cf2649d07a89aba19ecefed93c9d0b305Evan Millarimport android.content.res.TypedArray;
24e727f18cf2649d07a89aba19ecefed93c9d0b305Evan Millarimport android.database.Cursor;
25e727f18cf2649d07a89aba19ecefed93c9d0b305Evan Millarimport android.net.Uri;
26e727f18cf2649d07a89aba19ecefed93c9d0b305Evan Millarimport android.provider.ContactsContract.Contacts;
270050ee36398c3ab6e5f1ee0038609aff8cf4f0e9Jeff Sharkeyimport android.provider.ContactsContract.FastTrack;
28e727f18cf2649d07a89aba19ecefed93c9d0b305Evan Millarimport android.provider.ContactsContract.Intents;
29e727f18cf2649d07a89aba19ecefed93c9d0b305Evan Millarimport android.provider.ContactsContract.PhoneLookup;
30e727f18cf2649d07a89aba19ecefed93c9d0b305Evan Millarimport android.provider.ContactsContract.RawContacts;
31e727f18cf2649d07a89aba19ecefed93c9d0b305Evan Millarimport android.provider.ContactsContract.CommonDataKinds.Email;
32e727f18cf2649d07a89aba19ecefed93c9d0b305Evan Millarimport android.util.AttributeSet;
33e727f18cf2649d07a89aba19ecefed93c9d0b305Evan Millarimport android.view.View;
34e727f18cf2649d07a89aba19ecefed93c9d0b305Evan Millarimport android.view.View.OnClickListener;
35e727f18cf2649d07a89aba19ecefed93c9d0b305Evan Millar
36e727f18cf2649d07a89aba19ecefed93c9d0b305Evan Millar/**
37e727f18cf2649d07a89aba19ecefed93c9d0b305Evan Millar * Widget used to show an image with the standard fasttrack badge
38e727f18cf2649d07a89aba19ecefed93c9d0b305Evan Millar * and on-click behavior.
39e727f18cf2649d07a89aba19ecefed93c9d0b305Evan Millar *
40e727f18cf2649d07a89aba19ecefed93c9d0b305Evan Millar * @hide
41e727f18cf2649d07a89aba19ecefed93c9d0b305Evan Millar */
42e727f18cf2649d07a89aba19ecefed93c9d0b305Evan Millarpublic class FasttrackBadgeWidget extends ImageView implements OnClickListener {
43e727f18cf2649d07a89aba19ecefed93c9d0b305Evan Millar
44e727f18cf2649d07a89aba19ecefed93c9d0b305Evan Millar    private Uri mContactUri;
45e727f18cf2649d07a89aba19ecefed93c9d0b305Evan Millar    private String mContactEmail;
46e727f18cf2649d07a89aba19ecefed93c9d0b305Evan Millar    private String mContactPhone;
47e727f18cf2649d07a89aba19ecefed93c9d0b305Evan Millar    private int mMode;
48e727f18cf2649d07a89aba19ecefed93c9d0b305Evan Millar    private QueryHandler mQueryHandler;
49e727f18cf2649d07a89aba19ecefed93c9d0b305Evan Millar
50e727f18cf2649d07a89aba19ecefed93c9d0b305Evan Millar    protected String[] mExcludeMimes = null;
51e727f18cf2649d07a89aba19ecefed93c9d0b305Evan Millar
52e727f18cf2649d07a89aba19ecefed93c9d0b305Evan Millar    static final private int TOKEN_EMAIL_LOOKUP = 0;
53e727f18cf2649d07a89aba19ecefed93c9d0b305Evan Millar    static final private int TOKEN_PHONE_LOOKUP = 1;
54e727f18cf2649d07a89aba19ecefed93c9d0b305Evan Millar    static final private int TOKEN_EMAIL_LOOKUP_AND_TRIGGER = 2;
55e727f18cf2649d07a89aba19ecefed93c9d0b305Evan Millar    static final private int TOKEN_PHONE_LOOKUP_AND_TRIGGER = 3;
56e727f18cf2649d07a89aba19ecefed93c9d0b305Evan Millar
57e727f18cf2649d07a89aba19ecefed93c9d0b305Evan Millar    static final String[] EMAIL_LOOKUP_PROJECTION = new String[] {
58e727f18cf2649d07a89aba19ecefed93c9d0b305Evan Millar        RawContacts.CONTACT_ID,
59e727f18cf2649d07a89aba19ecefed93c9d0b305Evan Millar        Contacts.LOOKUP_KEY,
60e727f18cf2649d07a89aba19ecefed93c9d0b305Evan Millar    };
61e727f18cf2649d07a89aba19ecefed93c9d0b305Evan Millar    static int EMAIL_ID_COLUMN_INDEX = 0;
62e727f18cf2649d07a89aba19ecefed93c9d0b305Evan Millar    static int EMAIL_LOOKUP_STRING_COLUMN_INDEX = 1;
63e727f18cf2649d07a89aba19ecefed93c9d0b305Evan Millar
64e727f18cf2649d07a89aba19ecefed93c9d0b305Evan Millar    static final String[] PHONE_LOOKUP_PROJECTION = new String[] {
65e727f18cf2649d07a89aba19ecefed93c9d0b305Evan Millar        PhoneLookup._ID,
66e727f18cf2649d07a89aba19ecefed93c9d0b305Evan Millar        PhoneLookup.LOOKUP_KEY,
67e727f18cf2649d07a89aba19ecefed93c9d0b305Evan Millar    };
68e727f18cf2649d07a89aba19ecefed93c9d0b305Evan Millar    static int PHONE_ID_COLUMN_INDEX = 0;
69e727f18cf2649d07a89aba19ecefed93c9d0b305Evan Millar    static int PHONE_LOOKUP_STRING_COLUMN_INDEX = 1;
70e727f18cf2649d07a89aba19ecefed93c9d0b305Evan Millar
71e727f18cf2649d07a89aba19ecefed93c9d0b305Evan Millar
72e727f18cf2649d07a89aba19ecefed93c9d0b305Evan Millar
73e727f18cf2649d07a89aba19ecefed93c9d0b305Evan Millar    public FasttrackBadgeWidget(Context context) {
74e727f18cf2649d07a89aba19ecefed93c9d0b305Evan Millar        this(context, null);
75e727f18cf2649d07a89aba19ecefed93c9d0b305Evan Millar    }
76e727f18cf2649d07a89aba19ecefed93c9d0b305Evan Millar
77e727f18cf2649d07a89aba19ecefed93c9d0b305Evan Millar    public FasttrackBadgeWidget(Context context, AttributeSet attrs) {
78e727f18cf2649d07a89aba19ecefed93c9d0b305Evan Millar        this(context, attrs, 0);
79e727f18cf2649d07a89aba19ecefed93c9d0b305Evan Millar    }
80e727f18cf2649d07a89aba19ecefed93c9d0b305Evan Millar
81e727f18cf2649d07a89aba19ecefed93c9d0b305Evan Millar    public FasttrackBadgeWidget(Context context, AttributeSet attrs, int defStyle) {
82e727f18cf2649d07a89aba19ecefed93c9d0b305Evan Millar        super(context, attrs, defStyle);
83e727f18cf2649d07a89aba19ecefed93c9d0b305Evan Millar
84e727f18cf2649d07a89aba19ecefed93c9d0b305Evan Millar        TypedArray a =
85e727f18cf2649d07a89aba19ecefed93c9d0b305Evan Millar            context.obtainStyledAttributes(attrs,
86e727f18cf2649d07a89aba19ecefed93c9d0b305Evan Millar                    com.android.internal.R.styleable.FasttrackBadgeWidget, defStyle, 0);
87e727f18cf2649d07a89aba19ecefed93c9d0b305Evan Millar
88e727f18cf2649d07a89aba19ecefed93c9d0b305Evan Millar        mMode = a.getInt(com.android.internal.R.styleable.FasttrackBadgeWidget_fasttrackWindowSize,
890050ee36398c3ab6e5f1ee0038609aff8cf4f0e9Jeff Sharkey                FastTrack.MODE_MEDIUM);
90e727f18cf2649d07a89aba19ecefed93c9d0b305Evan Millar
91e727f18cf2649d07a89aba19ecefed93c9d0b305Evan Millar        a.recycle();
92e727f18cf2649d07a89aba19ecefed93c9d0b305Evan Millar
93e727f18cf2649d07a89aba19ecefed93c9d0b305Evan Millar        init();
94e727f18cf2649d07a89aba19ecefed93c9d0b305Evan Millar    }
95e727f18cf2649d07a89aba19ecefed93c9d0b305Evan Millar
96e727f18cf2649d07a89aba19ecefed93c9d0b305Evan Millar    private void init() {
97e727f18cf2649d07a89aba19ecefed93c9d0b305Evan Millar        mQueryHandler = new QueryHandler(mContext.getContentResolver());
98e727f18cf2649d07a89aba19ecefed93c9d0b305Evan Millar        setOnClickListener(this);
99e727f18cf2649d07a89aba19ecefed93c9d0b305Evan Millar    }
100e727f18cf2649d07a89aba19ecefed93c9d0b305Evan Millar
101e727f18cf2649d07a89aba19ecefed93c9d0b305Evan Millar    /**
1020050ee36398c3ab6e5f1ee0038609aff8cf4f0e9Jeff Sharkey     * Assign the contact uri that this fasttrack badge should be associated
1030050ee36398c3ab6e5f1ee0038609aff8cf4f0e9Jeff Sharkey     * with. Note that this is only used for displaying the fasttrack window and
1040050ee36398c3ab6e5f1ee0038609aff8cf4f0e9Jeff Sharkey     * won't bind the contact's photo for you.
105e727f18cf2649d07a89aba19ecefed93c9d0b305Evan Millar     *
1060050ee36398c3ab6e5f1ee0038609aff8cf4f0e9Jeff Sharkey     * @param contactUri Either a {@link Contacts#CONTENT_URI} or
1070050ee36398c3ab6e5f1ee0038609aff8cf4f0e9Jeff Sharkey     *            {@link Contacts#CONTENT_LOOKUP_URI} style URI.
108e727f18cf2649d07a89aba19ecefed93c9d0b305Evan Millar     */
109e727f18cf2649d07a89aba19ecefed93c9d0b305Evan Millar    public void assignContactUri(Uri contactUri) {
110e727f18cf2649d07a89aba19ecefed93c9d0b305Evan Millar        mContactUri = contactUri;
111e727f18cf2649d07a89aba19ecefed93c9d0b305Evan Millar    }
112e727f18cf2649d07a89aba19ecefed93c9d0b305Evan Millar
113e727f18cf2649d07a89aba19ecefed93c9d0b305Evan Millar    /**
114e727f18cf2649d07a89aba19ecefed93c9d0b305Evan Millar     * Assign a contact based on an email address. This should only be used when
115e727f18cf2649d07a89aba19ecefed93c9d0b305Evan Millar     * the contact's URI is not available, as an extra query will have to be
116e727f18cf2649d07a89aba19ecefed93c9d0b305Evan Millar     * performed to lookup the URI based on the email.
117e727f18cf2649d07a89aba19ecefed93c9d0b305Evan Millar     *
118e727f18cf2649d07a89aba19ecefed93c9d0b305Evan Millar     * @param emailAddress The email address of the contact.
119e727f18cf2649d07a89aba19ecefed93c9d0b305Evan Millar     * @param lazyLookup If this is true, the lookup query will not be performed
120e727f18cf2649d07a89aba19ecefed93c9d0b305Evan Millar     * until this view is clicked.
121e727f18cf2649d07a89aba19ecefed93c9d0b305Evan Millar     */
122e727f18cf2649d07a89aba19ecefed93c9d0b305Evan Millar    public void assignContactFromEmail(String emailAddress, boolean lazyLookup) {
123e727f18cf2649d07a89aba19ecefed93c9d0b305Evan Millar        mContactEmail = emailAddress;
124e727f18cf2649d07a89aba19ecefed93c9d0b305Evan Millar        if (!lazyLookup) {
125e727f18cf2649d07a89aba19ecefed93c9d0b305Evan Millar            mQueryHandler.startQuery(TOKEN_EMAIL_LOOKUP, null,
126e727f18cf2649d07a89aba19ecefed93c9d0b305Evan Millar                    Uri.withAppendedPath(Email.CONTENT_LOOKUP_URI, Uri.encode(mContactEmail)),
127e727f18cf2649d07a89aba19ecefed93c9d0b305Evan Millar                    EMAIL_LOOKUP_PROJECTION, null, null, null);
1280050ee36398c3ab6e5f1ee0038609aff8cf4f0e9Jeff Sharkey        } else {
1290050ee36398c3ab6e5f1ee0038609aff8cf4f0e9Jeff Sharkey            mContactUri = null;
130e727f18cf2649d07a89aba19ecefed93c9d0b305Evan Millar        }
131e727f18cf2649d07a89aba19ecefed93c9d0b305Evan Millar    }
132e727f18cf2649d07a89aba19ecefed93c9d0b305Evan Millar
133e727f18cf2649d07a89aba19ecefed93c9d0b305Evan Millar    /**
134e727f18cf2649d07a89aba19ecefed93c9d0b305Evan Millar     * Assign a contact based on a phone number. This should only be used when
135e727f18cf2649d07a89aba19ecefed93c9d0b305Evan Millar     * the contact's URI is not available, as an extra query will have to be
136e727f18cf2649d07a89aba19ecefed93c9d0b305Evan Millar     * performed to lookup the URI based on the phone number.
137e727f18cf2649d07a89aba19ecefed93c9d0b305Evan Millar     *
138e727f18cf2649d07a89aba19ecefed93c9d0b305Evan Millar     * @param phoneNumber The phone number of the contact.
139e727f18cf2649d07a89aba19ecefed93c9d0b305Evan Millar     * @param lazyLookup If this is true, the lookup query will not be performed
140e727f18cf2649d07a89aba19ecefed93c9d0b305Evan Millar     * until this view is clicked.
141e727f18cf2649d07a89aba19ecefed93c9d0b305Evan Millar     */
142e727f18cf2649d07a89aba19ecefed93c9d0b305Evan Millar    public void assignContactFromPhone(String phoneNumber, boolean lazyLookup) {
143e727f18cf2649d07a89aba19ecefed93c9d0b305Evan Millar        mContactPhone = phoneNumber;
144e727f18cf2649d07a89aba19ecefed93c9d0b305Evan Millar        if (!lazyLookup) {
145e727f18cf2649d07a89aba19ecefed93c9d0b305Evan Millar            mQueryHandler.startQuery(TOKEN_PHONE_LOOKUP, null,
146e727f18cf2649d07a89aba19ecefed93c9d0b305Evan Millar                    Uri.withAppendedPath(PhoneLookup.CONTENT_FILTER_URI, mContactPhone),
147e727f18cf2649d07a89aba19ecefed93c9d0b305Evan Millar                    PHONE_LOOKUP_PROJECTION, null, null, null);
1480050ee36398c3ab6e5f1ee0038609aff8cf4f0e9Jeff Sharkey        } else {
1490050ee36398c3ab6e5f1ee0038609aff8cf4f0e9Jeff Sharkey            mContactUri = null;
150e727f18cf2649d07a89aba19ecefed93c9d0b305Evan Millar        }
151e727f18cf2649d07a89aba19ecefed93c9d0b305Evan Millar    }
152e727f18cf2649d07a89aba19ecefed93c9d0b305Evan Millar
153e727f18cf2649d07a89aba19ecefed93c9d0b305Evan Millar    /**
1540050ee36398c3ab6e5f1ee0038609aff8cf4f0e9Jeff Sharkey     * Set the fasttrack window mode. Options are {@link FastTrack#MODE_SMALL},
1550050ee36398c3ab6e5f1ee0038609aff8cf4f0e9Jeff Sharkey     * {@link FastTrack#MODE_MEDIUM}, {@link FastTrack#MODE_LARGE}.
156e727f18cf2649d07a89aba19ecefed93c9d0b305Evan Millar     * @param size
157e727f18cf2649d07a89aba19ecefed93c9d0b305Evan Millar     */
158e727f18cf2649d07a89aba19ecefed93c9d0b305Evan Millar    public void setMode(int size) {
159e727f18cf2649d07a89aba19ecefed93c9d0b305Evan Millar        mMode = size;
160e727f18cf2649d07a89aba19ecefed93c9d0b305Evan Millar    }
161e727f18cf2649d07a89aba19ecefed93c9d0b305Evan Millar
162e727f18cf2649d07a89aba19ecefed93c9d0b305Evan Millar    public void onClick(View v) {
163e727f18cf2649d07a89aba19ecefed93c9d0b305Evan Millar        if (mContactUri != null) {
1640050ee36398c3ab6e5f1ee0038609aff8cf4f0e9Jeff Sharkey            final ContentResolver resolver = getContext().getContentResolver();
1650050ee36398c3ab6e5f1ee0038609aff8cf4f0e9Jeff Sharkey            final Uri lookupUri = Contacts.getLookupUri(resolver, mContactUri);
1660050ee36398c3ab6e5f1ee0038609aff8cf4f0e9Jeff Sharkey            trigger(lookupUri);
167e727f18cf2649d07a89aba19ecefed93c9d0b305Evan Millar        } else if (mContactEmail != null) {
1680050ee36398c3ab6e5f1ee0038609aff8cf4f0e9Jeff Sharkey            mQueryHandler.startQuery(TOKEN_EMAIL_LOOKUP_AND_TRIGGER, mContactEmail,
169e727f18cf2649d07a89aba19ecefed93c9d0b305Evan Millar                    Uri.withAppendedPath(Email.CONTENT_LOOKUP_URI, Uri.encode(mContactEmail)),
170e727f18cf2649d07a89aba19ecefed93c9d0b305Evan Millar                    EMAIL_LOOKUP_PROJECTION, null, null, null);
171e727f18cf2649d07a89aba19ecefed93c9d0b305Evan Millar        } else if (mContactPhone != null) {
1720050ee36398c3ab6e5f1ee0038609aff8cf4f0e9Jeff Sharkey            mQueryHandler.startQuery(TOKEN_PHONE_LOOKUP_AND_TRIGGER, mContactPhone,
173e727f18cf2649d07a89aba19ecefed93c9d0b305Evan Millar                    Uri.withAppendedPath(PhoneLookup.CONTENT_FILTER_URI, mContactPhone),
174e727f18cf2649d07a89aba19ecefed93c9d0b305Evan Millar                    PHONE_LOOKUP_PROJECTION, null, null, null);
175e727f18cf2649d07a89aba19ecefed93c9d0b305Evan Millar        } else {
176e727f18cf2649d07a89aba19ecefed93c9d0b305Evan Millar            // If a contact hasn't been assigned, don't react to click.
177e727f18cf2649d07a89aba19ecefed93c9d0b305Evan Millar            return;
178e727f18cf2649d07a89aba19ecefed93c9d0b305Evan Millar        }
179e727f18cf2649d07a89aba19ecefed93c9d0b305Evan Millar    }
180e727f18cf2649d07a89aba19ecefed93c9d0b305Evan Millar
181e727f18cf2649d07a89aba19ecefed93c9d0b305Evan Millar    /**
182e727f18cf2649d07a89aba19ecefed93c9d0b305Evan Millar     * Set a list of specific MIME-types to exclude and not display. For
183e727f18cf2649d07a89aba19ecefed93c9d0b305Evan Millar     * example, this can be used to hide the {@link Contacts#CONTENT_ITEM_TYPE}
184e727f18cf2649d07a89aba19ecefed93c9d0b305Evan Millar     * profile icon.
185e727f18cf2649d07a89aba19ecefed93c9d0b305Evan Millar     */
186e727f18cf2649d07a89aba19ecefed93c9d0b305Evan Millar    public void setExcludeMimes(String[] excludeMimes) {
187e727f18cf2649d07a89aba19ecefed93c9d0b305Evan Millar        mExcludeMimes = excludeMimes;
188e727f18cf2649d07a89aba19ecefed93c9d0b305Evan Millar    }
189e727f18cf2649d07a89aba19ecefed93c9d0b305Evan Millar
1900050ee36398c3ab6e5f1ee0038609aff8cf4f0e9Jeff Sharkey    private void trigger(Uri lookupUri) {
1910050ee36398c3ab6e5f1ee0038609aff8cf4f0e9Jeff Sharkey        FastTrack.showFastTrack(getContext(), this, lookupUri, mMode, mExcludeMimes);
192e727f18cf2649d07a89aba19ecefed93c9d0b305Evan Millar    }
193e727f18cf2649d07a89aba19ecefed93c9d0b305Evan Millar
194e727f18cf2649d07a89aba19ecefed93c9d0b305Evan Millar    private class QueryHandler extends AsyncQueryHandler {
195e727f18cf2649d07a89aba19ecefed93c9d0b305Evan Millar
196e727f18cf2649d07a89aba19ecefed93c9d0b305Evan Millar        public QueryHandler(ContentResolver cr) {
197e727f18cf2649d07a89aba19ecefed93c9d0b305Evan Millar            super(cr);
198e727f18cf2649d07a89aba19ecefed93c9d0b305Evan Millar        }
199e727f18cf2649d07a89aba19ecefed93c9d0b305Evan Millar
200e727f18cf2649d07a89aba19ecefed93c9d0b305Evan Millar        @Override
201e727f18cf2649d07a89aba19ecefed93c9d0b305Evan Millar        protected void onQueryComplete(int token, Object cookie, Cursor cursor) {
2020050ee36398c3ab6e5f1ee0038609aff8cf4f0e9Jeff Sharkey            Uri lookupUri = null;
2030050ee36398c3ab6e5f1ee0038609aff8cf4f0e9Jeff Sharkey            Uri createUri = null;
204e727f18cf2649d07a89aba19ecefed93c9d0b305Evan Millar            boolean trigger = false;
205e727f18cf2649d07a89aba19ecefed93c9d0b305Evan Millar
2060050ee36398c3ab6e5f1ee0038609aff8cf4f0e9Jeff Sharkey            try {
207e727f18cf2649d07a89aba19ecefed93c9d0b305Evan Millar                switch(token) {
208e727f18cf2649d07a89aba19ecefed93c9d0b305Evan Millar                    case TOKEN_PHONE_LOOKUP_AND_TRIGGER:
209e727f18cf2649d07a89aba19ecefed93c9d0b305Evan Millar                        trigger = true;
2100050ee36398c3ab6e5f1ee0038609aff8cf4f0e9Jeff Sharkey                        createUri = Uri.fromParts("tel", (String)cookie, null);
2110050ee36398c3ab6e5f1ee0038609aff8cf4f0e9Jeff Sharkey
212e727f18cf2649d07a89aba19ecefed93c9d0b305Evan Millar                    case TOKEN_PHONE_LOOKUP: {
213e727f18cf2649d07a89aba19ecefed93c9d0b305Evan Millar                        if (cursor != null && cursor.moveToFirst()) {
214e727f18cf2649d07a89aba19ecefed93c9d0b305Evan Millar                            long contactId = cursor.getLong(PHONE_ID_COLUMN_INDEX);
215e727f18cf2649d07a89aba19ecefed93c9d0b305Evan Millar                            String lookupKey = cursor.getString(PHONE_LOOKUP_STRING_COLUMN_INDEX);
2160050ee36398c3ab6e5f1ee0038609aff8cf4f0e9Jeff Sharkey                            lookupUri = Contacts.getLookupUri(contactId, lookupKey);
217e727f18cf2649d07a89aba19ecefed93c9d0b305Evan Millar                        }
2180050ee36398c3ab6e5f1ee0038609aff8cf4f0e9Jeff Sharkey
219e727f18cf2649d07a89aba19ecefed93c9d0b305Evan Millar                        break;
220e727f18cf2649d07a89aba19ecefed93c9d0b305Evan Millar                    }
221e727f18cf2649d07a89aba19ecefed93c9d0b305Evan Millar                    case TOKEN_EMAIL_LOOKUP_AND_TRIGGER:
222e727f18cf2649d07a89aba19ecefed93c9d0b305Evan Millar                        trigger = true;
2230050ee36398c3ab6e5f1ee0038609aff8cf4f0e9Jeff Sharkey                        createUri = Uri.fromParts("mailto", (String)cookie, null);
2240050ee36398c3ab6e5f1ee0038609aff8cf4f0e9Jeff Sharkey
225e727f18cf2649d07a89aba19ecefed93c9d0b305Evan Millar                    case TOKEN_EMAIL_LOOKUP: {
226e727f18cf2649d07a89aba19ecefed93c9d0b305Evan Millar                        if (cursor != null && cursor.moveToFirst()) {
227e727f18cf2649d07a89aba19ecefed93c9d0b305Evan Millar                            long contactId = cursor.getLong(EMAIL_ID_COLUMN_INDEX);
228e727f18cf2649d07a89aba19ecefed93c9d0b305Evan Millar                            String lookupKey = cursor.getString(EMAIL_LOOKUP_STRING_COLUMN_INDEX);
2290050ee36398c3ab6e5f1ee0038609aff8cf4f0e9Jeff Sharkey                            lookupUri = Contacts.getLookupUri(contactId, lookupKey);
230e727f18cf2649d07a89aba19ecefed93c9d0b305Evan Millar                        }
231e727f18cf2649d07a89aba19ecefed93c9d0b305Evan Millar                    }
232e727f18cf2649d07a89aba19ecefed93c9d0b305Evan Millar                }
233e727f18cf2649d07a89aba19ecefed93c9d0b305Evan Millar            } finally {
234e727f18cf2649d07a89aba19ecefed93c9d0b305Evan Millar                if (cursor != null) {
235e727f18cf2649d07a89aba19ecefed93c9d0b305Evan Millar                    cursor.close();
236e727f18cf2649d07a89aba19ecefed93c9d0b305Evan Millar                }
237e727f18cf2649d07a89aba19ecefed93c9d0b305Evan Millar            }
238e727f18cf2649d07a89aba19ecefed93c9d0b305Evan Millar
2390050ee36398c3ab6e5f1ee0038609aff8cf4f0e9Jeff Sharkey            mContactUri = lookupUri;
2400050ee36398c3ab6e5f1ee0038609aff8cf4f0e9Jeff Sharkey
2410050ee36398c3ab6e5f1ee0038609aff8cf4f0e9Jeff Sharkey            if (trigger && lookupUri != null) {
2420050ee36398c3ab6e5f1ee0038609aff8cf4f0e9Jeff Sharkey                // Found contact, so trigger track
2430050ee36398c3ab6e5f1ee0038609aff8cf4f0e9Jeff Sharkey                trigger(lookupUri);
2440050ee36398c3ab6e5f1ee0038609aff8cf4f0e9Jeff Sharkey            } else if (createUri != null) {
2450050ee36398c3ab6e5f1ee0038609aff8cf4f0e9Jeff Sharkey                // Prompt user to add this person to contacts
2460050ee36398c3ab6e5f1ee0038609aff8cf4f0e9Jeff Sharkey                final Intent intent = new Intent(Intents.SHOW_OR_CREATE_CONTACT, createUri);
2470050ee36398c3ab6e5f1ee0038609aff8cf4f0e9Jeff Sharkey                getContext().startActivity(intent);
248e727f18cf2649d07a89aba19ecefed93c9d0b305Evan Millar            }
249e727f18cf2649d07a89aba19ecefed93c9d0b305Evan Millar        }
250e727f18cf2649d07a89aba19ecefed93c9d0b305Evan Millar    }
251e727f18cf2649d07a89aba19ecefed93c9d0b305Evan Millar}
252