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