ContactsIntentResolver.java revision 1ce53ffde8023fc1a8531c63b459d294912bccc7
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; 21fadd5e1f1845b8d98e247bbd30535928dc5e0f81Daisuke Miyakawaimport com.android.contacts.ContactsUtils; 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; 31f0c4681ee4191e47103f8699dd1bf9cf7fc8b669Daisuke Miyakawaimport android.provider.ContactsContract; 32c86ace78ca5c2e10dcb001a916386c8a9865e230Daniel Lehmannimport android.provider.ContactsContract.CommonDataKinds.Email; 336178cb47846e7efc9c245a9b9ba93032a0038921Dmitri Plotnikovimport android.provider.ContactsContract.CommonDataKinds.Phone; 346178cb47846e7efc9c245a9b9ba93032a0038921Dmitri Plotnikovimport android.provider.ContactsContract.CommonDataKinds.StructuredPostal; 3540ec3a82d525e73e16a79d5acca23f145dcbfb4aDmitri Plotnikovimport android.provider.ContactsContract.Contacts; 3640ec3a82d525e73e16a79d5acca23f145dcbfb4aDmitri Plotnikovimport android.provider.ContactsContract.Intents; 371ce53ffde8023fc1a8531c63b459d294912bccc7Katherine Kuanimport android.provider.ContactsContract.Intents.Insert; 386178cb47846e7efc9c245a9b9ba93032a0038921Dmitri Plotnikovimport android.provider.ContactsContract.Intents.UI; 396178cb47846e7efc9c245a9b9ba93032a0038921Dmitri Plotnikovimport android.text.TextUtils; 406178cb47846e7efc9c245a9b9ba93032a0038921Dmitri Plotnikovimport android.util.Log; 416178cb47846e7efc9c245a9b9ba93032a0038921Dmitri Plotnikov 426178cb47846e7efc9c245a9b9ba93032a0038921Dmitri Plotnikov/** 43fe42e55dfc483b69c8a7831c16fbdbc5ab19929eDmitri Plotnikov * Parses a Contacts intent, extracting all relevant parts and packaging them 44fe42e55dfc483b69c8a7831c16fbdbc5ab19929eDmitri Plotnikov * as a {@link ContactsRequest} object. 456178cb47846e7efc9c245a9b9ba93032a0038921Dmitri Plotnikov */ 466178cb47846e7efc9c245a9b9ba93032a0038921Dmitri Plotnikov@SuppressWarnings("deprecation") 470906ee326a5553a224eb7b004536f35b340bdcd3Dmitri Plotnikovpublic class ContactsIntentResolver { 486178cb47846e7efc9c245a9b9ba93032a0038921Dmitri Plotnikov 49b979b4294c14f2bc562a5279910bafb7ac1a92b4Dmitri Plotnikov private static final String TAG = "ContactsIntentResolver"; 506178cb47846e7efc9c245a9b9ba93032a0038921Dmitri Plotnikov 516178cb47846e7efc9c245a9b9ba93032a0038921Dmitri Plotnikov private final Activity mContext; 526178cb47846e7efc9c245a9b9ba93032a0038921Dmitri Plotnikov 531540674a23a2ac0277a5aca3fa4ed41a6e1b74c3Dmitri Plotnikov public ContactsIntentResolver(Activity context) { 546178cb47846e7efc9c245a9b9ba93032a0038921Dmitri Plotnikov this.mContext = context; 556178cb47846e7efc9c245a9b9ba93032a0038921Dmitri Plotnikov } 566178cb47846e7efc9c245a9b9ba93032a0038921Dmitri Plotnikov 571ce1e7cf261994e46e6fe85ed4d445241ad55f16Dmitri Plotnikov public ContactsRequest resolveIntent(Intent intent) { 581ce1e7cf261994e46e6fe85ed4d445241ad55f16Dmitri Plotnikov ContactsRequest request = new ContactsRequest(); 591ce1e7cf261994e46e6fe85ed4d445241ad55f16Dmitri Plotnikov 606178cb47846e7efc9c245a9b9ba93032a0038921Dmitri Plotnikov String action = intent.getAction(); 616178cb47846e7efc9c245a9b9ba93032a0038921Dmitri Plotnikov 626178cb47846e7efc9c245a9b9ba93032a0038921Dmitri Plotnikov Log.i(TAG, "Called with action: " + action); 631ce1e7cf261994e46e6fe85ed4d445241ad55f16Dmitri Plotnikov 641ce1e7cf261994e46e6fe85ed4d445241ad55f16Dmitri Plotnikov if (UI.LIST_DEFAULT.equals(action) ) { 651ce1e7cf261994e46e6fe85ed4d445241ad55f16Dmitri Plotnikov request.setActionCode(ContactsRequest.ACTION_DEFAULT); 666178cb47846e7efc9c245a9b9ba93032a0038921Dmitri Plotnikov } else if (UI.LIST_ALL_CONTACTS_ACTION.equals(action)) { 6748cc25047d2c61828e9137c50b3496feada7a175Dmitri Plotnikov request.setActionCode(ContactsRequest.ACTION_ALL_CONTACTS); 681ce1e7cf261994e46e6fe85ed4d445241ad55f16Dmitri Plotnikov } else if (UI.LIST_CONTACTS_WITH_PHONES_ACTION.equals(action)) { 6991ab5b436ebf12e29fdf3e19b3ea195287fcc1d9Dmitri Plotnikov request.setActionCode(ContactsRequest.ACTION_CONTACTS_WITH_PHONES); 706178cb47846e7efc9c245a9b9ba93032a0038921Dmitri Plotnikov } else if (UI.LIST_STARRED_ACTION.equals(action)) { 711ce1e7cf261994e46e6fe85ed4d445241ad55f16Dmitri Plotnikov request.setActionCode(ContactsRequest.ACTION_STARRED); 726178cb47846e7efc9c245a9b9ba93032a0038921Dmitri Plotnikov } else if (UI.LIST_FREQUENT_ACTION.equals(action)) { 731ce1e7cf261994e46e6fe85ed4d445241ad55f16Dmitri Plotnikov request.setActionCode(ContactsRequest.ACTION_FREQUENT); 746178cb47846e7efc9c245a9b9ba93032a0038921Dmitri Plotnikov } else if (UI.LIST_STREQUENT_ACTION.equals(action)) { 751ce1e7cf261994e46e6fe85ed4d445241ad55f16Dmitri Plotnikov request.setActionCode(ContactsRequest.ACTION_STREQUENT); 761ce1e7cf261994e46e6fe85ed4d445241ad55f16Dmitri Plotnikov } else if (UI.LIST_GROUP_ACTION.equals(action)) { 771ce1e7cf261994e46e6fe85ed4d445241ad55f16Dmitri Plotnikov request.setActionCode(ContactsRequest.ACTION_GROUP); 7856b10f65d5f3dfd2ab80510f27371b57821c7f6dMakoto Onuki // We no longer support UI.GROUP_NAME_EXTRA_KEY 796178cb47846e7efc9c245a9b9ba93032a0038921Dmitri Plotnikov } else if (Intent.ACTION_PICK.equals(action)) { 806178cb47846e7efc9c245a9b9ba93032a0038921Dmitri Plotnikov final String resolvedType = intent.resolveType(mContext); 816178cb47846e7efc9c245a9b9ba93032a0038921Dmitri Plotnikov if (Contacts.CONTENT_TYPE.equals(resolvedType)) { 821ce1e7cf261994e46e6fe85ed4d445241ad55f16Dmitri Plotnikov request.setActionCode(ContactsRequest.ACTION_PICK_CONTACT); 836178cb47846e7efc9c245a9b9ba93032a0038921Dmitri Plotnikov } else if (People.CONTENT_TYPE.equals(resolvedType)) { 841ce1e7cf261994e46e6fe85ed4d445241ad55f16Dmitri Plotnikov request.setActionCode(ContactsRequest.ACTION_PICK_CONTACT); 851ce1e7cf261994e46e6fe85ed4d445241ad55f16Dmitri Plotnikov request.setLegacyCompatibilityMode(true); 866178cb47846e7efc9c245a9b9ba93032a0038921Dmitri Plotnikov } else if (Phone.CONTENT_TYPE.equals(resolvedType)) { 871ce1e7cf261994e46e6fe85ed4d445241ad55f16Dmitri Plotnikov request.setActionCode(ContactsRequest.ACTION_PICK_PHONE); 886178cb47846e7efc9c245a9b9ba93032a0038921Dmitri Plotnikov } else if (Phones.CONTENT_TYPE.equals(resolvedType)) { 891ce1e7cf261994e46e6fe85ed4d445241ad55f16Dmitri Plotnikov request.setActionCode(ContactsRequest.ACTION_PICK_PHONE); 901ce1e7cf261994e46e6fe85ed4d445241ad55f16Dmitri Plotnikov request.setLegacyCompatibilityMode(true); 916178cb47846e7efc9c245a9b9ba93032a0038921Dmitri Plotnikov } else if (StructuredPostal.CONTENT_TYPE.equals(resolvedType)) { 921ce1e7cf261994e46e6fe85ed4d445241ad55f16Dmitri Plotnikov request.setActionCode(ContactsRequest.ACTION_PICK_POSTAL); 936178cb47846e7efc9c245a9b9ba93032a0038921Dmitri Plotnikov } else if (ContactMethods.CONTENT_POSTAL_TYPE.equals(resolvedType)) { 941ce1e7cf261994e46e6fe85ed4d445241ad55f16Dmitri Plotnikov request.setActionCode(ContactsRequest.ACTION_PICK_POSTAL); 951ce1e7cf261994e46e6fe85ed4d445241ad55f16Dmitri Plotnikov request.setLegacyCompatibilityMode(true); 96c86ace78ca5c2e10dcb001a916386c8a9865e230Daniel Lehmann } else if (Email.CONTENT_TYPE.equals(resolvedType)) { 97c86ace78ca5c2e10dcb001a916386c8a9865e230Daniel Lehmann request.setActionCode(ContactsRequest.ACTION_PICK_EMAIL); 986178cb47846e7efc9c245a9b9ba93032a0038921Dmitri Plotnikov } 996178cb47846e7efc9c245a9b9ba93032a0038921Dmitri Plotnikov } else if (Intent.ACTION_CREATE_SHORTCUT.equals(action)) { 100884e393af339ba1357dd1aea4c8e821396c214b9Dmitri Plotnikov String component = intent.getComponent().getClassName(); 1016178cb47846e7efc9c245a9b9ba93032a0038921Dmitri Plotnikov if (component.equals("alias.DialShortcut")) { 1021ce1e7cf261994e46e6fe85ed4d445241ad55f16Dmitri Plotnikov request.setActionCode(ContactsRequest.ACTION_CREATE_SHORTCUT_CALL); 1036178cb47846e7efc9c245a9b9ba93032a0038921Dmitri Plotnikov } else if (component.equals("alias.MessageShortcut")) { 1041ce1e7cf261994e46e6fe85ed4d445241ad55f16Dmitri Plotnikov request.setActionCode(ContactsRequest.ACTION_CREATE_SHORTCUT_SMS); 1056178cb47846e7efc9c245a9b9ba93032a0038921Dmitri Plotnikov } else { 1061ce1e7cf261994e46e6fe85ed4d445241ad55f16Dmitri Plotnikov request.setActionCode(ContactsRequest.ACTION_CREATE_SHORTCUT_CONTACT); 1076178cb47846e7efc9c245a9b9ba93032a0038921Dmitri Plotnikov } 1086178cb47846e7efc9c245a9b9ba93032a0038921Dmitri Plotnikov } else if (Intent.ACTION_GET_CONTENT.equals(action)) { 109884e393af339ba1357dd1aea4c8e821396c214b9Dmitri Plotnikov String type = intent.getType(); 1106178cb47846e7efc9c245a9b9ba93032a0038921Dmitri Plotnikov if (Contacts.CONTENT_ITEM_TYPE.equals(type)) { 1111ce1e7cf261994e46e6fe85ed4d445241ad55f16Dmitri Plotnikov request.setActionCode(ContactsRequest.ACTION_PICK_OR_CREATE_CONTACT); 1126178cb47846e7efc9c245a9b9ba93032a0038921Dmitri Plotnikov } else if (Phone.CONTENT_ITEM_TYPE.equals(type)) { 1131ce1e7cf261994e46e6fe85ed4d445241ad55f16Dmitri Plotnikov request.setActionCode(ContactsRequest.ACTION_PICK_PHONE); 1146178cb47846e7efc9c245a9b9ba93032a0038921Dmitri Plotnikov } else if (Phones.CONTENT_ITEM_TYPE.equals(type)) { 1151ce1e7cf261994e46e6fe85ed4d445241ad55f16Dmitri Plotnikov request.setActionCode(ContactsRequest.ACTION_PICK_PHONE); 1161ce1e7cf261994e46e6fe85ed4d445241ad55f16Dmitri Plotnikov request.setLegacyCompatibilityMode(true); 1176178cb47846e7efc9c245a9b9ba93032a0038921Dmitri Plotnikov } else if (StructuredPostal.CONTENT_ITEM_TYPE.equals(type)) { 1181ce1e7cf261994e46e6fe85ed4d445241ad55f16Dmitri Plotnikov request.setActionCode(ContactsRequest.ACTION_PICK_POSTAL); 1196178cb47846e7efc9c245a9b9ba93032a0038921Dmitri Plotnikov } else if (ContactMethods.CONTENT_POSTAL_ITEM_TYPE.equals(type)) { 1201ce1e7cf261994e46e6fe85ed4d445241ad55f16Dmitri Plotnikov request.setActionCode(ContactsRequest.ACTION_PICK_POSTAL); 1211ce1e7cf261994e46e6fe85ed4d445241ad55f16Dmitri Plotnikov request.setLegacyCompatibilityMode(true); 1226178cb47846e7efc9c245a9b9ba93032a0038921Dmitri Plotnikov } else if (People.CONTENT_ITEM_TYPE.equals(type)) { 1231ce1e7cf261994e46e6fe85ed4d445241ad55f16Dmitri Plotnikov request.setActionCode(ContactsRequest.ACTION_PICK_OR_CREATE_CONTACT); 1241ce1e7cf261994e46e6fe85ed4d445241ad55f16Dmitri Plotnikov request.setLegacyCompatibilityMode(true); 1256178cb47846e7efc9c245a9b9ba93032a0038921Dmitri Plotnikov } 1266178cb47846e7efc9c245a9b9ba93032a0038921Dmitri Plotnikov } else if (Intent.ACTION_INSERT_OR_EDIT.equals(action)) { 1271ce1e7cf261994e46e6fe85ed4d445241ad55f16Dmitri Plotnikov request.setActionCode(ContactsRequest.ACTION_INSERT_OR_EDIT_CONTACT); 1286178cb47846e7efc9c245a9b9ba93032a0038921Dmitri Plotnikov } else if (Intent.ACTION_SEARCH.equals(action)) { 1291ce53ffde8023fc1a8531c63b459d294912bccc7Katherine Kuan String query = intent.getStringExtra(SearchManager.QUERY); 1306178cb47846e7efc9c245a9b9ba93032a0038921Dmitri Plotnikov // See if the suggestion was clicked with a search action key (call button) 1316178cb47846e7efc9c245a9b9ba93032a0038921Dmitri Plotnikov if ("call".equals(intent.getStringExtra(SearchManager.ACTION_MSG))) { 1326178cb47846e7efc9c245a9b9ba93032a0038921Dmitri Plotnikov if (!TextUtils.isEmpty(query)) { 133fadd5e1f1845b8d98e247bbd30535928dc5e0f81Daisuke Miyakawa request.setRedirectIntent(ContactsUtils.getCallIntent(query)); 1346178cb47846e7efc9c245a9b9ba93032a0038921Dmitri Plotnikov } 1356178cb47846e7efc9c245a9b9ba93032a0038921Dmitri Plotnikov } else { 1361ce53ffde8023fc1a8531c63b459d294912bccc7Katherine Kuan // If the {@link SearchManager.QUERY} is empty, then check if a phone number 1371ce53ffde8023fc1a8531c63b459d294912bccc7Katherine Kuan // or email is specified, in that priority. 1381ce53ffde8023fc1a8531c63b459d294912bccc7Katherine Kuan if (TextUtils.isEmpty(query)) { 1391ce53ffde8023fc1a8531c63b459d294912bccc7Katherine Kuan query = intent.getStringExtra(Insert.PHONE); 1401ce53ffde8023fc1a8531c63b459d294912bccc7Katherine Kuan } 1411ce53ffde8023fc1a8531c63b459d294912bccc7Katherine Kuan if (TextUtils.isEmpty(query)) { 1421ce53ffde8023fc1a8531c63b459d294912bccc7Katherine Kuan query = intent.getStringExtra(Insert.EMAIL); 1431ce53ffde8023fc1a8531c63b459d294912bccc7Katherine Kuan } 1441ce53ffde8023fc1a8531c63b459d294912bccc7Katherine Kuan request.setQueryString(query); 1454cc85dd15d6546bcb2feb587691bfca3f1654d94Dmitri Plotnikov request.setSearchMode(true); 1466178cb47846e7efc9c245a9b9ba93032a0038921Dmitri Plotnikov } 14740ec3a82d525e73e16a79d5acca23f145dcbfb4aDmitri Plotnikov } else if (Intent.ACTION_VIEW.equals(action)) { 148f0c4681ee4191e47103f8699dd1bf9cf7fc8b669Daisuke Miyakawa final String resolvedType = intent.resolveType(mContext); 149f0c4681ee4191e47103f8699dd1bf9cf7fc8b669Daisuke Miyakawa if (ContactsContract.Contacts.CONTENT_TYPE.equals(resolvedType) 150f0c4681ee4191e47103f8699dd1bf9cf7fc8b669Daisuke Miyakawa || android.provider.Contacts.People.CONTENT_TYPE.equals(resolvedType)) { 151f0c4681ee4191e47103f8699dd1bf9cf7fc8b669Daisuke Miyakawa request.setActionCode(ContactsRequest.ACTION_ALL_CONTACTS); 152f0c4681ee4191e47103f8699dd1bf9cf7fc8b669Daisuke Miyakawa } else { 153f0c4681ee4191e47103f8699dd1bf9cf7fc8b669Daisuke Miyakawa request.setActionCode(ContactsRequest.ACTION_VIEW_CONTACT); 154f0c4681ee4191e47103f8699dd1bf9cf7fc8b669Daisuke Miyakawa request.setContactUri(intent.getData()); 155f0c4681ee4191e47103f8699dd1bf9cf7fc8b669Daisuke Miyakawa intent.setAction(Intent.ACTION_DEFAULT); 156f0c4681ee4191e47103f8699dd1bf9cf7fc8b669Daisuke Miyakawa intent.setData(null); 157f0c4681ee4191e47103f8699dd1bf9cf7fc8b669Daisuke Miyakawa } 1581ce1e7cf261994e46e6fe85ed4d445241ad55f16Dmitri Plotnikov } else if (UI.FILTER_CONTACTS_ACTION.equals(action)) { 1591ce1e7cf261994e46e6fe85ed4d445241ad55f16Dmitri Plotnikov // When we get a FILTER_CONTACTS_ACTION, it represents search in the context 1601ce1e7cf261994e46e6fe85ed4d445241ad55f16Dmitri Plotnikov // of some other action. Let's retrieve the original action to provide proper 1611ce1e7cf261994e46e6fe85ed4d445241ad55f16Dmitri Plotnikov // context for the search queries. 1621ce1e7cf261994e46e6fe85ed4d445241ad55f16Dmitri Plotnikov request.setActionCode(ContactsRequest.ACTION_DEFAULT); 1636178cb47846e7efc9c245a9b9ba93032a0038921Dmitri Plotnikov Bundle extras = intent.getExtras(); 1646178cb47846e7efc9c245a9b9ba93032a0038921Dmitri Plotnikov if (extras != null) { 1651ce1e7cf261994e46e6fe85ed4d445241ad55f16Dmitri Plotnikov request.setQueryString(extras.getString(UI.FILTER_TEXT_EXTRA_KEY)); 1661ce1e7cf261994e46e6fe85ed4d445241ad55f16Dmitri Plotnikov 1671ce1e7cf261994e46e6fe85ed4d445241ad55f16Dmitri Plotnikov ContactsRequest originalRequest = 1681ce1e7cf261994e46e6fe85ed4d445241ad55f16Dmitri Plotnikov (ContactsRequest)extras.get(ContactsSearchManager.ORIGINAL_REQUEST_KEY); 1691ce1e7cf261994e46e6fe85ed4d445241ad55f16Dmitri Plotnikov if (originalRequest != null) { 1701ce1e7cf261994e46e6fe85ed4d445241ad55f16Dmitri Plotnikov request.copyFrom(originalRequest); 1711ce1e7cf261994e46e6fe85ed4d445241ad55f16Dmitri Plotnikov } 1726178cb47846e7efc9c245a9b9ba93032a0038921Dmitri Plotnikov } 1736178cb47846e7efc9c245a9b9ba93032a0038921Dmitri Plotnikov 1741ce1e7cf261994e46e6fe85ed4d445241ad55f16Dmitri Plotnikov request.setSearchMode(true); 1754cc85dd15d6546bcb2feb587691bfca3f1654d94Dmitri Plotnikov 1766178cb47846e7efc9c245a9b9ba93032a0038921Dmitri Plotnikov // Since this is the filter activity it receives all intents 1776178cb47846e7efc9c245a9b9ba93032a0038921Dmitri Plotnikov // dispatched from the SearchManager for security reasons 1786178cb47846e7efc9c245a9b9ba93032a0038921Dmitri Plotnikov // so we need to re-dispatch from here to the intended target. 1796178cb47846e7efc9c245a9b9ba93032a0038921Dmitri Plotnikov } else if (Intents.SEARCH_SUGGESTION_CLICKED.equals(action)) { 1806178cb47846e7efc9c245a9b9ba93032a0038921Dmitri Plotnikov Uri data = intent.getData(); 1816178cb47846e7efc9c245a9b9ba93032a0038921Dmitri Plotnikov // See if the suggestion was clicked with a search action key (call button) 182884e393af339ba1357dd1aea4c8e821396c214b9Dmitri Plotnikov if ("call".equals(intent.getStringExtra(SearchManager.ACTION_MSG))) { 183884e393af339ba1357dd1aea4c8e821396c214b9Dmitri Plotnikov Intent newIntent = new Intent(mContext, CallContactActivity.class); 184884e393af339ba1357dd1aea4c8e821396c214b9Dmitri Plotnikov newIntent.setData(data); 185884e393af339ba1357dd1aea4c8e821396c214b9Dmitri Plotnikov request.setRedirectIntent(newIntent); 1866178cb47846e7efc9c245a9b9ba93032a0038921Dmitri Plotnikov } else { 18727b97bca14c84b3f830c7a433e14ae5c180a32c3Dmitri Plotnikov request.setActionCode(ContactsRequest.ACTION_VIEW_CONTACT); 18827b97bca14c84b3f830c7a433e14ae5c180a32c3Dmitri Plotnikov request.setContactUri(data); 189d959104d37df65f0d6de9290c3fa2b59065be0fcDmitri Plotnikov intent.setAction(Intent.ACTION_DEFAULT); 190d959104d37df65f0d6de9290c3fa2b59065be0fcDmitri Plotnikov intent.setData(null); 1916178cb47846e7efc9c245a9b9ba93032a0038921Dmitri Plotnikov } 1926178cb47846e7efc9c245a9b9ba93032a0038921Dmitri Plotnikov } else if (Intents.SEARCH_SUGGESTION_DIAL_NUMBER_CLICKED.equals(action)) { 193fadd5e1f1845b8d98e247bbd30535928dc5e0f81Daisuke Miyakawa request.setRedirectIntent(ContactsUtils.getCallIntent(intent.getData())); 1946178cb47846e7efc9c245a9b9ba93032a0038921Dmitri Plotnikov } else if (Intents.SEARCH_SUGGESTION_CREATE_CONTACT_CLICKED.equals(action)) { 1956178cb47846e7efc9c245a9b9ba93032a0038921Dmitri Plotnikov // TODO actually support this in EditContactActivity. 1966178cb47846e7efc9c245a9b9ba93032a0038921Dmitri Plotnikov String number = intent.getData().getSchemeSpecificPart(); 1976178cb47846e7efc9c245a9b9ba93032a0038921Dmitri Plotnikov Intent newIntent = new Intent(Intent.ACTION_INSERT, Contacts.CONTENT_URI); 1986178cb47846e7efc9c245a9b9ba93032a0038921Dmitri Plotnikov newIntent.putExtra(Intents.Insert.PHONE, number); 1991ce1e7cf261994e46e6fe85ed4d445241ad55f16Dmitri Plotnikov request.setRedirectIntent(newIntent); 2006178cb47846e7efc9c245a9b9ba93032a0038921Dmitri Plotnikov 201884e393af339ba1357dd1aea4c8e821396c214b9Dmitri Plotnikov } 2021ce1e7cf261994e46e6fe85ed4d445241ad55f16Dmitri Plotnikov // Allow the title to be set to a custom String using an extra on the intent 2031ce1e7cf261994e46e6fe85ed4d445241ad55f16Dmitri Plotnikov String title = intent.getStringExtra(UI.TITLE_EXTRA_KEY); 2041ce1e7cf261994e46e6fe85ed4d445241ad55f16Dmitri Plotnikov if (title != null) { 2051ce1e7cf261994e46e6fe85ed4d445241ad55f16Dmitri Plotnikov request.setActivityTitle(title); 2066178cb47846e7efc9c245a9b9ba93032a0038921Dmitri Plotnikov } 2071ce1e7cf261994e46e6fe85ed4d445241ad55f16Dmitri Plotnikov return request; 2086178cb47846e7efc9c245a9b9ba93032a0038921Dmitri Plotnikov } 2096178cb47846e7efc9c245a9b9ba93032a0038921Dmitri Plotnikov} 210