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