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