ContactsIntentResolver.java revision 884e393af339ba1357dd1aea4c8e821396c214b9
16178cb47846e7efc9c245a9b9ba93032a0038921Dmitri Plotnikov/* 26178cb47846e7efc9c245a9b9ba93032a0038921Dmitri Plotnikov * Copyright (C) 2010 The Android Open Source Project 36178cb47846e7efc9c245a9b9ba93032a0038921Dmitri Plotnikov * 46178cb47846e7efc9c245a9b9ba93032a0038921Dmitri Plotnikov * Licensed under the Apache License, Version 2.0 (the "License"); 56178cb47846e7efc9c245a9b9ba93032a0038921Dmitri Plotnikov * you may not use this file except in compliance with the License. 66178cb47846e7efc9c245a9b9ba93032a0038921Dmitri Plotnikov * You may obtain a copy of the License at 76178cb47846e7efc9c245a9b9ba93032a0038921Dmitri Plotnikov * 86178cb47846e7efc9c245a9b9ba93032a0038921Dmitri Plotnikov * http://www.apache.org/licenses/LICENSE-2.0 96178cb47846e7efc9c245a9b9ba93032a0038921Dmitri Plotnikov * 106178cb47846e7efc9c245a9b9ba93032a0038921Dmitri Plotnikov * Unless required by applicable law or agreed to in writing, software 116178cb47846e7efc9c245a9b9ba93032a0038921Dmitri Plotnikov * distributed under the License is distributed on an "AS IS" BASIS, 126178cb47846e7efc9c245a9b9ba93032a0038921Dmitri Plotnikov * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 136178cb47846e7efc9c245a9b9ba93032a0038921Dmitri Plotnikov * See the License for the specific language governing permissions and 146178cb47846e7efc9c245a9b9ba93032a0038921Dmitri Plotnikov * limitations under the License. 156178cb47846e7efc9c245a9b9ba93032a0038921Dmitri Plotnikov */ 166178cb47846e7efc9c245a9b9ba93032a0038921Dmitri Plotnikov 170906ee326a5553a224eb7b004536f35b340bdcd3Dmitri Plotnikovpackage com.android.contacts.list; 186178cb47846e7efc9c245a9b9ba93032a0038921Dmitri Plotnikov 19884e393af339ba1357dd1aea4c8e821396c214b9Dmitri Plotnikovimport com.android.contacts.CallContactActivity; 206178cb47846e7efc9c245a9b9ba93032a0038921Dmitri Plotnikovimport com.android.contacts.ContactsSearchManager; 216178cb47846e7efc9c245a9b9ba93032a0038921Dmitri Plotnikovimport com.android.contacts.R; 226178cb47846e7efc9c245a9b9ba93032a0038921Dmitri Plotnikov 236178cb47846e7efc9c245a9b9ba93032a0038921Dmitri Plotnikovimport android.app.Activity; 246178cb47846e7efc9c245a9b9ba93032a0038921Dmitri Plotnikovimport android.app.SearchManager; 256178cb47846e7efc9c245a9b9ba93032a0038921Dmitri Plotnikovimport android.content.Intent; 266178cb47846e7efc9c245a9b9ba93032a0038921Dmitri Plotnikovimport android.net.Uri; 276178cb47846e7efc9c245a9b9ba93032a0038921Dmitri Plotnikovimport android.os.Bundle; 286178cb47846e7efc9c245a9b9ba93032a0038921Dmitri Plotnikovimport android.provider.Contacts.ContactMethods; 296178cb47846e7efc9c245a9b9ba93032a0038921Dmitri Plotnikovimport android.provider.Contacts.People; 306178cb47846e7efc9c245a9b9ba93032a0038921Dmitri Plotnikovimport android.provider.Contacts.Phones; 316178cb47846e7efc9c245a9b9ba93032a0038921Dmitri Plotnikovimport android.provider.ContactsContract.Contacts; 326178cb47846e7efc9c245a9b9ba93032a0038921Dmitri Plotnikovimport android.provider.ContactsContract.Intents; 336178cb47846e7efc9c245a9b9ba93032a0038921Dmitri Plotnikovimport android.provider.ContactsContract.CommonDataKinds.Phone; 346178cb47846e7efc9c245a9b9ba93032a0038921Dmitri Plotnikovimport android.provider.ContactsContract.CommonDataKinds.StructuredPostal; 356178cb47846e7efc9c245a9b9ba93032a0038921Dmitri Plotnikovimport android.provider.ContactsContract.Intents.UI; 366178cb47846e7efc9c245a9b9ba93032a0038921Dmitri Plotnikovimport android.text.TextUtils; 376178cb47846e7efc9c245a9b9ba93032a0038921Dmitri Plotnikovimport android.util.Log; 386178cb47846e7efc9c245a9b9ba93032a0038921Dmitri Plotnikov 396178cb47846e7efc9c245a9b9ba93032a0038921Dmitri Plotnikov/** 406178cb47846e7efc9c245a9b9ba93032a0038921Dmitri Plotnikov * Maintains contact list configuration, which is a transient object that 416178cb47846e7efc9c245a9b9ba93032a0038921Dmitri Plotnikov * deals with intents, saved instance configuration etc. 426178cb47846e7efc9c245a9b9ba93032a0038921Dmitri Plotnikov */ 436178cb47846e7efc9c245a9b9ba93032a0038921Dmitri Plotnikov@SuppressWarnings("deprecation") 440906ee326a5553a224eb7b004536f35b340bdcd3Dmitri Plotnikovpublic class ContactsIntentResolver { 456178cb47846e7efc9c245a9b9ba93032a0038921Dmitri Plotnikov 466178cb47846e7efc9c245a9b9ba93032a0038921Dmitri Plotnikov private static final String TAG = "ContactsListActivity"; 476178cb47846e7efc9c245a9b9ba93032a0038921Dmitri Plotnikov 486178cb47846e7efc9c245a9b9ba93032a0038921Dmitri Plotnikov private final Activity mContext; 496178cb47846e7efc9c245a9b9ba93032a0038921Dmitri Plotnikov 501540674a23a2ac0277a5aca3fa4ed41a6e1b74c3Dmitri Plotnikov public ContactsIntentResolver(Activity context) { 516178cb47846e7efc9c245a9b9ba93032a0038921Dmitri Plotnikov this.mContext = context; 526178cb47846e7efc9c245a9b9ba93032a0038921Dmitri Plotnikov } 536178cb47846e7efc9c245a9b9ba93032a0038921Dmitri Plotnikov 541ce1e7cf261994e46e6fe85ed4d445241ad55f16Dmitri Plotnikov public ContactsRequest resolveIntent(Intent intent) { 551ce1e7cf261994e46e6fe85ed4d445241ad55f16Dmitri Plotnikov ContactsRequest request = new ContactsRequest(); 561ce1e7cf261994e46e6fe85ed4d445241ad55f16Dmitri Plotnikov request.setDisplayOnlyVisible(true); 571ce1e7cf261994e46e6fe85ed4d445241ad55f16Dmitri Plotnikov 586178cb47846e7efc9c245a9b9ba93032a0038921Dmitri Plotnikov String action = intent.getAction(); 596178cb47846e7efc9c245a9b9ba93032a0038921Dmitri Plotnikov 606178cb47846e7efc9c245a9b9ba93032a0038921Dmitri Plotnikov Log.i(TAG, "Called with action: " + action); 611ce1e7cf261994e46e6fe85ed4d445241ad55f16Dmitri Plotnikov 621ce1e7cf261994e46e6fe85ed4d445241ad55f16Dmitri Plotnikov if (UI.LIST_DEFAULT.equals(action) ) { 631ce1e7cf261994e46e6fe85ed4d445241ad55f16Dmitri Plotnikov request.setActionCode(ContactsRequest.ACTION_DEFAULT); 641ce1e7cf261994e46e6fe85ed4d445241ad55f16Dmitri Plotnikov request.setDisplayWithPhonesOnlyOption( 651ce1e7cf261994e46e6fe85ed4d445241ad55f16Dmitri Plotnikov ContactsRequest.DISPLAY_ONLY_WITH_PHONES_PREFERENCE); 666178cb47846e7efc9c245a9b9ba93032a0038921Dmitri Plotnikov } else if (UI.LIST_ALL_CONTACTS_ACTION.equals(action)) { 671ce1e7cf261994e46e6fe85ed4d445241ad55f16Dmitri Plotnikov request.setActionCode(ContactsRequest.ACTION_DEFAULT); 681ce1e7cf261994e46e6fe85ed4d445241ad55f16Dmitri Plotnikov request.setDisplayWithPhonesOnlyOption( 691ce1e7cf261994e46e6fe85ed4d445241ad55f16Dmitri Plotnikov ContactsRequest.DISPLAY_ONLY_WITH_PHONES_DISABLED); 701ce1e7cf261994e46e6fe85ed4d445241ad55f16Dmitri Plotnikov request.setDisplayOnlyVisible(false); 711ce1e7cf261994e46e6fe85ed4d445241ad55f16Dmitri Plotnikov } else if (UI.LIST_CONTACTS_WITH_PHONES_ACTION.equals(action)) { 721ce1e7cf261994e46e6fe85ed4d445241ad55f16Dmitri Plotnikov request.setActionCode(ContactsRequest.ACTION_DEFAULT); 731ce1e7cf261994e46e6fe85ed4d445241ad55f16Dmitri Plotnikov request.setDisplayWithPhonesOnlyOption( 741ce1e7cf261994e46e6fe85ed4d445241ad55f16Dmitri Plotnikov ContactsRequest.DISPLAY_ONLY_WITH_PHONES_ENABLED); 756178cb47846e7efc9c245a9b9ba93032a0038921Dmitri Plotnikov } else if (UI.LIST_STARRED_ACTION.equals(action)) { 761ce1e7cf261994e46e6fe85ed4d445241ad55f16Dmitri Plotnikov request.setActionCode(ContactsRequest.ACTION_STARRED); 776178cb47846e7efc9c245a9b9ba93032a0038921Dmitri Plotnikov } else if (UI.LIST_FREQUENT_ACTION.equals(action)) { 781ce1e7cf261994e46e6fe85ed4d445241ad55f16Dmitri Plotnikov request.setActionCode(ContactsRequest.ACTION_FREQUENT); 796178cb47846e7efc9c245a9b9ba93032a0038921Dmitri Plotnikov } else if (UI.LIST_STREQUENT_ACTION.equals(action)) { 801ce1e7cf261994e46e6fe85ed4d445241ad55f16Dmitri Plotnikov request.setActionCode(ContactsRequest.ACTION_STREQUENT); 811ce1e7cf261994e46e6fe85ed4d445241ad55f16Dmitri Plotnikov } else if (UI.LIST_GROUP_ACTION.equals(action)) { 821ce1e7cf261994e46e6fe85ed4d445241ad55f16Dmitri Plotnikov request.setActionCode(ContactsRequest.ACTION_GROUP); 831ce1e7cf261994e46e6fe85ed4d445241ad55f16Dmitri Plotnikov String groupName = intent.getStringExtra(UI.GROUP_NAME_EXTRA_KEY); 84884e393af339ba1357dd1aea4c8e821396c214b9Dmitri Plotnikov if (!TextUtils.isEmpty(groupName)) { 85884e393af339ba1357dd1aea4c8e821396c214b9Dmitri Plotnikov request.setGroupName(groupName); 86884e393af339ba1357dd1aea4c8e821396c214b9Dmitri Plotnikov } else { 871ce1e7cf261994e46e6fe85ed4d445241ad55f16Dmitri Plotnikov Log.e(TAG, "Intent missing a required extra: " + UI.GROUP_NAME_EXTRA_KEY); 881ce1e7cf261994e46e6fe85ed4d445241ad55f16Dmitri Plotnikov request.setValid(false); 891ce1e7cf261994e46e6fe85ed4d445241ad55f16Dmitri Plotnikov } 906178cb47846e7efc9c245a9b9ba93032a0038921Dmitri Plotnikov } else if (Intent.ACTION_PICK.equals(action)) { 916178cb47846e7efc9c245a9b9ba93032a0038921Dmitri Plotnikov final String resolvedType = intent.resolveType(mContext); 926178cb47846e7efc9c245a9b9ba93032a0038921Dmitri Plotnikov if (Contacts.CONTENT_TYPE.equals(resolvedType)) { 931ce1e7cf261994e46e6fe85ed4d445241ad55f16Dmitri Plotnikov request.setActionCode(ContactsRequest.ACTION_PICK_CONTACT); 946178cb47846e7efc9c245a9b9ba93032a0038921Dmitri Plotnikov } else if (People.CONTENT_TYPE.equals(resolvedType)) { 951ce1e7cf261994e46e6fe85ed4d445241ad55f16Dmitri Plotnikov request.setActionCode(ContactsRequest.ACTION_PICK_CONTACT); 961ce1e7cf261994e46e6fe85ed4d445241ad55f16Dmitri Plotnikov request.setLegacyCompatibilityMode(true); 976178cb47846e7efc9c245a9b9ba93032a0038921Dmitri Plotnikov } else if (Phone.CONTENT_TYPE.equals(resolvedType)) { 981ce1e7cf261994e46e6fe85ed4d445241ad55f16Dmitri Plotnikov request.setActionCode(ContactsRequest.ACTION_PICK_PHONE); 996178cb47846e7efc9c245a9b9ba93032a0038921Dmitri Plotnikov } else if (Phones.CONTENT_TYPE.equals(resolvedType)) { 1001ce1e7cf261994e46e6fe85ed4d445241ad55f16Dmitri Plotnikov request.setActionCode(ContactsRequest.ACTION_PICK_PHONE); 1011ce1e7cf261994e46e6fe85ed4d445241ad55f16Dmitri Plotnikov request.setLegacyCompatibilityMode(true); 1026178cb47846e7efc9c245a9b9ba93032a0038921Dmitri Plotnikov } else if (StructuredPostal.CONTENT_TYPE.equals(resolvedType)) { 1031ce1e7cf261994e46e6fe85ed4d445241ad55f16Dmitri Plotnikov request.setActionCode(ContactsRequest.ACTION_PICK_POSTAL); 1046178cb47846e7efc9c245a9b9ba93032a0038921Dmitri Plotnikov } else if (ContactMethods.CONTENT_POSTAL_TYPE.equals(resolvedType)) { 1051ce1e7cf261994e46e6fe85ed4d445241ad55f16Dmitri Plotnikov request.setActionCode(ContactsRequest.ACTION_PICK_POSTAL); 1061ce1e7cf261994e46e6fe85ed4d445241ad55f16Dmitri Plotnikov request.setLegacyCompatibilityMode(true); 1076178cb47846e7efc9c245a9b9ba93032a0038921Dmitri Plotnikov } 1086178cb47846e7efc9c245a9b9ba93032a0038921Dmitri Plotnikov } else if (Intent.ACTION_CREATE_SHORTCUT.equals(action)) { 109884e393af339ba1357dd1aea4c8e821396c214b9Dmitri Plotnikov String component = intent.getComponent().getClassName(); 1106178cb47846e7efc9c245a9b9ba93032a0038921Dmitri Plotnikov if (component.equals("alias.DialShortcut")) { 1111ce1e7cf261994e46e6fe85ed4d445241ad55f16Dmitri Plotnikov request.setActionCode(ContactsRequest.ACTION_CREATE_SHORTCUT_CALL); 1121ce1e7cf261994e46e6fe85ed4d445241ad55f16Dmitri Plotnikov request.setActivityTitle(mContext.getString(R.string.callShortcutActivityTitle)); 1136178cb47846e7efc9c245a9b9ba93032a0038921Dmitri Plotnikov } else if (component.equals("alias.MessageShortcut")) { 1141ce1e7cf261994e46e6fe85ed4d445241ad55f16Dmitri Plotnikov request.setActionCode(ContactsRequest.ACTION_CREATE_SHORTCUT_SMS); 1151ce1e7cf261994e46e6fe85ed4d445241ad55f16Dmitri Plotnikov request.setActivityTitle(mContext.getString(R.string.messageShortcutActivityTitle)); 1166178cb47846e7efc9c245a9b9ba93032a0038921Dmitri Plotnikov } else { 1171ce1e7cf261994e46e6fe85ed4d445241ad55f16Dmitri Plotnikov request.setActionCode(ContactsRequest.ACTION_CREATE_SHORTCUT_CONTACT); 1181ce1e7cf261994e46e6fe85ed4d445241ad55f16Dmitri Plotnikov request.setActivityTitle(mContext.getString(R.string.shortcutActivityTitle)); 1196178cb47846e7efc9c245a9b9ba93032a0038921Dmitri Plotnikov } 1206178cb47846e7efc9c245a9b9ba93032a0038921Dmitri Plotnikov } else if (Intent.ACTION_GET_CONTENT.equals(action)) { 121884e393af339ba1357dd1aea4c8e821396c214b9Dmitri Plotnikov String type = intent.getType(); 1226178cb47846e7efc9c245a9b9ba93032a0038921Dmitri Plotnikov if (Contacts.CONTENT_ITEM_TYPE.equals(type)) { 1231ce1e7cf261994e46e6fe85ed4d445241ad55f16Dmitri Plotnikov request.setActionCode(ContactsRequest.ACTION_PICK_OR_CREATE_CONTACT); 1246178cb47846e7efc9c245a9b9ba93032a0038921Dmitri Plotnikov } else if (Phone.CONTENT_ITEM_TYPE.equals(type)) { 1251ce1e7cf261994e46e6fe85ed4d445241ad55f16Dmitri Plotnikov request.setActionCode(ContactsRequest.ACTION_PICK_PHONE); 1266178cb47846e7efc9c245a9b9ba93032a0038921Dmitri Plotnikov } else if (Phones.CONTENT_ITEM_TYPE.equals(type)) { 1271ce1e7cf261994e46e6fe85ed4d445241ad55f16Dmitri Plotnikov request.setActionCode(ContactsRequest.ACTION_PICK_PHONE); 1281ce1e7cf261994e46e6fe85ed4d445241ad55f16Dmitri Plotnikov request.setLegacyCompatibilityMode(true); 1296178cb47846e7efc9c245a9b9ba93032a0038921Dmitri Plotnikov } else if (StructuredPostal.CONTENT_ITEM_TYPE.equals(type)) { 1301ce1e7cf261994e46e6fe85ed4d445241ad55f16Dmitri Plotnikov request.setActionCode(ContactsRequest.ACTION_PICK_POSTAL); 1316178cb47846e7efc9c245a9b9ba93032a0038921Dmitri Plotnikov } else if (ContactMethods.CONTENT_POSTAL_ITEM_TYPE.equals(type)) { 1321ce1e7cf261994e46e6fe85ed4d445241ad55f16Dmitri Plotnikov request.setActionCode(ContactsRequest.ACTION_PICK_POSTAL); 1331ce1e7cf261994e46e6fe85ed4d445241ad55f16Dmitri Plotnikov request.setLegacyCompatibilityMode(true); 1346178cb47846e7efc9c245a9b9ba93032a0038921Dmitri Plotnikov } else if (People.CONTENT_ITEM_TYPE.equals(type)) { 1351ce1e7cf261994e46e6fe85ed4d445241ad55f16Dmitri Plotnikov request.setActionCode(ContactsRequest.ACTION_PICK_OR_CREATE_CONTACT); 1361ce1e7cf261994e46e6fe85ed4d445241ad55f16Dmitri Plotnikov request.setLegacyCompatibilityMode(true); 1376178cb47846e7efc9c245a9b9ba93032a0038921Dmitri Plotnikov } 1386178cb47846e7efc9c245a9b9ba93032a0038921Dmitri Plotnikov } else if (Intent.ACTION_INSERT_OR_EDIT.equals(action)) { 1391ce1e7cf261994e46e6fe85ed4d445241ad55f16Dmitri Plotnikov request.setActionCode(ContactsRequest.ACTION_INSERT_OR_EDIT_CONTACT); 1406178cb47846e7efc9c245a9b9ba93032a0038921Dmitri Plotnikov } else if (Intent.ACTION_SEARCH.equals(action)) { 1416178cb47846e7efc9c245a9b9ba93032a0038921Dmitri Plotnikov // See if the suggestion was clicked with a search action key (call button) 1426178cb47846e7efc9c245a9b9ba93032a0038921Dmitri Plotnikov if ("call".equals(intent.getStringExtra(SearchManager.ACTION_MSG))) { 1436178cb47846e7efc9c245a9b9ba93032a0038921Dmitri Plotnikov String query = intent.getStringExtra(SearchManager.QUERY); 1446178cb47846e7efc9c245a9b9ba93032a0038921Dmitri Plotnikov if (!TextUtils.isEmpty(query)) { 1456178cb47846e7efc9c245a9b9ba93032a0038921Dmitri Plotnikov Intent newIntent = new Intent(Intent.ACTION_CALL_PRIVILEGED, 1466178cb47846e7efc9c245a9b9ba93032a0038921Dmitri Plotnikov Uri.fromParts("tel", query, null)); 1471ce1e7cf261994e46e6fe85ed4d445241ad55f16Dmitri Plotnikov request.setRedirectIntent(newIntent); 1486178cb47846e7efc9c245a9b9ba93032a0038921Dmitri Plotnikov } 1496178cb47846e7efc9c245a9b9ba93032a0038921Dmitri Plotnikov } else { 1501ce1e7cf261994e46e6fe85ed4d445241ad55f16Dmitri Plotnikov request.setQueryString(intent.getStringExtra(SearchManager.QUERY)); 1511ce1e7cf261994e46e6fe85ed4d445241ad55f16Dmitri Plotnikov request.setSearchResultsMode(true); 1526178cb47846e7efc9c245a9b9ba93032a0038921Dmitri Plotnikov } 1531ce1e7cf261994e46e6fe85ed4d445241ad55f16Dmitri Plotnikov } else if (UI.FILTER_CONTACTS_ACTION.equals(action)) { 1541ce1e7cf261994e46e6fe85ed4d445241ad55f16Dmitri Plotnikov // When we get a FILTER_CONTACTS_ACTION, it represents search in the context 1551ce1e7cf261994e46e6fe85ed4d445241ad55f16Dmitri Plotnikov // of some other action. Let's retrieve the original action to provide proper 1561ce1e7cf261994e46e6fe85ed4d445241ad55f16Dmitri Plotnikov // context for the search queries. 1571ce1e7cf261994e46e6fe85ed4d445241ad55f16Dmitri Plotnikov request.setActionCode(ContactsRequest.ACTION_DEFAULT); 1586178cb47846e7efc9c245a9b9ba93032a0038921Dmitri Plotnikov Bundle extras = intent.getExtras(); 1596178cb47846e7efc9c245a9b9ba93032a0038921Dmitri Plotnikov if (extras != null) { 1601ce1e7cf261994e46e6fe85ed4d445241ad55f16Dmitri Plotnikov request.setQueryString(extras.getString(UI.FILTER_TEXT_EXTRA_KEY)); 1611ce1e7cf261994e46e6fe85ed4d445241ad55f16Dmitri Plotnikov 1621ce1e7cf261994e46e6fe85ed4d445241ad55f16Dmitri Plotnikov ContactsRequest originalRequest = 1631ce1e7cf261994e46e6fe85ed4d445241ad55f16Dmitri Plotnikov (ContactsRequest)extras.get(ContactsSearchManager.ORIGINAL_REQUEST_KEY); 1641ce1e7cf261994e46e6fe85ed4d445241ad55f16Dmitri Plotnikov if (originalRequest != null) { 1651ce1e7cf261994e46e6fe85ed4d445241ad55f16Dmitri Plotnikov request.copyFrom(originalRequest); 1661ce1e7cf261994e46e6fe85ed4d445241ad55f16Dmitri Plotnikov } 1676178cb47846e7efc9c245a9b9ba93032a0038921Dmitri Plotnikov } 1686178cb47846e7efc9c245a9b9ba93032a0038921Dmitri Plotnikov 1691ce1e7cf261994e46e6fe85ed4d445241ad55f16Dmitri Plotnikov if (request == null) { 1701ce1e7cf261994e46e6fe85ed4d445241ad55f16Dmitri Plotnikov request = new ContactsRequest(); 1716178cb47846e7efc9c245a9b9ba93032a0038921Dmitri Plotnikov } 1721ce1e7cf261994e46e6fe85ed4d445241ad55f16Dmitri Plotnikov 1731ce1e7cf261994e46e6fe85ed4d445241ad55f16Dmitri Plotnikov request.setSearchMode(true); 1741ce1e7cf261994e46e6fe85ed4d445241ad55f16Dmitri Plotnikov// } else if (ACTION_SEARCH_INTERNAL.equals(action)) { 1751ce1e7cf261994e46e6fe85ed4d445241ad55f16Dmitri Plotnikov// String originalAction = null; 1761ce1e7cf261994e46e6fe85ed4d445241ad55f16Dmitri Plotnikov// Bundle extras = intent.getExtras(); 1771ce1e7cf261994e46e6fe85ed4d445241ad55f16Dmitri Plotnikov// if (extras != null) { 1781ce1e7cf261994e46e6fe85ed4d445241ad55f16Dmitri Plotnikov// originalAction = extras.getString(ContactsSearchManager.ORIGINAL_ACTION_EXTRA_KEY); 1791ce1e7cf261994e46e6fe85ed4d445241ad55f16Dmitri Plotnikov// } 1801ce1e7cf261994e46e6fe85ed4d445241ad55f16Dmitri Plotnikov// mShortcutAction = intent.getStringExtra(SHORTCUT_ACTION_KEY); 1811ce1e7cf261994e46e6fe85ed4d445241ad55f16Dmitri Plotnikov// 1821ce1e7cf261994e46e6fe85ed4d445241ad55f16Dmitri Plotnikov// if (Intent.ACTION_INSERT_OR_EDIT.equals(originalAction)) { 1831ce1e7cf261994e46e6fe85ed4d445241ad55f16Dmitri Plotnikov// request.setActionCode(ContactsRequest.MODE_QUERY_PICK_TO_EDIT; 1841ce1e7cf261994e46e6fe85ed4d445241ad55f16Dmitri Plotnikov// mShowSearchSnippets = true; 1851ce1e7cf261994e46e6fe85ed4d445241ad55f16Dmitri Plotnikov// mQueryString = intent.getStringExtra(SearchManager.QUERY); 1861ce1e7cf261994e46e6fe85ed4d445241ad55f16Dmitri Plotnikov// } else if (mShortcutAction != null && intent.hasExtra(Insert.PHONE)) { 1871ce1e7cf261994e46e6fe85ed4d445241ad55f16Dmitri Plotnikov// request.setActionCode(ContactsRequest.MODE_QUERY_PICK_PHONE; 1881ce1e7cf261994e46e6fe85ed4d445241ad55f16Dmitri Plotnikov// mQueryMode = QUERY_MODE_TEL; 1891ce1e7cf261994e46e6fe85ed4d445241ad55f16Dmitri Plotnikov// mQueryString = intent.getStringExtra(Insert.PHONE); 1901ce1e7cf261994e46e6fe85ed4d445241ad55f16Dmitri Plotnikov// } else { 1911ce1e7cf261994e46e6fe85ed4d445241ad55f16Dmitri Plotnikov// request.setActionCode(ContactsRequest.MODE_QUERY_PICK; 1921ce1e7cf261994e46e6fe85ed4d445241ad55f16Dmitri Plotnikov// mQueryMode = QUERY_MODE_NONE; 1931ce1e7cf261994e46e6fe85ed4d445241ad55f16Dmitri Plotnikov// mShowSearchSnippets = true; 1941ce1e7cf261994e46e6fe85ed4d445241ad55f16Dmitri Plotnikov// mQueryString = intent.getStringExtra(SearchManager.QUERY); 1951ce1e7cf261994e46e6fe85ed4d445241ad55f16Dmitri Plotnikov// } 1961ce1e7cf261994e46e6fe85ed4d445241ad55f16Dmitri Plotnikov// mSearchResultsMode = true; 1976178cb47846e7efc9c245a9b9ba93032a0038921Dmitri Plotnikov // Since this is the filter activity it receives all intents 1986178cb47846e7efc9c245a9b9ba93032a0038921Dmitri Plotnikov // dispatched from the SearchManager for security reasons 1996178cb47846e7efc9c245a9b9ba93032a0038921Dmitri Plotnikov // so we need to re-dispatch from here to the intended target. 2006178cb47846e7efc9c245a9b9ba93032a0038921Dmitri Plotnikov } else if (Intents.SEARCH_SUGGESTION_CLICKED.equals(action)) { 2016178cb47846e7efc9c245a9b9ba93032a0038921Dmitri Plotnikov Uri data = intent.getData(); 2026178cb47846e7efc9c245a9b9ba93032a0038921Dmitri Plotnikov // See if the suggestion was clicked with a search action key (call button) 203884e393af339ba1357dd1aea4c8e821396c214b9Dmitri Plotnikov if ("call".equals(intent.getStringExtra(SearchManager.ACTION_MSG))) { 204884e393af339ba1357dd1aea4c8e821396c214b9Dmitri Plotnikov Intent newIntent = new Intent(mContext, CallContactActivity.class); 205884e393af339ba1357dd1aea4c8e821396c214b9Dmitri Plotnikov newIntent.setData(data); 206884e393af339ba1357dd1aea4c8e821396c214b9Dmitri Plotnikov request.setRedirectIntent(newIntent); 2076178cb47846e7efc9c245a9b9ba93032a0038921Dmitri Plotnikov } else { 208884e393af339ba1357dd1aea4c8e821396c214b9Dmitri Plotnikov request.setRedirectIntent(new Intent(Intent.ACTION_VIEW, data)); 2096178cb47846e7efc9c245a9b9ba93032a0038921Dmitri Plotnikov } 2106178cb47846e7efc9c245a9b9ba93032a0038921Dmitri Plotnikov } else if (Intents.SEARCH_SUGGESTION_DIAL_NUMBER_CLICKED.equals(action)) { 211884e393af339ba1357dd1aea4c8e821396c214b9Dmitri Plotnikov request.setRedirectIntent(new Intent(Intent.ACTION_CALL_PRIVILEGED, intent.getData())); 2126178cb47846e7efc9c245a9b9ba93032a0038921Dmitri Plotnikov } else if (Intents.SEARCH_SUGGESTION_CREATE_CONTACT_CLICKED.equals(action)) { 2136178cb47846e7efc9c245a9b9ba93032a0038921Dmitri Plotnikov // TODO actually support this in EditContactActivity. 2146178cb47846e7efc9c245a9b9ba93032a0038921Dmitri Plotnikov String number = intent.getData().getSchemeSpecificPart(); 2156178cb47846e7efc9c245a9b9ba93032a0038921Dmitri Plotnikov Intent newIntent = new Intent(Intent.ACTION_INSERT, Contacts.CONTENT_URI); 2166178cb47846e7efc9c245a9b9ba93032a0038921Dmitri Plotnikov newIntent.putExtra(Intents.Insert.PHONE, number); 2171ce1e7cf261994e46e6fe85ed4d445241ad55f16Dmitri Plotnikov request.setRedirectIntent(newIntent); 2186178cb47846e7efc9c245a9b9ba93032a0038921Dmitri Plotnikov 219884e393af339ba1357dd1aea4c8e821396c214b9Dmitri Plotnikov } 2201ce1e7cf261994e46e6fe85ed4d445241ad55f16Dmitri Plotnikov // Allow the title to be set to a custom String using an extra on the intent 2211ce1e7cf261994e46e6fe85ed4d445241ad55f16Dmitri Plotnikov String title = intent.getStringExtra(UI.TITLE_EXTRA_KEY); 2221ce1e7cf261994e46e6fe85ed4d445241ad55f16Dmitri Plotnikov if (title != null) { 2231ce1e7cf261994e46e6fe85ed4d445241ad55f16Dmitri Plotnikov request.setActivityTitle(title); 2246178cb47846e7efc9c245a9b9ba93032a0038921Dmitri Plotnikov } 2256178cb47846e7efc9c245a9b9ba93032a0038921Dmitri Plotnikov 2261ce1e7cf261994e46e6fe85ed4d445241ad55f16Dmitri Plotnikov return request; 2276178cb47846e7efc9c245a9b9ba93032a0038921Dmitri Plotnikov } 2286178cb47846e7efc9c245a9b9ba93032a0038921Dmitri Plotnikov} 229