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