1b979b4294c14f2bc562a5279910bafb7ac1a92b4Dmitri Plotnikov/*
2b979b4294c14f2bc562a5279910bafb7ac1a92b4Dmitri Plotnikov * Copyright (C) 2007 The Android Open Source Project
3b979b4294c14f2bc562a5279910bafb7ac1a92b4Dmitri Plotnikov *
4b979b4294c14f2bc562a5279910bafb7ac1a92b4Dmitri Plotnikov * Licensed under the Apache License, Version 2.0 (the "License");
5b979b4294c14f2bc562a5279910bafb7ac1a92b4Dmitri Plotnikov * you may not use this file except in compliance with the License.
6b979b4294c14f2bc562a5279910bafb7ac1a92b4Dmitri Plotnikov * You may obtain a copy of the License at
7b979b4294c14f2bc562a5279910bafb7ac1a92b4Dmitri Plotnikov *
8b979b4294c14f2bc562a5279910bafb7ac1a92b4Dmitri Plotnikov *      http://www.apache.org/licenses/LICENSE-2.0
9b979b4294c14f2bc562a5279910bafb7ac1a92b4Dmitri Plotnikov *
10b979b4294c14f2bc562a5279910bafb7ac1a92b4Dmitri Plotnikov * Unless required by applicable law or agreed to in writing, software
11b979b4294c14f2bc562a5279910bafb7ac1a92b4Dmitri Plotnikov * distributed under the License is distributed on an "AS IS" BASIS,
12b979b4294c14f2bc562a5279910bafb7ac1a92b4Dmitri Plotnikov * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13b979b4294c14f2bc562a5279910bafb7ac1a92b4Dmitri Plotnikov * See the License for the specific language governing permissions and
14b979b4294c14f2bc562a5279910bafb7ac1a92b4Dmitri Plotnikov * limitations under the License.
15b979b4294c14f2bc562a5279910bafb7ac1a92b4Dmitri Plotnikov */
16b979b4294c14f2bc562a5279910bafb7ac1a92b4Dmitri Plotnikov
17b979b4294c14f2bc562a5279910bafb7ac1a92b4Dmitri Plotnikovpackage com.android.contacts.activities;
18b979b4294c14f2bc562a5279910bafb7ac1a92b4Dmitri Plotnikov
1984b3cc7fd565ff911ac46a763fdc2f5740a18001Dmitri Plotnikovimport android.app.Fragment;
201d815e67ea1304d693b9e09e7e53e76dc61883e1Jay Shraunerimport android.content.ActivityNotFoundException;
21b979b4294c14f2bc562a5279910bafb7ac1a92b4Dmitri Plotnikovimport android.content.Intent;
22bd9ef3c60669d71543b3506d4959c1fe4be409dcJohn Shaoimport android.graphics.PorterDuff;
23bd9ef3c60669d71543b3506d4959c1fe4be409dcJohn Shaoimport android.graphics.drawable.Drawable;
24b979b4294c14f2bc562a5279910bafb7ac1a92b4Dmitri Plotnikovimport android.net.Uri;
25b979b4294c14f2bc562a5279910bafb7ac1a92b4Dmitri Plotnikovimport android.os.Bundle;
26b979b4294c14f2bc562a5279910bafb7ac1a92b4Dmitri Plotnikovimport android.provider.ContactsContract.Contacts;
27bd9ef3c60669d71543b3506d4959c1fe4be409dcJohn Shaoimport android.support.v4.content.ContextCompat;
28a489721e65c5f549ab26272af08eb2d05a869976Walter Jangimport android.support.v7.widget.Toolbar;
294d174aad97cd382f810e3bf1a7f1f4f4772be118Dmitri Plotnikovimport android.text.TextUtils;
30a8729cdf778f9ca927b06afde685f7ac6b8c917fDaisuke Miyakawaimport android.util.Log;
3181cc3b3d09d9296e521ac3454ad01c6b6c2ba71bBrian Attwellimport android.view.Menu;
3281cc3b3d09d9296e521ac3454ad01c6b6c2ba71bBrian Attwellimport android.view.MenuInflater;
33b979b4294c14f2bc562a5279910bafb7ac1a92b4Dmitri Plotnikovimport android.view.MenuItem;
34b979b4294c14f2bc562a5279910bafb7ac1a92b4Dmitri Plotnikovimport android.view.View;
3563c311a278cd8ba28d6d8f3b49c0ccd4dffeb57dDmitri Plotnikovimport android.view.View.OnClickListener;
36a8729cdf778f9ca927b06afde685f7ac6b8c917fDaisuke Miyakawaimport android.view.View.OnFocusChangeListener;
37f5493a638ad3faa5183ab7d33872585bcd6e178dWenyi Wangimport android.widget.TextView;
381d815e67ea1304d693b9e09e7e53e76dc61883e1Jay Shraunerimport android.widget.Toast;
39b979b4294c14f2bc562a5279910bafb7ac1a92b4Dmitri Plotnikov
40a489721e65c5f549ab26272af08eb2d05a869976Walter Jangimport com.android.contacts.AppCompatContactsActivity;
41e0b2f1e2d01d1ac52ba207dc7ce76971d853298eChiao Chengimport com.android.contacts.R;
42ac679af994faece43536f1e8b2613f30c50300e1Walter Jangimport com.android.contacts.editor.EditorIntents;
430a49afa2ad697307cc04ef4cb86570574fa720f2Gary Maiimport com.android.contacts.list.ContactEntryListFragment;
44e0b2f1e2d01d1ac52ba207dc7ce76971d853298eChiao Chengimport com.android.contacts.list.ContactPickerFragment;
45e0b2f1e2d01d1ac52ba207dc7ce76971d853298eChiao Chengimport com.android.contacts.list.ContactsIntentResolver;
46e0b2f1e2d01d1ac52ba207dc7ce76971d853298eChiao Chengimport com.android.contacts.list.ContactsRequest;
470a49afa2ad697307cc04ef4cb86570574fa720f2Gary Maiimport com.android.contacts.list.DirectoryListLoader;
48e0b2f1e2d01d1ac52ba207dc7ce76971d853298eChiao Chengimport com.android.contacts.list.EmailAddressPickerFragment;
49a489721e65c5f549ab26272af08eb2d05a869976Walter Jangimport com.android.contacts.list.GroupMemberPickerFragment;
5081cc3b3d09d9296e521ac3454ad01c6b6c2ba71bBrian Attwellimport com.android.contacts.list.JoinContactListFragment;
51a953aa785610afcda67a17a1c109d09c4773ca90Chiao Chengimport com.android.contacts.list.LegacyPhoneNumberPickerFragment;
52a489721e65c5f549ab26272af08eb2d05a869976Walter Jangimport com.android.contacts.list.MultiSelectContactsListFragment;
53a489721e65c5f549ab26272af08eb2d05a869976Walter Jangimport com.android.contacts.list.MultiSelectContactsListFragment.OnCheckBoxListActionListener;
540a49afa2ad697307cc04ef4cb86570574fa720f2Gary Maiimport com.android.contacts.list.MultiSelectEmailAddressesListFragment;
550a49afa2ad697307cc04ef4cb86570574fa720f2Gary Maiimport com.android.contacts.list.MultiSelectPhoneNumbersListFragment;
56e0b2f1e2d01d1ac52ba207dc7ce76971d853298eChiao Chengimport com.android.contacts.list.OnContactPickerActionListener;
57e0b2f1e2d01d1ac52ba207dc7ce76971d853298eChiao Chengimport com.android.contacts.list.OnEmailAddressPickerActionListener;
580a49afa2ad697307cc04ef4cb86570574fa720f2Gary Maiimport com.android.contacts.list.OnPhoneNumberPickerActionListener;
59e0b2f1e2d01d1ac52ba207dc7ce76971d853298eChiao Chengimport com.android.contacts.list.OnPostalAddressPickerActionListener;
600a49afa2ad697307cc04ef4cb86570574fa720f2Gary Maiimport com.android.contacts.list.PhoneNumberPickerFragment;
61e0b2f1e2d01d1ac52ba207dc7ce76971d853298eChiao Chengimport com.android.contacts.list.PostalAddressPickerFragment;
62a489721e65c5f549ab26272af08eb2d05a869976Walter Jangimport com.android.contacts.list.UiIntentActions;
630a49afa2ad697307cc04ef4cb86570574fa720f2Gary Maiimport com.android.contacts.logging.ListEvent;
640a49afa2ad697307cc04ef4cb86570574fa720f2Gary Maiimport com.android.contacts.util.ImplicitIntentsUtil;
650a49afa2ad697307cc04ef4cb86570574fa720f2Gary Maiimport com.android.contacts.util.ViewUtil;
66e0b2f1e2d01d1ac52ba207dc7ce76971d853298eChiao Cheng
67f9779ef9d0c74886b2c495f9e4993017f5192242Walter Jangimport java.util.ArrayList;
6837bddc2fa266fa0378fcd85ac5047b1fb0af2dc0Katherine Kuan
69b979b4294c14f2bc562a5279910bafb7ac1a92b4Dmitri Plotnikov/**
70b979b4294c14f2bc562a5279910bafb7ac1a92b4Dmitri Plotnikov * Displays a list of contacts (or phone numbers or postal addresses) for the
71b979b4294c14f2bc562a5279910bafb7ac1a92b4Dmitri Plotnikov * purposes of selecting one.
72b979b4294c14f2bc562a5279910bafb7ac1a92b4Dmitri Plotnikov */
73a489721e65c5f549ab26272af08eb2d05a869976Walter Jangpublic class ContactSelectionActivity extends AppCompatContactsActivity implements
74a489721e65c5f549ab26272af08eb2d05a869976Walter Jang        View.OnCreateContextMenuListener, ActionBarAdapter.Listener, OnClickListener,
75a489721e65c5f549ab26272af08eb2d05a869976Walter Jang        OnFocusChangeListener, OnCheckBoxListActionListener {
76a489721e65c5f549ab26272af08eb2d05a869976Walter Jang    private static final String TAG = "ContactSelection";
77b979b4294c14f2bc562a5279910bafb7ac1a92b4Dmitri Plotnikov
7884b3cc7fd565ff911ac46a763fdc2f5740a18001Dmitri Plotnikov    private static final String KEY_ACTION_CODE = "actionCode";
7981cc3b3d09d9296e521ac3454ad01c6b6c2ba71bBrian Attwell    private static final String KEY_SEARCH_MODE = "searchMode";
804d174aad97cd382f810e3bf1a7f1f4f4772be118Dmitri Plotnikov    private static final int DEFAULT_DIRECTORY_RESULT_LIMIT = 20;
8184b3cc7fd565ff911ac46a763fdc2f5740a18001Dmitri Plotnikov
82b979b4294c14f2bc562a5279910bafb7ac1a92b4Dmitri Plotnikov    private ContactsIntentResolver mIntentResolver;
83b979b4294c14f2bc562a5279910bafb7ac1a92b4Dmitri Plotnikov    protected ContactEntryListFragment<?> mListFragment;
84b979b4294c14f2bc562a5279910bafb7ac1a92b4Dmitri Plotnikov
8584b3cc7fd565ff911ac46a763fdc2f5740a18001Dmitri Plotnikov    private int mActionCode = -1;
8681cc3b3d09d9296e521ac3454ad01c6b6c2ba71bBrian Attwell    private boolean mIsSearchMode;
87fde48de9ab7f1fb6e2037a32437e4f70716c719bBrian Attwell    private boolean mIsSearchSupported;
88b979b4294c14f2bc562a5279910bafb7ac1a92b4Dmitri Plotnikov
89b979b4294c14f2bc562a5279910bafb7ac1a92b4Dmitri Plotnikov    private ContactsRequest mRequest;
90a489721e65c5f549ab26272af08eb2d05a869976Walter Jang
91a489721e65c5f549ab26272af08eb2d05a869976Walter Jang    private ActionBarAdapter mActionBarAdapter;
92a489721e65c5f549ab26272af08eb2d05a869976Walter Jang    private Toolbar mToolbar;
93b979b4294c14f2bc562a5279910bafb7ac1a92b4Dmitri Plotnikov
94b979b4294c14f2bc562a5279910bafb7ac1a92b4Dmitri Plotnikov    public ContactSelectionActivity() {
95b979b4294c14f2bc562a5279910bafb7ac1a92b4Dmitri Plotnikov        mIntentResolver = new ContactsIntentResolver(this);
96b979b4294c14f2bc562a5279910bafb7ac1a92b4Dmitri Plotnikov    }
97b979b4294c14f2bc562a5279910bafb7ac1a92b4Dmitri Plotnikov
98b979b4294c14f2bc562a5279910bafb7ac1a92b4Dmitri Plotnikov    @Override
9984b3cc7fd565ff911ac46a763fdc2f5740a18001Dmitri Plotnikov    public void onAttachFragment(Fragment fragment) {
10084b3cc7fd565ff911ac46a763fdc2f5740a18001Dmitri Plotnikov        if (fragment instanceof ContactEntryListFragment<?>) {
10184b3cc7fd565ff911ac46a763fdc2f5740a18001Dmitri Plotnikov            mListFragment = (ContactEntryListFragment<?>) fragment;
10284b3cc7fd565ff911ac46a763fdc2f5740a18001Dmitri Plotnikov            setupActionListener();
10384b3cc7fd565ff911ac46a763fdc2f5740a18001Dmitri Plotnikov        }
10484b3cc7fd565ff911ac46a763fdc2f5740a18001Dmitri Plotnikov    }
10584b3cc7fd565ff911ac46a763fdc2f5740a18001Dmitri Plotnikov
10684b3cc7fd565ff911ac46a763fdc2f5740a18001Dmitri Plotnikov    @Override
10784b3cc7fd565ff911ac46a763fdc2f5740a18001Dmitri Plotnikov    protected void onCreate(Bundle savedState) {
10884b3cc7fd565ff911ac46a763fdc2f5740a18001Dmitri Plotnikov        super.onCreate(savedState);
10984b3cc7fd565ff911ac46a763fdc2f5740a18001Dmitri Plotnikov
1101e899dc127a212bfd2198fe7adba5c33eb4cd751Gary Mai        RequestPermissionsActivity.startPermissionActivityIfNeeded(this);
111bdd32641ae2c2bc6214608cc5712dfb2b96e0305Brian Attwell
11284b3cc7fd565ff911ac46a763fdc2f5740a18001Dmitri Plotnikov        if (savedState != null) {
11384b3cc7fd565ff911ac46a763fdc2f5740a18001Dmitri Plotnikov            mActionCode = savedState.getInt(KEY_ACTION_CODE);
11481cc3b3d09d9296e521ac3454ad01c6b6c2ba71bBrian Attwell            mIsSearchMode = savedState.getBoolean(KEY_SEARCH_MODE);
11584b3cc7fd565ff911ac46a763fdc2f5740a18001Dmitri Plotnikov        }
116acd8e8ba4e8e3595a5d12b47b5972aff4a63e131Katherine Kuan
117b979b4294c14f2bc562a5279910bafb7ac1a92b4Dmitri Plotnikov        // Extract relevant information from the intent
118b979b4294c14f2bc562a5279910bafb7ac1a92b4Dmitri Plotnikov        mRequest = mIntentResolver.resolveIntent(getIntent());
119b979b4294c14f2bc562a5279910bafb7ac1a92b4Dmitri Plotnikov        if (!mRequest.isValid()) {
120b979b4294c14f2bc562a5279910bafb7ac1a92b4Dmitri Plotnikov            setResult(RESULT_CANCELED);
121b979b4294c14f2bc562a5279910bafb7ac1a92b4Dmitri Plotnikov            finish();
122b979b4294c14f2bc562a5279910bafb7ac1a92b4Dmitri Plotnikov            return;
123b979b4294c14f2bc562a5279910bafb7ac1a92b4Dmitri Plotnikov        }
124b979b4294c14f2bc562a5279910bafb7ac1a92b4Dmitri Plotnikov
1254d174aad97cd382f810e3bf1a7f1f4f4772be118Dmitri Plotnikov        setContentView(R.layout.contact_picker);
1264d174aad97cd382f810e3bf1a7f1f4f4772be118Dmitri Plotnikov
127a8729cdf778f9ca927b06afde685f7ac6b8c917fDaisuke Miyakawa        if (mActionCode != mRequest.getActionCode()) {
128a8729cdf778f9ca927b06afde685f7ac6b8c917fDaisuke Miyakawa            mActionCode = mRequest.getActionCode();
129a8729cdf778f9ca927b06afde685f7ac6b8c917fDaisuke Miyakawa            configureListFragment();
130a8729cdf778f9ca927b06afde685f7ac6b8c917fDaisuke Miyakawa        }
131a8729cdf778f9ca927b06afde685f7ac6b8c917fDaisuke Miyakawa
132a489721e65c5f549ab26272af08eb2d05a869976Walter Jang        prepareSearchViewAndActionBar(savedState);
133a489721e65c5f549ab26272af08eb2d05a869976Walter Jang        configureActivityTitle();
134a489721e65c5f549ab26272af08eb2d05a869976Walter Jang    }
135a489721e65c5f549ab26272af08eb2d05a869976Walter Jang
136a489721e65c5f549ab26272af08eb2d05a869976Walter Jang    public boolean isSelectionMode() {
137a489721e65c5f549ab26272af08eb2d05a869976Walter Jang        return mActionBarAdapter.isSelectionMode();
138a8729cdf778f9ca927b06afde685f7ac6b8c917fDaisuke Miyakawa    }
139a8729cdf778f9ca927b06afde685f7ac6b8c917fDaisuke Miyakawa
140a489721e65c5f549ab26272af08eb2d05a869976Walter Jang    public boolean isSearchMode() {
141a489721e65c5f549ab26272af08eb2d05a869976Walter Jang        return mActionBarAdapter.isSearchMode();
142a489721e65c5f549ab26272af08eb2d05a869976Walter Jang    }
143a489721e65c5f549ab26272af08eb2d05a869976Walter Jang
144a489721e65c5f549ab26272af08eb2d05a869976Walter Jang    private void prepareSearchViewAndActionBar(Bundle savedState) {
145a489721e65c5f549ab26272af08eb2d05a869976Walter Jang        mToolbar = getView(R.id.toolbar);
146a489721e65c5f549ab26272af08eb2d05a869976Walter Jang        setSupportActionBar(mToolbar);
147a489721e65c5f549ab26272af08eb2d05a869976Walter Jang
148a489721e65c5f549ab26272af08eb2d05a869976Walter Jang        // Add a shadow under the toolbar.
149a489721e65c5f549ab26272af08eb2d05a869976Walter Jang        ViewUtil.addRectangularOutlineProvider(findViewById(R.id.toolbar_parent), getResources());
150a489721e65c5f549ab26272af08eb2d05a869976Walter Jang
151ca6018dbd827d72730d6564b3d65b7dfc8f5f347Wenyi Wang        mActionBarAdapter = new ActionBarAdapter(this, this, getSupportActionBar(), mToolbar,
152a489721e65c5f549ab26272af08eb2d05a869976Walter Jang                R.string.enter_contact_name);
153a489721e65c5f549ab26272af08eb2d05a869976Walter Jang        mActionBarAdapter.setShowHomeIcon(true);
154a489721e65c5f549ab26272af08eb2d05a869976Walter Jang        mActionBarAdapter.setShowHomeAsUp(true);
155a489721e65c5f549ab26272af08eb2d05a869976Walter Jang        mActionBarAdapter.initialize(savedState, mRequest);
156bbd220183e9bc6d0b056af3c68fa4a31f5b747f2Brian Attwell
15716c29591f6ca97ae621fe6dfc9bfb9fef150870dWalter Jang        // Postal address pickers (and legacy pickers) don't support search, so just show
158d1af8adb1acc56f6c1709d38efe69be9497356a9Daniel Lehmann        // "HomeAsUp" button and title.
159ff6f1bb6782fe92b8745ef4acb6c622fef3d0cbcSean Midford        mIsSearchSupported = mRequest.getActionCode() != ContactsRequest.ACTION_PICK_POSTAL
160ff6f1bb6782fe92b8745ef4acb6c622fef3d0cbcSean Midford                && mRequest.getActionCode() != ContactsRequest.ACTION_PICK_EMAILS
161ff6f1bb6782fe92b8745ef4acb6c622fef3d0cbcSean Midford                && mRequest.getActionCode() != ContactsRequest.ACTION_PICK_PHONES
162ff6f1bb6782fe92b8745ef4acb6c622fef3d0cbcSean Midford                && !mRequest.isLegacyCompatibilityMode();
16381cc3b3d09d9296e521ac3454ad01c6b6c2ba71bBrian Attwell        configureSearchMode();
16481cc3b3d09d9296e521ac3454ad01c6b6c2ba71bBrian Attwell    }
16581cc3b3d09d9296e521ac3454ad01c6b6c2ba71bBrian Attwell
16681cc3b3d09d9296e521ac3454ad01c6b6c2ba71bBrian Attwell    private void configureSearchMode() {
167a489721e65c5f549ab26272af08eb2d05a869976Walter Jang        mActionBarAdapter.setSearchMode(mIsSearchMode);
16881cc3b3d09d9296e521ac3454ad01c6b6c2ba71bBrian Attwell        invalidateOptionsMenu();
169a8729cdf778f9ca927b06afde685f7ac6b8c917fDaisuke Miyakawa    }
170a8729cdf778f9ca927b06afde685f7ac6b8c917fDaisuke Miyakawa
171a8729cdf778f9ca927b06afde685f7ac6b8c917fDaisuke Miyakawa    @Override
172a8729cdf778f9ca927b06afde685f7ac6b8c917fDaisuke Miyakawa    public boolean onOptionsItemSelected(MenuItem item) {
173b697ed768fb817f94524f6c3992547665df331c4Marcus Hagerott        final int id = item.getItemId();
174b697ed768fb817f94524f6c3992547665df331c4Marcus Hagerott        if (id == android.R.id.home) {// Go back to previous screen, intending "cancel"
175b697ed768fb817f94524f6c3992547665df331c4Marcus Hagerott            setResult(RESULT_CANCELED);
176b697ed768fb817f94524f6c3992547665df331c4Marcus Hagerott            onBackPressed();
177b697ed768fb817f94524f6c3992547665df331c4Marcus Hagerott        } else if (id == R.id.menu_search) {
178b697ed768fb817f94524f6c3992547665df331c4Marcus Hagerott            mIsSearchMode = !mIsSearchMode;
179b697ed768fb817f94524f6c3992547665df331c4Marcus Hagerott            configureSearchMode();
180b697ed768fb817f94524f6c3992547665df331c4Marcus Hagerott        } else {
181b697ed768fb817f94524f6c3992547665df331c4Marcus Hagerott            return super.onOptionsItemSelected(item);
182a8729cdf778f9ca927b06afde685f7ac6b8c917fDaisuke Miyakawa        }
183b697ed768fb817f94524f6c3992547665df331c4Marcus Hagerott        return true;
18484b3cc7fd565ff911ac46a763fdc2f5740a18001Dmitri Plotnikov    }
185b979b4294c14f2bc562a5279910bafb7ac1a92b4Dmitri Plotnikov
18684b3cc7fd565ff911ac46a763fdc2f5740a18001Dmitri Plotnikov    @Override
18784b3cc7fd565ff911ac46a763fdc2f5740a18001Dmitri Plotnikov    protected void onSaveInstanceState(Bundle outState) {
18884b3cc7fd565ff911ac46a763fdc2f5740a18001Dmitri Plotnikov        super.onSaveInstanceState(outState);
18984b3cc7fd565ff911ac46a763fdc2f5740a18001Dmitri Plotnikov        outState.putInt(KEY_ACTION_CODE, mActionCode);
19081cc3b3d09d9296e521ac3454ad01c6b6c2ba71bBrian Attwell        outState.putBoolean(KEY_SEARCH_MODE, mIsSearchMode);
1910ef05187bc9a6457b2e172ca869a475420efe115Walter Jang        if (mActionBarAdapter != null) {
1920ef05187bc9a6457b2e172ca869a475420efe115Walter Jang            mActionBarAdapter.onSaveInstanceState(outState);
1930ef05187bc9a6457b2e172ca869a475420efe115Walter Jang        }
194b979b4294c14f2bc562a5279910bafb7ac1a92b4Dmitri Plotnikov    }
195b979b4294c14f2bc562a5279910bafb7ac1a92b4Dmitri Plotnikov
19684b3cc7fd565ff911ac46a763fdc2f5740a18001Dmitri Plotnikov    private void configureActivityTitle() {
197b7a1da621e7ba54a4e9c97a14f35b2650b8e7471Makoto Onuki        if (!TextUtils.isEmpty(mRequest.getActivityTitle())) {
198a489721e65c5f549ab26272af08eb2d05a869976Walter Jang            getSupportActionBar().setTitle(mRequest.getActivityTitle());
19984b3cc7fd565ff911ac46a763fdc2f5740a18001Dmitri Plotnikov            return;
20084b3cc7fd565ff911ac46a763fdc2f5740a18001Dmitri Plotnikov        }
201a489721e65c5f549ab26272af08eb2d05a869976Walter Jang        int titleResId = -1;
20284b3cc7fd565ff911ac46a763fdc2f5740a18001Dmitri Plotnikov        int actionCode = mRequest.getActionCode();
20384b3cc7fd565ff911ac46a763fdc2f5740a18001Dmitri Plotnikov        switch (actionCode) {
20484b3cc7fd565ff911ac46a763fdc2f5740a18001Dmitri Plotnikov            case ContactsRequest.ACTION_INSERT_OR_EDIT_CONTACT: {
205a489721e65c5f549ab26272af08eb2d05a869976Walter Jang                titleResId = R.string.contactInsertOrEditActivityTitle;
20684b3cc7fd565ff911ac46a763fdc2f5740a18001Dmitri Plotnikov                break;
20784b3cc7fd565ff911ac46a763fdc2f5740a18001Dmitri Plotnikov            }
20884b3cc7fd565ff911ac46a763fdc2f5740a18001Dmitri Plotnikov            case ContactsRequest.ACTION_PICK_CONTACT: {
209a489721e65c5f549ab26272af08eb2d05a869976Walter Jang                titleResId = R.string.contactPickerActivityTitle;
21084b3cc7fd565ff911ac46a763fdc2f5740a18001Dmitri Plotnikov                break;
21184b3cc7fd565ff911ac46a763fdc2f5740a18001Dmitri Plotnikov            }
21284b3cc7fd565ff911ac46a763fdc2f5740a18001Dmitri Plotnikov            case ContactsRequest.ACTION_PICK_OR_CREATE_CONTACT: {
213a489721e65c5f549ab26272af08eb2d05a869976Walter Jang                titleResId = R.string.contactPickerActivityTitle;
21484b3cc7fd565ff911ac46a763fdc2f5740a18001Dmitri Plotnikov                break;
21584b3cc7fd565ff911ac46a763fdc2f5740a18001Dmitri Plotnikov            }
21684b3cc7fd565ff911ac46a763fdc2f5740a18001Dmitri Plotnikov            case ContactsRequest.ACTION_CREATE_SHORTCUT_CONTACT: {
217a489721e65c5f549ab26272af08eb2d05a869976Walter Jang                titleResId = R.string.shortcutActivityTitle;
21884b3cc7fd565ff911ac46a763fdc2f5740a18001Dmitri Plotnikov                break;
21984b3cc7fd565ff911ac46a763fdc2f5740a18001Dmitri Plotnikov            }
22084b3cc7fd565ff911ac46a763fdc2f5740a18001Dmitri Plotnikov            case ContactsRequest.ACTION_PICK_PHONE: {
221a489721e65c5f549ab26272af08eb2d05a869976Walter Jang                titleResId = R.string.contactPickerActivityTitle;
22284b3cc7fd565ff911ac46a763fdc2f5740a18001Dmitri Plotnikov                break;
22384b3cc7fd565ff911ac46a763fdc2f5740a18001Dmitri Plotnikov            }
224c86ace78ca5c2e10dcb001a916386c8a9865e230Daniel Lehmann            case ContactsRequest.ACTION_PICK_EMAIL: {
225a489721e65c5f549ab26272af08eb2d05a869976Walter Jang                titleResId = R.string.contactPickerActivityTitle;
226c86ace78ca5c2e10dcb001a916386c8a9865e230Daniel Lehmann                break;
227c86ace78ca5c2e10dcb001a916386c8a9865e230Daniel Lehmann            }
228ff6f1bb6782fe92b8745ef4acb6c622fef3d0cbcSean Midford            case ContactsRequest.ACTION_PICK_PHONES: {
229ff6f1bb6782fe92b8745ef4acb6c622fef3d0cbcSean Midford                titleResId = R.string.pickerSelectContactsActivityTitle;
230ff6f1bb6782fe92b8745ef4acb6c622fef3d0cbcSean Midford                break;
231ff6f1bb6782fe92b8745ef4acb6c622fef3d0cbcSean Midford            }
232ff6f1bb6782fe92b8745ef4acb6c622fef3d0cbcSean Midford            case ContactsRequest.ACTION_PICK_EMAILS: {
233ff6f1bb6782fe92b8745ef4acb6c622fef3d0cbcSean Midford                titleResId = R.string.pickerSelectContactsActivityTitle;
234ff6f1bb6782fe92b8745ef4acb6c622fef3d0cbcSean Midford                break;
235ff6f1bb6782fe92b8745ef4acb6c622fef3d0cbcSean Midford            }
23684b3cc7fd565ff911ac46a763fdc2f5740a18001Dmitri Plotnikov            case ContactsRequest.ACTION_CREATE_SHORTCUT_CALL: {
237f5faebf8c19dfac33b4a04811a3383842995e3f7Walter Jang                titleResId = R.string.shortcutActivityTitle;
23884b3cc7fd565ff911ac46a763fdc2f5740a18001Dmitri Plotnikov                break;
23984b3cc7fd565ff911ac46a763fdc2f5740a18001Dmitri Plotnikov            }
24084b3cc7fd565ff911ac46a763fdc2f5740a18001Dmitri Plotnikov            case ContactsRequest.ACTION_CREATE_SHORTCUT_SMS: {
241f5faebf8c19dfac33b4a04811a3383842995e3f7Walter Jang                titleResId = R.string.shortcutActivityTitle;
24284b3cc7fd565ff911ac46a763fdc2f5740a18001Dmitri Plotnikov                break;
24384b3cc7fd565ff911ac46a763fdc2f5740a18001Dmitri Plotnikov            }
24484b3cc7fd565ff911ac46a763fdc2f5740a18001Dmitri Plotnikov            case ContactsRequest.ACTION_PICK_POSTAL: {
245a489721e65c5f549ab26272af08eb2d05a869976Walter Jang                titleResId = R.string.contactPickerActivityTitle;
24684b3cc7fd565ff911ac46a763fdc2f5740a18001Dmitri Plotnikov                break;
24784b3cc7fd565ff911ac46a763fdc2f5740a18001Dmitri Plotnikov            }
24881cc3b3d09d9296e521ac3454ad01c6b6c2ba71bBrian Attwell            case ContactsRequest.ACTION_PICK_JOIN: {
249a489721e65c5f549ab26272af08eb2d05a869976Walter Jang                titleResId = R.string.titleJoinContactDataWith;
25081cc3b3d09d9296e521ac3454ad01c6b6c2ba71bBrian Attwell                break;
25181cc3b3d09d9296e521ac3454ad01c6b6c2ba71bBrian Attwell            }
252f9779ef9d0c74886b2c495f9e4993017f5192242Walter Jang            case ContactsRequest.ACTION_PICK_GROUP_MEMBERS: {
253ec807e1cb7eb8f607b1dafa4475e7a30776ce538Walter Jang                titleResId = R.string.groupMemberPickerActivityTitle;
254f9779ef9d0c74886b2c495f9e4993017f5192242Walter Jang                break;
255f9779ef9d0c74886b2c495f9e4993017f5192242Walter Jang            }
25684b3cc7fd565ff911ac46a763fdc2f5740a18001Dmitri Plotnikov        }
257a489721e65c5f549ab26272af08eb2d05a869976Walter Jang        if (titleResId > 0) {
258a489721e65c5f549ab26272af08eb2d05a869976Walter Jang            getSupportActionBar().setTitle(titleResId);
259a489721e65c5f549ab26272af08eb2d05a869976Walter Jang        }
26084b3cc7fd565ff911ac46a763fdc2f5740a18001Dmitri Plotnikov    }
26184b3cc7fd565ff911ac46a763fdc2f5740a18001Dmitri Plotnikov
262b979b4294c14f2bc562a5279910bafb7ac1a92b4Dmitri Plotnikov    /**
263b979b4294c14f2bc562a5279910bafb7ac1a92b4Dmitri Plotnikov     * Creates the fragment based on the current request.
264b979b4294c14f2bc562a5279910bafb7ac1a92b4Dmitri Plotnikov     */
26584b3cc7fd565ff911ac46a763fdc2f5740a18001Dmitri Plotnikov    public void configureListFragment() {
266b979b4294c14f2bc562a5279910bafb7ac1a92b4Dmitri Plotnikov        switch (mActionCode) {
267b979b4294c14f2bc562a5279910bafb7ac1a92b4Dmitri Plotnikov            case ContactsRequest.ACTION_INSERT_OR_EDIT_CONTACT: {
26886092529f272b7ed2cee24fae397291696b29b80Dmitri Plotnikov                ContactPickerFragment fragment = new ContactPickerFragment();
26986092529f272b7ed2cee24fae397291696b29b80Dmitri Plotnikov                fragment.setEditMode(true);
27086092529f272b7ed2cee24fae397291696b29b80Dmitri Plotnikov                fragment.setDirectorySearchMode(DirectoryListLoader.SEARCH_MODE_NONE);
271bbd220183e9bc6d0b056af3c68fa4a31f5b747f2Brian Attwell                fragment.setCreateContactEnabled(!mRequest.isSearchMode());
2726158b814d330f2c61522387b9e0ce40208b5ef63Walter Jang                fragment.setListType(ListEvent.ListType.PICK_CONTACT);
273b979b4294c14f2bc562a5279910bafb7ac1a92b4Dmitri Plotnikov                mListFragment = fragment;
274b979b4294c14f2bc562a5279910bafb7ac1a92b4Dmitri Plotnikov                break;
275b979b4294c14f2bc562a5279910bafb7ac1a92b4Dmitri Plotnikov            }
276b979b4294c14f2bc562a5279910bafb7ac1a92b4Dmitri Plotnikov
27798609ec4faea054971938f440438bad792596e99Jay Shrauner            case ContactsRequest.ACTION_DEFAULT:
278b979b4294c14f2bc562a5279910bafb7ac1a92b4Dmitri Plotnikov            case ContactsRequest.ACTION_PICK_CONTACT: {
279b979b4294c14f2bc562a5279910bafb7ac1a92b4Dmitri Plotnikov                ContactPickerFragment fragment = new ContactPickerFragment();
2807b6bb0043357ca156924cdcd3f29180585dbae9eWenyi Wang                fragment.setIncludeFavorites(mRequest.shouldIncludeFavorites());
2816158b814d330f2c61522387b9e0ce40208b5ef63Walter Jang                fragment.setListType(ListEvent.ListType.PICK_CONTACT);
282b979b4294c14f2bc562a5279910bafb7ac1a92b4Dmitri Plotnikov                mListFragment = fragment;
283b979b4294c14f2bc562a5279910bafb7ac1a92b4Dmitri Plotnikov                break;
284b979b4294c14f2bc562a5279910bafb7ac1a92b4Dmitri Plotnikov            }
285b979b4294c14f2bc562a5279910bafb7ac1a92b4Dmitri Plotnikov
286b979b4294c14f2bc562a5279910bafb7ac1a92b4Dmitri Plotnikov            case ContactsRequest.ACTION_PICK_OR_CREATE_CONTACT: {
287b979b4294c14f2bc562a5279910bafb7ac1a92b4Dmitri Plotnikov                ContactPickerFragment fragment = new ContactPickerFragment();
288bbd220183e9bc6d0b056af3c68fa4a31f5b747f2Brian Attwell                fragment.setCreateContactEnabled(!mRequest.isSearchMode());
2896158b814d330f2c61522387b9e0ce40208b5ef63Walter Jang                fragment.setListType(ListEvent.ListType.PICK_CONTACT);
290b979b4294c14f2bc562a5279910bafb7ac1a92b4Dmitri Plotnikov                mListFragment = fragment;
291b979b4294c14f2bc562a5279910bafb7ac1a92b4Dmitri Plotnikov                break;
292b979b4294c14f2bc562a5279910bafb7ac1a92b4Dmitri Plotnikov            }
293b979b4294c14f2bc562a5279910bafb7ac1a92b4Dmitri Plotnikov
294b979b4294c14f2bc562a5279910bafb7ac1a92b4Dmitri Plotnikov            case ContactsRequest.ACTION_CREATE_SHORTCUT_CONTACT: {
295b979b4294c14f2bc562a5279910bafb7ac1a92b4Dmitri Plotnikov                ContactPickerFragment fragment = new ContactPickerFragment();
296b979b4294c14f2bc562a5279910bafb7ac1a92b4Dmitri Plotnikov                fragment.setShortcutRequested(true);
2976158b814d330f2c61522387b9e0ce40208b5ef63Walter Jang                fragment.setListType(ListEvent.ListType.PICK_CONTACT_FOR_SHORTCUT);
298b979b4294c14f2bc562a5279910bafb7ac1a92b4Dmitri Plotnikov                mListFragment = fragment;
299b979b4294c14f2bc562a5279910bafb7ac1a92b4Dmitri Plotnikov                break;
300b979b4294c14f2bc562a5279910bafb7ac1a92b4Dmitri Plotnikov            }
301b979b4294c14f2bc562a5279910bafb7ac1a92b4Dmitri Plotnikov
302b979b4294c14f2bc562a5279910bafb7ac1a92b4Dmitri Plotnikov            case ContactsRequest.ACTION_PICK_PHONE: {
303a953aa785610afcda67a17a1c109d09c4773ca90Chiao Cheng                PhoneNumberPickerFragment fragment = getPhoneNumberPickerFragment(mRequest);
3046158b814d330f2c61522387b9e0ce40208b5ef63Walter Jang                fragment.setListType(ListEvent.ListType.PICK_PHONE);
305b979b4294c14f2bc562a5279910bafb7ac1a92b4Dmitri Plotnikov                mListFragment = fragment;
306b979b4294c14f2bc562a5279910bafb7ac1a92b4Dmitri Plotnikov                break;
307b979b4294c14f2bc562a5279910bafb7ac1a92b4Dmitri Plotnikov            }
308b979b4294c14f2bc562a5279910bafb7ac1a92b4Dmitri Plotnikov
309c86ace78ca5c2e10dcb001a916386c8a9865e230Daniel Lehmann            case ContactsRequest.ACTION_PICK_EMAIL: {
310c86ace78ca5c2e10dcb001a916386c8a9865e230Daniel Lehmann                mListFragment = new EmailAddressPickerFragment();
3116158b814d330f2c61522387b9e0ce40208b5ef63Walter Jang                mListFragment.setListType(ListEvent.ListType.PICK_EMAIL);
312c86ace78ca5c2e10dcb001a916386c8a9865e230Daniel Lehmann                break;
313c86ace78ca5c2e10dcb001a916386c8a9865e230Daniel Lehmann            }
314c86ace78ca5c2e10dcb001a916386c8a9865e230Daniel Lehmann
315ff6f1bb6782fe92b8745ef4acb6c622fef3d0cbcSean Midford            case ContactsRequest.ACTION_PICK_PHONES: {
316ff6f1bb6782fe92b8745ef4acb6c622fef3d0cbcSean Midford                mListFragment = new MultiSelectPhoneNumbersListFragment();
317ff6f1bb6782fe92b8745ef4acb6c622fef3d0cbcSean Midford                mListFragment.setArguments(getIntent().getExtras());
318ff6f1bb6782fe92b8745ef4acb6c622fef3d0cbcSean Midford                break;
319ff6f1bb6782fe92b8745ef4acb6c622fef3d0cbcSean Midford            }
320ff6f1bb6782fe92b8745ef4acb6c622fef3d0cbcSean Midford
321ff6f1bb6782fe92b8745ef4acb6c622fef3d0cbcSean Midford            case ContactsRequest.ACTION_PICK_EMAILS: {
322ff6f1bb6782fe92b8745ef4acb6c622fef3d0cbcSean Midford                mListFragment = new MultiSelectEmailAddressesListFragment();
323ff6f1bb6782fe92b8745ef4acb6c622fef3d0cbcSean Midford                mListFragment.setArguments(getIntent().getExtras());
324ff6f1bb6782fe92b8745ef4acb6c622fef3d0cbcSean Midford                break;
325ff6f1bb6782fe92b8745ef4acb6c622fef3d0cbcSean Midford            }
326b979b4294c14f2bc562a5279910bafb7ac1a92b4Dmitri Plotnikov            case ContactsRequest.ACTION_CREATE_SHORTCUT_CALL: {
327a953aa785610afcda67a17a1c109d09c4773ca90Chiao Cheng                PhoneNumberPickerFragment fragment = getPhoneNumberPickerFragment(mRequest);
328b979b4294c14f2bc562a5279910bafb7ac1a92b4Dmitri Plotnikov                fragment.setShortcutAction(Intent.ACTION_CALL);
3296158b814d330f2c61522387b9e0ce40208b5ef63Walter Jang                fragment.setListType(ListEvent.ListType.PICK_CONTACT_FOR_SHORTCUT);
330b979b4294c14f2bc562a5279910bafb7ac1a92b4Dmitri Plotnikov                mListFragment = fragment;
331b979b4294c14f2bc562a5279910bafb7ac1a92b4Dmitri Plotnikov                break;
332b979b4294c14f2bc562a5279910bafb7ac1a92b4Dmitri Plotnikov            }
333b979b4294c14f2bc562a5279910bafb7ac1a92b4Dmitri Plotnikov
334b979b4294c14f2bc562a5279910bafb7ac1a92b4Dmitri Plotnikov            case ContactsRequest.ACTION_CREATE_SHORTCUT_SMS: {
335a953aa785610afcda67a17a1c109d09c4773ca90Chiao Cheng                PhoneNumberPickerFragment fragment = getPhoneNumberPickerFragment(mRequest);
336b979b4294c14f2bc562a5279910bafb7ac1a92b4Dmitri Plotnikov                fragment.setShortcutAction(Intent.ACTION_SENDTO);
3376158b814d330f2c61522387b9e0ce40208b5ef63Walter Jang                fragment.setListType(ListEvent.ListType.PICK_CONTACT_FOR_SHORTCUT);
338b979b4294c14f2bc562a5279910bafb7ac1a92b4Dmitri Plotnikov                mListFragment = fragment;
339b979b4294c14f2bc562a5279910bafb7ac1a92b4Dmitri Plotnikov                break;
340b979b4294c14f2bc562a5279910bafb7ac1a92b4Dmitri Plotnikov            }
341b979b4294c14f2bc562a5279910bafb7ac1a92b4Dmitri Plotnikov
342b979b4294c14f2bc562a5279910bafb7ac1a92b4Dmitri Plotnikov            case ContactsRequest.ACTION_PICK_POSTAL: {
343b979b4294c14f2bc562a5279910bafb7ac1a92b4Dmitri Plotnikov                PostalAddressPickerFragment fragment = new PostalAddressPickerFragment();
3446158b814d330f2c61522387b9e0ce40208b5ef63Walter Jang                fragment.setListType(ListEvent.ListType.PICK_POSTAL);
345b979b4294c14f2bc562a5279910bafb7ac1a92b4Dmitri Plotnikov                mListFragment = fragment;
346b979b4294c14f2bc562a5279910bafb7ac1a92b4Dmitri Plotnikov                break;
347b979b4294c14f2bc562a5279910bafb7ac1a92b4Dmitri Plotnikov            }
348b979b4294c14f2bc562a5279910bafb7ac1a92b4Dmitri Plotnikov
34981cc3b3d09d9296e521ac3454ad01c6b6c2ba71bBrian Attwell            case ContactsRequest.ACTION_PICK_JOIN: {
35081cc3b3d09d9296e521ac3454ad01c6b6c2ba71bBrian Attwell                JoinContactListFragment joinFragment = new JoinContactListFragment();
35181cc3b3d09d9296e521ac3454ad01c6b6c2ba71bBrian Attwell                joinFragment.setTargetContactId(getTargetContactId());
3526158b814d330f2c61522387b9e0ce40208b5ef63Walter Jang                joinFragment.setListType(ListEvent.ListType.PICK_JOIN);
35381cc3b3d09d9296e521ac3454ad01c6b6c2ba71bBrian Attwell                mListFragment = joinFragment;
35481cc3b3d09d9296e521ac3454ad01c6b6c2ba71bBrian Attwell                break;
35581cc3b3d09d9296e521ac3454ad01c6b6c2ba71bBrian Attwell            }
35681cc3b3d09d9296e521ac3454ad01c6b6c2ba71bBrian Attwell
357f9779ef9d0c74886b2c495f9e4993017f5192242Walter Jang            case ContactsRequest.ACTION_PICK_GROUP_MEMBERS: {
3586c5a5580c49db0e3cc5372beec82231e0aa76901Walter Jang                final String accountName = getIntent().getStringExtra(
3596c5a5580c49db0e3cc5372beec82231e0aa76901Walter Jang                        UiIntentActions.GROUP_ACCOUNT_NAME);
3606c5a5580c49db0e3cc5372beec82231e0aa76901Walter Jang                final String accountType = getIntent().getStringExtra(
3616c5a5580c49db0e3cc5372beec82231e0aa76901Walter Jang                        UiIntentActions.GROUP_ACCOUNT_TYPE);
3626c5a5580c49db0e3cc5372beec82231e0aa76901Walter Jang                final String accountDataSet = getIntent().getStringExtra(
3636c5a5580c49db0e3cc5372beec82231e0aa76901Walter Jang                        UiIntentActions.GROUP_ACCOUNT_DATA_SET);
36416c29591f6ca97ae621fe6dfc9bfb9fef150870dWalter Jang                final ArrayList<String> contactIds = getIntent().getStringArrayListExtra(
36516c29591f6ca97ae621fe6dfc9bfb9fef150870dWalter Jang                        UiIntentActions.GROUP_CONTACT_IDS);
3666c5a5580c49db0e3cc5372beec82231e0aa76901Walter Jang                mListFragment = GroupMemberPickerFragment.newInstance(
3676c5a5580c49db0e3cc5372beec82231e0aa76901Walter Jang                        accountName, accountType, accountDataSet, contactIds);
3686158b814d330f2c61522387b9e0ce40208b5ef63Walter Jang                mListFragment.setListType(ListEvent.ListType.PICK_GROUP_MEMBERS);
369f9779ef9d0c74886b2c495f9e4993017f5192242Walter Jang                break;
370f9779ef9d0c74886b2c495f9e4993017f5192242Walter Jang            }
371f9779ef9d0c74886b2c495f9e4993017f5192242Walter Jang
372b979b4294c14f2bc562a5279910bafb7ac1a92b4Dmitri Plotnikov            default:
373b979b4294c14f2bc562a5279910bafb7ac1a92b4Dmitri Plotnikov                throw new IllegalStateException("Invalid action code: " + mActionCode);
374b979b4294c14f2bc562a5279910bafb7ac1a92b4Dmitri Plotnikov        }
37584b3cc7fd565ff911ac46a763fdc2f5740a18001Dmitri Plotnikov
376a953aa785610afcda67a17a1c109d09c4773ca90Chiao Cheng        // Setting compatibility is no longer needed for PhoneNumberPickerFragment since that logic
377a953aa785610afcda67a17a1c109d09c4773ca90Chiao Cheng        // has been separated into LegacyPhoneNumberPickerFragment.  But we still need to set
378a953aa785610afcda67a17a1c109d09c4773ca90Chiao Cheng        // compatibility for other fragments.
37984b3cc7fd565ff911ac46a763fdc2f5740a18001Dmitri Plotnikov        mListFragment.setLegacyCompatibilityMode(mRequest.isLegacyCompatibilityMode());
3804d174aad97cd382f810e3bf1a7f1f4f4772be118Dmitri Plotnikov        mListFragment.setDirectoryResultLimit(DEFAULT_DIRECTORY_RESULT_LIMIT);
3814d174aad97cd382f810e3bf1a7f1f4f4772be118Dmitri Plotnikov
3823ed426c842a68895a759548fef87bac359f937bbDianne Hackborn        getFragmentManager().beginTransaction()
38384b3cc7fd565ff911ac46a763fdc2f5740a18001Dmitri Plotnikov                .replace(R.id.list_container, mListFragment)
3844b25da79091157935042d2942a8961ceba92166fMinh Pham                .commitAllowingStateLoss();
38584b3cc7fd565ff911ac46a763fdc2f5740a18001Dmitri Plotnikov    }
38684b3cc7fd565ff911ac46a763fdc2f5740a18001Dmitri Plotnikov
387a953aa785610afcda67a17a1c109d09c4773ca90Chiao Cheng    private PhoneNumberPickerFragment getPhoneNumberPickerFragment(ContactsRequest request) {
388a953aa785610afcda67a17a1c109d09c4773ca90Chiao Cheng        if (mRequest.isLegacyCompatibilityMode()) {
389a953aa785610afcda67a17a1c109d09c4773ca90Chiao Cheng            return new LegacyPhoneNumberPickerFragment();
390a953aa785610afcda67a17a1c109d09c4773ca90Chiao Cheng        } else {
391a953aa785610afcda67a17a1c109d09c4773ca90Chiao Cheng            return new PhoneNumberPickerFragment();
392a953aa785610afcda67a17a1c109d09c4773ca90Chiao Cheng        }
393a953aa785610afcda67a17a1c109d09c4773ca90Chiao Cheng    }
394a953aa785610afcda67a17a1c109d09c4773ca90Chiao Cheng
39584b3cc7fd565ff911ac46a763fdc2f5740a18001Dmitri Plotnikov    public void setupActionListener() {
3966e850a046fcea8ba82a793b43944051246d08180Dmitri Plotnikov        if (mListFragment instanceof ContactPickerFragment) {
39784b3cc7fd565ff911ac46a763fdc2f5740a18001Dmitri Plotnikov            ((ContactPickerFragment) mListFragment).setOnContactPickerActionListener(
39884b3cc7fd565ff911ac46a763fdc2f5740a18001Dmitri Plotnikov                    new ContactPickerActionListener());
39984b3cc7fd565ff911ac46a763fdc2f5740a18001Dmitri Plotnikov        } else if (mListFragment instanceof PhoneNumberPickerFragment) {
40084b3cc7fd565ff911ac46a763fdc2f5740a18001Dmitri Plotnikov            ((PhoneNumberPickerFragment) mListFragment).setOnPhoneNumberPickerActionListener(
40184b3cc7fd565ff911ac46a763fdc2f5740a18001Dmitri Plotnikov                    new PhoneNumberPickerActionListener());
40284b3cc7fd565ff911ac46a763fdc2f5740a18001Dmitri Plotnikov        } else if (mListFragment instanceof PostalAddressPickerFragment) {
40384b3cc7fd565ff911ac46a763fdc2f5740a18001Dmitri Plotnikov            ((PostalAddressPickerFragment) mListFragment).setOnPostalAddressPickerActionListener(
40484b3cc7fd565ff911ac46a763fdc2f5740a18001Dmitri Plotnikov                    new PostalAddressPickerActionListener());
405c86ace78ca5c2e10dcb001a916386c8a9865e230Daniel Lehmann        } else if (mListFragment instanceof EmailAddressPickerFragment) {
406c86ace78ca5c2e10dcb001a916386c8a9865e230Daniel Lehmann            ((EmailAddressPickerFragment) mListFragment).setOnEmailAddressPickerActionListener(
407c86ace78ca5c2e10dcb001a916386c8a9865e230Daniel Lehmann                    new EmailAddressPickerActionListener());
408ff6f1bb6782fe92b8745ef4acb6c622fef3d0cbcSean Midford        } else if (mListFragment instanceof MultiSelectEmailAddressesListFragment) {
409ff6f1bb6782fe92b8745ef4acb6c622fef3d0cbcSean Midford            ((MultiSelectEmailAddressesListFragment) mListFragment).setCheckBoxListListener(this);
410ff6f1bb6782fe92b8745ef4acb6c622fef3d0cbcSean Midford        } else if (mListFragment instanceof MultiSelectPhoneNumbersListFragment) {
411ff6f1bb6782fe92b8745ef4acb6c622fef3d0cbcSean Midford            ((MultiSelectPhoneNumbersListFragment) mListFragment).setCheckBoxListListener(this);
41281cc3b3d09d9296e521ac3454ad01c6b6c2ba71bBrian Attwell        } else if (mListFragment instanceof JoinContactListFragment) {
41381cc3b3d09d9296e521ac3454ad01c6b6c2ba71bBrian Attwell            ((JoinContactListFragment) mListFragment).setOnContactPickerActionListener(
41481cc3b3d09d9296e521ac3454ad01c6b6c2ba71bBrian Attwell                    new JoinContactActionListener());
415f9779ef9d0c74886b2c495f9e4993017f5192242Walter Jang        } else if (mListFragment instanceof GroupMemberPickerFragment) {
416f9779ef9d0c74886b2c495f9e4993017f5192242Walter Jang            ((GroupMemberPickerFragment) mListFragment).setListener(
417f9779ef9d0c74886b2c495f9e4993017f5192242Walter Jang                    new GroupMemberPickerListener());
418a489721e65c5f549ab26272af08eb2d05a869976Walter Jang            getMultiSelectListFragment().setCheckBoxListListener(this);
41984b3cc7fd565ff911ac46a763fdc2f5740a18001Dmitri Plotnikov        } else {
42084b3cc7fd565ff911ac46a763fdc2f5740a18001Dmitri Plotnikov            throw new IllegalStateException("Unsupported list fragment type: " + mListFragment);
42184b3cc7fd565ff911ac46a763fdc2f5740a18001Dmitri Plotnikov        }
422b979b4294c14f2bc562a5279910bafb7ac1a92b4Dmitri Plotnikov    }
423b979b4294c14f2bc562a5279910bafb7ac1a92b4Dmitri Plotnikov
424a489721e65c5f549ab26272af08eb2d05a869976Walter Jang    private MultiSelectContactsListFragment getMultiSelectListFragment() {
425a489721e65c5f549ab26272af08eb2d05a869976Walter Jang        if (mListFragment instanceof MultiSelectContactsListFragment) {
426a489721e65c5f549ab26272af08eb2d05a869976Walter Jang            return (MultiSelectContactsListFragment) mListFragment;
427a489721e65c5f549ab26272af08eb2d05a869976Walter Jang        }
428a489721e65c5f549ab26272af08eb2d05a869976Walter Jang        return null;
429a489721e65c5f549ab26272af08eb2d05a869976Walter Jang    }
430a489721e65c5f549ab26272af08eb2d05a869976Walter Jang
431a489721e65c5f549ab26272af08eb2d05a869976Walter Jang    @Override
432a489721e65c5f549ab26272af08eb2d05a869976Walter Jang    public void onAction(int action) {
433a489721e65c5f549ab26272af08eb2d05a869976Walter Jang        switch (action) {
434a489721e65c5f549ab26272af08eb2d05a869976Walter Jang            case ActionBarAdapter.Listener.Action.START_SEARCH_MODE:
435a489721e65c5f549ab26272af08eb2d05a869976Walter Jang                mIsSearchMode = true;
436a489721e65c5f549ab26272af08eb2d05a869976Walter Jang                configureSearchMode();
437a489721e65c5f549ab26272af08eb2d05a869976Walter Jang                break;
438a489721e65c5f549ab26272af08eb2d05a869976Walter Jang            case ActionBarAdapter.Listener.Action.CHANGE_SEARCH_QUERY:
439a489721e65c5f549ab26272af08eb2d05a869976Walter Jang                final String queryString = mActionBarAdapter.getQueryString();
440a489721e65c5f549ab26272af08eb2d05a869976Walter Jang                mListFragment.setQueryString(queryString, /* delaySelection */ false);
441a489721e65c5f549ab26272af08eb2d05a869976Walter Jang                break;
442a489721e65c5f549ab26272af08eb2d05a869976Walter Jang            case ActionBarAdapter.Listener.Action.START_SELECTION_MODE:
443a489721e65c5f549ab26272af08eb2d05a869976Walter Jang                if (getMultiSelectListFragment() != null) {
444a489721e65c5f549ab26272af08eb2d05a869976Walter Jang                    getMultiSelectListFragment().displayCheckBoxes(true);
445a489721e65c5f549ab26272af08eb2d05a869976Walter Jang                }
446a489721e65c5f549ab26272af08eb2d05a869976Walter Jang                invalidateOptionsMenu();
447a489721e65c5f549ab26272af08eb2d05a869976Walter Jang                break;
448a489721e65c5f549ab26272af08eb2d05a869976Walter Jang            case ActionBarAdapter.Listener.Action.STOP_SEARCH_AND_SELECTION_MODE:
449b236b7c8ecd881795f8fff06210c0e89bcb2e99eWenyi Wang                mListFragment.setQueryString("", /* delaySelection */ false);
450a489721e65c5f549ab26272af08eb2d05a869976Walter Jang                mActionBarAdapter.setSearchMode(false);
451a489721e65c5f549ab26272af08eb2d05a869976Walter Jang                if (getMultiSelectListFragment() != null) {
452a489721e65c5f549ab26272af08eb2d05a869976Walter Jang                    getMultiSelectListFragment().displayCheckBoxes(false);
453a489721e65c5f549ab26272af08eb2d05a869976Walter Jang                }
454a489721e65c5f549ab26272af08eb2d05a869976Walter Jang                invalidateOptionsMenu();
455a489721e65c5f549ab26272af08eb2d05a869976Walter Jang                break;
456a489721e65c5f549ab26272af08eb2d05a869976Walter Jang        }
457a489721e65c5f549ab26272af08eb2d05a869976Walter Jang    }
458a489721e65c5f549ab26272af08eb2d05a869976Walter Jang
459a489721e65c5f549ab26272af08eb2d05a869976Walter Jang    @Override
460a489721e65c5f549ab26272af08eb2d05a869976Walter Jang    public void onUpButtonPressed() {
461a489721e65c5f549ab26272af08eb2d05a869976Walter Jang        onBackPressed();
462a489721e65c5f549ab26272af08eb2d05a869976Walter Jang    }
463a489721e65c5f549ab26272af08eb2d05a869976Walter Jang
464a489721e65c5f549ab26272af08eb2d05a869976Walter Jang    @Override
465a489721e65c5f549ab26272af08eb2d05a869976Walter Jang    public void onStartDisplayingCheckBoxes() {
466a489721e65c5f549ab26272af08eb2d05a869976Walter Jang        mActionBarAdapter.setSelectionMode(true);
467a489721e65c5f549ab26272af08eb2d05a869976Walter Jang    }
468a489721e65c5f549ab26272af08eb2d05a869976Walter Jang
469a489721e65c5f549ab26272af08eb2d05a869976Walter Jang    @Override
470a489721e65c5f549ab26272af08eb2d05a869976Walter Jang    public void onSelectedContactIdsChanged() {
471a489721e65c5f549ab26272af08eb2d05a869976Walter Jang        if (mListFragment instanceof MultiSelectContactsListFragment) {
472f5493a638ad3faa5183ab7d33872585bcd6e178dWenyi Wang            final int count = getMultiSelectListFragment().getSelectedContactIds().size();
473f5493a638ad3faa5183ab7d33872585bcd6e178dWenyi Wang            mActionBarAdapter.setSelectionCount(count);
474f5493a638ad3faa5183ab7d33872585bcd6e178dWenyi Wang            updateAddContactsButton(count);
475f5493a638ad3faa5183ab7d33872585bcd6e178dWenyi Wang
476a489721e65c5f549ab26272af08eb2d05a869976Walter Jang            // Show or hide the multi select "Done" button
477a489721e65c5f549ab26272af08eb2d05a869976Walter Jang            invalidateOptionsMenu();
478a489721e65c5f549ab26272af08eb2d05a869976Walter Jang        }
479a489721e65c5f549ab26272af08eb2d05a869976Walter Jang    }
480a489721e65c5f549ab26272af08eb2d05a869976Walter Jang
481f5493a638ad3faa5183ab7d33872585bcd6e178dWenyi Wang    private void updateAddContactsButton(int count) {
482f5493a638ad3faa5183ab7d33872585bcd6e178dWenyi Wang        final TextView textView = (TextView) mActionBarAdapter.getSelectionContainer()
483f5493a638ad3faa5183ab7d33872585bcd6e178dWenyi Wang                .findViewById(R.id.add_contacts);
484f5493a638ad3faa5183ab7d33872585bcd6e178dWenyi Wang        if (count > 0) {
485f5493a638ad3faa5183ab7d33872585bcd6e178dWenyi Wang            textView.setVisibility(View.VISIBLE);
486f5493a638ad3faa5183ab7d33872585bcd6e178dWenyi Wang            textView.setAllCaps(true);
487f5493a638ad3faa5183ab7d33872585bcd6e178dWenyi Wang            textView.setOnClickListener(new OnClickListener() {
488f5493a638ad3faa5183ab7d33872585bcd6e178dWenyi Wang                @Override
489f5493a638ad3faa5183ab7d33872585bcd6e178dWenyi Wang                public void onClick(View v) {
490f5493a638ad3faa5183ab7d33872585bcd6e178dWenyi Wang                    final long[] contactIds =
491f5493a638ad3faa5183ab7d33872585bcd6e178dWenyi Wang                            getMultiSelectListFragment().getSelectedContactIdsArray();
492f5493a638ad3faa5183ab7d33872585bcd6e178dWenyi Wang                    returnSelectedContacts(contactIds);
493f5493a638ad3faa5183ab7d33872585bcd6e178dWenyi Wang                }
494f5493a638ad3faa5183ab7d33872585bcd6e178dWenyi Wang            });
495f5493a638ad3faa5183ab7d33872585bcd6e178dWenyi Wang        } else {
496f5493a638ad3faa5183ab7d33872585bcd6e178dWenyi Wang            textView.setVisibility(View.GONE);
497f5493a638ad3faa5183ab7d33872585bcd6e178dWenyi Wang        }
498f5493a638ad3faa5183ab7d33872585bcd6e178dWenyi Wang    }
499f5493a638ad3faa5183ab7d33872585bcd6e178dWenyi Wang
500a489721e65c5f549ab26272af08eb2d05a869976Walter Jang    @Override
501a489721e65c5f549ab26272af08eb2d05a869976Walter Jang    public void onStopDisplayingCheckBoxes() {
502a489721e65c5f549ab26272af08eb2d05a869976Walter Jang        mActionBarAdapter.setSelectionMode(false);
503a489721e65c5f549ab26272af08eb2d05a869976Walter Jang    }
504a489721e65c5f549ab26272af08eb2d05a869976Walter Jang
505b979b4294c14f2bc562a5279910bafb7ac1a92b4Dmitri Plotnikov    private final class ContactPickerActionListener implements OnContactPickerActionListener {
506e20d3432a370dd3996deec2df4e3cdf726c94992Daniel Lehmann        @Override
507b979b4294c14f2bc562a5279910bafb7ac1a92b4Dmitri Plotnikov        public void onCreateNewContactAction() {
508a8729cdf778f9ca927b06afde685f7ac6b8c917fDaisuke Miyakawa            startCreateNewContactActivity();
509b979b4294c14f2bc562a5279910bafb7ac1a92b4Dmitri Plotnikov        }
510b979b4294c14f2bc562a5279910bafb7ac1a92b4Dmitri Plotnikov
511e20d3432a370dd3996deec2df4e3cdf726c94992Daniel Lehmann        @Override
51286092529f272b7ed2cee24fae397291696b29b80Dmitri Plotnikov        public void onEditContactAction(Uri contactLookupUri) {
513363af60ea23e5a3b945005712a16564ab69db18bGary Mai            startActivityAndForwardResult(EditorIntents.createEditContactIntent(
51441c6886cabf68370f160ccd68d173bd6a59a1a07John Shao                    ContactSelectionActivity.this, contactLookupUri, /* materialPalette =*/ null,
51541c6886cabf68370f160ccd68d173bd6a59a1a07John Shao                    /* photoId =*/ -1));
51686092529f272b7ed2cee24fae397291696b29b80Dmitri Plotnikov        }
51786092529f272b7ed2cee24fae397291696b29b80Dmitri Plotnikov
51886092529f272b7ed2cee24fae397291696b29b80Dmitri Plotnikov        @Override
519b979b4294c14f2bc562a5279910bafb7ac1a92b4Dmitri Plotnikov        public void onPickContactAction(Uri contactUri) {
520d11bca23766abf3325cebbec5b1b225e3fe4663fDmitri Plotnikov            returnPickerResult(contactUri);
521b979b4294c14f2bc562a5279910bafb7ac1a92b4Dmitri Plotnikov        }
522b979b4294c14f2bc562a5279910bafb7ac1a92b4Dmitri Plotnikov
523e20d3432a370dd3996deec2df4e3cdf726c94992Daniel Lehmann        @Override
524b979b4294c14f2bc562a5279910bafb7ac1a92b4Dmitri Plotnikov        public void onShortcutIntentCreated(Intent intent) {
525d11bca23766abf3325cebbec5b1b225e3fe4663fDmitri Plotnikov            returnPickerResult(intent);
526b979b4294c14f2bc562a5279910bafb7ac1a92b4Dmitri Plotnikov        }
527b979b4294c14f2bc562a5279910bafb7ac1a92b4Dmitri Plotnikov    }
528b979b4294c14f2bc562a5279910bafb7ac1a92b4Dmitri Plotnikov
529b979b4294c14f2bc562a5279910bafb7ac1a92b4Dmitri Plotnikov    private final class PhoneNumberPickerActionListener implements
530b979b4294c14f2bc562a5279910bafb7ac1a92b4Dmitri Plotnikov            OnPhoneNumberPickerActionListener {
531e20d3432a370dd3996deec2df4e3cdf726c94992Daniel Lehmann        @Override
5320a8f9736d1af8903674c412cf88c1233b60a156eTyler Gunn        public void onPickDataUri(Uri dataUri, boolean isVideoCall, int callInitiationType) {
533d11bca23766abf3325cebbec5b1b225e3fe4663fDmitri Plotnikov            returnPickerResult(dataUri);
534b979b4294c14f2bc562a5279910bafb7ac1a92b4Dmitri Plotnikov        }
535b979b4294c14f2bc562a5279910bafb7ac1a92b4Dmitri Plotnikov
536e20d3432a370dd3996deec2df4e3cdf726c94992Daniel Lehmann        @Override
537a6e7230bdb514b9d0871db8af9e38e38e2f97977Anne Rong        public void onPickPhoneNumber(String phoneNumber, boolean isVideoCall,
538a6e7230bdb514b9d0871db8af9e38e38e2f97977Anne Rong                                      int callInitiationType) {
53986c224e7a50a4241ab41db280384a1cff3bf00afAndrew Lee            Log.w(TAG, "Unsupported call.");
54086c224e7a50a4241ab41db280384a1cff3bf00afAndrew Lee        }
54186c224e7a50a4241ab41db280384a1cff3bf00afAndrew Lee
54286c224e7a50a4241ab41db280384a1cff3bf00afAndrew Lee        @Override
543b979b4294c14f2bc562a5279910bafb7ac1a92b4Dmitri Plotnikov        public void onShortcutIntentCreated(Intent intent) {
544d11bca23766abf3325cebbec5b1b225e3fe4663fDmitri Plotnikov            returnPickerResult(intent);
545b979b4294c14f2bc562a5279910bafb7ac1a92b4Dmitri Plotnikov        }
54688f70fc83cdd119e85d9890b2875faf5c981b47dDaisuke Miyakawa
547dd3d2a4fed04b1d9bc450fbca6967be4622ba944Yorke Lee        @Override
54888f70fc83cdd119e85d9890b2875faf5c981b47dDaisuke Miyakawa        public void onHomeInActionBarSelected() {
54988f70fc83cdd119e85d9890b2875faf5c981b47dDaisuke Miyakawa            ContactSelectionActivity.this.onBackPressed();
55088f70fc83cdd119e85d9890b2875faf5c981b47dDaisuke Miyakawa        }
551b979b4294c14f2bc562a5279910bafb7ac1a92b4Dmitri Plotnikov    }
552b979b4294c14f2bc562a5279910bafb7ac1a92b4Dmitri Plotnikov
55381cc3b3d09d9296e521ac3454ad01c6b6c2ba71bBrian Attwell    private final class JoinContactActionListener implements OnContactPickerActionListener {
55481cc3b3d09d9296e521ac3454ad01c6b6c2ba71bBrian Attwell        @Override
55581cc3b3d09d9296e521ac3454ad01c6b6c2ba71bBrian Attwell        public void onPickContactAction(Uri contactUri) {
55681cc3b3d09d9296e521ac3454ad01c6b6c2ba71bBrian Attwell            Intent intent = new Intent(null, contactUri);
55781cc3b3d09d9296e521ac3454ad01c6b6c2ba71bBrian Attwell            setResult(RESULT_OK, intent);
55881cc3b3d09d9296e521ac3454ad01c6b6c2ba71bBrian Attwell            finish();
55981cc3b3d09d9296e521ac3454ad01c6b6c2ba71bBrian Attwell        }
56081cc3b3d09d9296e521ac3454ad01c6b6c2ba71bBrian Attwell
56181cc3b3d09d9296e521ac3454ad01c6b6c2ba71bBrian Attwell        @Override
56281cc3b3d09d9296e521ac3454ad01c6b6c2ba71bBrian Attwell        public void onShortcutIntentCreated(Intent intent) {
56381cc3b3d09d9296e521ac3454ad01c6b6c2ba71bBrian Attwell        }
56481cc3b3d09d9296e521ac3454ad01c6b6c2ba71bBrian Attwell
56581cc3b3d09d9296e521ac3454ad01c6b6c2ba71bBrian Attwell        @Override
56681cc3b3d09d9296e521ac3454ad01c6b6c2ba71bBrian Attwell        public void onCreateNewContactAction() {
56781cc3b3d09d9296e521ac3454ad01c6b6c2ba71bBrian Attwell        }
56881cc3b3d09d9296e521ac3454ad01c6b6c2ba71bBrian Attwell
56981cc3b3d09d9296e521ac3454ad01c6b6c2ba71bBrian Attwell        @Override
57081cc3b3d09d9296e521ac3454ad01c6b6c2ba71bBrian Attwell        public void onEditContactAction(Uri contactLookupUri) {
57181cc3b3d09d9296e521ac3454ad01c6b6c2ba71bBrian Attwell        }
57281cc3b3d09d9296e521ac3454ad01c6b6c2ba71bBrian Attwell    }
57381cc3b3d09d9296e521ac3454ad01c6b6c2ba71bBrian Attwell
574f9779ef9d0c74886b2c495f9e4993017f5192242Walter Jang    private final class GroupMemberPickerListener implements GroupMemberPickerFragment.Listener {
575f9779ef9d0c74886b2c495f9e4993017f5192242Walter Jang
576f9779ef9d0c74886b2c495f9e4993017f5192242Walter Jang        @Override
57716c29591f6ca97ae621fe6dfc9bfb9fef150870dWalter Jang        public void onGroupMemberClicked(long contactId) {
57816c29591f6ca97ae621fe6dfc9bfb9fef150870dWalter Jang            final Intent intent = new Intent();
57916c29591f6ca97ae621fe6dfc9bfb9fef150870dWalter Jang            intent.putExtra(UiIntentActions.TARGET_CONTACT_ID_EXTRA_KEY, contactId);
58016c29591f6ca97ae621fe6dfc9bfb9fef150870dWalter Jang            returnPickerResult(intent);
581f9779ef9d0c74886b2c495f9e4993017f5192242Walter Jang        }
582a489721e65c5f549ab26272af08eb2d05a869976Walter Jang
583a489721e65c5f549ab26272af08eb2d05a869976Walter Jang        @Override
584a489721e65c5f549ab26272af08eb2d05a869976Walter Jang        public void onSelectGroupMembers() {
585a489721e65c5f549ab26272af08eb2d05a869976Walter Jang            mActionBarAdapter.setSelectionMode(true);
586a489721e65c5f549ab26272af08eb2d05a869976Walter Jang        }
587f9779ef9d0c74886b2c495f9e4993017f5192242Walter Jang    }
588f9779ef9d0c74886b2c495f9e4993017f5192242Walter Jang
589f5493a638ad3faa5183ab7d33872585bcd6e178dWenyi Wang    private void returnSelectedContacts(long[] contactIds) {
590f5493a638ad3faa5183ab7d33872585bcd6e178dWenyi Wang        final Intent intent = new Intent();
591f5493a638ad3faa5183ab7d33872585bcd6e178dWenyi Wang        intent.putExtra(UiIntentActions.TARGET_CONTACT_IDS_EXTRA_KEY, contactIds);
592f5493a638ad3faa5183ab7d33872585bcd6e178dWenyi Wang        returnPickerResult(intent);
593f5493a638ad3faa5183ab7d33872585bcd6e178dWenyi Wang    }
594f5493a638ad3faa5183ab7d33872585bcd6e178dWenyi Wang
595b979b4294c14f2bc562a5279910bafb7ac1a92b4Dmitri Plotnikov    private final class PostalAddressPickerActionListener implements
596b979b4294c14f2bc562a5279910bafb7ac1a92b4Dmitri Plotnikov            OnPostalAddressPickerActionListener {
597e20d3432a370dd3996deec2df4e3cdf726c94992Daniel Lehmann        @Override
598b979b4294c14f2bc562a5279910bafb7ac1a92b4Dmitri Plotnikov        public void onPickPostalAddressAction(Uri dataUri) {
599d11bca23766abf3325cebbec5b1b225e3fe4663fDmitri Plotnikov            returnPickerResult(dataUri);
600b979b4294c14f2bc562a5279910bafb7ac1a92b4Dmitri Plotnikov        }
601b979b4294c14f2bc562a5279910bafb7ac1a92b4Dmitri Plotnikov    }
602b979b4294c14f2bc562a5279910bafb7ac1a92b4Dmitri Plotnikov
603c86ace78ca5c2e10dcb001a916386c8a9865e230Daniel Lehmann    private final class EmailAddressPickerActionListener implements
604c86ace78ca5c2e10dcb001a916386c8a9865e230Daniel Lehmann            OnEmailAddressPickerActionListener {
605c86ace78ca5c2e10dcb001a916386c8a9865e230Daniel Lehmann        @Override
606c86ace78ca5c2e10dcb001a916386c8a9865e230Daniel Lehmann        public void onPickEmailAddressAction(Uri dataUri) {
607c86ace78ca5c2e10dcb001a916386c8a9865e230Daniel Lehmann            returnPickerResult(dataUri);
608c86ace78ca5c2e10dcb001a916386c8a9865e230Daniel Lehmann        }
609c86ace78ca5c2e10dcb001a916386c8a9865e230Daniel Lehmann    }
610c86ace78ca5c2e10dcb001a916386c8a9865e230Daniel Lehmann
611b979b4294c14f2bc562a5279910bafb7ac1a92b4Dmitri Plotnikov    public void startActivityAndForwardResult(final Intent intent) {
612b979b4294c14f2bc562a5279910bafb7ac1a92b4Dmitri Plotnikov        intent.setFlags(Intent.FLAG_ACTIVITY_FORWARD_RESULT);
613b979b4294c14f2bc562a5279910bafb7ac1a92b4Dmitri Plotnikov
614b979b4294c14f2bc562a5279910bafb7ac1a92b4Dmitri Plotnikov        // Forward extras to the new activity
615b979b4294c14f2bc562a5279910bafb7ac1a92b4Dmitri Plotnikov        Bundle extras = getIntent().getExtras();
616b979b4294c14f2bc562a5279910bafb7ac1a92b4Dmitri Plotnikov        if (extras != null) {
617b979b4294c14f2bc562a5279910bafb7ac1a92b4Dmitri Plotnikov            intent.putExtras(extras);
618b979b4294c14f2bc562a5279910bafb7ac1a92b4Dmitri Plotnikov        }
6191d815e67ea1304d693b9e09e7e53e76dc61883e1Jay Shrauner        try {
62041c6886cabf68370f160ccd68d173bd6a59a1a07John Shao            ImplicitIntentsUtil.startActivityInApp(ContactSelectionActivity.this, intent);
6211d815e67ea1304d693b9e09e7e53e76dc61883e1Jay Shrauner        } catch (ActivityNotFoundException e) {
6221d815e67ea1304d693b9e09e7e53e76dc61883e1Jay Shrauner            Log.e(TAG, "startActivity() failed: " + e);
6231d815e67ea1304d693b9e09e7e53e76dc61883e1Jay Shrauner            Toast.makeText(ContactSelectionActivity.this, R.string.missing_app,
6241d815e67ea1304d693b9e09e7e53e76dc61883e1Jay Shrauner                    Toast.LENGTH_SHORT).show();
6251d815e67ea1304d693b9e09e7e53e76dc61883e1Jay Shrauner        }
626b979b4294c14f2bc562a5279910bafb7ac1a92b4Dmitri Plotnikov        finish();
627b979b4294c14f2bc562a5279910bafb7ac1a92b4Dmitri Plotnikov    }
628b979b4294c14f2bc562a5279910bafb7ac1a92b4Dmitri Plotnikov
629b979b4294c14f2bc562a5279910bafb7ac1a92b4Dmitri Plotnikov    @Override
630a8729cdf778f9ca927b06afde685f7ac6b8c917fDaisuke Miyakawa    public void onFocusChange(View view, boolean hasFocus) {
631b697ed768fb817f94524f6c3992547665df331c4Marcus Hagerott        if (view.getId() == R.id.search_view) {
632b697ed768fb817f94524f6c3992547665df331c4Marcus Hagerott            if (hasFocus) {
633b697ed768fb817f94524f6c3992547665df331c4Marcus Hagerott                mActionBarAdapter.setFocusOnSearchView();
634a8729cdf778f9ca927b06afde685f7ac6b8c917fDaisuke Miyakawa            }
635a8729cdf778f9ca927b06afde685f7ac6b8c917fDaisuke Miyakawa        }
636a8729cdf778f9ca927b06afde685f7ac6b8c917fDaisuke Miyakawa    }
637a8729cdf778f9ca927b06afde685f7ac6b8c917fDaisuke Miyakawa
638d11bca23766abf3325cebbec5b1b225e3fe4663fDmitri Plotnikov    public void returnPickerResult(Uri data) {
639d11bca23766abf3325cebbec5b1b225e3fe4663fDmitri Plotnikov        Intent intent = new Intent();
640d11bca23766abf3325cebbec5b1b225e3fe4663fDmitri Plotnikov        intent.setData(data);
641d11bca23766abf3325cebbec5b1b225e3fe4663fDmitri Plotnikov        returnPickerResult(intent);
642d11bca23766abf3325cebbec5b1b225e3fe4663fDmitri Plotnikov    }
643d11bca23766abf3325cebbec5b1b225e3fe4663fDmitri Plotnikov
644d11bca23766abf3325cebbec5b1b225e3fe4663fDmitri Plotnikov    public void returnPickerResult(Intent intent) {
645d11bca23766abf3325cebbec5b1b225e3fe4663fDmitri Plotnikov        intent.setFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
646d11bca23766abf3325cebbec5b1b225e3fe4663fDmitri Plotnikov        setResult(RESULT_OK, intent);
647d11bca23766abf3325cebbec5b1b225e3fe4663fDmitri Plotnikov        finish();
648d11bca23766abf3325cebbec5b1b225e3fe4663fDmitri Plotnikov    }
649d11bca23766abf3325cebbec5b1b225e3fe4663fDmitri Plotnikov
65063c311a278cd8ba28d6d8f3b49c0ccd4dffeb57dDmitri Plotnikov    @Override
651a8729cdf778f9ca927b06afde685f7ac6b8c917fDaisuke Miyakawa    public void onClick(View view) {
652b697ed768fb817f94524f6c3992547665df331c4Marcus Hagerott        if (view.getId() == R.id.floating_action_button) {
653b697ed768fb817f94524f6c3992547665df331c4Marcus Hagerott            startCreateNewContactActivity();
654a8729cdf778f9ca927b06afde685f7ac6b8c917fDaisuke Miyakawa        }
655a8729cdf778f9ca927b06afde685f7ac6b8c917fDaisuke Miyakawa    }
656a8729cdf778f9ca927b06afde685f7ac6b8c917fDaisuke Miyakawa
65781cc3b3d09d9296e521ac3454ad01c6b6c2ba71bBrian Attwell    private long getTargetContactId() {
65881cc3b3d09d9296e521ac3454ad01c6b6c2ba71bBrian Attwell        Intent intent = getIntent();
659c3d202ccbaf93ddd8291672027e59f549c32eee3Brian Attwell        final long targetContactId = intent.getLongExtra(
660c3d202ccbaf93ddd8291672027e59f549c32eee3Brian Attwell                UiIntentActions.TARGET_CONTACT_ID_EXTRA_KEY, -1);
66181cc3b3d09d9296e521ac3454ad01c6b6c2ba71bBrian Attwell        if (targetContactId == -1) {
66281cc3b3d09d9296e521ac3454ad01c6b6c2ba71bBrian Attwell            Log.e(TAG, "Intent " + intent.getAction() + " is missing required extra: "
663c3d202ccbaf93ddd8291672027e59f549c32eee3Brian Attwell                    + UiIntentActions.TARGET_CONTACT_ID_EXTRA_KEY);
66481cc3b3d09d9296e521ac3454ad01c6b6c2ba71bBrian Attwell            setResult(RESULT_CANCELED);
66581cc3b3d09d9296e521ac3454ad01c6b6c2ba71bBrian Attwell            finish();
66681cc3b3d09d9296e521ac3454ad01c6b6c2ba71bBrian Attwell            return -1;
66781cc3b3d09d9296e521ac3454ad01c6b6c2ba71bBrian Attwell        }
66881cc3b3d09d9296e521ac3454ad01c6b6c2ba71bBrian Attwell        return targetContactId;
66981cc3b3d09d9296e521ac3454ad01c6b6c2ba71bBrian Attwell    }
67081cc3b3d09d9296e521ac3454ad01c6b6c2ba71bBrian Attwell
671a8729cdf778f9ca927b06afde685f7ac6b8c917fDaisuke Miyakawa    private void startCreateNewContactActivity() {
672a8729cdf778f9ca927b06afde685f7ac6b8c917fDaisuke Miyakawa        Intent intent = new Intent(Intent.ACTION_INSERT, Contacts.CONTENT_URI);
673363af60ea23e5a3b945005712a16564ab69db18bGary Mai        intent.putExtra(ContactEditorActivity.
6748d45cdbd4e1e0b37d705fd1dca3d8f941f75e772Walter Jang                INTENT_KEY_FINISH_ACTIVITY_ON_SAVE_COMPLETED, true);
675a8729cdf778f9ca927b06afde685f7ac6b8c917fDaisuke Miyakawa        startActivityAndForwardResult(intent);
676a8729cdf778f9ca927b06afde685f7ac6b8c917fDaisuke Miyakawa    }
677a8729cdf778f9ca927b06afde685f7ac6b8c917fDaisuke Miyakawa
67837bddc2fa266fa0378fcd85ac5047b1fb0af2dc0Katherine Kuan    @Override
67981cc3b3d09d9296e521ac3454ad01c6b6c2ba71bBrian Attwell    public boolean onCreateOptionsMenu(Menu menu) {
68081cc3b3d09d9296e521ac3454ad01c6b6c2ba71bBrian Attwell        super.onCreateOptionsMenu(menu);
68181cc3b3d09d9296e521ac3454ad01c6b6c2ba71bBrian Attwell
68281cc3b3d09d9296e521ac3454ad01c6b6c2ba71bBrian Attwell        final MenuInflater inflater = getMenuInflater();
68381cc3b3d09d9296e521ac3454ad01c6b6c2ba71bBrian Attwell        inflater.inflate(R.menu.search_menu, menu);
68481cc3b3d09d9296e521ac3454ad01c6b6c2ba71bBrian Attwell
68581cc3b3d09d9296e521ac3454ad01c6b6c2ba71bBrian Attwell        final MenuItem searchItem = menu.findItem(R.id.menu_search);
686fde48de9ab7f1fb6e2037a32437e4f70716c719bBrian Attwell        searchItem.setVisible(!mIsSearchMode && mIsSearchSupported);
687bd9ef3c60669d71543b3506d4959c1fe4be409dcJohn Shao
688bd9ef3c60669d71543b3506d4959c1fe4be409dcJohn Shao        final Drawable searchIcon = searchItem.getIcon();
689bd9ef3c60669d71543b3506d4959c1fe4be409dcJohn Shao        if (searchIcon != null) {
690bd9ef3c60669d71543b3506d4959c1fe4be409dcJohn Shao            searchIcon.mutate().setColorFilter(ContextCompat.getColor(this,
691bd9ef3c60669d71543b3506d4959c1fe4be409dcJohn Shao                    R.color.actionbar_icon_color), PorterDuff.Mode.SRC_ATOP);
692bd9ef3c60669d71543b3506d4959c1fe4be409dcJohn Shao        }
69381cc3b3d09d9296e521ac3454ad01c6b6c2ba71bBrian Attwell        return true;
69481cc3b3d09d9296e521ac3454ad01c6b6c2ba71bBrian Attwell    }
69581cc3b3d09d9296e521ac3454ad01c6b6c2ba71bBrian Attwell
69681cc3b3d09d9296e521ac3454ad01c6b6c2ba71bBrian Attwell    @Override
69781cc3b3d09d9296e521ac3454ad01c6b6c2ba71bBrian Attwell    public void onBackPressed() {
6987712aef22da432331a67c710cfc18bce2c493887Jay Shrauner        if (!isSafeToCommitTransactions()) {
69935e174560845d19c6b2c179a9233a2e89e0e47eaJay Shrauner            return;
70035e174560845d19c6b2c179a9233a2e89e0e47eaJay Shrauner        }
70135e174560845d19c6b2c179a9233a2e89e0e47eaJay Shrauner
702794dbd0aa20eb6f291750adf7e88b0d6163659d6Walter Jang        if (isSelectionMode()) {
703794dbd0aa20eb6f291750adf7e88b0d6163659d6Walter Jang            mActionBarAdapter.setSelectionMode(false);
7045a48cd9118d6abaca6c345a7140b71ba92d2d95eWenyi Wang            if (getMultiSelectListFragment() != null) {
7055a48cd9118d6abaca6c345a7140b71ba92d2d95eWenyi Wang                getMultiSelectListFragment().displayCheckBoxes(false);
7065a48cd9118d6abaca6c345a7140b71ba92d2d95eWenyi Wang            }
707794dbd0aa20eb6f291750adf7e88b0d6163659d6Walter Jang        } else if (mIsSearchMode) {
70881cc3b3d09d9296e521ac3454ad01c6b6c2ba71bBrian Attwell            mIsSearchMode = false;
70981cc3b3d09d9296e521ac3454ad01c6b6c2ba71bBrian Attwell            configureSearchMode();
71081cc3b3d09d9296e521ac3454ad01c6b6c2ba71bBrian Attwell        } else {
71181cc3b3d09d9296e521ac3454ad01c6b6c2ba71bBrian Attwell            super.onBackPressed();
71281cc3b3d09d9296e521ac3454ad01c6b6c2ba71bBrian Attwell        }
71381cc3b3d09d9296e521ac3454ad01c6b6c2ba71bBrian Attwell    }
714b979b4294c14f2bc562a5279910bafb7ac1a92b4Dmitri Plotnikov}
715