AllIntentsActivity.java revision 095e2fae37db361158e89ac0faa0bdfdd9f30b8b
1/*
2 * Copyright (C) 2010 The Android Open Source Project
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 *      http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
16
17package com.android.contacts.tests.allintents;
18
19import android.accounts.Account;
20import android.app.ListActivity;
21import android.app.SearchManager;
22import android.content.ComponentName;
23import android.content.ContentUris;
24import android.content.ContentValues;
25import android.content.Intent;
26import android.database.Cursor;
27import android.net.Uri;
28import android.os.Bundle;
29import android.provider.CallLog.Calls;
30import android.provider.Contacts.ContactMethods;
31import android.provider.Contacts.People;
32import android.provider.Contacts.Phones;
33import android.provider.ContactsContract.CommonDataKinds.Email;
34import android.provider.ContactsContract.CommonDataKinds.Organization;
35import android.provider.ContactsContract.CommonDataKinds.Phone;
36import android.provider.ContactsContract.CommonDataKinds.StructuredPostal;
37import android.provider.ContactsContract.Contacts;
38import android.provider.ContactsContract.Data;
39import android.provider.ContactsContract.Intents;
40import android.provider.ContactsContract.Intents.Insert;
41import android.provider.ContactsContract.Intents.UI;
42import android.provider.ContactsContract.RawContacts;
43import android.view.View;
44import android.widget.ArrayAdapter;
45import android.widget.ListView;
46import android.widget.Toast;
47
48import com.android.contacts.tests.R;
49import com.google.common.collect.Lists;
50
51/**
52 * An activity that provides access to various modes of the contacts application.
53 * Useful for manual and scripted tests.
54 * <p>
55 * Note: this class cannot depend (directly on indirectly) on anything outside the test package.
56 */
57@SuppressWarnings("deprecation")
58public class AllIntentsActivity extends ListActivity
59        implements SelectAccountDialogFragment.Listener {
60
61    /** The name of the package of the contacts application. */
62    private static final String ANDROID_CONTACTS_PACKAGE = "com.android.contacts";
63
64    private static final String CONTACT_LIST_ACTIVITY_CLASS_NAME =
65            "com.android.contacts.activities.PeopleActivity";
66
67    public enum ContactsIntent {
68        LIST_DEFAULT,
69        LIST_ALL_CONTACTS_ACTION,
70        LIST_CONTACTS_WITH_PHONES_ACTION,
71        LIST_STARRED_ACTION,
72        LIST_FREQUENT_ACTION,
73        LIST_STREQUENT_ACTION,
74        LIST_GROUP_ACTION,
75        VIEW_CONTACT_WITHOUT_ID,
76        ACTION_PICK_CONTACT,
77        ACTION_PICK_CONTACT_LEGACY,
78        ACTION_PICK_PHONE,
79        ACTION_PICK_PHONE_LEGACY,
80        ACTION_PICK_POSTAL,
81        ACTION_PICK_POSTAL_LEGACY,
82        ACTION_PICK_EMAIL,
83        ACTION_CREATE_SHORTCUT_CONTACT,
84        ACTION_CREATE_SHORTCUT_DIAL,
85        ACTION_CREATE_SHORTCUT_MESSAGE,
86        ACTION_GET_CONTENT_CONTACT,
87        ACTION_GET_CONTENT_CONTACT_LEGACY,
88        ACTION_GET_CONTENT_PHONE,
89        ACTION_GET_CONTENT_PHONE_LEGACY,
90        ACTION_GET_CONTENT_POSTAL,
91        ACTION_GET_CONTENT_POSTAL_LEGACY,
92        ACTION_INSERT_OR_EDIT,
93        ACTION_INSERT_OR_EDIT_PHONE_NUMBER,
94        ACTION_INSERT_OR_EDIT_EMAIL_ADDRESS,
95        ACTION_SEARCH_CALL,
96        ACTION_SEARCH_CONTACT,
97        ACTION_SEARCH_EMAIL,
98        ACTION_SEARCH_PHONE,
99        SEARCH_SUGGESTION_CLICKED_CONTACT,
100        JOIN_CONTACT,
101        EDIT_CONTACT,
102        EDIT_CONTACT_LOOKUP,
103        EDIT_CONTACT_LOOKUP_ID,
104        EDIT_RAW_CONTACT,
105        EDIT_LEGACY,
106        EDIT_NEW_CONTACT,
107        EDIT_NEW_CONTACT_WITH_DATA,
108        EDIT_NEW_CONTACT_FOR_ACCOUNT,
109        EDIT_NEW_CONTACT_FOR_ACCOUNT_WITH_DATA,
110        EDIT_NEW_RAW_CONTACT,
111        EDIT_NEW_LEGACY,
112        VIEW_CONTACT,
113        VIEW_CONTACT_LOOKUP,
114        VIEW_CONTACT_LOOKUP_ID,
115        VIEW_RAW_CONTACT,
116        VIEW_LEGACY,
117        DIAL,
118        DIAL_phone,
119        DIAL_person,
120        DIAL_voicemail,
121        CALL_BUTTON,
122        DIAL_tel,
123        VIEW_tel,
124        VIEW_calllog,
125        VIEW_calllog_entry,
126        LEGACY_CALL_DETAILS_ACTIVITY,
127        LEGACY_CALL_LOG_ACTIVITY;
128
129        public static ContactsIntent get(int ordinal) {
130            return values()[ordinal];
131        }
132    }
133
134    @Override
135    protected void onCreate(Bundle savedInstanceState) {
136        super.onCreate(savedInstanceState);
137        setListAdapter(new ArrayAdapter<String>(this, R.layout.intent_list_item,
138                getResources().getStringArray(R.array.allIntents)));
139    }
140
141    @Override
142    protected void onListItemClick(ListView l, View v, int position, long id) {
143        super.onListItemClick(l, v, position, id);
144
145        switch (ContactsIntent.get(position)) {
146            case LIST_DEFAULT: {
147                startContactListActivity(
148                        new Intent(UI.LIST_DEFAULT, Contacts.CONTENT_URI));
149                break;
150            }
151            case LIST_ALL_CONTACTS_ACTION: {
152                startContactListActivity(
153                        new Intent(UI.LIST_ALL_CONTACTS_ACTION, Contacts.CONTENT_URI));
154                break;
155            }
156            case LIST_CONTACTS_WITH_PHONES_ACTION: {
157                startContactListActivity(
158                        new Intent(UI.LIST_CONTACTS_WITH_PHONES_ACTION, Contacts.CONTENT_URI));
159                break;
160            }
161            case LIST_STARRED_ACTION: {
162                startContactListActivity(
163                        new Intent(UI.LIST_STARRED_ACTION, Contacts.CONTENT_URI));
164                break;
165            }
166            case LIST_FREQUENT_ACTION: {
167                startContactListActivity(
168                        new Intent(UI.LIST_FREQUENT_ACTION, Contacts.CONTENT_URI));
169                break;
170            }
171            case LIST_STREQUENT_ACTION: {
172                startContactListActivity(
173                        new Intent(UI.LIST_STREQUENT_ACTION, Contacts.CONTENT_URI));
174                break;
175            }
176            case LIST_GROUP_ACTION: {
177                startContactListActivity(
178                        new Intent(UI.LIST_GROUP_ACTION, Contacts.CONTENT_URI));
179                break;
180            }
181            case ACTION_PICK_CONTACT: {
182                startContactSelectionActivityForResult(
183                        new Intent(Intent.ACTION_PICK, Contacts.CONTENT_URI));
184                break;
185            }
186            case ACTION_PICK_CONTACT_LEGACY: {
187                startContactSelectionActivityForResult(
188                        new Intent(Intent.ACTION_PICK, People.CONTENT_URI));
189                break;
190            }
191            case ACTION_PICK_PHONE: {
192                startContactSelectionActivityForResult(
193                        new Intent(Intent.ACTION_PICK, Phone.CONTENT_URI));
194                break;
195            }
196            case ACTION_PICK_PHONE_LEGACY: {
197                startContactSelectionActivityForResult(
198                        new Intent(Intent.ACTION_PICK, Phones.CONTENT_URI));
199                break;
200            }
201            case ACTION_PICK_POSTAL: {
202                startContactSelectionActivityForResult(
203                        new Intent(Intent.ACTION_PICK, StructuredPostal.CONTENT_URI));
204                break;
205            }
206            case ACTION_PICK_POSTAL_LEGACY: {
207                Intent intent = new Intent(Intent.ACTION_PICK);
208                intent.setType(ContactMethods.CONTENT_POSTAL_TYPE);
209                startContactSelectionActivityForResult(intent);
210                break;
211            }
212            case ACTION_PICK_EMAIL: {
213                startContactSelectionActivityForResult(
214                        new Intent(Intent.ACTION_PICK, Email.CONTENT_URI));
215                break;
216            }
217            case ACTION_CREATE_SHORTCUT_CONTACT: {
218                Intent intent = new Intent(Intent.ACTION_CREATE_SHORTCUT);
219                startContactSelectionActivityForResult(intent);
220                break;
221            }
222            case ACTION_CREATE_SHORTCUT_DIAL: {
223                Intent intent = new Intent(Intent.ACTION_CREATE_SHORTCUT);
224                bindIntentToClass(intent, "alias.DialShortcut");
225                startActivityForResult(intent, 0);
226                break;
227            }
228            case ACTION_CREATE_SHORTCUT_MESSAGE: {
229                Intent intent = new Intent(Intent.ACTION_CREATE_SHORTCUT);
230                bindIntentToClass(intent, "alias.MessageShortcut");
231                startActivityForResult(intent, 0);
232                break;
233            }
234            case ACTION_GET_CONTENT_CONTACT: {
235                Intent intent = new Intent(Intent.ACTION_GET_CONTENT);
236                intent.setType(Contacts.CONTENT_ITEM_TYPE);
237                startContactSelectionActivityForResult(intent);
238                break;
239            }
240            case ACTION_GET_CONTENT_CONTACT_LEGACY: {
241                Intent intent = new Intent(Intent.ACTION_GET_CONTENT);
242                intent.setType(People.CONTENT_ITEM_TYPE);
243                startContactSelectionActivityForResult(intent);
244                break;
245            }
246            case ACTION_GET_CONTENT_PHONE: {
247                Intent intent = new Intent(Intent.ACTION_GET_CONTENT);
248                intent.setType(Phone.CONTENT_ITEM_TYPE);
249                startContactSelectionActivityForResult(intent);
250                break;
251            }
252            case ACTION_GET_CONTENT_PHONE_LEGACY: {
253                Intent intent = new Intent(Intent.ACTION_GET_CONTENT);
254                intent.setType(Phones.CONTENT_ITEM_TYPE);
255                startContactSelectionActivityForResult(intent);
256                break;
257            }
258            case ACTION_GET_CONTENT_POSTAL: {
259                Intent intent = new Intent(Intent.ACTION_GET_CONTENT);
260                intent.setType(StructuredPostal.CONTENT_ITEM_TYPE);
261                startContactSelectionActivityForResult(intent);
262                break;
263            }
264            case ACTION_GET_CONTENT_POSTAL_LEGACY: {
265                Intent intent = new Intent(Intent.ACTION_GET_CONTENT);
266                intent.setType(ContactMethods.CONTENT_POSTAL_ITEM_TYPE);
267                startContactSelectionActivityForResult(intent);
268                break;
269            }
270            case ACTION_INSERT_OR_EDIT: {
271                Intent intent = new Intent(Intent.ACTION_INSERT_OR_EDIT);
272                intent.setType(Contacts.CONTENT_ITEM_TYPE);
273                putDataExtra(intent);
274                startActivity(intent);
275                break;
276            }
277            case ACTION_INSERT_OR_EDIT_PHONE_NUMBER: {
278                Intent intent = new Intent(Intent.ACTION_INSERT_OR_EDIT);
279                intent.setType(Contacts.CONTENT_ITEM_TYPE);
280                intent.putExtra(Insert.PHONE, "5123456789");
281                startActivity(intent);
282                break;
283            }
284            case ACTION_INSERT_OR_EDIT_EMAIL_ADDRESS: {
285                Intent intent = new Intent(Intent.ACTION_INSERT_OR_EDIT);
286                intent.setType(Contacts.CONTENT_ITEM_TYPE);
287                intent.putExtra(Insert.EMAIL, "android@android.com");
288                startActivity(intent);
289                break;
290            }
291            case ACTION_SEARCH_CALL: {
292                Intent intent = new Intent(Intent.ACTION_SEARCH);
293                intent.putExtra(SearchManager.ACTION_MSG, "call");
294                intent.putExtra(SearchManager.QUERY, "800-4664-411");
295                startSearchResultActivity(intent);
296                break;
297            }
298            case ACTION_SEARCH_CONTACT: {
299                Intent intent = new Intent(Intent.ACTION_SEARCH);
300                intent.putExtra(SearchManager.QUERY, "a");
301                intent.setType(Contacts.CONTENT_TYPE);
302                startSearchResultActivity(intent);
303                break;
304            }
305            case ACTION_SEARCH_EMAIL: {
306                Intent intent = new Intent(Intent.ACTION_SEARCH);
307                intent.putExtra(Insert.EMAIL, "a");
308                startSearchResultActivity(intent);
309                break;
310            }
311            case ACTION_SEARCH_PHONE: {
312                Intent intent = new Intent(Intent.ACTION_SEARCH);
313                intent.putExtra(Insert.PHONE, "800");
314                startSearchResultActivity(intent);
315                break;
316            }
317            case SEARCH_SUGGESTION_CLICKED_CONTACT: {
318                long contactId = findArbitraryContactWithPhoneNumber();
319                if (contactId != -1) {
320                    Uri contactUri = ContentUris.withAppendedId(Contacts.CONTENT_URI, contactId);
321                    Intent intent = new Intent(Intents.SEARCH_SUGGESTION_CLICKED);
322                    intent.setData(contactUri);
323                    startContactListActivity(intent);
324                }
325                break;
326            }
327            case JOIN_CONTACT: {
328                // TODO
329                break;
330            }
331            case EDIT_CONTACT: {
332                final long contactId = findArbitraryContactWithPhoneNumber();
333                final Uri uri = ContentUris.withAppendedId(Contacts.CONTENT_URI, contactId);
334                final Intent intent = new Intent(Intent.ACTION_EDIT, uri);
335                startActivity(intent);
336                break;
337            }
338            case EDIT_CONTACT_LOOKUP: {
339                final long contactId = findArbitraryContactWithPhoneNumber();
340                final Uri uri = ContentUris.withAppendedId(Contacts.CONTENT_URI, contactId);
341                final Uri lookupUri = Contacts.getLookupUri(getContentResolver(), uri);
342                final String lookupKey = lookupUri.getPathSegments().get(2);
343                final Uri lookupWithoutIdUri = Uri.withAppendedPath(Contacts.CONTENT_LOOKUP_URI,
344                        lookupKey);
345                final Intent intent = new Intent(Intent.ACTION_EDIT, lookupWithoutIdUri);
346                startActivity(intent);
347                break;
348            }
349            case EDIT_CONTACT_LOOKUP_ID: {
350                final long contactId = findArbitraryContactWithPhoneNumber();
351                final Uri uri = ContentUris.withAppendedId(Contacts.CONTENT_URI, contactId);
352                final Uri lookupUri = Contacts.getLookupUri(getContentResolver(), uri);
353                final Intent intent = new Intent(Intent.ACTION_EDIT, lookupUri);
354                startActivity(intent);
355                break;
356            }
357            case EDIT_RAW_CONTACT: {
358                final long contactId = findArbitraryContactWithPhoneNumber();
359                final long rawContactId = findArbitraryRawContactOfContact(contactId);
360                final Uri uri = ContentUris.withAppendedId(RawContacts.CONTENT_URI, rawContactId);
361                final Intent intent = new Intent(Intent.ACTION_EDIT, uri);
362                startActivity(intent);
363                break;
364            }
365            case EDIT_LEGACY: {
366                final Uri legacyContentUri = Uri.parse("content://contacts/people");
367                final long contactId = findArbitraryContactWithPhoneNumber();
368                final long rawContactId = findArbitraryRawContactOfContact(contactId);
369                final Uri uri = ContentUris.withAppendedId(legacyContentUri, rawContactId);
370                final Intent intent = new Intent(Intent.ACTION_EDIT, uri);
371                startActivity(intent);
372                break;
373            }
374            case EDIT_NEW_CONTACT: {
375                startActivity(new Intent(Intent.ACTION_INSERT, Contacts.CONTENT_URI));
376                break;
377            }
378            case EDIT_NEW_CONTACT_WITH_DATA: {
379                Intent intent = new Intent(Intent.ACTION_INSERT, Contacts.CONTENT_URI);
380
381                putDataExtra(intent);
382
383                startActivity(intent);
384                break;
385            }
386            case EDIT_NEW_CONTACT_FOR_ACCOUNT:
387            case EDIT_NEW_CONTACT_FOR_ACCOUNT_WITH_DATA: {
388                final SelectAccountDialogFragment dialog = new SelectAccountDialogFragment();
389                dialog.setArguments(SelectAccountDialogFragment.createBundle(position));
390                dialog.show(getFragmentManager(), SelectAccountDialogFragment.TAG);
391                break;
392            }
393            case EDIT_NEW_RAW_CONTACT: {
394                startActivity(new Intent(Intent.ACTION_INSERT, RawContacts.CONTENT_URI));
395                break;
396            }
397            case EDIT_NEW_LEGACY: {
398                final Uri legacyContentUri = Uri.parse("content://contacts/people");
399                startActivity(new Intent(Intent.ACTION_INSERT, legacyContentUri));
400                break;
401            }
402            case VIEW_CONTACT: {
403                final long contactId = findArbitraryContactWithPhoneNumber();
404                final Uri uri = ContentUris.withAppendedId(Contacts.CONTENT_URI, contactId);
405                final Intent intent = new Intent(Intent.ACTION_VIEW, uri);
406                startActivity(intent);
407                break;
408            }
409            case VIEW_CONTACT_WITHOUT_ID: {
410                startActivity(new Intent(Intent.ACTION_VIEW, Contacts.CONTENT_URI));
411                break;
412            }
413            case VIEW_CONTACT_LOOKUP: {
414                final long contactId = findArbitraryContactWithPhoneNumber();
415                final Uri uri = ContentUris.withAppendedId(Contacts.CONTENT_URI, contactId);
416                final Uri lookupUri = Contacts.getLookupUri(getContentResolver(), uri);
417                final String lookupKey = lookupUri.getPathSegments().get(2);
418                final Uri lookupWithoutIdUri = Uri.withAppendedPath(Contacts.CONTENT_LOOKUP_URI,
419                        lookupKey);
420                final Intent intent = new Intent(Intent.ACTION_VIEW, lookupWithoutIdUri);
421                startActivity(intent);
422                break;
423            }
424            case VIEW_CONTACT_LOOKUP_ID: {
425                final long contactId = findArbitraryContactWithPhoneNumber();
426                final Uri uri = ContentUris.withAppendedId(Contacts.CONTENT_URI, contactId);
427                final Uri lookupUri = Contacts.getLookupUri(getContentResolver(), uri);
428                final Intent intent = new Intent(Intent.ACTION_VIEW, lookupUri);
429                startActivity(intent);
430                break;
431            }
432            case VIEW_RAW_CONTACT: {
433                final long contactId = findArbitraryContactWithPhoneNumber();
434                final long rawContactId = findArbitraryRawContactOfContact(contactId);
435                final Uri uri = ContentUris.withAppendedId(RawContacts.CONTENT_URI, rawContactId);
436                final Intent intent = new Intent(Intent.ACTION_VIEW, uri);
437                startActivity(intent);
438                break;
439            }
440            case VIEW_LEGACY: {
441                final Uri legacyContentUri = Uri.parse("content://contacts/people");
442                final long contactId = findArbitraryContactWithPhoneNumber();
443                final long rawContactId = findArbitraryRawContactOfContact(contactId);
444                final Uri uri = ContentUris.withAppendedId(legacyContentUri, rawContactId);
445                final Intent intent = new Intent(Intent.ACTION_VIEW, uri);
446                startActivity(intent);
447                break;
448            }
449            case DIAL: {
450                startActivity(new Intent(Intent.ACTION_DIAL));
451                break;
452            }
453            case DIAL_phone: {
454                // This is the legacy URI (there is no >2.0 way to call a phone data item)
455                final long dataId = findArbitraryPhoneDataId();
456                if (dataId != -1) {
457                    final Uri legacyContentUri = Uri.parse("content://contacts/phones");
458                    final Uri uri = ContentUris.withAppendedId(legacyContentUri, dataId);
459                    startActivity(new Intent(Intent.ACTION_DIAL, uri));
460                }
461                break;
462            }
463            case DIAL_person: {
464                // This is the legacy URI (there is no >2.0 way to call a person)
465                final long contactId = findArbitraryContactWithPhoneNumber();
466                if (contactId != -1) {
467                    final Uri legacyContentUri = Uri.parse("content://contacts/people");
468                    final long rawContactId = findArbitraryRawContactOfContact(contactId);
469                    final Uri uri = ContentUris.withAppendedId(legacyContentUri, rawContactId);
470                    startActivity(new Intent(Intent.ACTION_DIAL, uri));
471                }
472                break;
473            }
474            case DIAL_voicemail: {
475                startActivity(new Intent(Intent.ACTION_DIAL, Uri.parse("voicemail:")));
476                break;
477            }
478            case CALL_BUTTON: {
479                startActivity(new Intent(Intent.ACTION_CALL_BUTTON));
480                break;
481            }
482            case DIAL_tel: {
483                startActivity(new Intent(Intent.ACTION_DIAL, Uri.parse("tel:555-123-4567")));
484                break;
485            }
486            case VIEW_tel: {
487                startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse("tel:555-123-4567")));
488                break;
489            }
490            case VIEW_calllog: {
491                final Intent intent = new Intent(Intent.ACTION_VIEW, null);
492                intent.setType("vnd.android.cursor.dir/calls");
493                startActivity(intent);
494                break;
495            }
496            case VIEW_calllog_entry: {
497                Uri uri = getCallLogUri();
498                if (uri == null) {
499                    Toast.makeText(this, "Call log is empty", Toast.LENGTH_LONG).show();
500                    break;
501                }
502                final Intent intent = new Intent(Intent.ACTION_VIEW);
503                intent.setData(uri);
504                startActivity(intent);
505                break;
506            }
507            case LEGACY_CALL_DETAILS_ACTIVITY: {
508                Uri uri = getCallLogUri();
509                if (uri == null) {
510                    Toast.makeText(this, "Call log is empty", Toast.LENGTH_LONG).show();
511                    break;
512                }
513                final Intent intent = new Intent("android.intent.action.VIEW");
514                intent.setData(uri);
515                bindIntentToClass(intent, "com.android.contacts.CallDetailActivity");
516                startActivity(intent);
517                break;
518            }
519            case LEGACY_CALL_LOG_ACTIVITY: {
520                startActivity(bindIntentToClass(new Intent(),
521                        "com.android.contacts.activities.CallLogActivity"));
522                break;
523            }
524
525            default: {
526                Toast.makeText(this, "Sorry, we forgot to write this...", Toast.LENGTH_LONG).show();
527            }
528        }
529    }
530
531    /** Returns the URI of one of the items in the call log, or null if the call log is empty. */
532    private Uri getCallLogUri() {
533        Cursor cursor = getContentResolver().query(
534                Calls.CONTENT_URI, new String[]{ Calls._ID }, null, null,
535                Calls.DEFAULT_SORT_ORDER);
536        if (!cursor.moveToNext()) {
537            return null;
538        }
539        return ContentUris.withAppendedId(Calls.CONTENT_URI, cursor.getLong(0));
540    }
541
542    /** Creates an intent that is bound to a specific activity by name. */
543    private Intent bindIntentToClass(Intent intent, String activityClassName) {
544        intent.setComponent(new ComponentName(ANDROID_CONTACTS_PACKAGE, activityClassName));
545        return intent;
546    }
547
548    private Intent buildFilterIntent(int actionCode, boolean legacy) {
549        Intent intent = new Intent(UI.FILTER_CONTACTS_ACTION);
550        intent.putExtra(UI.FILTER_TEXT_EXTRA_KEY, "A");
551//        ContactsRequest request = new ContactsRequest();
552//        request.setActionCode(actionCode);
553//        intent.putExtra("originalRequest", request);
554        return intent;
555    }
556
557    private void startContactListActivity(Intent intent) {
558        bindIntentToClass(intent, CONTACT_LIST_ACTIVITY_CLASS_NAME);
559        intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
560        startActivity(intent);
561    }
562
563    private void startContactSelectionActivityForResult(Intent intent) {
564        startActivityForResult(intent, 12);
565    }
566
567    private void startSearchResultActivity(Intent intent) {
568        intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
569        startActivity(intent);
570    }
571
572    @Override
573    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
574        Intent intent = new Intent(this, ResultActivity.class);
575        intent.putExtra("resultCode", resultCode);
576        intent.putExtra("data", data);
577        startActivity(intent);
578    }
579
580    private long findArbitraryContactWithPhoneNumber() {
581        final Cursor cursor = getContentResolver().query(Contacts.CONTENT_URI,
582                new String[] { Contacts._ID },
583                Contacts.HAS_PHONE_NUMBER + "!=0 AND " + Contacts.STARRED + "!=0" ,
584                null, "RANDOM() LIMIT 1");
585        try {
586            if (cursor.moveToFirst()) {
587                return cursor.getLong(0);
588            }
589        } finally {
590            cursor.close();
591        }
592
593        return -1;
594    }
595
596    private long findArbitraryPhoneDataId() {
597        final Cursor cursor = getContentResolver().query(Data.CONTENT_URI,
598                new String[] { Data._ID },
599                Data.MIMETYPE + "=" + Phone.MIMETYPE,
600                null, "RANDOM() LIMIT 1");
601        try {
602            if (cursor.moveToFirst()) {
603                return cursor.getLong(0);
604            }
605        } finally {
606            cursor.close();
607        }
608
609        return -1;
610    }
611
612    private long findArbitraryRawContactOfContact(long contactId) {
613        final Cursor cursor = getContentResolver().query(RawContacts.CONTENT_URI,
614                new String[] { RawContacts._ID },
615                RawContacts.CONTACT_ID + "=?",
616                new String[] { String.valueOf(contactId) },
617                RawContacts._ID + " LIMIT 1");
618        try {
619            if (cursor.moveToFirst()) {
620                return cursor.getLong(0);
621            }
622        } finally {
623            cursor.close();
624        }
625
626        return -1;
627    }
628
629    @Override
630    public void onAccountChosen(Account account, String dataSet, int tag) {
631        switch (ContactsIntent.get(tag)) {
632            case EDIT_NEW_CONTACT_FOR_ACCOUNT: {
633                final Intent intent = new Intent(Intent.ACTION_INSERT, Contacts.CONTENT_URI);
634                intent.putExtra(Insert.ACCOUNT, account);
635                intent.putExtra(Insert.DATA_SET, dataSet);
636                startActivity(intent);
637                break;
638            }
639            case EDIT_NEW_CONTACT_FOR_ACCOUNT_WITH_DATA: {
640                final Intent intent = new Intent(Intent.ACTION_INSERT, Contacts.CONTENT_URI);
641
642                intent.putExtra(Insert.ACCOUNT, account);
643                intent.putExtra(Insert.DATA_SET, dataSet);
644                putDataExtra(intent);
645
646                startActivity(intent);
647                break;
648            }
649            default:
650                break;
651        }
652    }
653
654    public void putDataExtra(final Intent intent) {
655        ContentValues row1 = new ContentValues();
656        row1.put(Data.MIMETYPE, Organization.CONTENT_ITEM_TYPE);
657        row1.put(Organization.COMPANY, "Android");
658
659        ContentValues row2 = new ContentValues();
660        row2.put(Data.MIMETYPE, Email.CONTENT_ITEM_TYPE);
661        row2.put(Email.TYPE, Email.TYPE_CUSTOM);
662        row2.put(Email.LABEL, "Green Bot");
663        row2.put(Email.ADDRESS, "android@android.com");
664
665        intent.putParcelableArrayListExtra(Insert.DATA, Lists.newArrayList(row1, row2));
666    }
667}
668