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