137a16acbcb44ecadf1b006c110e750ba9c5c621eThe Android Open Source Project/* 237a16acbcb44ecadf1b006c110e750ba9c5c621eThe Android Open Source Project * Copyright (C) 2009 The Android Open Source Project 337a16acbcb44ecadf1b006c110e750ba9c5c621eThe Android Open Source Project * 437a16acbcb44ecadf1b006c110e750ba9c5c621eThe Android Open Source Project * Licensed under the Apache License, Version 2.0 (the "License"); 537a16acbcb44ecadf1b006c110e750ba9c5c621eThe Android Open Source Project * you may not use this file except in compliance with the License. 637a16acbcb44ecadf1b006c110e750ba9c5c621eThe Android Open Source Project * You may obtain a copy of the License at 737a16acbcb44ecadf1b006c110e750ba9c5c621eThe Android Open Source Project * 837a16acbcb44ecadf1b006c110e750ba9c5c621eThe Android Open Source Project * http://www.apache.org/licenses/LICENSE-2.0 937a16acbcb44ecadf1b006c110e750ba9c5c621eThe Android Open Source Project * 1037a16acbcb44ecadf1b006c110e750ba9c5c621eThe Android Open Source Project * Unless required by applicable law or agreed to in writing, software 1137a16acbcb44ecadf1b006c110e750ba9c5c621eThe Android Open Source Project * distributed under the License is distributed on an "AS IS" BASIS, 1237a16acbcb44ecadf1b006c110e750ba9c5c621eThe Android Open Source Project * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 1337a16acbcb44ecadf1b006c110e750ba9c5c621eThe Android Open Source Project * See the License for the specific language governing permissions and 1437a16acbcb44ecadf1b006c110e750ba9c5c621eThe Android Open Source Project * limitations under the License. 1537a16acbcb44ecadf1b006c110e750ba9c5c621eThe Android Open Source Project */ 1637a16acbcb44ecadf1b006c110e750ba9c5c621eThe Android Open Source Project 1772af89f9e497bb8ef54fe3deeec7e8477d192242Daniel Lehmannpackage com.android.contacts.activities; 1837a16acbcb44ecadf1b006c110e750ba9c5c621eThe Android Open Source Project 1937a16acbcb44ecadf1b006c110e750ba9c5c621eThe Android Open Source Projectimport android.app.Activity; 2037a16acbcb44ecadf1b006c110e750ba9c5c621eThe Android Open Source Projectimport android.app.AlertDialog; 21fdaff6483a518c179f9a1af5d91dbdd88dc926b4Megha Joshiimport android.app.Dialog; 2237a16acbcb44ecadf1b006c110e750ba9c5c621eThe Android Open Source Projectimport android.content.ComponentName; 2337a16acbcb44ecadf1b006c110e750ba9c5c621eThe Android Open Source Projectimport android.content.DialogInterface; 2437a16acbcb44ecadf1b006c110e750ba9c5c621eThe Android Open Source Projectimport android.content.Intent; 2537a16acbcb44ecadf1b006c110e750ba9c5c621eThe Android Open Source Projectimport android.database.Cursor; 2637a16acbcb44ecadf1b006c110e750ba9c5c621eThe Android Open Source Projectimport android.net.Uri; 2737a16acbcb44ecadf1b006c110e750ba9c5c621eThe Android Open Source Projectimport android.os.Bundle; 28afeae64e9a9bb39c918202a5775c4904e2f0d92eDaniel Lehmannimport android.provider.ContactsContract.CommonDataKinds.Email; 29e1cd6791d62fc1328b97034b0e07e592d94af175Dmitri Plotnikovimport android.provider.ContactsContract.Contacts; 303f0b7b87cd41b5a9cd631b6fcf29ea5025905e18Jeff Sharkeyimport android.provider.ContactsContract.Intents; 313926127faa6b3a4fabc90d5d6ba42b96a5f1d8e5Jeff Sharkeyimport android.provider.ContactsContract.PhoneLookup; 323f0b7b87cd41b5a9cd631b6fcf29ea5025905e18Jeff Sharkeyimport android.provider.ContactsContract.RawContacts; 3373714ff71b3955cca3d9f5c6424c333ae063da61Jeff Sharkeyimport android.util.Log; 3437a16acbcb44ecadf1b006c110e750ba9c5c621eThe Android Open Source Project 35e0b2f1e2d01d1ac52ba207dc7ce76971d853298eChiao Chengimport com.android.contacts.ContactsActivity; 36e0b2f1e2d01d1ac52ba207dc7ce76971d853298eChiao Chengimport com.android.contacts.R; 37e0b2f1e2d01d1ac52ba207dc7ce76971d853298eChiao Chengimport com.android.contacts.util.Constants; 38e0b2f1e2d01d1ac52ba207dc7ce76971d853298eChiao Chengimport com.android.contacts.util.NotifyingAsyncQueryHandler; 39e0b2f1e2d01d1ac52ba207dc7ce76971d853298eChiao Cheng 4037a16acbcb44ecadf1b006c110e750ba9c5c621eThe Android Open Source Project/** 4137a16acbcb44ecadf1b006c110e750ba9c5c621eThe Android Open Source Project * Handle several edge cases around showing or possibly creating contacts in 4237a16acbcb44ecadf1b006c110e750ba9c5c621eThe Android Open Source Project * connected with a specific E-mail address or phone number. Will search based 4337a16acbcb44ecadf1b006c110e750ba9c5c621eThe Android Open Source Project * on incoming {@link Intent#getData()} as described by 4473714ff71b3955cca3d9f5c6424c333ae063da61Jeff Sharkey * {@link Intents#SHOW_OR_CREATE_CONTACT}. 4537a16acbcb44ecadf1b006c110e750ba9c5c621eThe Android Open Source Project * <ul> 4637a16acbcb44ecadf1b006c110e750ba9c5c621eThe Android Open Source Project * <li>If no matching contacts found, will prompt user with dialog to add to a 4737a16acbcb44ecadf1b006c110e750ba9c5c621eThe Android Open Source Project * contact, then will use {@link Intent#ACTION_INSERT_OR_EDIT} to let create new 4837a16acbcb44ecadf1b006c110e750ba9c5c621eThe Android Open Source Project * contact or edit new data into an existing one. 49e897162ceb2cfac45783f96d87ea500baf855c17Jeff Sharkey * <li>If one matching contact found, directly show {@link Intent#ACTION_VIEW} 50e897162ceb2cfac45783f96d87ea500baf855c17Jeff Sharkey * that specific contact. 5137a16acbcb44ecadf1b006c110e750ba9c5c621eThe Android Open Source Project * <li>If more than one matching found, show list of matching contacts using 5237a16acbcb44ecadf1b006c110e750ba9c5c621eThe Android Open Source Project * {@link Intent#ACTION_SEARCH}. 5337a16acbcb44ecadf1b006c110e750ba9c5c621eThe Android Open Source Project * </ul> 5437a16acbcb44ecadf1b006c110e750ba9c5c621eThe Android Open Source Project */ 556f667b55687bf9193323802e8f3234f0ab254388Dmitri Plotnikovpublic final class ShowOrCreateActivity extends ContactsActivity 566f667b55687bf9193323802e8f3234f0ab254388Dmitri Plotnikov implements NotifyingAsyncQueryHandler.AsyncQueryListener { 5737a16acbcb44ecadf1b006c110e750ba9c5c621eThe Android Open Source Project static final String TAG = "ShowOrCreateActivity"; 5837a16acbcb44ecadf1b006c110e750ba9c5c621eThe Android Open Source Project static final boolean LOGD = false; 5937a16acbcb44ecadf1b006c110e750ba9c5c621eThe Android Open Source Project 6037a16acbcb44ecadf1b006c110e750ba9c5c621eThe Android Open Source Project static final String[] PHONES_PROJECTION = new String[] { 613926127faa6b3a4fabc90d5d6ba42b96a5f1d8e5Jeff Sharkey PhoneLookup._ID, 627d402246e9ac26e05eeb25528bc74083412d1a5aDmitri Plotnikov PhoneLookup.LOOKUP_KEY, 6337a16acbcb44ecadf1b006c110e750ba9c5c621eThe Android Open Source Project }; 6437a16acbcb44ecadf1b006c110e750ba9c5c621eThe Android Open Source Project 653f17759408b4cec77ab43ee76cc75805577ca34eJeff Sharkey static final String[] CONTACTS_PROJECTION = new String[] { 667d402246e9ac26e05eeb25528bc74083412d1a5aDmitri Plotnikov Email.CONTACT_ID, 677d402246e9ac26e05eeb25528bc74083412d1a5aDmitri Plotnikov Email.LOOKUP_KEY, 6837a16acbcb44ecadf1b006c110e750ba9c5c621eThe Android Open Source Project }; 69549aa16d217741682827ba5c51da3bfc7c2679c0Jeff Sharkey 70e897162ceb2cfac45783f96d87ea500baf855c17Jeff Sharkey static final int CONTACT_ID_INDEX = 0; 717d402246e9ac26e05eeb25528bc74083412d1a5aDmitri Plotnikov static final int LOOKUP_KEY_INDEX = 1; 7237a16acbcb44ecadf1b006c110e750ba9c5c621eThe Android Open Source Project 73fdaff6483a518c179f9a1af5d91dbdd88dc926b4Megha Joshi static final int CREATE_CONTACT_DIALOG = 1; 74fdaff6483a518c179f9a1af5d91dbdd88dc926b4Megha Joshi 7537a16acbcb44ecadf1b006c110e750ba9c5c621eThe Android Open Source Project static final int QUERY_TOKEN = 42; 76549aa16d217741682827ba5c51da3bfc7c2679c0Jeff Sharkey 773f17759408b4cec77ab43ee76cc75805577ca34eJeff Sharkey private NotifyingAsyncQueryHandler mQueryHandler; 783f17759408b4cec77ab43ee76cc75805577ca34eJeff Sharkey 793f17759408b4cec77ab43ee76cc75805577ca34eJeff Sharkey private Bundle mCreateExtras; 803f17759408b4cec77ab43ee76cc75805577ca34eJeff Sharkey private String mCreateDescrip; 813f17759408b4cec77ab43ee76cc75805577ca34eJeff Sharkey private boolean mCreateForce; 823f17759408b4cec77ab43ee76cc75805577ca34eJeff Sharkey 8337a16acbcb44ecadf1b006c110e750ba9c5c621eThe Android Open Source Project @Override 8437a16acbcb44ecadf1b006c110e750ba9c5c621eThe Android Open Source Project protected void onCreate(Bundle icicle) { 8537a16acbcb44ecadf1b006c110e750ba9c5c621eThe Android Open Source Project super.onCreate(icicle); 863f17759408b4cec77ab43ee76cc75805577ca34eJeff Sharkey 8737a16acbcb44ecadf1b006c110e750ba9c5c621eThe Android Open Source Project // Create handler if doesn't exist, otherwise cancel any running 8837a16acbcb44ecadf1b006c110e750ba9c5c621eThe Android Open Source Project if (mQueryHandler == null) { 893f17759408b4cec77ab43ee76cc75805577ca34eJeff Sharkey mQueryHandler = new NotifyingAsyncQueryHandler(this, this); 9037a16acbcb44ecadf1b006c110e750ba9c5c621eThe Android Open Source Project } else { 9137a16acbcb44ecadf1b006c110e750ba9c5c621eThe Android Open Source Project mQueryHandler.cancelOperation(QUERY_TOKEN); 9237a16acbcb44ecadf1b006c110e750ba9c5c621eThe Android Open Source Project } 9337a16acbcb44ecadf1b006c110e750ba9c5c621eThe Android Open Source Project 9437a16acbcb44ecadf1b006c110e750ba9c5c621eThe Android Open Source Project final Intent intent = getIntent(); 9537a16acbcb44ecadf1b006c110e750ba9c5c621eThe Android Open Source Project final Uri data = intent.getData(); 963f17759408b4cec77ab43ee76cc75805577ca34eJeff Sharkey 9737a16acbcb44ecadf1b006c110e750ba9c5c621eThe Android Open Source Project // Unpack scheme and target data from intent 9837a16acbcb44ecadf1b006c110e750ba9c5c621eThe Android Open Source Project String scheme = null; 9937a16acbcb44ecadf1b006c110e750ba9c5c621eThe Android Open Source Project String ssp = null; 10037a16acbcb44ecadf1b006c110e750ba9c5c621eThe Android Open Source Project if (data != null) { 10137a16acbcb44ecadf1b006c110e750ba9c5c621eThe Android Open Source Project scheme = data.getScheme(); 10237a16acbcb44ecadf1b006c110e750ba9c5c621eThe Android Open Source Project ssp = data.getSchemeSpecificPart(); 10337a16acbcb44ecadf1b006c110e750ba9c5c621eThe Android Open Source Project } 1043f17759408b4cec77ab43ee76cc75805577ca34eJeff Sharkey 10537a16acbcb44ecadf1b006c110e750ba9c5c621eThe Android Open Source Project // Build set of extras for possible use when creating contact 1063f17759408b4cec77ab43ee76cc75805577ca34eJeff Sharkey mCreateExtras = new Bundle(); 10737a16acbcb44ecadf1b006c110e750ba9c5c621eThe Android Open Source Project Bundle originalExtras = intent.getExtras(); 10837a16acbcb44ecadf1b006c110e750ba9c5c621eThe Android Open Source Project if (originalExtras != null) { 1093f17759408b4cec77ab43ee76cc75805577ca34eJeff Sharkey mCreateExtras.putAll(originalExtras); 11037a16acbcb44ecadf1b006c110e750ba9c5c621eThe Android Open Source Project } 1113f17759408b4cec77ab43ee76cc75805577ca34eJeff Sharkey 11237a16acbcb44ecadf1b006c110e750ba9c5c621eThe Android Open Source Project // Read possible extra with specific title 113549aa16d217741682827ba5c51da3bfc7c2679c0Jeff Sharkey mCreateDescrip = intent.getStringExtra(Intents.EXTRA_CREATE_DESCRIPTION); 1143f17759408b4cec77ab43ee76cc75805577ca34eJeff Sharkey if (mCreateDescrip == null) { 1153f17759408b4cec77ab43ee76cc75805577ca34eJeff Sharkey mCreateDescrip = ssp; 11637a16acbcb44ecadf1b006c110e750ba9c5c621eThe Android Open Source Project } 1173f17759408b4cec77ab43ee76cc75805577ca34eJeff Sharkey 11837a16acbcb44ecadf1b006c110e750ba9c5c621eThe Android Open Source Project // Allow caller to bypass dialog prompt 1193f17759408b4cec77ab43ee76cc75805577ca34eJeff Sharkey mCreateForce = intent.getBooleanExtra(Intents.EXTRA_FORCE_CREATE, false); 1203f17759408b4cec77ab43ee76cc75805577ca34eJeff Sharkey 12137a16acbcb44ecadf1b006c110e750ba9c5c621eThe Android Open Source Project // Handle specific query request 12249d17b3e7692ae9442c342db236fa93d4a837c28Jeff Sharkey if (Constants.SCHEME_MAILTO.equals(scheme)) { 1233f17759408b4cec77ab43ee76cc75805577ca34eJeff Sharkey mCreateExtras.putString(Intents.Insert.EMAIL, ssp); 1243f17759408b4cec77ab43ee76cc75805577ca34eJeff Sharkey 125e897162ceb2cfac45783f96d87ea500baf855c17Jeff Sharkey Uri uri = Uri.withAppendedPath(Email.CONTENT_FILTER_URI, Uri.encode(ssp)); 1263926127faa6b3a4fabc90d5d6ba42b96a5f1d8e5Jeff Sharkey mQueryHandler.startQuery(QUERY_TOKEN, null, uri, CONTACTS_PROJECTION, null, null, null); 1273f17759408b4cec77ab43ee76cc75805577ca34eJeff Sharkey 12849d17b3e7692ae9442c342db236fa93d4a837c28Jeff Sharkey } else if (Constants.SCHEME_TEL.equals(scheme)) { 1293f17759408b4cec77ab43ee76cc75805577ca34eJeff Sharkey mCreateExtras.putString(Intents.Insert.PHONE, ssp); 1303926127faa6b3a4fabc90d5d6ba42b96a5f1d8e5Jeff Sharkey 1313926127faa6b3a4fabc90d5d6ba42b96a5f1d8e5Jeff Sharkey Uri uri = Uri.withAppendedPath(PhoneLookup.CONTENT_FILTER_URI, ssp); 1323926127faa6b3a4fabc90d5d6ba42b96a5f1d8e5Jeff Sharkey mQueryHandler.startQuery(QUERY_TOKEN, null, uri, PHONES_PROJECTION, null, null, null); 1333f17759408b4cec77ab43ee76cc75805577ca34eJeff Sharkey 13437a16acbcb44ecadf1b006c110e750ba9c5c621eThe Android Open Source Project } else { 135e897162ceb2cfac45783f96d87ea500baf855c17Jeff Sharkey Log.w(TAG, "Invalid intent:" + getIntent()); 136e897162ceb2cfac45783f96d87ea500baf855c17Jeff Sharkey finish(); 13737a16acbcb44ecadf1b006c110e750ba9c5c621eThe Android Open Source Project } 13837a16acbcb44ecadf1b006c110e750ba9c5c621eThe Android Open Source Project } 1393f17759408b4cec77ab43ee76cc75805577ca34eJeff Sharkey 14037a16acbcb44ecadf1b006c110e750ba9c5c621eThe Android Open Source Project @Override 14137a16acbcb44ecadf1b006c110e750ba9c5c621eThe Android Open Source Project protected void onStop() { 14237a16acbcb44ecadf1b006c110e750ba9c5c621eThe Android Open Source Project super.onStop(); 14337a16acbcb44ecadf1b006c110e750ba9c5c621eThe Android Open Source Project if (mQueryHandler != null) { 14437a16acbcb44ecadf1b006c110e750ba9c5c621eThe Android Open Source Project mQueryHandler.cancelOperation(QUERY_TOKEN); 14537a16acbcb44ecadf1b006c110e750ba9c5c621eThe Android Open Source Project } 1463f17759408b4cec77ab43ee76cc75805577ca34eJeff Sharkey } 1473f17759408b4cec77ab43ee76cc75805577ca34eJeff Sharkey 1483f0b7b87cd41b5a9cd631b6fcf29ea5025905e18Jeff Sharkey /** {@inheritDoc} */ 1493f17759408b4cec77ab43ee76cc75805577ca34eJeff Sharkey public void onQueryComplete(int token, Object cookie, Cursor cursor) { 1503f17759408b4cec77ab43ee76cc75805577ca34eJeff Sharkey if (cursor == null) { 1512409705fe0376549b276e27dd6582ada30d861b9Jeff Sharkey // Bail when problem running query in background 1522409705fe0376549b276e27dd6582ada30d861b9Jeff Sharkey finish(); 1533f17759408b4cec77ab43ee76cc75805577ca34eJeff Sharkey return; 1543f17759408b4cec77ab43ee76cc75805577ca34eJeff Sharkey } 1553f17759408b4cec77ab43ee76cc75805577ca34eJeff Sharkey 1563f17759408b4cec77ab43ee76cc75805577ca34eJeff Sharkey // Count contacts found by query 1573f17759408b4cec77ab43ee76cc75805577ca34eJeff Sharkey int count = 0; 158e897162ceb2cfac45783f96d87ea500baf855c17Jeff Sharkey long contactId = -1; 1597d402246e9ac26e05eeb25528bc74083412d1a5aDmitri Plotnikov String lookupKey = null; 1603f17759408b4cec77ab43ee76cc75805577ca34eJeff Sharkey try { 1613f17759408b4cec77ab43ee76cc75805577ca34eJeff Sharkey count = cursor.getCount(); 1623f17759408b4cec77ab43ee76cc75805577ca34eJeff Sharkey if (count == 1 && cursor.moveToFirst()) { 1633f17759408b4cec77ab43ee76cc75805577ca34eJeff Sharkey // Try reading ID if only one contact returned 164e897162ceb2cfac45783f96d87ea500baf855c17Jeff Sharkey contactId = cursor.getLong(CONTACT_ID_INDEX); 1657d402246e9ac26e05eeb25528bc74083412d1a5aDmitri Plotnikov lookupKey = cursor.getString(LOOKUP_KEY_INDEX); 1663f17759408b4cec77ab43ee76cc75805577ca34eJeff Sharkey } 1673f17759408b4cec77ab43ee76cc75805577ca34eJeff Sharkey } finally { 1683f17759408b4cec77ab43ee76cc75805577ca34eJeff Sharkey cursor.close(); 1693f17759408b4cec77ab43ee76cc75805577ca34eJeff Sharkey } 1703f17759408b4cec77ab43ee76cc75805577ca34eJeff Sharkey 171e897162ceb2cfac45783f96d87ea500baf855c17Jeff Sharkey if (count == 1 && contactId != -1) { 172e897162ceb2cfac45783f96d87ea500baf855c17Jeff Sharkey // If we only found one item, jump right to viewing it 1737d402246e9ac26e05eeb25528bc74083412d1a5aDmitri Plotnikov final Uri contactUri = Contacts.getLookupUri(contactId, lookupKey); 174e897162ceb2cfac45783f96d87ea500baf855c17Jeff Sharkey final Intent viewIntent = new Intent(Intent.ACTION_VIEW, contactUri); 175e897162ceb2cfac45783f96d87ea500baf855c17Jeff Sharkey startActivity(viewIntent); 176e897162ceb2cfac45783f96d87ea500baf855c17Jeff Sharkey finish(); 1773f17759408b4cec77ab43ee76cc75805577ca34eJeff Sharkey 1783f17759408b4cec77ab43ee76cc75805577ca34eJeff Sharkey } else if (count > 1) { 1793f17759408b4cec77ab43ee76cc75805577ca34eJeff Sharkey // If more than one, show pick list 1803f17759408b4cec77ab43ee76cc75805577ca34eJeff Sharkey Intent listIntent = new Intent(Intent.ACTION_SEARCH); 1819856fcee477d04f51bdbcbfdf632876c6b8a1173Katherine Kuan listIntent.setComponent(new ComponentName(this, PeopleActivity.class)); 1823f17759408b4cec77ab43ee76cc75805577ca34eJeff Sharkey listIntent.putExtras(mCreateExtras); 1833f17759408b4cec77ab43ee76cc75805577ca34eJeff Sharkey startActivity(listIntent); 1843f17759408b4cec77ab43ee76cc75805577ca34eJeff Sharkey finish(); 1853f17759408b4cec77ab43ee76cc75805577ca34eJeff Sharkey 1863f17759408b4cec77ab43ee76cc75805577ca34eJeff Sharkey } else { 1873f17759408b4cec77ab43ee76cc75805577ca34eJeff Sharkey // No matching contacts found 1883f17759408b4cec77ab43ee76cc75805577ca34eJeff Sharkey if (mCreateForce) { 1893f17759408b4cec77ab43ee76cc75805577ca34eJeff Sharkey // Forced to create new contact 19039466593586d2d15fc2e9fa8f0d1cd39d35ea3d9Dmitri Plotnikov Intent createIntent = new Intent(Intent.ACTION_INSERT, RawContacts.CONTENT_URI); 1913f17759408b4cec77ab43ee76cc75805577ca34eJeff Sharkey createIntent.putExtras(mCreateExtras); 19239466593586d2d15fc2e9fa8f0d1cd39d35ea3d9Dmitri Plotnikov createIntent.setType(RawContacts.CONTENT_TYPE); 1933f17759408b4cec77ab43ee76cc75805577ca34eJeff Sharkey 1943f17759408b4cec77ab43ee76cc75805577ca34eJeff Sharkey startActivity(createIntent); 1953f17759408b4cec77ab43ee76cc75805577ca34eJeff Sharkey finish(); 1963f17759408b4cec77ab43ee76cc75805577ca34eJeff Sharkey 1973f17759408b4cec77ab43ee76cc75805577ca34eJeff Sharkey } else { 1987d402246e9ac26e05eeb25528bc74083412d1a5aDmitri Plotnikov showDialog(CREATE_CONTACT_DIALOG); 1997d402246e9ac26e05eeb25528bc74083412d1a5aDmitri Plotnikov } 200fdaff6483a518c179f9a1af5d91dbdd88dc926b4Megha Joshi } 201fdaff6483a518c179f9a1af5d91dbdd88dc926b4Megha Joshi } 202fdaff6483a518c179f9a1af5d91dbdd88dc926b4Megha Joshi 203fdaff6483a518c179f9a1af5d91dbdd88dc926b4Megha Joshi @Override 204fdaff6483a518c179f9a1af5d91dbdd88dc926b4Megha Joshi protected Dialog onCreateDialog(int id) { 205fdaff6483a518c179f9a1af5d91dbdd88dc926b4Megha Joshi switch(id) { 206fdaff6483a518c179f9a1af5d91dbdd88dc926b4Megha Joshi case CREATE_CONTACT_DIALOG: 2073f17759408b4cec77ab43ee76cc75805577ca34eJeff Sharkey // Prompt user to insert or edit contact 208fdaff6483a518c179f9a1af5d91dbdd88dc926b4Megha Joshi final Intent createIntent = new Intent(Intent.ACTION_INSERT_OR_EDIT); 2093f17759408b4cec77ab43ee76cc75805577ca34eJeff Sharkey createIntent.putExtras(mCreateExtras); 21039466593586d2d15fc2e9fa8f0d1cd39d35ea3d9Dmitri Plotnikov createIntent.setType(RawContacts.CONTENT_ITEM_TYPE); 2113f17759408b4cec77ab43ee76cc75805577ca34eJeff Sharkey 212fdaff6483a518c179f9a1af5d91dbdd88dc926b4Megha Joshi final CharSequence message = getResources().getString( 2133f17759408b4cec77ab43ee76cc75805577ca34eJeff Sharkey R.string.add_contact_dlg_message_fmt, mCreateDescrip); 2143f17759408b4cec77ab43ee76cc75805577ca34eJeff Sharkey 2155556d951757448b76118a479c6b3fe0a4c4ce2f3Dmitri Plotnikov return new AlertDialog.Builder(this, AlertDialog.THEME_HOLO_LIGHT) 2163f17759408b4cec77ab43ee76cc75805577ca34eJeff Sharkey .setMessage(message) 2173f17759408b4cec77ab43ee76cc75805577ca34eJeff Sharkey .setPositiveButton(android.R.string.ok, 2183f17759408b4cec77ab43ee76cc75805577ca34eJeff Sharkey new IntentClickListener(this, createIntent)) 2193f17759408b4cec77ab43ee76cc75805577ca34eJeff Sharkey .setNegativeButton(android.R.string.cancel, 2203f17759408b4cec77ab43ee76cc75805577ca34eJeff Sharkey new IntentClickListener(this, null)) 2213b10fd07823bf31dc77017ec7fc371baf7c2ae6eMakoto Onuki .setOnCancelListener(new DialogInterface.OnCancelListener() { 2223b10fd07823bf31dc77017ec7fc371baf7c2ae6eMakoto Onuki @Override 2233b10fd07823bf31dc77017ec7fc371baf7c2ae6eMakoto Onuki public void onCancel(DialogInterface dialog) { 2243b10fd07823bf31dc77017ec7fc371baf7c2ae6eMakoto Onuki finish(); // Close the activity. 2253b10fd07823bf31dc77017ec7fc371baf7c2ae6eMakoto Onuki }}) 226fdaff6483a518c179f9a1af5d91dbdd88dc926b4Megha Joshi .create(); 2273f17759408b4cec77ab43ee76cc75805577ca34eJeff Sharkey } 228fdaff6483a518c179f9a1af5d91dbdd88dc926b4Megha Joshi return super.onCreateDialog(id); 2293f17759408b4cec77ab43ee76cc75805577ca34eJeff Sharkey } 2303f17759408b4cec77ab43ee76cc75805577ca34eJeff Sharkey 23137a16acbcb44ecadf1b006c110e750ba9c5c621eThe Android Open Source Project /** 23237a16acbcb44ecadf1b006c110e750ba9c5c621eThe Android Open Source Project * Listener for {@link DialogInterface} that launches a given {@link Intent} 23337a16acbcb44ecadf1b006c110e750ba9c5c621eThe Android Open Source Project * when clicked. When clicked, this also closes the parent using 23437a16acbcb44ecadf1b006c110e750ba9c5c621eThe Android Open Source Project * {@link Activity#finish()}. 23537a16acbcb44ecadf1b006c110e750ba9c5c621eThe Android Open Source Project */ 23637a16acbcb44ecadf1b006c110e750ba9c5c621eThe Android Open Source Project private static class IntentClickListener implements DialogInterface.OnClickListener { 23737a16acbcb44ecadf1b006c110e750ba9c5c621eThe Android Open Source Project private Activity mParent; 23837a16acbcb44ecadf1b006c110e750ba9c5c621eThe Android Open Source Project private Intent mIntent; 23937a16acbcb44ecadf1b006c110e750ba9c5c621eThe Android Open Source Project 24037a16acbcb44ecadf1b006c110e750ba9c5c621eThe Android Open Source Project /** 24137a16acbcb44ecadf1b006c110e750ba9c5c621eThe Android Open Source Project * @param parent {@link Activity} to use for launching target. 24237a16acbcb44ecadf1b006c110e750ba9c5c621eThe Android Open Source Project * @param intent Target {@link Intent} to launch when clicked. 24337a16acbcb44ecadf1b006c110e750ba9c5c621eThe Android Open Source Project */ 24437a16acbcb44ecadf1b006c110e750ba9c5c621eThe Android Open Source Project public IntentClickListener(Activity parent, Intent intent) { 24537a16acbcb44ecadf1b006c110e750ba9c5c621eThe Android Open Source Project mParent = parent; 24637a16acbcb44ecadf1b006c110e750ba9c5c621eThe Android Open Source Project mIntent = intent; 24737a16acbcb44ecadf1b006c110e750ba9c5c621eThe Android Open Source Project } 24837a16acbcb44ecadf1b006c110e750ba9c5c621eThe Android Open Source Project 24937a16acbcb44ecadf1b006c110e750ba9c5c621eThe Android Open Source Project public void onClick(DialogInterface dialog, int which) { 25037a16acbcb44ecadf1b006c110e750ba9c5c621eThe Android Open Source Project if (mIntent != null) { 25137a16acbcb44ecadf1b006c110e750ba9c5c621eThe Android Open Source Project mParent.startActivity(mIntent); 25237a16acbcb44ecadf1b006c110e750ba9c5c621eThe Android Open Source Project } 25337a16acbcb44ecadf1b006c110e750ba9c5c621eThe Android Open Source Project mParent.finish(); 25437a16acbcb44ecadf1b006c110e750ba9c5c621eThe Android Open Source Project } 25537a16acbcb44ecadf1b006c110e750ba9c5c621eThe Android Open Source Project } 25637a16acbcb44ecadf1b006c110e750ba9c5c621eThe Android Open Source Project} 257