PeopleActivity.java revision b1f0e5e8a4de69bd80276742900441e930fa4c86
17aa0e4cb91c869108238733ca107d18ccb888df7The Android Open Source Project/*
2fcfdffb439ccf1ddef971109b82e782c47161572Dmitri Plotnikov * Copyright (C) 2010 The Android Open Source Project
37aa0e4cb91c869108238733ca107d18ccb888df7The Android Open Source Project *
47aa0e4cb91c869108238733ca107d18ccb888df7The Android Open Source Project * Licensed under the Apache License, Version 2.0 (the "License");
57aa0e4cb91c869108238733ca107d18ccb888df7The Android Open Source Project * you may not use this file except in compliance with the License.
67aa0e4cb91c869108238733ca107d18ccb888df7The Android Open Source Project * You may obtain a copy of the License at
77aa0e4cb91c869108238733ca107d18ccb888df7The Android Open Source Project *
87aa0e4cb91c869108238733ca107d18ccb888df7The Android Open Source Project *      http://www.apache.org/licenses/LICENSE-2.0
97aa0e4cb91c869108238733ca107d18ccb888df7The Android Open Source Project *
107aa0e4cb91c869108238733ca107d18ccb888df7The Android Open Source Project * Unless required by applicable law or agreed to in writing, software
117aa0e4cb91c869108238733ca107d18ccb888df7The Android Open Source Project * distributed under the License is distributed on an "AS IS" BASIS,
127aa0e4cb91c869108238733ca107d18ccb888df7The Android Open Source Project * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
137aa0e4cb91c869108238733ca107d18ccb888df7The Android Open Source Project * See the License for the specific language governing permissions and
147aa0e4cb91c869108238733ca107d18ccb888df7The Android Open Source Project * limitations under the License.
157aa0e4cb91c869108238733ca107d18ccb888df7The Android Open Source Project */
167aa0e4cb91c869108238733ca107d18ccb888df7The Android Open Source Project
1727834b2ae8bb5a65dfc20c212844d98d1c252caeDmitri Plotnikovpackage com.android.contacts.activities;
187aa0e4cb91c869108238733ca107d18ccb888df7The Android Open Source Project
1979700889dad553dcde9e22a2fd23df768f68080fKatherine Kuanimport com.android.contacts.ContactLoader;
2018ffaa2561cc7dd2e3ef81737e6537931c0a9a11Dmitri Plotnikovimport com.android.contacts.ContactSaveService;
216f667b55687bf9193323802e8f3234f0ab254388Dmitri Plotnikovimport com.android.contacts.ContactsActivity;
2227834b2ae8bb5a65dfc20c212844d98d1c252caeDmitri Plotnikovimport com.android.contacts.R;
2318ffaa2561cc7dd2e3ef81737e6537931c0a9a11Dmitri Plotnikovimport com.android.contacts.detail.ContactDetailFragment;
24b5760b94bbf56ce348876ec36f4669d20a1530f5Katherine Kuanimport com.android.contacts.group.GroupBrowseListFragment;
25be18de05d6f6a107c552e369bce58f51c946fde7Katherine Kuanimport com.android.contacts.group.GroupBrowseListFragment.OnGroupBrowserActionListener;
26be18de05d6f6a107c552e369bce58f51c946fde7Katherine Kuanimport com.android.contacts.group.GroupDetailFragment;
279692f2664e678b0a264c586c70cc4a9c0ffabc21Dmitri Plotnikovimport com.android.contacts.interactions.ContactDeletionInteraction;
28261cd5650d07fbc41ea8f19d4e422094612d1454Daniel Lehmannimport com.android.contacts.interactions.ImportExportDialogFragment;
29b4e8886bcb25cde3b03eedcc815c0166329af3a4Dmitri Plotnikovimport com.android.contacts.interactions.PhoneNumberInteraction;
30416b569901ce4c577c1f76c3f29496d1adab29e1Dmitri Plotnikovimport com.android.contacts.list.ContactBrowseListContextMenuAdapter;
3108e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikovimport com.android.contacts.list.ContactBrowseListFragment;
3259fb48e7e6a37f26901ad5a4996947dcd25a73d9Dmitri Plotnikovimport com.android.contacts.list.ContactEntryListFragment;
33009676f9f2a5d8d47756be37abd9a14f2e564979Dmitri Plotnikovimport com.android.contacts.list.ContactListFilter;
3415ccbb4d22fd65165cacb7970cbe61de1aa9aac4Dmitri Plotnikovimport com.android.contacts.list.ContactListFilterController;
350906ee326a5553a224eb7b004536f35b340bdcd3Dmitri Plotnikovimport com.android.contacts.list.ContactsIntentResolver;
361ce1e7cf261994e46e6fe85ed4d445241ad55f16Dmitri Plotnikovimport com.android.contacts.list.ContactsRequest;
378b8264620f9362e089322d1e3a7cc5620900e6f9Dmitri Plotnikovimport com.android.contacts.list.ContactsUnavailableFragment;
386e850a046fcea8ba82a793b43944051246d08180Dmitri Plotnikovimport com.android.contacts.list.CustomContactListFilterActivity;
39b5760b94bbf56ce348876ec36f4669d20a1530f5Katherine Kuanimport com.android.contacts.list.DefaultContactBrowseListFragment;
404d174aad97cd382f810e3bf1a7f1f4f4772be118Dmitri Plotnikovimport com.android.contacts.list.DirectoryListLoader;
41732f65236e7f804941e84757c077a84eb11eab16Dmitri Plotnikovimport com.android.contacts.list.OnContactBrowserActionListener;
428b8264620f9362e089322d1e3a7cc5620900e6f9Dmitri Plotnikovimport com.android.contacts.list.OnContactsUnavailableActionListener;
438b8264620f9362e089322d1e3a7cc5620900e6f9Dmitri Plotnikovimport com.android.contacts.list.ProviderStatusLoader;
448b8264620f9362e089322d1e3a7cc5620900e6f9Dmitri Plotnikovimport com.android.contacts.list.ProviderStatusLoader.ProviderStatusListener;
45b5760b94bbf56ce348876ec36f4669d20a1530f5Katherine Kuanimport com.android.contacts.list.StrequentContactListFragment;
46c85ad182093f5556d6dbb310f4708cdc174b2665Dmitri Plotnikovimport com.android.contacts.preference.ContactsPreferenceActivity;
478b8264620f9362e089322d1e3a7cc5620900e6f9Dmitri Plotnikovimport com.android.contacts.util.AccountSelectionUtil;
483391dbed3575b3454c2bebf35dae4a19d8f987f2Daniel Lehmannimport com.android.contacts.util.DialogManager;
491323d69c40649914ae2195088573a20cc35da86eDmitri Plotnikovimport com.android.contacts.widget.ContextMenuAdapter;
5057cf30f316b8013e172150d1ad0e197be6b46b87Tadashi G. Takaoka
51caf0bc759c4ef96dde5bb0a5256c1dcb51b6ccc4Dmitri Plotnikovimport android.accounts.Account;
523d48a46d6ea2d0ad43f1d6253399db45414ac9b7Dmitri Plotnikovimport android.app.ActionBar;
53b5760b94bbf56ce348876ec36f4669d20a1530f5Katherine Kuanimport android.app.ActionBar.Tab;
54b5760b94bbf56ce348876ec36f4669d20a1530f5Katherine Kuanimport android.app.ActionBar.TabListener;
557aa0e4cb91c869108238733ca107d18ccb888df7The Android Open Source Projectimport android.app.Activity;
5649d17b3e7692ae9442c342db236fa93d4a837c28Jeff Sharkeyimport android.app.Dialog;
5792a6fdf1b07b8f1447560174e24455fd46aee7cdDmitri Plotnikovimport android.app.Fragment;
58b5760b94bbf56ce348876ec36f4669d20a1530f5Katherine Kuanimport android.app.FragmentManager;
59b5760b94bbf56ce348876ec36f4669d20a1530f5Katherine Kuanimport android.app.FragmentTransaction;
6060be1a1e8639a58d16f58686f8a89747d6079cc7Daniel Lehmannimport android.content.ActivityNotFoundException;
617aa0e4cb91c869108238733ca107d18ccb888df7The Android Open Source Projectimport android.content.ContentValues;
627aa0e4cb91c869108238733ca107d18ccb888df7The Android Open Source Projectimport android.content.Intent;
63b5760b94bbf56ce348876ec36f4669d20a1530f5Katherine Kuanimport android.content.res.TypedArray;
647aa0e4cb91c869108238733ca107d18ccb888df7The Android Open Source Projectimport android.net.Uri;
657aa0e4cb91c869108238733ca107d18ccb888df7The Android Open Source Projectimport android.os.Bundle;
66d7c4af2b932ffc65476fb1ac6d74feac74b48f3cDmitri Plotnikovimport android.provider.ContactsContract;
67e05296673449dc6686c4fec4dd2e98ab47a78056Jeff Hamiltonimport android.provider.ContactsContract.Contacts;
688b8264620f9362e089322d1e3a7cc5620900e6f9Dmitri Plotnikovimport android.provider.ContactsContract.ProviderStatus;
699692f2664e678b0a264c586c70cc4a9c0ffabc21Dmitri Plotnikovimport android.provider.Settings;
70a35a7e2aabc4edfafb9b4171e279bdb4c0c03d44Daniel Lehmannimport android.util.Log;
717aa0e4cb91c869108238733ca107d18ccb888df7The Android Open Source Projectimport android.view.KeyEvent;
727aa0e4cb91c869108238733ca107d18ccb888df7The Android Open Source Projectimport android.view.Menu;
73d9798aefc844dd9ce29da085cb8ab7e769f63e75Jeff Sharkeyimport android.view.MenuInflater;
747aa0e4cb91c869108238733ca107d18ccb888df7The Android Open Source Projectimport android.view.MenuItem;
757aa0e4cb91c869108238733ca107d18ccb888df7The Android Open Source Projectimport android.view.View;
764af3b0710ac6f08450b723a3784495469e45ba05Dmitri Plotnikovimport android.view.Window;
77b5760b94bbf56ce348876ec36f4669d20a1530f5Katherine Kuanimport android.widget.SearchView;
78424440bd932482c0a08b782a570d600051c56eb4Dmitri Plotnikovimport android.widget.Toast;
797aa0e4cb91c869108238733ca107d18ccb888df7The Android Open Source Project
80caf0bc759c4ef96dde5bb0a5256c1dcb51b6ccc4Dmitri Plotnikovimport java.util.ArrayList;
81caf0bc759c4ef96dde5bb0a5256c1dcb51b6ccc4Dmitri Plotnikov
827aa0e4cb91c869108238733ca107d18ccb888df7The Android Open Source Project/**
83bd772a5bfd907f3b14589a07378fb26dfd924d93Daniel Lehmann * Displays a list to browse contacts. For xlarge screens, this also displays a detail-pane on
84a3f0bce444d97664e282c10e56d09547f3a0e809Dmitri Plotnikov * the right.
857aa0e4cb91c869108238733ca107d18ccb888df7The Android Open Source Project */
869856fcee477d04f51bdbcbfdf632876c6b8a1173Katherine Kuanpublic class PeopleActivity extends ContactsActivity
87fcfdffb439ccf1ddef971109b82e782c47161572Dmitri Plotnikov        implements View.OnCreateContextMenuListener, ActionBarAdapter.Listener,
886e850a046fcea8ba82a793b43944051246d08180Dmitri Plotnikov        DialogManager.DialogShowingViewActivity,
898b8264620f9362e089322d1e3a7cc5620900e6f9Dmitri Plotnikov        ContactListFilterController.ContactListFilterListener, ProviderStatusListener {
9057d27da940983fba40d8e3a6d8b99a57b48419eaDmitri Plotnikov
915e684a424e7036ba3d379221d1889b4dd7265021Dave Santoro    private static final String TAG = "PeopleActivity";
927aa0e4cb91c869108238733ca107d18ccb888df7The Android Open Source Project
9322fb2053fe2bfe98376bf1a0e564f23ae9cecdedDaniel Lehmann    private static final int SUBACTIVITY_NEW_CONTACT = 2;
94c15062754af08cadc50b4b8ec89c2175a4bec1feDaniel Lehmann    private static final int SUBACTIVITY_EDIT_CONTACT = 3;
95c15062754af08cadc50b4b8ec89c2175a4bec1feDaniel Lehmann    private static final int SUBACTIVITY_CUSTOMIZE_FILTER = 4;
963c69e21d278b1f99b9af817f8459044215238938Dmitri Plotnikov
9715ccbb4d22fd65165cacb7970cbe61de1aa9aac4Dmitri Plotnikov    private static final String KEY_SEARCH_MODE = "searchMode";
9815ccbb4d22fd65165cacb7970cbe61de1aa9aac4Dmitri Plotnikov
993b7d5949bfa524534e5d1aa29b8eaff8733ae00cDaniel Lehmann    private DialogManager mDialogManager = new DialogManager(this);
1003391dbed3575b3454c2bebf35dae4a19d8f987f2Daniel Lehmann
101ac0f783adb82ee8056e742fae4994e848e82ea3dDmitri Plotnikov    private ContactsIntentResolver mIntentResolver;
102fcfdffb439ccf1ddef971109b82e782c47161572Dmitri Plotnikov    private ContactsRequest mRequest;
103caf498bd71e2ab4b6771cfa17453dd827041f238Dmitri Plotnikov
104fcfdffb439ccf1ddef971109b82e782c47161572Dmitri Plotnikov    private ActionBarAdapter mActionBarAdapter;
1057c5286ed8ba0d7fbe3683b560f69b3a2d4ff1e2aDmitri Plotnikov
10615ccbb4d22fd65165cacb7970cbe61de1aa9aac4Dmitri Plotnikov    private boolean mSearchMode;
107fcfdffb439ccf1ddef971109b82e782c47161572Dmitri Plotnikov
108fcfdffb439ccf1ddef971109b82e782c47161572Dmitri Plotnikov    private ContactBrowseListFragment mListFragment;
1090dfbe0339c7319ad02edc34de3d50104f64de735Dave Santoro
1100dfbe0339c7319ad02edc34de3d50104f64de735Dave Santoro    /**
111be18de05d6f6a107c552e369bce58f51c946fde7Katherine Kuan     * Whether we have a right-side contact or group detail pane for displaying info on that
112be18de05d6f6a107c552e369bce58f51c946fde7Katherine Kuan     * contact or group while browsing. Generally means "this is a tablet".
1130dfbe0339c7319ad02edc34de3d50104f64de735Dave Santoro     */
114be18de05d6f6a107c552e369bce58f51c946fde7Katherine Kuan    private boolean mContentPaneDisplayed;
1150dfbe0339c7319ad02edc34de3d50104f64de735Dave Santoro
116be18de05d6f6a107c552e369bce58f51c946fde7Katherine Kuan    private ContactDetailFragment mContactDetailFragment;
117be18de05d6f6a107c552e369bce58f51c946fde7Katherine Kuan    private ContactDetailFragmentListener mContactDetailFragmentListener =
118be18de05d6f6a107c552e369bce58f51c946fde7Katherine Kuan            new ContactDetailFragmentListener();
119be18de05d6f6a107c552e369bce58f51c946fde7Katherine Kuan
120be18de05d6f6a107c552e369bce58f51c946fde7Katherine Kuan    private GroupDetailFragment mGroupDetailFragment;
121424440bd932482c0a08b782a570d600051c56eb4Dmitri Plotnikov
122fcfdffb439ccf1ddef971109b82e782c47161572Dmitri Plotnikov    private boolean mSearchInitiated;
123e1d4c0617ede33b4b0cdb1137aca971b3dacc747Dmitri Plotnikov
12415ccbb4d22fd65165cacb7970cbe61de1aa9aac4Dmitri Plotnikov    private ContactListFilterController mContactListFilterController;
1253c69e21d278b1f99b9af817f8459044215238938Dmitri Plotnikov
1268b8264620f9362e089322d1e3a7cc5620900e6f9Dmitri Plotnikov    private ContactsUnavailableFragment mContactsUnavailableFragment;
1278b8264620f9362e089322d1e3a7cc5620900e6f9Dmitri Plotnikov    private ProviderStatusLoader mProviderStatusLoader;
1288b8264620f9362e089322d1e3a7cc5620900e6f9Dmitri Plotnikov    private int mProviderStatus = -1;
1298b8264620f9362e089322d1e3a7cc5620900e6f9Dmitri Plotnikov
1300cd01309feeaf08b1a9852d33fc123c6cbddca6cDmitri Plotnikov    private boolean mOptionsMenuContactsAvailable;
1310cd01309feeaf08b1a9852d33fc123c6cbddca6cDmitri Plotnikov
132b5760b94bbf56ce348876ec36f4669d20a1530f5Katherine Kuan    private DefaultContactBrowseListFragment mContactsFragment;
133b5760b94bbf56ce348876ec36f4669d20a1530f5Katherine Kuan    private StrequentContactListFragment mFavoritesFragment;
134b5760b94bbf56ce348876ec36f4669d20a1530f5Katherine Kuan    private GroupBrowseListFragment mGroupsFragment;
135b5760b94bbf56ce348876ec36f4669d20a1530f5Katherine Kuan
1368268bbe65440c70db46b4c505433fac1fdc36e58Katherine Kuan    private enum TabState {
1378268bbe65440c70db46b4c505433fac1fdc36e58Katherine Kuan        FAVORITES, CONTACTS, GROUPS
1388268bbe65440c70db46b4c505433fac1fdc36e58Katherine Kuan    }
1398268bbe65440c70db46b4c505433fac1fdc36e58Katherine Kuan
1408268bbe65440c70db46b4c505433fac1fdc36e58Katherine Kuan    private TabState mSelectedTab;
1418268bbe65440c70db46b4c505433fac1fdc36e58Katherine Kuan
1429856fcee477d04f51bdbcbfdf632876c6b8a1173Katherine Kuan    public PeopleActivity() {
1431540674a23a2ac0277a5aca3fa4ed41a6e1b74c3Dmitri Plotnikov        mIntentResolver = new ContactsIntentResolver(this);
144b5760b94bbf56ce348876ec36f4669d20a1530f5Katherine Kuan        // TODO: Get rid of the ContactListFilterController class because there aren't any
145b5760b94bbf56ce348876ec36f4669d20a1530f5Katherine Kuan        // dropdown filters anymore. Just store the selected filter as a member variable.
14615ccbb4d22fd65165cacb7970cbe61de1aa9aac4Dmitri Plotnikov        mContactListFilterController = new ContactListFilterController(this);
1476e850a046fcea8ba82a793b43944051246d08180Dmitri Plotnikov        mContactListFilterController.addListener(this);
1488b8264620f9362e089322d1e3a7cc5620900e6f9Dmitri Plotnikov        mProviderStatusLoader = new ProviderStatusLoader(this);
1496178cb47846e7efc9c245a9b9ba93032a0038921Dmitri Plotnikov    }
1506178cb47846e7efc9c245a9b9ba93032a0038921Dmitri Plotnikov
1518b8264620f9362e089322d1e3a7cc5620900e6f9Dmitri Plotnikov    public boolean areContactsAvailable() {
1528b8264620f9362e089322d1e3a7cc5620900e6f9Dmitri Plotnikov        return mProviderStatus == ProviderStatus.STATUS_NORMAL;
1538b8264620f9362e089322d1e3a7cc5620900e6f9Dmitri Plotnikov    }
1548b8264620f9362e089322d1e3a7cc5620900e6f9Dmitri Plotnikov
1557aa0e4cb91c869108238733ca107d18ccb888df7The Android Open Source Project    @Override
15692a6fdf1b07b8f1447560174e24455fd46aee7cdDmitri Plotnikov    public void onAttachFragment(Fragment fragment) {
15792a6fdf1b07b8f1447560174e24455fd46aee7cdDmitri Plotnikov        if (fragment instanceof ContactBrowseListFragment) {
15892a6fdf1b07b8f1447560174e24455fd46aee7cdDmitri Plotnikov            mListFragment = (ContactBrowseListFragment)fragment;
15992a6fdf1b07b8f1447560174e24455fd46aee7cdDmitri Plotnikov            mListFragment.setOnContactListActionListener(new ContactBrowserActionListener());
160a3f0bce444d97664e282c10e56d09547f3a0e809Dmitri Plotnikov            if (!getWindow().hasFeature(Window.FEATURE_ACTION_BAR)) {
161fa49a66979567894c85fe2489d1375216d67597eDmitri Plotnikov                mListFragment.setContextMenuAdapter(
162fa49a66979567894c85fe2489d1375216d67597eDmitri Plotnikov                        new ContactBrowseListContextMenuAdapter(mListFragment));
1638daa1797310aca2333efcff0a0e0b0ed03187fffDmitri Plotnikov            }
164be18de05d6f6a107c552e369bce58f51c946fde7Katherine Kuan        } else if (fragment instanceof GroupBrowseListFragment) {
165be18de05d6f6a107c552e369bce58f51c946fde7Katherine Kuan            mGroupsFragment = (GroupBrowseListFragment) fragment;
166be18de05d6f6a107c552e369bce58f51c946fde7Katherine Kuan            mGroupsFragment.setListener(new GroupBrowserActionListener());
167d364314c460152db7089b304beec81b3675893baDmitri Plotnikov        } else if (fragment instanceof ContactDetailFragment) {
168be18de05d6f6a107c552e369bce58f51c946fde7Katherine Kuan            mContactDetailFragment = (ContactDetailFragment) fragment;
169be18de05d6f6a107c552e369bce58f51c946fde7Katherine Kuan            mContactDetailFragment.setListener(mContactDetailFragmentListener);
170be18de05d6f6a107c552e369bce58f51c946fde7Katherine Kuan            mContentPaneDisplayed = true;
1718b8264620f9362e089322d1e3a7cc5620900e6f9Dmitri Plotnikov        } else if (fragment instanceof ContactsUnavailableFragment) {
1728b8264620f9362e089322d1e3a7cc5620900e6f9Dmitri Plotnikov            mContactsUnavailableFragment = (ContactsUnavailableFragment)fragment;
1738b8264620f9362e089322d1e3a7cc5620900e6f9Dmitri Plotnikov            mContactsUnavailableFragment.setProviderStatusLoader(mProviderStatusLoader);
1748b8264620f9362e089322d1e3a7cc5620900e6f9Dmitri Plotnikov            mContactsUnavailableFragment.setOnContactsUnavailableActionListener(
1758b8264620f9362e089322d1e3a7cc5620900e6f9Dmitri Plotnikov                    new ContactsUnavailableFragmentListener());
176be18de05d6f6a107c552e369bce58f51c946fde7Katherine Kuan        } else if (fragment instanceof GroupDetailFragment) {
177be18de05d6f6a107c552e369bce58f51c946fde7Katherine Kuan            mGroupDetailFragment = (GroupDetailFragment) fragment;
178be18de05d6f6a107c552e369bce58f51c946fde7Katherine Kuan            mContentPaneDisplayed = true;
17992a6fdf1b07b8f1447560174e24455fd46aee7cdDmitri Plotnikov        }
18092a6fdf1b07b8f1447560174e24455fd46aee7cdDmitri Plotnikov    }
18192a6fdf1b07b8f1447560174e24455fd46aee7cdDmitri Plotnikov
18292a6fdf1b07b8f1447560174e24455fd46aee7cdDmitri Plotnikov    @Override
18308e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikov    protected void onCreate(Bundle savedState) {
18408e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikov        super.onCreate(savedState);
1857aa0e4cb91c869108238733ca107d18ccb888df7The Android Open Source Project
186fa49a66979567894c85fe2489d1375216d67597eDmitri Plotnikov        configureContentView(true, savedState);
187fa49a66979567894c85fe2489d1375216d67597eDmitri Plotnikov    }
188fa49a66979567894c85fe2489d1375216d67597eDmitri Plotnikov
189fa49a66979567894c85fe2489d1375216d67597eDmitri Plotnikov    @Override
190fa49a66979567894c85fe2489d1375216d67597eDmitri Plotnikov    protected void onNewIntent(Intent intent) {
191fa49a66979567894c85fe2489d1375216d67597eDmitri Plotnikov        setIntent(intent);
192fa49a66979567894c85fe2489d1375216d67597eDmitri Plotnikov        configureContentView(false, null);
193fa49a66979567894c85fe2489d1375216d67597eDmitri Plotnikov    }
194fa49a66979567894c85fe2489d1375216d67597eDmitri Plotnikov
195fa49a66979567894c85fe2489d1375216d67597eDmitri Plotnikov    private void configureContentView(boolean createContentView, Bundle savedState) {
1961ce1e7cf261994e46e6fe85ed4d445241ad55f16Dmitri Plotnikov        // Extract relevant information from the intent
1971ce1e7cf261994e46e6fe85ed4d445241ad55f16Dmitri Plotnikov        mRequest = mIntentResolver.resolveIntent(getIntent());
1981ce1e7cf261994e46e6fe85ed4d445241ad55f16Dmitri Plotnikov        if (!mRequest.isValid()) {
1996178cb47846e7efc9c245a9b9ba93032a0038921Dmitri Plotnikov            setResult(RESULT_CANCELED);
2007aa0e4cb91c869108238733ca107d18ccb888df7The Android Open Source Project            finish();
2011ce1e7cf261994e46e6fe85ed4d445241ad55f16Dmitri Plotnikov            return;
2026178cb47846e7efc9c245a9b9ba93032a0038921Dmitri Plotnikov        }
2036178cb47846e7efc9c245a9b9ba93032a0038921Dmitri Plotnikov
2041ce1e7cf261994e46e6fe85ed4d445241ad55f16Dmitri Plotnikov        Intent redirect = mRequest.getRedirectIntent();
2051ce1e7cf261994e46e6fe85ed4d445241ad55f16Dmitri Plotnikov        if (redirect != null) {
2061ce1e7cf261994e46e6fe85ed4d445241ad55f16Dmitri Plotnikov            // Need to start a different activity
2076178cb47846e7efc9c245a9b9ba93032a0038921Dmitri Plotnikov            startActivity(redirect);
2087aa0e4cb91c869108238733ca107d18ccb888df7The Android Open Source Project            finish();
2091ce1e7cf261994e46e6fe85ed4d445241ad55f16Dmitri Plotnikov            return;
2107aa0e4cb91c869108238733ca107d18ccb888df7The Android Open Source Project        }
2117aa0e4cb91c869108238733ca107d18ccb888df7The Android Open Source Project
212fa49a66979567894c85fe2489d1375216d67597eDmitri Plotnikov        if (createContentView) {
2139856fcee477d04f51bdbcbfdf632876c6b8a1173Katherine Kuan            setContentView(R.layout.people_activity);
214b5760b94bbf56ce348876ec36f4669d20a1530f5Katherine Kuan
215b5760b94bbf56ce348876ec36f4669d20a1530f5Katherine Kuan            final FragmentManager fragmentManager = getFragmentManager();
216b5760b94bbf56ce348876ec36f4669d20a1530f5Katherine Kuan            mFavoritesFragment = (StrequentContactListFragment) fragmentManager
217b5760b94bbf56ce348876ec36f4669d20a1530f5Katherine Kuan                    .findFragmentById(R.id.favorites_fragment);
218b5760b94bbf56ce348876ec36f4669d20a1530f5Katherine Kuan            mContactsFragment = (DefaultContactBrowseListFragment) fragmentManager
219b5760b94bbf56ce348876ec36f4669d20a1530f5Katherine Kuan                    .findFragmentById(R.id.contacts_fragment);
220b5760b94bbf56ce348876ec36f4669d20a1530f5Katherine Kuan            mGroupsFragment = (GroupBrowseListFragment) fragmentManager
221b5760b94bbf56ce348876ec36f4669d20a1530f5Katherine Kuan                    .findFragmentById(R.id.groups_fragment);
222b5760b94bbf56ce348876ec36f4669d20a1530f5Katherine Kuan
223b5760b94bbf56ce348876ec36f4669d20a1530f5Katherine Kuan            // Hide all tabs (the current tab will later be reshown once a tab is selected)
224b5760b94bbf56ce348876ec36f4669d20a1530f5Katherine Kuan            final FragmentTransaction transaction = fragmentManager.beginTransaction();
225b5760b94bbf56ce348876ec36f4669d20a1530f5Katherine Kuan            transaction.hide(mFavoritesFragment);
226b5760b94bbf56ce348876ec36f4669d20a1530f5Katherine Kuan            transaction.hide(mContactsFragment);
227b5760b94bbf56ce348876ec36f4669d20a1530f5Katherine Kuan            transaction.hide(mGroupsFragment);
228be18de05d6f6a107c552e369bce58f51c946fde7Katherine Kuan            if (mContactDetailFragment != null) {
229be18de05d6f6a107c552e369bce58f51c946fde7Katherine Kuan                transaction.hide(mContactDetailFragment);
230be18de05d6f6a107c552e369bce58f51c946fde7Katherine Kuan            }
231be18de05d6f6a107c552e369bce58f51c946fde7Katherine Kuan            if (mGroupDetailFragment != null) {
232be18de05d6f6a107c552e369bce58f51c946fde7Katherine Kuan                transaction.hide(mGroupDetailFragment);
233be18de05d6f6a107c552e369bce58f51c946fde7Katherine Kuan            }
234b5760b94bbf56ce348876ec36f4669d20a1530f5Katherine Kuan            transaction.commit();
235fa49a66979567894c85fe2489d1375216d67597eDmitri Plotnikov        }
23665ad5eedb8f44f11e1d29cce141eddd88c0941b3Dmitri Plotnikov
23790715b38713ea97504f2b4a8452c8dd46d1c20ecDmitri Plotnikov        if (mRequest.getActionCode() == ContactsRequest.ACTION_VIEW_CONTACT
238be18de05d6f6a107c552e369bce58f51c946fde7Katherine Kuan                && !mContentPaneDisplayed) {
23990715b38713ea97504f2b4a8452c8dd46d1c20ecDmitri Plotnikov            redirect = new Intent(this, ContactDetailActivity.class);
24090715b38713ea97504f2b4a8452c8dd46d1c20ecDmitri Plotnikov            redirect.setAction(Intent.ACTION_VIEW);
24190715b38713ea97504f2b4a8452c8dd46d1c20ecDmitri Plotnikov            redirect.setData(mRequest.getContactUri());
24290715b38713ea97504f2b4a8452c8dd46d1c20ecDmitri Plotnikov            startActivity(redirect);
24390715b38713ea97504f2b4a8452c8dd46d1c20ecDmitri Plotnikov            finish();
24490715b38713ea97504f2b4a8452c8dd46d1c20ecDmitri Plotnikov            return;
24527b97bca14c84b3f830c7a433e14ae5c180a32c3Dmitri Plotnikov        }
24627b97bca14c84b3f830c7a433e14ae5c180a32c3Dmitri Plotnikov
24790715b38713ea97504f2b4a8452c8dd46d1c20ecDmitri Plotnikov        setTitle(mRequest.getActivityTitle());
248b5760b94bbf56ce348876ec36f4669d20a1530f5Katherine Kuan        ActionBar actionBar = getActionBar();
2491ee9df6facd2340416d6a33aeb739707643d2fc3Katherine Kuan        mActionBarAdapter = new ActionBarAdapter(this, this);
2501ee9df6facd2340416d6a33aeb739707643d2fc3Katherine Kuan        mActionBarAdapter.onCreate(savedState, mRequest, getActionBar(), !mContentPaneDisplayed);
251b5760b94bbf56ce348876ec36f4669d20a1530f5Katherine Kuan        mActionBarAdapter.setContactListFilterController(mContactListFilterController);
252fa49a66979567894c85fe2489d1375216d67597eDmitri Plotnikov
2533bf12640a267146a6a0134367f7236401db8e754Daniel Lehmann        if (createContentView) {
254b5760b94bbf56ce348876ec36f4669d20a1530f5Katherine Kuan            actionBar.removeAllTabs();
255b5760b94bbf56ce348876ec36f4669d20a1530f5Katherine Kuan            Tab favoritesTab = actionBar.newTab();
256b5760b94bbf56ce348876ec36f4669d20a1530f5Katherine Kuan            favoritesTab.setText(getString(R.string.strequentList));
257be18de05d6f6a107c552e369bce58f51c946fde7Katherine Kuan            favoritesTab.setTabListener(new TabChangeListener(mFavoritesFragment,
2588268bbe65440c70db46b4c505433fac1fdc36e58Katherine Kuan                    mContactDetailFragment, TabState.FAVORITES));
259b5760b94bbf56ce348876ec36f4669d20a1530f5Katherine Kuan            actionBar.addTab(favoritesTab);
2603d48a46d6ea2d0ad43f1d6253399db45414ac9b7Dmitri Plotnikov
261b5760b94bbf56ce348876ec36f4669d20a1530f5Katherine Kuan            Tab peopleTab = actionBar.newTab();
262b5760b94bbf56ce348876ec36f4669d20a1530f5Katherine Kuan            peopleTab.setText(getString(R.string.people));
263be18de05d6f6a107c552e369bce58f51c946fde7Katherine Kuan            peopleTab.setTabListener(new TabChangeListener(mContactsFragment,
2648268bbe65440c70db46b4c505433fac1fdc36e58Katherine Kuan                    mContactDetailFragment, TabState.CONTACTS));
265b5760b94bbf56ce348876ec36f4669d20a1530f5Katherine Kuan            actionBar.addTab(peopleTab);
266b5760b94bbf56ce348876ec36f4669d20a1530f5Katherine Kuan
267b5760b94bbf56ce348876ec36f4669d20a1530f5Katherine Kuan            Tab groupsTab = actionBar.newTab();
268b5760b94bbf56ce348876ec36f4669d20a1530f5Katherine Kuan            groupsTab.setText(getString(R.string.contactsGroupsLabel));
269be18de05d6f6a107c552e369bce58f51c946fde7Katherine Kuan            groupsTab.setTabListener(new TabChangeListener(mGroupsFragment,
2708268bbe65440c70db46b4c505433fac1fdc36e58Katherine Kuan                    mGroupDetailFragment, TabState.GROUPS));
271b5760b94bbf56ce348876ec36f4669d20a1530f5Katherine Kuan            actionBar.addTab(groupsTab);
272b5760b94bbf56ce348876ec36f4669d20a1530f5Katherine Kuan            actionBar.setDisplayShowTitleEnabled(true);
273b5760b94bbf56ce348876ec36f4669d20a1530f5Katherine Kuan
274b5760b94bbf56ce348876ec36f4669d20a1530f5Katherine Kuan            TypedArray a = obtainStyledAttributes(null, R.styleable.ActionBarHomeIcon);
275b5760b94bbf56ce348876ec36f4669d20a1530f5Katherine Kuan            boolean showHomeIcon = a.getBoolean(R.styleable.ActionBarHomeIcon_show_home_icon, true);
276b5760b94bbf56ce348876ec36f4669d20a1530f5Katherine Kuan            actionBar.setDisplayShowHomeEnabled(showHomeIcon);
277b5760b94bbf56ce348876ec36f4669d20a1530f5Katherine Kuan
2788268bbe65440c70db46b4c505433fac1fdc36e58Katherine Kuan            invalidateOptionsMenuIfNeeded();
279d364314c460152db7089b304beec81b3675893baDmitri Plotnikov        }
28008e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikov
281fa49a66979567894c85fe2489d1375216d67597eDmitri Plotnikov        configureFragments(savedState == null);
2823c69e21d278b1f99b9af817f8459044215238938Dmitri Plotnikov    }
2833c69e21d278b1f99b9af817f8459044215238938Dmitri Plotnikov
284b5760b94bbf56ce348876ec36f4669d20a1530f5Katherine Kuan    /**
285b5760b94bbf56ce348876ec36f4669d20a1530f5Katherine Kuan     * Tab change listener that is instantiated once for each tab. Handles showing/hiding fragments.
286b5760b94bbf56ce348876ec36f4669d20a1530f5Katherine Kuan     * TODO: Use ViewPager so that tabs can be swiped left and right. Figure out how to use the
287b5760b94bbf56ce348876ec36f4669d20a1530f5Katherine Kuan     * support library in our app.
288b5760b94bbf56ce348876ec36f4669d20a1530f5Katherine Kuan     */
289b5760b94bbf56ce348876ec36f4669d20a1530f5Katherine Kuan    private class TabChangeListener implements TabListener {
290be18de05d6f6a107c552e369bce58f51c946fde7Katherine Kuan        private final Fragment mBrowseListFragment;
291be18de05d6f6a107c552e369bce58f51c946fde7Katherine Kuan
292be18de05d6f6a107c552e369bce58f51c946fde7Katherine Kuan        /**
293be18de05d6f6a107c552e369bce58f51c946fde7Katherine Kuan         * Right pane fragment that is present on larger screen sizes (can be
294be18de05d6f6a107c552e369bce58f51c946fde7Katherine Kuan         * null for smaller screen sizes).
295be18de05d6f6a107c552e369bce58f51c946fde7Katherine Kuan         */
296be18de05d6f6a107c552e369bce58f51c946fde7Katherine Kuan        private final Fragment mDetailFragment;
2978268bbe65440c70db46b4c505433fac1fdc36e58Katherine Kuan        private final TabState mTabState;
298b5760b94bbf56ce348876ec36f4669d20a1530f5Katherine Kuan
2998268bbe65440c70db46b4c505433fac1fdc36e58Katherine Kuan        public TabChangeListener(Fragment listFragment, Fragment detailFragment, TabState state) {
300be18de05d6f6a107c552e369bce58f51c946fde7Katherine Kuan            mBrowseListFragment = listFragment;
301be18de05d6f6a107c552e369bce58f51c946fde7Katherine Kuan            mDetailFragment = detailFragment;
3028268bbe65440c70db46b4c505433fac1fdc36e58Katherine Kuan            mTabState = state;
303b5760b94bbf56ce348876ec36f4669d20a1530f5Katherine Kuan        }
304b5760b94bbf56ce348876ec36f4669d20a1530f5Katherine Kuan
305b5760b94bbf56ce348876ec36f4669d20a1530f5Katherine Kuan        @Override
306b5760b94bbf56ce348876ec36f4669d20a1530f5Katherine Kuan        public void onTabUnselected(Tab tab, FragmentTransaction ft) {
307be18de05d6f6a107c552e369bce58f51c946fde7Katherine Kuan            ft.hide(mBrowseListFragment);
308be18de05d6f6a107c552e369bce58f51c946fde7Katherine Kuan            if (mDetailFragment != null) {
309be18de05d6f6a107c552e369bce58f51c946fde7Katherine Kuan                ft.hide(mDetailFragment);
310be18de05d6f6a107c552e369bce58f51c946fde7Katherine Kuan            }
311b5760b94bbf56ce348876ec36f4669d20a1530f5Katherine Kuan        }
312b5760b94bbf56ce348876ec36f4669d20a1530f5Katherine Kuan
313b5760b94bbf56ce348876ec36f4669d20a1530f5Katherine Kuan        @Override
314b5760b94bbf56ce348876ec36f4669d20a1530f5Katherine Kuan        public void onTabSelected(Tab tab, FragmentTransaction ft) {
315be18de05d6f6a107c552e369bce58f51c946fde7Katherine Kuan            ft.show(mBrowseListFragment);
316be18de05d6f6a107c552e369bce58f51c946fde7Katherine Kuan            if (mDetailFragment != null) {
317be18de05d6f6a107c552e369bce58f51c946fde7Katherine Kuan                ft.show(mDetailFragment);
318be18de05d6f6a107c552e369bce58f51c946fde7Katherine Kuan            }
3198268bbe65440c70db46b4c505433fac1fdc36e58Katherine Kuan            setSelectedTab(mTabState);
3208268bbe65440c70db46b4c505433fac1fdc36e58Katherine Kuan            invalidateOptionsMenu();
321b5760b94bbf56ce348876ec36f4669d20a1530f5Katherine Kuan        }
322b5760b94bbf56ce348876ec36f4669d20a1530f5Katherine Kuan
323b5760b94bbf56ce348876ec36f4669d20a1530f5Katherine Kuan        @Override
324b5760b94bbf56ce348876ec36f4669d20a1530f5Katherine Kuan        public void onTabReselected(Tab tab, FragmentTransaction ft) {
325b5760b94bbf56ce348876ec36f4669d20a1530f5Katherine Kuan        }
326b5760b94bbf56ce348876ec36f4669d20a1530f5Katherine Kuan    }
327b5760b94bbf56ce348876ec36f4669d20a1530f5Katherine Kuan
3288268bbe65440c70db46b4c505433fac1fdc36e58Katherine Kuan    private void setSelectedTab(TabState tab) {
3298268bbe65440c70db46b4c505433fac1fdc36e58Katherine Kuan        mSelectedTab = tab;
3308268bbe65440c70db46b4c505433fac1fdc36e58Katherine Kuan    }
3318268bbe65440c70db46b4c505433fac1fdc36e58Katherine Kuan
3326e850a046fcea8ba82a793b43944051246d08180Dmitri Plotnikov    @Override
333174fdc2dcb965f11cf4eb25e4ea961f0e1e56c85Dmitri Plotnikov    protected void onPause() {
334174fdc2dcb965f11cf4eb25e4ea961f0e1e56c85Dmitri Plotnikov        if (mActionBarAdapter != null) {
335174fdc2dcb965f11cf4eb25e4ea961f0e1e56c85Dmitri Plotnikov            mActionBarAdapter.setListener(null);
336174fdc2dcb965f11cf4eb25e4ea961f0e1e56c85Dmitri Plotnikov        }
337fa49a66979567894c85fe2489d1375216d67597eDmitri Plotnikov
338fa49a66979567894c85fe2489d1375216d67597eDmitri Plotnikov        mOptionsMenuContactsAvailable = false;
339fa49a66979567894c85fe2489d1375216d67597eDmitri Plotnikov
340fa49a66979567894c85fe2489d1375216d67597eDmitri Plotnikov        mProviderStatus = -1;
3418b8264620f9362e089322d1e3a7cc5620900e6f9Dmitri Plotnikov        mProviderStatusLoader.setProviderStatusListener(null);
342174fdc2dcb965f11cf4eb25e4ea961f0e1e56c85Dmitri Plotnikov        super.onPause();
343174fdc2dcb965f11cf4eb25e4ea961f0e1e56c85Dmitri Plotnikov    }
344174fdc2dcb965f11cf4eb25e4ea961f0e1e56c85Dmitri Plotnikov
345174fdc2dcb965f11cf4eb25e4ea961f0e1e56c85Dmitri Plotnikov    @Override
346174fdc2dcb965f11cf4eb25e4ea961f0e1e56c85Dmitri Plotnikov    protected void onResume() {
347174fdc2dcb965f11cf4eb25e4ea961f0e1e56c85Dmitri Plotnikov        super.onResume();
348174fdc2dcb965f11cf4eb25e4ea961f0e1e56c85Dmitri Plotnikov        if (mActionBarAdapter != null) {
349174fdc2dcb965f11cf4eb25e4ea961f0e1e56c85Dmitri Plotnikov            mActionBarAdapter.setListener(this);
350174fdc2dcb965f11cf4eb25e4ea961f0e1e56c85Dmitri Plotnikov        }
3518b8264620f9362e089322d1e3a7cc5620900e6f9Dmitri Plotnikov        mProviderStatusLoader.setProviderStatusListener(this);
3528b8264620f9362e089322d1e3a7cc5620900e6f9Dmitri Plotnikov        updateFragmentVisibility();
353174fdc2dcb965f11cf4eb25e4ea961f0e1e56c85Dmitri Plotnikov    }
354174fdc2dcb965f11cf4eb25e4ea961f0e1e56c85Dmitri Plotnikov
355174fdc2dcb965f11cf4eb25e4ea961f0e1e56c85Dmitri Plotnikov    @Override
3566e850a046fcea8ba82a793b43944051246d08180Dmitri Plotnikov    protected void onStart() {
357e4e52199057ffb57bad42caa33e6b402fd80697aDmitri Plotnikov        mContactListFilterController.onStart();
3586e850a046fcea8ba82a793b43944051246d08180Dmitri Plotnikov        super.onStart();
359caf0bc759c4ef96dde5bb0a5256c1dcb51b6ccc4Dmitri Plotnikov    }
360caf0bc759c4ef96dde5bb0a5256c1dcb51b6ccc4Dmitri Plotnikov
361955846efce2fb378b527bc74fe322fce655f75e2Dmitri Plotnikov    private void configureFragments(boolean fromRequest) {
362009676f9f2a5d8d47756be37abd9a14f2e564979Dmitri Plotnikov        if (fromRequest) {
36391ab5b436ebf12e29fdf3e19b3ea195287fcc1d9Dmitri Plotnikov            ContactListFilter filter = null;
36491ab5b436ebf12e29fdf3e19b3ea195287fcc1d9Dmitri Plotnikov            int actionCode = mRequest.getActionCode();
36591ab5b436ebf12e29fdf3e19b3ea195287fcc1d9Dmitri Plotnikov            switch (actionCode) {
36691ab5b436ebf12e29fdf3e19b3ea195287fcc1d9Dmitri Plotnikov                case ContactsRequest.ACTION_ALL_CONTACTS:
367be18de05d6f6a107c552e369bce58f51c946fde7Katherine Kuan                    filter = ContactListFilter.createFilterWithType(
368be18de05d6f6a107c552e369bce58f51c946fde7Katherine Kuan                            ContactListFilter.FILTER_TYPE_ALL_ACCOUNTS);
36991ab5b436ebf12e29fdf3e19b3ea195287fcc1d9Dmitri Plotnikov                    break;
37091ab5b436ebf12e29fdf3e19b3ea195287fcc1d9Dmitri Plotnikov                case ContactsRequest.ACTION_CONTACTS_WITH_PHONES:
371be18de05d6f6a107c552e369bce58f51c946fde7Katherine Kuan                    filter = ContactListFilter.createFilterWithType(
37291ab5b436ebf12e29fdf3e19b3ea195287fcc1d9Dmitri Plotnikov                            ContactListFilter.FILTER_TYPE_WITH_PHONE_NUMBERS_ONLY);
37391ab5b436ebf12e29fdf3e19b3ea195287fcc1d9Dmitri Plotnikov                    break;
37491ab5b436ebf12e29fdf3e19b3ea195287fcc1d9Dmitri Plotnikov
37591ab5b436ebf12e29fdf3e19b3ea195287fcc1d9Dmitri Plotnikov                // TODO: handle FREQUENT and STREQUENT according to the spec
37691ab5b436ebf12e29fdf3e19b3ea195287fcc1d9Dmitri Plotnikov                case ContactsRequest.ACTION_FREQUENT:
37791ab5b436ebf12e29fdf3e19b3ea195287fcc1d9Dmitri Plotnikov                case ContactsRequest.ACTION_STREQUENT:
37891ab5b436ebf12e29fdf3e19b3ea195287fcc1d9Dmitri Plotnikov                    // For now they are treated the same as STARRED
37991ab5b436ebf12e29fdf3e19b3ea195287fcc1d9Dmitri Plotnikov                case ContactsRequest.ACTION_STARRED:
380be18de05d6f6a107c552e369bce58f51c946fde7Katherine Kuan                    filter = ContactListFilter.createFilterWithType(
381be18de05d6f6a107c552e369bce58f51c946fde7Katherine Kuan                            ContactListFilter.FILTER_TYPE_STARRED);
38291ab5b436ebf12e29fdf3e19b3ea195287fcc1d9Dmitri Plotnikov                    break;
38391ab5b436ebf12e29fdf3e19b3ea195287fcc1d9Dmitri Plotnikov            }
38491ab5b436ebf12e29fdf3e19b3ea195287fcc1d9Dmitri Plotnikov
3850edd4071ddcb23bf2a7b95582df0657de9ff0c60Dmitri Plotnikov            mSearchMode = mRequest.isSearchMode();
38691ab5b436ebf12e29fdf3e19b3ea195287fcc1d9Dmitri Plotnikov            if (filter != null) {
38791ab5b436ebf12e29fdf3e19b3ea195287fcc1d9Dmitri Plotnikov                mContactListFilterController.setContactListFilter(filter, false);
388fa49a66979567894c85fe2489d1375216d67597eDmitri Plotnikov                mSearchMode = false;
38948cc25047d2c61828e9137c50b3496feada7a175Dmitri Plotnikov            } else if (mRequest.getActionCode() == ContactsRequest.ACTION_ALL_CONTACTS) {
390be18de05d6f6a107c552e369bce58f51c946fde7Katherine Kuan                mContactListFilterController.setContactListFilter(
391be18de05d6f6a107c552e369bce58f51c946fde7Katherine Kuan                        ContactListFilter.createFilterWithType(
39248cc25047d2c61828e9137c50b3496feada7a175Dmitri Plotnikov                        ContactListFilter.FILTER_TYPE_ALL_ACCOUNTS), false);
393009676f9f2a5d8d47756be37abd9a14f2e564979Dmitri Plotnikov            }
394d959104d37df65f0d6de9290c3fa2b59065be0fcDmitri Plotnikov
395d959104d37df65f0d6de9290c3fa2b59065be0fcDmitri Plotnikov            if (mRequest.getContactUri() != null) {
396fa49a66979567894c85fe2489d1375216d67597eDmitri Plotnikov                mSearchMode = false;
397d959104d37df65f0d6de9290c3fa2b59065be0fcDmitri Plotnikov            }
398d959104d37df65f0d6de9290c3fa2b59065be0fcDmitri Plotnikov
399fa49a66979567894c85fe2489d1375216d67597eDmitri Plotnikov            mListFragment.setContactsRequest(mRequest);
4000ff0e317cbf788adc4dce38257d27691e032d6caKatherine Kuan            configureContactListFragmentForRequest();
401a3f0bce444d97664e282c10e56d09547f3a0e809Dmitri Plotnikov
402b5760b94bbf56ce348876ec36f4669d20a1530f5Katherine Kuan        } else {
403a3f0bce444d97664e282c10e56d09547f3a0e809Dmitri Plotnikov            mSearchMode = mActionBarAdapter.isSearchMode();
404fa49a66979567894c85fe2489d1375216d67597eDmitri Plotnikov        }
405fa49a66979567894c85fe2489d1375216d67597eDmitri Plotnikov
4060ff0e317cbf788adc4dce38257d27691e032d6caKatherine Kuan        configureContactListFragment();
4070ff0e317cbf788adc4dce38257d27691e032d6caKatherine Kuan        configureGroupListFragment();
408fa49a66979567894c85fe2489d1375216d67597eDmitri Plotnikov
4098268bbe65440c70db46b4c505433fac1fdc36e58Katherine Kuan        invalidateOptionsMenuIfNeeded();
4106e850a046fcea8ba82a793b43944051246d08180Dmitri Plotnikov    }
4116e850a046fcea8ba82a793b43944051246d08180Dmitri Plotnikov
4126e850a046fcea8ba82a793b43944051246d08180Dmitri Plotnikov    @Override
413d959104d37df65f0d6de9290c3fa2b59065be0fcDmitri Plotnikov    public void onContactListFiltersLoaded() {
4148daa1797310aca2333efcff0a0e0b0ed03187fffDmitri Plotnikov        if (mListFragment == null || !mListFragment.isAdded()) {
415955846efce2fb378b527bc74fe322fce655f75e2Dmitri Plotnikov            return;
416955846efce2fb378b527bc74fe322fce655f75e2Dmitri Plotnikov        }
417955846efce2fb378b527bc74fe322fce655f75e2Dmitri Plotnikov
418d959104d37df65f0d6de9290c3fa2b59065be0fcDmitri Plotnikov        mListFragment.setFilter(mContactListFilterController.getFilter());
419bc5bc44eb0e6f86a093929885547fe37efe60a54Dmitri Plotnikov
4208268bbe65440c70db46b4c505433fac1fdc36e58Katherine Kuan        invalidateOptionsMenuIfNeeded();
421174fdc2dcb965f11cf4eb25e4ea961f0e1e56c85Dmitri Plotnikov    }
422174fdc2dcb965f11cf4eb25e4ea961f0e1e56c85Dmitri Plotnikov
423d959104d37df65f0d6de9290c3fa2b59065be0fcDmitri Plotnikov    @Override
424d959104d37df65f0d6de9290c3fa2b59065be0fcDmitri Plotnikov    public void onContactListFilterChanged() {
4258daa1797310aca2333efcff0a0e0b0ed03187fffDmitri Plotnikov        if (mListFragment == null || !mListFragment.isAdded()) {
426d07335a54090a7c41baa99a2c0a6a869ecc6cfbaDmitri Plotnikov            return;
427d07335a54090a7c41baa99a2c0a6a869ecc6cfbaDmitri Plotnikov        }
428d07335a54090a7c41baa99a2c0a6a869ecc6cfbaDmitri Plotnikov
429d959104d37df65f0d6de9290c3fa2b59065be0fcDmitri Plotnikov        mListFragment.setFilter(mContactListFilterController.getFilter());
430e898a9fa52728b2ff6fcd3add693471e9e15553dDmitri Plotnikov
4318268bbe65440c70db46b4c505433fac1fdc36e58Katherine Kuan        invalidateOptionsMenuIfNeeded();
4323ad2f35559f81e0d1b5ff362795ae77c0493bd0aDmitri Plotnikov    }
4333ad2f35559f81e0d1b5ff362795ae77c0493bd0aDmitri Plotnikov
4346e850a046fcea8ba82a793b43944051246d08180Dmitri Plotnikov    @Override
4356e850a046fcea8ba82a793b43944051246d08180Dmitri Plotnikov    public void onContactListFilterCustomizationRequest() {
4366e850a046fcea8ba82a793b43944051246d08180Dmitri Plotnikov        startActivityForResult(new Intent(this, CustomContactListFilterActivity.class),
4376e850a046fcea8ba82a793b43944051246d08180Dmitri Plotnikov                SUBACTIVITY_CUSTOMIZE_FILTER);
4386e850a046fcea8ba82a793b43944051246d08180Dmitri Plotnikov    }
4396e850a046fcea8ba82a793b43944051246d08180Dmitri Plotnikov
440a6c2198bc5ad37119500c4857125ad732548c402Dmitri Plotnikov    private void setupContactDetailFragment(final Uri contactLookupUri) {
441be18de05d6f6a107c552e369bce58f51c946fde7Katherine Kuan        mContactDetailFragment.loadUri(contactLookupUri);
4428268bbe65440c70db46b4c505433fac1fdc36e58Katherine Kuan        invalidateOptionsMenuIfNeeded();
443be18de05d6f6a107c552e369bce58f51c946fde7Katherine Kuan    }
444be18de05d6f6a107c552e369bce58f51c946fde7Katherine Kuan
445be18de05d6f6a107c552e369bce58f51c946fde7Katherine Kuan    private void setupGroupDetailFragment(Uri groupUri) {
446be18de05d6f6a107c552e369bce58f51c946fde7Katherine Kuan        mGroupDetailFragment.loadGroup(groupUri);
4478268bbe65440c70db46b4c505433fac1fdc36e58Katherine Kuan        invalidateOptionsMenuIfNeeded();
448c0ca13a86793082c8969e44c70d4dc8fb83eb1f8Dmitri Plotnikov    }
449c0ca13a86793082c8969e44c70d4dc8fb83eb1f8Dmitri Plotnikov
450fcfdffb439ccf1ddef971109b82e782c47161572Dmitri Plotnikov    /**
451fcfdffb439ccf1ddef971109b82e782c47161572Dmitri Plotnikov     * Handler for action bar actions.
452fcfdffb439ccf1ddef971109b82e782c47161572Dmitri Plotnikov     */
453fe42e55dfc483b69c8a7831c16fbdbc5ab19929eDmitri Plotnikov    @Override
454b5760b94bbf56ce348876ec36f4669d20a1530f5Katherine Kuan    public void onAction(Action action) {
455b5760b94bbf56ce348876ec36f4669d20a1530f5Katherine Kuan        switch (action) {
456b5760b94bbf56ce348876ec36f4669d20a1530f5Katherine Kuan            case START_SEARCH_MODE:
4578268bbe65440c70db46b4c505433fac1fdc36e58Katherine Kuan                // Bring the contact list fragment (and detail fragment if applicable) to the front
458b5760b94bbf56ce348876ec36f4669d20a1530f5Katherine Kuan                FragmentTransaction ft = getFragmentManager().beginTransaction();
459b5760b94bbf56ce348876ec36f4669d20a1530f5Katherine Kuan                ft.show(mContactsFragment);
4608268bbe65440c70db46b4c505433fac1fdc36e58Katherine Kuan                if (mContactDetailFragment != null) ft.show(mContactDetailFragment);
461b5760b94bbf56ce348876ec36f4669d20a1530f5Katherine Kuan                ft.commit();
4628268bbe65440c70db46b4c505433fac1fdc36e58Katherine Kuan                clearSearch();
463b5760b94bbf56ce348876ec36f4669d20a1530f5Katherine Kuan                break;
464b5760b94bbf56ce348876ec36f4669d20a1530f5Katherine Kuan            case STOP_SEARCH_MODE:
4658268bbe65440c70db46b4c505433fac1fdc36e58Katherine Kuan                // Refresh the fragments because search mode was using them to display search
4668268bbe65440c70db46b4c505433fac1fdc36e58Katherine Kuan                // results.
4678268bbe65440c70db46b4c505433fac1fdc36e58Katherine Kuan                clearSearch();
4688268bbe65440c70db46b4c505433fac1fdc36e58Katherine Kuan
4698268bbe65440c70db46b4c505433fac1fdc36e58Katherine Kuan                // If the last selected tab was not the "All contacts" tab, then hide these
4708268bbe65440c70db46b4c505433fac1fdc36e58Katherine Kuan                // fragments because we need to show favorites or groups.
4718268bbe65440c70db46b4c505433fac1fdc36e58Katherine Kuan                if (mSelectedTab != null && !mSelectedTab.equals(TabState.CONTACTS)) {
4728268bbe65440c70db46b4c505433fac1fdc36e58Katherine Kuan                    FragmentTransaction transaction = getFragmentManager().beginTransaction();
4738268bbe65440c70db46b4c505433fac1fdc36e58Katherine Kuan                    transaction.hide(mContactsFragment);
4748268bbe65440c70db46b4c505433fac1fdc36e58Katherine Kuan                    if (mContactDetailFragment != null) transaction.hide(mContactDetailFragment);
4758268bbe65440c70db46b4c505433fac1fdc36e58Katherine Kuan                    transaction.commit();
4768268bbe65440c70db46b4c505433fac1fdc36e58Katherine Kuan                }
4778268bbe65440c70db46b4c505433fac1fdc36e58Katherine Kuan                break;
478b5760b94bbf56ce348876ec36f4669d20a1530f5Katherine Kuan            case CHANGE_SEARCH_QUERY:
4798268bbe65440c70db46b4c505433fac1fdc36e58Katherine Kuan                loadSearch(mActionBarAdapter.getQueryString());
480b5760b94bbf56ce348876ec36f4669d20a1530f5Katherine Kuan                break;
481b5760b94bbf56ce348876ec36f4669d20a1530f5Katherine Kuan            default:
482b5760b94bbf56ce348876ec36f4669d20a1530f5Katherine Kuan                throw new IllegalStateException("Unkonwn ActionBarAdapter action: " + action);
483b5760b94bbf56ce348876ec36f4669d20a1530f5Katherine Kuan        }
484fe42e55dfc483b69c8a7831c16fbdbc5ab19929eDmitri Plotnikov    }
485fe42e55dfc483b69c8a7831c16fbdbc5ab19929eDmitri Plotnikov
4868268bbe65440c70db46b4c505433fac1fdc36e58Katherine Kuan    private void clearSearch() {
4878268bbe65440c70db46b4c505433fac1fdc36e58Katherine Kuan        loadSearch("");
4888268bbe65440c70db46b4c505433fac1fdc36e58Katherine Kuan    }
4898268bbe65440c70db46b4c505433fac1fdc36e58Katherine Kuan
4908268bbe65440c70db46b4c505433fac1fdc36e58Katherine Kuan    private void loadSearch(String query) {
4918268bbe65440c70db46b4c505433fac1fdc36e58Katherine Kuan        configureFragments(false /* from request */);
4928268bbe65440c70db46b4c505433fac1fdc36e58Katherine Kuan        mListFragment.setQueryString(query, true);
4938268bbe65440c70db46b4c505433fac1fdc36e58Katherine Kuan    }
4948268bbe65440c70db46b4c505433fac1fdc36e58Katherine Kuan
4950ff0e317cbf788adc4dce38257d27691e032d6caKatherine Kuan    private void configureContactListFragmentForRequest() {
496fa49a66979567894c85fe2489d1375216d67597eDmitri Plotnikov        Uri contactUri = mRequest.getContactUri();
497fa49a66979567894c85fe2489d1375216d67597eDmitri Plotnikov        if (contactUri != null) {
498fa49a66979567894c85fe2489d1375216d67597eDmitri Plotnikov            mListFragment.setSelectedContactUri(contactUri);
499fa49a66979567894c85fe2489d1375216d67597eDmitri Plotnikov        }
500238d9847d8f2ace658fb7337c8847a2088ddc9d1Dmitri Plotnikov
5010edd4071ddcb23bf2a7b95582df0657de9ff0c60Dmitri Plotnikov        mListFragment.setSearchMode(mRequest.isSearchMode());
5025251884bbcdb92dad577d027126547527285fcceDmitri Plotnikov        mListFragment.setQueryString(mRequest.getQueryString(), false);
503238d9847d8f2ace658fb7337c8847a2088ddc9d1Dmitri Plotnikov
504fa49a66979567894c85fe2489d1375216d67597eDmitri Plotnikov        if (mRequest.isDirectorySearchEnabled()) {
505fa49a66979567894c85fe2489d1375216d67597eDmitri Plotnikov            mListFragment.setDirectorySearchMode(DirectoryListLoader.SEARCH_MODE_DEFAULT);
506fa49a66979567894c85fe2489d1375216d67597eDmitri Plotnikov        } else {
507fa49a66979567894c85fe2489d1375216d67597eDmitri Plotnikov            mListFragment.setDirectorySearchMode(DirectoryListLoader.SEARCH_MODE_NONE);
508fa49a66979567894c85fe2489d1375216d67597eDmitri Plotnikov        }
509238d9847d8f2ace658fb7337c8847a2088ddc9d1Dmitri Plotnikov
510fa49a66979567894c85fe2489d1375216d67597eDmitri Plotnikov        if (mContactListFilterController.isLoaded()) {
511fa49a66979567894c85fe2489d1375216d67597eDmitri Plotnikov            mListFragment.setFilter(mContactListFilterController.getFilter());
5121ce1e7cf261994e46e6fe85ed4d445241ad55f16Dmitri Plotnikov        }
51308e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikov    }
51408e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikov
5150ff0e317cbf788adc4dce38257d27691e032d6caKatherine Kuan    private void configureContactListFragment() {
516fa49a66979567894c85fe2489d1375216d67597eDmitri Plotnikov        mListFragment.setSearchMode(mSearchMode);
517fa49a66979567894c85fe2489d1375216d67597eDmitri Plotnikov
518fa49a66979567894c85fe2489d1375216d67597eDmitri Plotnikov        mListFragment.setVisibleScrollbarEnabled(!mSearchMode);
519fa49a66979567894c85fe2489d1375216d67597eDmitri Plotnikov        mListFragment.setVerticalScrollbarPosition(
520be18de05d6f6a107c552e369bce58f51c946fde7Katherine Kuan                mContentPaneDisplayed
5215245ea63b4cca18ee504b27abd534fc13d33dea9Dmitri Plotnikov                        ? View.SCROLLBAR_POSITION_LEFT
5225245ea63b4cca18ee504b27abd534fc13d33dea9Dmitri Plotnikov                        : View.SCROLLBAR_POSITION_RIGHT);
523be18de05d6f6a107c552e369bce58f51c946fde7Katherine Kuan        mListFragment.setSelectionVisible(mContentPaneDisplayed);
524be18de05d6f6a107c552e369bce58f51c946fde7Katherine Kuan        mListFragment.setQuickContactEnabled(!mContentPaneDisplayed);
5251ce1e7cf261994e46e6fe85ed4d445241ad55f16Dmitri Plotnikov    }
5261323d69c40649914ae2195088573a20cc35da86eDmitri Plotnikov
5270ff0e317cbf788adc4dce38257d27691e032d6caKatherine Kuan    private void configureGroupListFragment() {
5280ff0e317cbf788adc4dce38257d27691e032d6caKatherine Kuan        mGroupsFragment.setVerticalScrollbarPosition(
5290ff0e317cbf788adc4dce38257d27691e032d6caKatherine Kuan                mContentPaneDisplayed
5300ff0e317cbf788adc4dce38257d27691e032d6caKatherine Kuan                        ? View.SCROLLBAR_POSITION_LEFT
5310ff0e317cbf788adc4dce38257d27691e032d6caKatherine Kuan                        : View.SCROLLBAR_POSITION_RIGHT);
5320ff0e317cbf788adc4dce38257d27691e032d6caKatherine Kuan        mGroupsFragment.setSelectionVisible(mContentPaneDisplayed);
5330ff0e317cbf788adc4dce38257d27691e032d6caKatherine Kuan    }
5340ff0e317cbf788adc4dce38257d27691e032d6caKatherine Kuan
5358b8264620f9362e089322d1e3a7cc5620900e6f9Dmitri Plotnikov    @Override
5368b8264620f9362e089322d1e3a7cc5620900e6f9Dmitri Plotnikov    public void onProviderStatusChange() {
5378b8264620f9362e089322d1e3a7cc5620900e6f9Dmitri Plotnikov        updateFragmentVisibility();
5388b8264620f9362e089322d1e3a7cc5620900e6f9Dmitri Plotnikov    }
5398b8264620f9362e089322d1e3a7cc5620900e6f9Dmitri Plotnikov
5408b8264620f9362e089322d1e3a7cc5620900e6f9Dmitri Plotnikov    private void updateFragmentVisibility() {
5418b8264620f9362e089322d1e3a7cc5620900e6f9Dmitri Plotnikov        int providerStatus = mProviderStatusLoader.getProviderStatus();
5428b8264620f9362e089322d1e3a7cc5620900e6f9Dmitri Plotnikov        if (providerStatus == mProviderStatus) {
5438b8264620f9362e089322d1e3a7cc5620900e6f9Dmitri Plotnikov            return;
5448b8264620f9362e089322d1e3a7cc5620900e6f9Dmitri Plotnikov        }
5458b8264620f9362e089322d1e3a7cc5620900e6f9Dmitri Plotnikov
5468b8264620f9362e089322d1e3a7cc5620900e6f9Dmitri Plotnikov        mProviderStatus = providerStatus;
5478b8264620f9362e089322d1e3a7cc5620900e6f9Dmitri Plotnikov
5488b8264620f9362e089322d1e3a7cc5620900e6f9Dmitri Plotnikov        View contactsUnavailableView = findViewById(R.id.contacts_unavailable_view);
5498b8264620f9362e089322d1e3a7cc5620900e6f9Dmitri Plotnikov        View mainView = findViewById(R.id.main_view);
5508b8264620f9362e089322d1e3a7cc5620900e6f9Dmitri Plotnikov
5518b8264620f9362e089322d1e3a7cc5620900e6f9Dmitri Plotnikov        if (mProviderStatus == ProviderStatus.STATUS_NORMAL) {
552c3f2a52067b799e223f0964207a2d1957165e960Dmitri Plotnikov            contactsUnavailableView.setVisibility(View.GONE);
553b5760b94bbf56ce348876ec36f4669d20a1530f5Katherine Kuan            if (mainView != null) {
554b5760b94bbf56ce348876ec36f4669d20a1530f5Katherine Kuan                mainView.setVisibility(View.VISIBLE);
555b5760b94bbf56ce348876ec36f4669d20a1530f5Katherine Kuan            }
5568b8264620f9362e089322d1e3a7cc5620900e6f9Dmitri Plotnikov            if (mListFragment != null) {
5578b8264620f9362e089322d1e3a7cc5620900e6f9Dmitri Plotnikov                mListFragment.setEnabled(true);
5588b8264620f9362e089322d1e3a7cc5620900e6f9Dmitri Plotnikov            }
5598b8264620f9362e089322d1e3a7cc5620900e6f9Dmitri Plotnikov        } else {
5608b8264620f9362e089322d1e3a7cc5620900e6f9Dmitri Plotnikov            if (mListFragment != null) {
5618b8264620f9362e089322d1e3a7cc5620900e6f9Dmitri Plotnikov                mListFragment.setEnabled(false);
5628b8264620f9362e089322d1e3a7cc5620900e6f9Dmitri Plotnikov            }
5638b8264620f9362e089322d1e3a7cc5620900e6f9Dmitri Plotnikov            if (mContactsUnavailableFragment == null) {
5648b8264620f9362e089322d1e3a7cc5620900e6f9Dmitri Plotnikov                mContactsUnavailableFragment = new ContactsUnavailableFragment();
5658b8264620f9362e089322d1e3a7cc5620900e6f9Dmitri Plotnikov                mContactsUnavailableFragment.setProviderStatusLoader(mProviderStatusLoader);
5668b8264620f9362e089322d1e3a7cc5620900e6f9Dmitri Plotnikov                mContactsUnavailableFragment.setOnContactsUnavailableActionListener(
5678b8264620f9362e089322d1e3a7cc5620900e6f9Dmitri Plotnikov                        new ContactsUnavailableFragmentListener());
5683ed426c842a68895a759548fef87bac359f937bbDianne Hackborn                getFragmentManager().beginTransaction()
5698b8264620f9362e089322d1e3a7cc5620900e6f9Dmitri Plotnikov                        .replace(R.id.contacts_unavailable_container, mContactsUnavailableFragment)
5708b8264620f9362e089322d1e3a7cc5620900e6f9Dmitri Plotnikov                        .commit();
5718b8264620f9362e089322d1e3a7cc5620900e6f9Dmitri Plotnikov            } else {
5728b8264620f9362e089322d1e3a7cc5620900e6f9Dmitri Plotnikov                mContactsUnavailableFragment.update();
5738b8264620f9362e089322d1e3a7cc5620900e6f9Dmitri Plotnikov            }
5748b8264620f9362e089322d1e3a7cc5620900e6f9Dmitri Plotnikov            contactsUnavailableView.setVisibility(View.VISIBLE);
575b5760b94bbf56ce348876ec36f4669d20a1530f5Katherine Kuan            if (mainView != null) {
576b5760b94bbf56ce348876ec36f4669d20a1530f5Katherine Kuan                mainView.setVisibility(View.INVISIBLE);
577b5760b94bbf56ce348876ec36f4669d20a1530f5Katherine Kuan            }
5788b8264620f9362e089322d1e3a7cc5620900e6f9Dmitri Plotnikov        }
5798b8264620f9362e089322d1e3a7cc5620900e6f9Dmitri Plotnikov
5808268bbe65440c70db46b4c505433fac1fdc36e58Katherine Kuan        invalidateOptionsMenuIfNeeded();
5818b8264620f9362e089322d1e3a7cc5620900e6f9Dmitri Plotnikov    }
5828b8264620f9362e089322d1e3a7cc5620900e6f9Dmitri Plotnikov
5831ce1e7cf261994e46e6fe85ed4d445241ad55f16Dmitri Plotnikov    private final class ContactBrowserActionListener implements OnContactBrowserActionListener {
584d959104d37df65f0d6de9290c3fa2b59065be0fcDmitri Plotnikov
585e20d3432a370dd3996deec2df4e3cdf726c94992Daniel Lehmann        @Override
586d959104d37df65f0d6de9290c3fa2b59065be0fcDmitri Plotnikov        public void onSelectionChange() {
587be18de05d6f6a107c552e369bce58f51c946fde7Katherine Kuan            if (mContentPaneDisplayed) {
588d959104d37df65f0d6de9290c3fa2b59065be0fcDmitri Plotnikov                setupContactDetailFragment(mListFragment.getSelectedContactUri());
589d959104d37df65f0d6de9290c3fa2b59065be0fcDmitri Plotnikov            }
590d959104d37df65f0d6de9290c3fa2b59065be0fcDmitri Plotnikov        }
591e5f1e4d30929783b26e285b3ddfbf9bc07bdef58Dmitri Plotnikov
592d959104d37df65f0d6de9290c3fa2b59065be0fcDmitri Plotnikov        @Override
593d959104d37df65f0d6de9290c3fa2b59065be0fcDmitri Plotnikov        public void onViewContactAction(Uri contactLookupUri) {
594be18de05d6f6a107c552e369bce58f51c946fde7Katherine Kuan            if (mContentPaneDisplayed) {
595d364314c460152db7089b304beec81b3675893baDmitri Plotnikov                setupContactDetailFragment(contactLookupUri);
596424440bd932482c0a08b782a570d600051c56eb4Dmitri Plotnikov            } else {
597424440bd932482c0a08b782a570d600051c56eb4Dmitri Plotnikov                startActivity(new Intent(Intent.ACTION_VIEW, contactLookupUri));
598424440bd932482c0a08b782a570d600051c56eb4Dmitri Plotnikov            }
5991ce1e7cf261994e46e6fe85ed4d445241ad55f16Dmitri Plotnikov        }
600e3fbfd99842607a0c208d0a930878bb54bb91dedDmitri Plotnikov
601e20d3432a370dd3996deec2df4e3cdf726c94992Daniel Lehmann        @Override
6021ce1e7cf261994e46e6fe85ed4d445241ad55f16Dmitri Plotnikov        public void onCreateNewContactAction() {
6031ce1e7cf261994e46e6fe85ed4d445241ad55f16Dmitri Plotnikov            Intent intent = new Intent(Intent.ACTION_INSERT, Contacts.CONTENT_URI);
6041ce1e7cf261994e46e6fe85ed4d445241ad55f16Dmitri Plotnikov            Bundle extras = getIntent().getExtras();
6051ce1e7cf261994e46e6fe85ed4d445241ad55f16Dmitri Plotnikov            if (extras != null) {
6061ce1e7cf261994e46e6fe85ed4d445241ad55f16Dmitri Plotnikov                intent.putExtras(extras);
607416b569901ce4c577c1f76c3f29496d1adab29e1Dmitri Plotnikov            }
6081ce1e7cf261994e46e6fe85ed4d445241ad55f16Dmitri Plotnikov            startActivity(intent);
6091ce1e7cf261994e46e6fe85ed4d445241ad55f16Dmitri Plotnikov        }
610416b569901ce4c577c1f76c3f29496d1adab29e1Dmitri Plotnikov
611e20d3432a370dd3996deec2df4e3cdf726c94992Daniel Lehmann        @Override
6121ce1e7cf261994e46e6fe85ed4d445241ad55f16Dmitri Plotnikov        public void onEditContactAction(Uri contactLookupUri) {
613e20d3432a370dd3996deec2df4e3cdf726c94992Daniel Lehmann            Intent intent = new Intent(Intent.ACTION_EDIT, contactLookupUri);
614e20d3432a370dd3996deec2df4e3cdf726c94992Daniel Lehmann            Bundle extras = getIntent().getExtras();
615e20d3432a370dd3996deec2df4e3cdf726c94992Daniel Lehmann            if (extras != null) {
616e20d3432a370dd3996deec2df4e3cdf726c94992Daniel Lehmann                intent.putExtras(extras);
6171ce1e7cf261994e46e6fe85ed4d445241ad55f16Dmitri Plotnikov            }
618e20d3432a370dd3996deec2df4e3cdf726c94992Daniel Lehmann            startActivityForResult(intent, SUBACTIVITY_EDIT_CONTACT);
6191ce1e7cf261994e46e6fe85ed4d445241ad55f16Dmitri Plotnikov        }
620413772711054c9fca8bf0c22bc81f613c883ae7eDmitri Plotnikov
621e20d3432a370dd3996deec2df4e3cdf726c94992Daniel Lehmann        @Override
6221ce1e7cf261994e46e6fe85ed4d445241ad55f16Dmitri Plotnikov        public void onAddToFavoritesAction(Uri contactUri) {
6231ce1e7cf261994e46e6fe85ed4d445241ad55f16Dmitri Plotnikov            ContentValues values = new ContentValues(1);
6241ce1e7cf261994e46e6fe85ed4d445241ad55f16Dmitri Plotnikov            values.put(Contacts.STARRED, 1);
6251ce1e7cf261994e46e6fe85ed4d445241ad55f16Dmitri Plotnikov            getContentResolver().update(contactUri, values, null, null);
6261ce1e7cf261994e46e6fe85ed4d445241ad55f16Dmitri Plotnikov        }
6278a7831944232fd01740492b39bc67d746213b82bDmitri Plotnikov
628e20d3432a370dd3996deec2df4e3cdf726c94992Daniel Lehmann        @Override
6291ce1e7cf261994e46e6fe85ed4d445241ad55f16Dmitri Plotnikov        public void onRemoveFromFavoritesAction(Uri contactUri) {
6301ce1e7cf261994e46e6fe85ed4d445241ad55f16Dmitri Plotnikov            ContentValues values = new ContentValues(1);
6311ce1e7cf261994e46e6fe85ed4d445241ad55f16Dmitri Plotnikov            values.put(Contacts.STARRED, 0);
6321ce1e7cf261994e46e6fe85ed4d445241ad55f16Dmitri Plotnikov            getContentResolver().update(contactUri, values, null, null);
6331ce1e7cf261994e46e6fe85ed4d445241ad55f16Dmitri Plotnikov        }
634416b569901ce4c577c1f76c3f29496d1adab29e1Dmitri Plotnikov
635e20d3432a370dd3996deec2df4e3cdf726c94992Daniel Lehmann        @Override
6361ce1e7cf261994e46e6fe85ed4d445241ad55f16Dmitri Plotnikov        public void onCallContactAction(Uri contactUri) {
637b1f0e5e8a4de69bd80276742900441e930fa4c86Daisuke Miyakawa            PhoneNumberInteraction.startInteractionForPhoneCall(PeopleActivity.this, contactUri);
6381ce1e7cf261994e46e6fe85ed4d445241ad55f16Dmitri Plotnikov        }
639416b569901ce4c577c1f76c3f29496d1adab29e1Dmitri Plotnikov
640e20d3432a370dd3996deec2df4e3cdf726c94992Daniel Lehmann        @Override
6411ce1e7cf261994e46e6fe85ed4d445241ad55f16Dmitri Plotnikov        public void onSmsContactAction(Uri contactUri) {
642b1f0e5e8a4de69bd80276742900441e930fa4c86Daisuke Miyakawa            PhoneNumberInteraction.startInteractionForTextMessage(PeopleActivity.this, contactUri);
6431ce1e7cf261994e46e6fe85ed4d445241ad55f16Dmitri Plotnikov        }
644e3fbfd99842607a0c208d0a930878bb54bb91dedDmitri Plotnikov
645e20d3432a370dd3996deec2df4e3cdf726c94992Daniel Lehmann        @Override
6461ce1e7cf261994e46e6fe85ed4d445241ad55f16Dmitri Plotnikov        public void onDeleteContactAction(Uri contactUri) {
6479856fcee477d04f51bdbcbfdf632876c6b8a1173Katherine Kuan            ContactDeletionInteraction.start(PeopleActivity.this, contactUri, false);
6481ce1e7cf261994e46e6fe85ed4d445241ad55f16Dmitri Plotnikov        }
6498a7831944232fd01740492b39bc67d746213b82bDmitri Plotnikov
650e20d3432a370dd3996deec2df4e3cdf726c94992Daniel Lehmann        @Override
6511ce1e7cf261994e46e6fe85ed4d445241ad55f16Dmitri Plotnikov        public void onFinishAction() {
6521ce1e7cf261994e46e6fe85ed4d445241ad55f16Dmitri Plotnikov            onBackPressed();
6531ce1e7cf261994e46e6fe85ed4d445241ad55f16Dmitri Plotnikov        }
6546e850a046fcea8ba82a793b43944051246d08180Dmitri Plotnikov
6556e850a046fcea8ba82a793b43944051246d08180Dmitri Plotnikov        @Override
6566e850a046fcea8ba82a793b43944051246d08180Dmitri Plotnikov        public void onInvalidSelection() {
6578fe7821d91764dc33270f70e1f08ec05647ef041Dmitri Plotnikov            ContactListFilter filter;
6588fe7821d91764dc33270f70e1f08ec05647ef041Dmitri Plotnikov            ContactListFilter currentFilter = mListFragment.getFilter();
6598fe7821d91764dc33270f70e1f08ec05647ef041Dmitri Plotnikov            if (currentFilter != null
6608fe7821d91764dc33270f70e1f08ec05647ef041Dmitri Plotnikov                    && currentFilter.filterType == ContactListFilter.FILTER_TYPE_SINGLE_CONTACT) {
661be18de05d6f6a107c552e369bce58f51c946fde7Katherine Kuan                filter = ContactListFilter.createFilterWithType(
662be18de05d6f6a107c552e369bce58f51c946fde7Katherine Kuan                        ContactListFilter.FILTER_TYPE_ALL_ACCOUNTS);
6638fe7821d91764dc33270f70e1f08ec05647ef041Dmitri Plotnikov                mListFragment.setFilter(filter);
6648fe7821d91764dc33270f70e1f08ec05647ef041Dmitri Plotnikov            } else {
665be18de05d6f6a107c552e369bce58f51c946fde7Katherine Kuan                filter = ContactListFilter.createFilterWithType(
666be18de05d6f6a107c552e369bce58f51c946fde7Katherine Kuan                        ContactListFilter.FILTER_TYPE_SINGLE_CONTACT);
6678fe7821d91764dc33270f70e1f08ec05647ef041Dmitri Plotnikov                mListFragment.setFilter(filter, false);
6688fe7821d91764dc33270f70e1f08ec05647ef041Dmitri Plotnikov            }
669d959104d37df65f0d6de9290c3fa2b59065be0fcDmitri Plotnikov            mContactListFilterController.setContactListFilter(filter, true);
6706e850a046fcea8ba82a793b43944051246d08180Dmitri Plotnikov        }
6711ce1e7cf261994e46e6fe85ed4d445241ad55f16Dmitri Plotnikov    }
672416b569901ce4c577c1f76c3f29496d1adab29e1Dmitri Plotnikov
673be18de05d6f6a107c552e369bce58f51c946fde7Katherine Kuan    private class ContactDetailFragmentListener implements ContactDetailFragment.Listener {
67469e7fec6dd8a3d24054863c6c648512577fce35cDaniel Lehmann        @Override
675424440bd932482c0a08b782a570d600051c56eb4Dmitri Plotnikov        public void onContactNotFound() {
676d959104d37df65f0d6de9290c3fa2b59065be0fcDmitri Plotnikov            // Nothing needs to be done here
677424440bd932482c0a08b782a570d600051c56eb4Dmitri Plotnikov        }
678424440bd932482c0a08b782a570d600051c56eb4Dmitri Plotnikov
67969e7fec6dd8a3d24054863c6c648512577fce35cDaniel Lehmann        @Override
68079700889dad553dcde9e22a2fd23df768f68080fKatherine Kuan        public void onDetailsLoaded(ContactLoader.Result result) {
68179700889dad553dcde9e22a2fd23df768f68080fKatherine Kuan            // Nothing needs to be done here
68279700889dad553dcde9e22a2fd23df768f68080fKatherine Kuan        }
68379700889dad553dcde9e22a2fd23df768f68080fKatherine Kuan
68479700889dad553dcde9e22a2fd23df768f68080fKatherine Kuan        @Override
685424440bd932482c0a08b782a570d600051c56eb4Dmitri Plotnikov        public void onEditRequested(Uri contactLookupUri) {
6868c6955ff3c05e1f3899110701c3cb5559a492f1eDmitri Plotnikov            startActivityForResult(
6878c6955ff3c05e1f3899110701c3cb5559a492f1eDmitri Plotnikov                    new Intent(Intent.ACTION_EDIT, contactLookupUri), SUBACTIVITY_EDIT_CONTACT);
688424440bd932482c0a08b782a570d600051c56eb4Dmitri Plotnikov        }
689424440bd932482c0a08b782a570d600051c56eb4Dmitri Plotnikov
69069e7fec6dd8a3d24054863c6c648512577fce35cDaniel Lehmann        @Override
691424440bd932482c0a08b782a570d600051c56eb4Dmitri Plotnikov        public void onItemClicked(Intent intent) {
69260be1a1e8639a58d16f58686f8a89747d6079cc7Daniel Lehmann            try {
69360be1a1e8639a58d16f58686f8a89747d6079cc7Daniel Lehmann                startActivity(intent);
69460be1a1e8639a58d16f58686f8a89747d6079cc7Daniel Lehmann            } catch (ActivityNotFoundException e) {
69560be1a1e8639a58d16f58686f8a89747d6079cc7Daniel Lehmann                Log.e(TAG, "No activity found for intent: " + intent);
69660be1a1e8639a58d16f58686f8a89747d6079cc7Daniel Lehmann            }
697424440bd932482c0a08b782a570d600051c56eb4Dmitri Plotnikov        }
698424440bd932482c0a08b782a570d600051c56eb4Dmitri Plotnikov
69969e7fec6dd8a3d24054863c6c648512577fce35cDaniel Lehmann        @Override
70066bca8f360c9e21b6a47006f21db7b46b6b46340Dmitri Plotnikov        public void onDeleteRequested(Uri contactUri) {
7019856fcee477d04f51bdbcbfdf632876c6b8a1173Katherine Kuan            ContactDeletionInteraction.start(PeopleActivity.this, contactUri, false);
702424440bd932482c0a08b782a570d600051c56eb4Dmitri Plotnikov        }
703caf0bc759c4ef96dde5bb0a5256c1dcb51b6ccc4Dmitri Plotnikov
704caf0bc759c4ef96dde5bb0a5256c1dcb51b6ccc4Dmitri Plotnikov        @Override
705caf0bc759c4ef96dde5bb0a5256c1dcb51b6ccc4Dmitri Plotnikov        public void onCreateRawContactRequested(ArrayList<ContentValues> values, Account account) {
7069856fcee477d04f51bdbcbfdf632876c6b8a1173Katherine Kuan            Toast.makeText(PeopleActivity.this, R.string.toast_making_personal_copy,
707caf0bc759c4ef96dde5bb0a5256c1dcb51b6ccc4Dmitri Plotnikov                    Toast.LENGTH_LONG).show();
708caf0bc759c4ef96dde5bb0a5256c1dcb51b6ccc4Dmitri Plotnikov            Intent serviceIntent = ContactSaveService.createNewRawContactIntent(
7099856fcee477d04f51bdbcbfdf632876c6b8a1173Katherine Kuan                    PeopleActivity.this, values, account,
7109856fcee477d04f51bdbcbfdf632876c6b8a1173Katherine Kuan                    PeopleActivity.class, Intent.ACTION_VIEW);
711caf0bc759c4ef96dde5bb0a5256c1dcb51b6ccc4Dmitri Plotnikov            startService(serviceIntent);
712caf0bc759c4ef96dde5bb0a5256c1dcb51b6ccc4Dmitri Plotnikov        }
713424440bd932482c0a08b782a570d600051c56eb4Dmitri Plotnikov    }
714424440bd932482c0a08b782a570d600051c56eb4Dmitri Plotnikov
7158b8264620f9362e089322d1e3a7cc5620900e6f9Dmitri Plotnikov    private class ContactsUnavailableFragmentListener
7168b8264620f9362e089322d1e3a7cc5620900e6f9Dmitri Plotnikov            implements OnContactsUnavailableActionListener {
7178b8264620f9362e089322d1e3a7cc5620900e6f9Dmitri Plotnikov
7188b8264620f9362e089322d1e3a7cc5620900e6f9Dmitri Plotnikov        @Override
7198b8264620f9362e089322d1e3a7cc5620900e6f9Dmitri Plotnikov        public void onCreateNewContactAction() {
7208b8264620f9362e089322d1e3a7cc5620900e6f9Dmitri Plotnikov            startActivity(new Intent(Intent.ACTION_INSERT, Contacts.CONTENT_URI));
7218b8264620f9362e089322d1e3a7cc5620900e6f9Dmitri Plotnikov        }
7228b8264620f9362e089322d1e3a7cc5620900e6f9Dmitri Plotnikov
7238b8264620f9362e089322d1e3a7cc5620900e6f9Dmitri Plotnikov        @Override
7248b8264620f9362e089322d1e3a7cc5620900e6f9Dmitri Plotnikov        public void onAddAccountAction() {
7258b8264620f9362e089322d1e3a7cc5620900e6f9Dmitri Plotnikov            Intent intent = new Intent(Settings.ACTION_ADD_ACCOUNT);
7261fbcbd1053c72e165009ad9a7d735dd2c0755c36Dmitri Plotnikov            intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_WHEN_TASK_RESET);
7278b8264620f9362e089322d1e3a7cc5620900e6f9Dmitri Plotnikov            intent.putExtra(Settings.EXTRA_AUTHORITIES,
7288b8264620f9362e089322d1e3a7cc5620900e6f9Dmitri Plotnikov                    new String[] { ContactsContract.AUTHORITY });
7298b8264620f9362e089322d1e3a7cc5620900e6f9Dmitri Plotnikov            startActivity(intent);
7308b8264620f9362e089322d1e3a7cc5620900e6f9Dmitri Plotnikov        }
7318b8264620f9362e089322d1e3a7cc5620900e6f9Dmitri Plotnikov
7328b8264620f9362e089322d1e3a7cc5620900e6f9Dmitri Plotnikov        @Override
7338b8264620f9362e089322d1e3a7cc5620900e6f9Dmitri Plotnikov        public void onImportContactsFromFileAction() {
7349856fcee477d04f51bdbcbfdf632876c6b8a1173Katherine Kuan            AccountSelectionUtil.doImportFromSdCard(PeopleActivity.this, null);
7358b8264620f9362e089322d1e3a7cc5620900e6f9Dmitri Plotnikov        }
7368b8264620f9362e089322d1e3a7cc5620900e6f9Dmitri Plotnikov
7378b8264620f9362e089322d1e3a7cc5620900e6f9Dmitri Plotnikov        @Override
7388b8264620f9362e089322d1e3a7cc5620900e6f9Dmitri Plotnikov        public void onFreeInternalStorageAction() {
7398b8264620f9362e089322d1e3a7cc5620900e6f9Dmitri Plotnikov            startActivity(new Intent(Settings.ACTION_MANAGE_APPLICATIONS_SETTINGS));
7408b8264620f9362e089322d1e3a7cc5620900e6f9Dmitri Plotnikov        }
7418b8264620f9362e089322d1e3a7cc5620900e6f9Dmitri Plotnikov    }
7428b8264620f9362e089322d1e3a7cc5620900e6f9Dmitri Plotnikov
743be18de05d6f6a107c552e369bce58f51c946fde7Katherine Kuan    private final class GroupBrowserActionListener implements OnGroupBrowserActionListener {
744be18de05d6f6a107c552e369bce58f51c946fde7Katherine Kuan
745be18de05d6f6a107c552e369bce58f51c946fde7Katherine Kuan        @Override
746be18de05d6f6a107c552e369bce58f51c946fde7Katherine Kuan        public void onViewGroupAction(Uri groupUri) {
747be18de05d6f6a107c552e369bce58f51c946fde7Katherine Kuan            if (mContentPaneDisplayed) {
748be18de05d6f6a107c552e369bce58f51c946fde7Katherine Kuan                setupGroupDetailFragment(groupUri);
749be18de05d6f6a107c552e369bce58f51c946fde7Katherine Kuan            } else {
750be18de05d6f6a107c552e369bce58f51c946fde7Katherine Kuan                Intent intent = new Intent(PeopleActivity.this, GroupDetailActivity.class);
751be18de05d6f6a107c552e369bce58f51c946fde7Katherine Kuan                intent.setData(groupUri);
752be18de05d6f6a107c552e369bce58f51c946fde7Katherine Kuan                startActivity(intent);
753be18de05d6f6a107c552e369bce58f51c946fde7Katherine Kuan            }
754be18de05d6f6a107c552e369bce58f51c946fde7Katherine Kuan        }
755be18de05d6f6a107c552e369bce58f51c946fde7Katherine Kuan    }
756be18de05d6f6a107c552e369bce58f51c946fde7Katherine Kuan
757732f65236e7f804941e84757c077a84eb11eab16Dmitri Plotnikov    public void startActivityAndForwardResult(final Intent intent) {
758732f65236e7f804941e84757c077a84eb11eab16Dmitri Plotnikov        intent.setFlags(Intent.FLAG_ACTIVITY_FORWARD_RESULT);
759732f65236e7f804941e84757c077a84eb11eab16Dmitri Plotnikov
760732f65236e7f804941e84757c077a84eb11eab16Dmitri Plotnikov        // Forward extras to the new activity
761732f65236e7f804941e84757c077a84eb11eab16Dmitri Plotnikov        Bundle extras = getIntent().getExtras();
762732f65236e7f804941e84757c077a84eb11eab16Dmitri Plotnikov        if (extras != null) {
763732f65236e7f804941e84757c077a84eb11eab16Dmitri Plotnikov            intent.putExtras(extras);
764732f65236e7f804941e84757c077a84eb11eab16Dmitri Plotnikov        }
765732f65236e7f804941e84757c077a84eb11eab16Dmitri Plotnikov        startActivity(intent);
766732f65236e7f804941e84757c077a84eb11eab16Dmitri Plotnikov        finish();
767732f65236e7f804941e84757c077a84eb11eab16Dmitri Plotnikov    }
768732f65236e7f804941e84757c077a84eb11eab16Dmitri Plotnikov
7697aa0e4cb91c869108238733ca107d18ccb888df7The Android Open Source Project    @Override
7708b8264620f9362e089322d1e3a7cc5620900e6f9Dmitri Plotnikov    public boolean onCreatePanelMenu(int featureId, Menu menu) {
7718b8264620f9362e089322d1e3a7cc5620900e6f9Dmitri Plotnikov        // No menu if contacts are unavailable
7728b8264620f9362e089322d1e3a7cc5620900e6f9Dmitri Plotnikov        if (!areContactsAvailable()) {
7738b8264620f9362e089322d1e3a7cc5620900e6f9Dmitri Plotnikov            return false;
7748b8264620f9362e089322d1e3a7cc5620900e6f9Dmitri Plotnikov        }
7758b8264620f9362e089322d1e3a7cc5620900e6f9Dmitri Plotnikov
7768b8264620f9362e089322d1e3a7cc5620900e6f9Dmitri Plotnikov        return super.onCreatePanelMenu(featureId, menu);
7778b8264620f9362e089322d1e3a7cc5620900e6f9Dmitri Plotnikov    }
7788b8264620f9362e089322d1e3a7cc5620900e6f9Dmitri Plotnikov
7798b8264620f9362e089322d1e3a7cc5620900e6f9Dmitri Plotnikov    @Override
7808b8264620f9362e089322d1e3a7cc5620900e6f9Dmitri Plotnikov    public boolean onPreparePanel(int featureId, View view, Menu menu) {
7818b8264620f9362e089322d1e3a7cc5620900e6f9Dmitri Plotnikov        // No menu if contacts are unavailable
7828b8264620f9362e089322d1e3a7cc5620900e6f9Dmitri Plotnikov        if (!areContactsAvailable()) {
7838b8264620f9362e089322d1e3a7cc5620900e6f9Dmitri Plotnikov            return false;
7848b8264620f9362e089322d1e3a7cc5620900e6f9Dmitri Plotnikov        }
7858b8264620f9362e089322d1e3a7cc5620900e6f9Dmitri Plotnikov
7868b8264620f9362e089322d1e3a7cc5620900e6f9Dmitri Plotnikov        return super.onPreparePanel(featureId, view, menu);
7878b8264620f9362e089322d1e3a7cc5620900e6f9Dmitri Plotnikov    }
7888b8264620f9362e089322d1e3a7cc5620900e6f9Dmitri Plotnikov
7898b8264620f9362e089322d1e3a7cc5620900e6f9Dmitri Plotnikov    @Override
7907aa0e4cb91c869108238733ca107d18ccb888df7The Android Open Source Project    public boolean onCreateOptionsMenu(Menu menu) {
7918b8264620f9362e089322d1e3a7cc5620900e6f9Dmitri Plotnikov        if (!areContactsAvailable()) {
7928b8264620f9362e089322d1e3a7cc5620900e6f9Dmitri Plotnikov            return false;
7938b8264620f9362e089322d1e3a7cc5620900e6f9Dmitri Plotnikov        }
794d9798aefc844dd9ce29da085cb8ab7e769f63e75Jeff Sharkey        super.onCreateOptionsMenu(menu);
795d9798aefc844dd9ce29da085cb8ab7e769f63e75Jeff Sharkey
796d3758b00601ce3ff8c4336b45cc1249806e52c13Dmitri Plotnikov        MenuInflater inflater = getMenuInflater();
797b5760b94bbf56ce348876ec36f4669d20a1530f5Katherine Kuan        inflater.inflate(R.menu.actions, menu);
798b5760b94bbf56ce348876ec36f4669d20a1530f5Katherine Kuan        MenuItem searchMenuItem = menu.findItem(R.id.menu_search);
799b5760b94bbf56ce348876ec36f4669d20a1530f5Katherine Kuan        if (searchMenuItem != null && searchMenuItem.getActionView() instanceof SearchView) {
800b5760b94bbf56ce348876ec36f4669d20a1530f5Katherine Kuan            SearchView searchView = (SearchView) searchMenuItem.getActionView();
801b5760b94bbf56ce348876ec36f4669d20a1530f5Katherine Kuan            searchView.setQueryHint(getString(R.string.hint_findContacts));
802b5760b94bbf56ce348876ec36f4669d20a1530f5Katherine Kuan            searchView.setIconifiedByDefault(false);
803b5760b94bbf56ce348876ec36f4669d20a1530f5Katherine Kuan
804b5760b94bbf56ce348876ec36f4669d20a1530f5Katherine Kuan            if (mActionBarAdapter != null) {
805b5760b94bbf56ce348876ec36f4669d20a1530f5Katherine Kuan                mActionBarAdapter.setSearchView(searchView);
806b5760b94bbf56ce348876ec36f4669d20a1530f5Katherine Kuan            }
8077aa0e4cb91c869108238733ca107d18ccb888df7The Android Open Source Project        }
808b5760b94bbf56ce348876ec36f4669d20a1530f5Katherine Kuan        return true;
809d9798aefc844dd9ce29da085cb8ab7e769f63e75Jeff Sharkey    }
8107aa0e4cb91c869108238733ca107d18ccb888df7The Android Open Source Project
8118268bbe65440c70db46b4c505433fac1fdc36e58Katherine Kuan    private void invalidateOptionsMenuIfNeeded() {
8120cd01309feeaf08b1a9852d33fc123c6cbddca6cDmitri Plotnikov        if (isOptionsMenuChanged()) {
8138268bbe65440c70db46b4c505433fac1fdc36e58Katherine Kuan            invalidateOptionsMenu();
8140cd01309feeaf08b1a9852d33fc123c6cbddca6cDmitri Plotnikov        }
8150cd01309feeaf08b1a9852d33fc123c6cbddca6cDmitri Plotnikov    }
8160cd01309feeaf08b1a9852d33fc123c6cbddca6cDmitri Plotnikov
8170cd01309feeaf08b1a9852d33fc123c6cbddca6cDmitri Plotnikov    public boolean isOptionsMenuChanged() {
8180cd01309feeaf08b1a9852d33fc123c6cbddca6cDmitri Plotnikov        if (mOptionsMenuContactsAvailable != areContactsAvailable()) {
8190cd01309feeaf08b1a9852d33fc123c6cbddca6cDmitri Plotnikov            return true;
8200cd01309feeaf08b1a9852d33fc123c6cbddca6cDmitri Plotnikov        }
8210cd01309feeaf08b1a9852d33fc123c6cbddca6cDmitri Plotnikov
8228268bbe65440c70db46b4c505433fac1fdc36e58Katherine Kuan        if (mListFragment != null && mListFragment.isOptionsMenuChanged()) {
8230cd01309feeaf08b1a9852d33fc123c6cbddca6cDmitri Plotnikov            return true;
8240cd01309feeaf08b1a9852d33fc123c6cbddca6cDmitri Plotnikov        }
8250cd01309feeaf08b1a9852d33fc123c6cbddca6cDmitri Plotnikov
8268268bbe65440c70db46b4c505433fac1fdc36e58Katherine Kuan        if (mContactDetailFragment != null && mContactDetailFragment.isOptionsMenuChanged()) {
8270cd01309feeaf08b1a9852d33fc123c6cbddca6cDmitri Plotnikov            return true;
8280cd01309feeaf08b1a9852d33fc123c6cbddca6cDmitri Plotnikov        }
8290cd01309feeaf08b1a9852d33fc123c6cbddca6cDmitri Plotnikov
8308268bbe65440c70db46b4c505433fac1fdc36e58Katherine Kuan        if (mGroupDetailFragment != null && mGroupDetailFragment.isOptionsMenuChanged()) {
8310cd01309feeaf08b1a9852d33fc123c6cbddca6cDmitri Plotnikov            return true;
8320cd01309feeaf08b1a9852d33fc123c6cbddca6cDmitri Plotnikov        }
8330cd01309feeaf08b1a9852d33fc123c6cbddca6cDmitri Plotnikov
8340cd01309feeaf08b1a9852d33fc123c6cbddca6cDmitri Plotnikov        return false;
8350cd01309feeaf08b1a9852d33fc123c6cbddca6cDmitri Plotnikov    }
8360cd01309feeaf08b1a9852d33fc123c6cbddca6cDmitri Plotnikov
8370cd01309feeaf08b1a9852d33fc123c6cbddca6cDmitri Plotnikov    @Override
838d9798aefc844dd9ce29da085cb8ab7e769f63e75Jeff Sharkey    public boolean onPrepareOptionsMenu(Menu menu) {
8390cd01309feeaf08b1a9852d33fc123c6cbddca6cDmitri Plotnikov        mOptionsMenuContactsAvailable = areContactsAvailable();
8400cd01309feeaf08b1a9852d33fc123c6cbddca6cDmitri Plotnikov        if (!mOptionsMenuContactsAvailable) {
8418b8264620f9362e089322d1e3a7cc5620900e6f9Dmitri Plotnikov            return false;
8428b8264620f9362e089322d1e3a7cc5620900e6f9Dmitri Plotnikov        }
8438b8264620f9362e089322d1e3a7cc5620900e6f9Dmitri Plotnikov
8448268bbe65440c70db46b4c505433fac1fdc36e58Katherine Kuan        final MenuItem addContactMenu = menu.findItem(R.id.menu_add_contact);
8458268bbe65440c70db46b4c505433fac1fdc36e58Katherine Kuan        final MenuItem addGroupMenu = menu.findItem(R.id.menu_add_group);
8461ee9df6facd2340416d6a33aeb739707643d2fc3Katherine Kuan        final MenuItem searchMenu = menu.findItem(R.id.menu_search);
847e898a9fa52728b2ff6fcd3add693471e9e15553dDmitri Plotnikov
8488268bbe65440c70db46b4c505433fac1fdc36e58Katherine Kuan        if (mActionBarAdapter.isSearchMode()) {
8498268bbe65440c70db46b4c505433fac1fdc36e58Katherine Kuan            addContactMenu.setVisible(false);
8508268bbe65440c70db46b4c505433fac1fdc36e58Katherine Kuan            addGroupMenu.setVisible(false);
8511ee9df6facd2340416d6a33aeb739707643d2fc3Katherine Kuan            // If search is normally in the overflow menu, when we are in search
8521ee9df6facd2340416d6a33aeb739707643d2fc3Katherine Kuan            // mode, hide this option.
8531ee9df6facd2340416d6a33aeb739707643d2fc3Katherine Kuan            if (mActionBarAdapter.isSearchInOverflowMenu()) {
8541ee9df6facd2340416d6a33aeb739707643d2fc3Katherine Kuan                searchMenu.setVisible(false);
8551ee9df6facd2340416d6a33aeb739707643d2fc3Katherine Kuan            }
8568268bbe65440c70db46b4c505433fac1fdc36e58Katherine Kuan        } else {
8578268bbe65440c70db46b4c505433fac1fdc36e58Katherine Kuan            switch (mSelectedTab) {
8588268bbe65440c70db46b4c505433fac1fdc36e58Katherine Kuan                case FAVORITES:
8598268bbe65440c70db46b4c505433fac1fdc36e58Katherine Kuan                    // TODO: Fall through until we determine what the menu items should be for
8608268bbe65440c70db46b4c505433fac1fdc36e58Katherine Kuan                    // this tab
8618268bbe65440c70db46b4c505433fac1fdc36e58Katherine Kuan                case CONTACTS:
8628268bbe65440c70db46b4c505433fac1fdc36e58Katherine Kuan                    addContactMenu.setVisible(true);
8638268bbe65440c70db46b4c505433fac1fdc36e58Katherine Kuan                    addGroupMenu.setVisible(false);
8648268bbe65440c70db46b4c505433fac1fdc36e58Katherine Kuan                    break;
8658268bbe65440c70db46b4c505433fac1fdc36e58Katherine Kuan                case GROUPS:
8668268bbe65440c70db46b4c505433fac1fdc36e58Katherine Kuan                    addContactMenu.setVisible(false);
8678268bbe65440c70db46b4c505433fac1fdc36e58Katherine Kuan                    addGroupMenu.setVisible(true);
8688268bbe65440c70db46b4c505433fac1fdc36e58Katherine Kuan                    break;
8698268bbe65440c70db46b4c505433fac1fdc36e58Katherine Kuan            }
870e898a9fa52728b2ff6fcd3add693471e9e15553dDmitri Plotnikov        }
871e898a9fa52728b2ff6fcd3add693471e9e15553dDmitri Plotnikov
8728268bbe65440c70db46b4c505433fac1fdc36e58Katherine Kuan        MenuItem settings = menu.findItem(R.id.menu_settings);
8738268bbe65440c70db46b4c505433fac1fdc36e58Katherine Kuan        if (settings != null) {
8748268bbe65440c70db46b4c505433fac1fdc36e58Katherine Kuan            settings.setVisible(!ContactsPreferenceActivity.isEmpty(this));
875e898a9fa52728b2ff6fcd3add693471e9e15553dDmitri Plotnikov        }
876e898a9fa52728b2ff6fcd3add693471e9e15553dDmitri Plotnikov
877d9798aefc844dd9ce29da085cb8ab7e769f63e75Jeff Sharkey        return true;
8787aa0e4cb91c869108238733ca107d18ccb888df7The Android Open Source Project    }
8797aa0e4cb91c869108238733ca107d18ccb888df7The Android Open Source Project
8807aa0e4cb91c869108238733ca107d18ccb888df7The Android Open Source Project    @Override
8817aa0e4cb91c869108238733ca107d18ccb888df7The Android Open Source Project    public boolean onOptionsItemSelected(MenuItem item) {
8827aa0e4cb91c869108238733ca107d18ccb888df7The Android Open Source Project        switch (item.getItemId()) {
883c85ad182093f5556d6dbb310f4708cdc174b2665Dmitri Plotnikov            case R.id.menu_settings: {
884c85ad182093f5556d6dbb310f4708cdc174b2665Dmitri Plotnikov                final Intent intent = new Intent(this, ContactsPreferenceActivity.class);
885c15062754af08cadc50b4b8ec89c2175a4bec1feDaniel Lehmann                startActivity(intent);
8867aa0e4cb91c869108238733ca107d18ccb888df7The Android Open Source Project                return true;
887d9798aefc844dd9ce29da085cb8ab7e769f63e75Jeff Sharkey            }
888b5760b94bbf56ce348876ec36f4669d20a1530f5Katherine Kuan            case R.id.menu_contacts_filter: {
889b5760b94bbf56ce348876ec36f4669d20a1530f5Katherine Kuan                final Intent intent = new Intent(this, CustomContactListFilterActivity.class);
890b5760b94bbf56ce348876ec36f4669d20a1530f5Katherine Kuan                startActivityForResult(intent, SUBACTIVITY_CUSTOMIZE_FILTER);
891b5760b94bbf56ce348876ec36f4669d20a1530f5Katherine Kuan                return true;
892b5760b94bbf56ce348876ec36f4669d20a1530f5Katherine Kuan            }
893d9798aefc844dd9ce29da085cb8ab7e769f63e75Jeff Sharkey            case R.id.menu_search: {
8948e86b75681659ce124e89f73d0410efe39025d11Dmitri Plotnikov                onSearchRequested();
8957aa0e4cb91c869108238733ca107d18ccb888df7The Android Open Source Project                return true;
896d9798aefc844dd9ce29da085cb8ab7e769f63e75Jeff Sharkey            }
8978268bbe65440c70db46b4c505433fac1fdc36e58Katherine Kuan            case R.id.menu_add_contact: {
898d9798aefc844dd9ce29da085cb8ab7e769f63e75Jeff Sharkey                final Intent intent = new Intent(Intent.ACTION_INSERT, Contacts.CONTENT_URI);
89922fb2053fe2bfe98376bf1a0e564f23ae9cecdedDaniel Lehmann                startActivityForResult(intent, SUBACTIVITY_NEW_CONTACT);
900d9798aefc844dd9ce29da085cb8ab7e769f63e75Jeff Sharkey                return true;
901d9798aefc844dd9ce29da085cb8ab7e769f63e75Jeff Sharkey            }
9028268bbe65440c70db46b4c505433fac1fdc36e58Katherine Kuan            case R.id.menu_add_group: {
9038268bbe65440c70db46b4c505433fac1fdc36e58Katherine Kuan                // TODO: Hook up "new group" functionality
9048268bbe65440c70db46b4c505433fac1fdc36e58Katherine Kuan                Toast.makeText(this, "NEW GROUP", Toast.LENGTH_SHORT).show();
9058268bbe65440c70db46b4c505433fac1fdc36e58Katherine Kuan                return true;
9068268bbe65440c70db46b4c505433fac1fdc36e58Katherine Kuan            }
90749d17b3e7692ae9442c342db236fa93d4a837c28Jeff Sharkey            case R.id.menu_import_export: {
908261cd5650d07fbc41ea8f19d4e422094612d1454Daniel Lehmann                ImportExportDialogFragment.show(getFragmentManager());
909d9798aefc844dd9ce29da085cb8ab7e769f63e75Jeff Sharkey                return true;
910d9798aefc844dd9ce29da085cb8ab7e769f63e75Jeff Sharkey            }
911d9798aefc844dd9ce29da085cb8ab7e769f63e75Jeff Sharkey            case R.id.menu_accounts: {
912d9798aefc844dd9ce29da085cb8ab7e769f63e75Jeff Sharkey                final Intent intent = new Intent(Settings.ACTION_SYNC_SETTINGS);
913fe42e55dfc483b69c8a7831c16fbdbc5ab19929eDmitri Plotnikov                intent.putExtra(Settings.EXTRA_AUTHORITIES, new String[] {
914d9798aefc844dd9ce29da085cb8ab7e769f63e75Jeff Sharkey                    ContactsContract.AUTHORITY
915d9798aefc844dd9ce29da085cb8ab7e769f63e75Jeff Sharkey                });
9161fbcbd1053c72e165009ad9a7d735dd2c0755c36Dmitri Plotnikov                intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_WHEN_TASK_RESET);
917d9798aefc844dd9ce29da085cb8ab7e769f63e75Jeff Sharkey                startActivity(intent);
918d9798aefc844dd9ce29da085cb8ab7e769f63e75Jeff Sharkey                return true;
919d9798aefc844dd9ce29da085cb8ab7e769f63e75Jeff Sharkey            }
9207aa0e4cb91c869108238733ca107d18ccb888df7The Android Open Source Project        }
9217aa0e4cb91c869108238733ca107d18ccb888df7The Android Open Source Project        return false;
9227aa0e4cb91c869108238733ca107d18ccb888df7The Android Open Source Project    }
9237aa0e4cb91c869108238733ca107d18ccb888df7The Android Open Source Project
9248e86b75681659ce124e89f73d0410efe39025d11Dmitri Plotnikov    @Override
9258e86b75681659ce124e89f73d0410efe39025d11Dmitri Plotnikov    public void startSearch(String initialQuery, boolean selectInitialQuery, Bundle appSearchData,
9268e86b75681659ce124e89f73d0410efe39025d11Dmitri Plotnikov            boolean globalSearch) {
927691e93397eae9a29d979a5e404f0b90130c2e9d4Dmitri Plotnikov        if (mListFragment != null && mListFragment.isAdded() && !globalSearch) {
928d3758b00601ce3ff8c4336b45cc1249806e52c13Dmitri Plotnikov            mListFragment.startSearch(initialQuery);
929691e93397eae9a29d979a5e404f0b90130c2e9d4Dmitri Plotnikov        } else {
930691e93397eae9a29d979a5e404f0b90130c2e9d4Dmitri Plotnikov            super.startSearch(initialQuery, selectInitialQuery, appSearchData, globalSearch);
931db3d143dba9a0a9e3fb4cb57f27e619fee98e845Dmitri Plotnikov        }
932db3d143dba9a0a9e3fb4cb57f27e619fee98e845Dmitri Plotnikov    }
933db3d143dba9a0a9e3fb4cb57f27e619fee98e845Dmitri Plotnikov
93449d17b3e7692ae9442c342db236fa93d4a837c28Jeff Sharkey    @Override
935d3758b00601ce3ff8c4336b45cc1249806e52c13Dmitri Plotnikov    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
936d3758b00601ce3ff8c4336b45cc1249806e52c13Dmitri Plotnikov        switch (requestCode) {
9376e850a046fcea8ba82a793b43944051246d08180Dmitri Plotnikov            case SUBACTIVITY_CUSTOMIZE_FILTER: {
9386e850a046fcea8ba82a793b43944051246d08180Dmitri Plotnikov                if (resultCode == Activity.RESULT_OK) {
9396e850a046fcea8ba82a793b43944051246d08180Dmitri Plotnikov                    mContactListFilterController.selectCustomFilter();
9406e850a046fcea8ba82a793b43944051246d08180Dmitri Plotnikov                }
9416e850a046fcea8ba82a793b43944051246d08180Dmitri Plotnikov                break;
9426e850a046fcea8ba82a793b43944051246d08180Dmitri Plotnikov            }
9438c6955ff3c05e1f3899110701c3cb5559a492f1eDmitri Plotnikov
944d959104d37df65f0d6de9290c3fa2b59065be0fcDmitri Plotnikov            case SUBACTIVITY_EDIT_CONTACT:
94522fb2053fe2bfe98376bf1a0e564f23ae9cecdedDaniel Lehmann            case SUBACTIVITY_NEW_CONTACT: {
946be18de05d6f6a107c552e369bce58f51c946fde7Katherine Kuan                if (resultCode == RESULT_OK && mContentPaneDisplayed) {
9476e850a046fcea8ba82a793b43944051246d08180Dmitri Plotnikov                    mRequest.setActionCode(ContactsRequest.ACTION_VIEW_CONTACT);
948a5a2744ab8102cf4ff5fbd3e1fa074a45257b3ddDmitri Plotnikov                    mListFragment.reloadDataAndSetSelectedUri(data.getData());
94922fb2053fe2bfe98376bf1a0e564f23ae9cecdedDaniel Lehmann                }
95022fb2053fe2bfe98376bf1a0e564f23ae9cecdedDaniel Lehmann                break;
95122fb2053fe2bfe98376bf1a0e564f23ae9cecdedDaniel Lehmann            }
952d3758b00601ce3ff8c4336b45cc1249806e52c13Dmitri Plotnikov
9537aa9b2888e4f630c6311458ea27ecbc13a527b00Daniel Lehmann            // TODO: Using the new startActivityWithResultFromFragment API this should not be needed
9547aa9b2888e4f630c6311458ea27ecbc13a527b00Daniel Lehmann            // anymore
955e8a9517483cfa0c4d521b834d872a8cb05482badDmitri Plotnikov            case ContactEntryListFragment.ACTIVITY_REQUEST_CODE_PICKER:
956d3758b00601ce3ff8c4336b45cc1249806e52c13Dmitri Plotnikov                if (resultCode == RESULT_OK) {
957e8a9517483cfa0c4d521b834d872a8cb05482badDmitri Plotnikov                    mListFragment.onPickerResult(data);
958d3758b00601ce3ff8c4336b45cc1249806e52c13Dmitri Plotnikov                }
959d3758b00601ce3ff8c4336b45cc1249806e52c13Dmitri Plotnikov
960d3758b00601ce3ff8c4336b45cc1249806e52c13Dmitri Plotnikov// TODO fix or remove multipicker code
961d3758b00601ce3ff8c4336b45cc1249806e52c13Dmitri Plotnikov//                else if (resultCode == RESULT_CANCELED && mMode == MODE_PICK_MULTIPLE_PHONES) {
9621ce1e7cf261994e46e6fe85ed4d445241ad55f16Dmitri Plotnikov//                    // Finish the activity if the sub activity was canceled as back key is used
9631ce1e7cf261994e46e6fe85ed4d445241ad55f16Dmitri Plotnikov//                    // to confirm user selection in MODE_PICK_MULTIPLE_PHONES.
9641ce1e7cf261994e46e6fe85ed4d445241ad55f16Dmitri Plotnikov//                    finish();
9651ce1e7cf261994e46e6fe85ed4d445241ad55f16Dmitri Plotnikov//                }
9661ce1e7cf261994e46e6fe85ed4d445241ad55f16Dmitri Plotnikov//                break;
967d3758b00601ce3ff8c4336b45cc1249806e52c13Dmitri Plotnikov        }
968d3758b00601ce3ff8c4336b45cc1249806e52c13Dmitri Plotnikov    }
9697aa0e4cb91c869108238733ca107d18ccb888df7The Android Open Source Project
9707aa0e4cb91c869108238733ca107d18ccb888df7The Android Open Source Project    @Override
9717aa0e4cb91c869108238733ca107d18ccb888df7The Android Open Source Project    public boolean onContextItemSelected(MenuItem item) {
972502741df555dc7cf59a10885272d432940ae35adDmitri Plotnikov        ContextMenuAdapter menuAdapter = mListFragment.getContextMenuAdapter();
973502741df555dc7cf59a10885272d432940ae35adDmitri Plotnikov        if (menuAdapter != null) {
974502741df555dc7cf59a10885272d432940ae35adDmitri Plotnikov            return menuAdapter.onContextItemSelected(item);
9757aa0e4cb91c869108238733ca107d18ccb888df7The Android Open Source Project        }
9767aa0e4cb91c869108238733ca107d18ccb888df7The Android Open Source Project
9777aa0e4cb91c869108238733ca107d18ccb888df7The Android Open Source Project        return super.onContextItemSelected(item);
9787aa0e4cb91c869108238733ca107d18ccb888df7The Android Open Source Project    }
9797aa0e4cb91c869108238733ca107d18ccb888df7The Android Open Source Project
9807aa0e4cb91c869108238733ca107d18ccb888df7The Android Open Source Project    @Override
9817aa0e4cb91c869108238733ca107d18ccb888df7The Android Open Source Project    public boolean onKeyDown(int keyCode, KeyEvent event) {
9821ce1e7cf261994e46e6fe85ed4d445241ad55f16Dmitri Plotnikov        // TODO move to the fragment
9837aa0e4cb91c869108238733ca107d18ccb888df7The Android Open Source Project        switch (keyCode) {
9841ce1e7cf261994e46e6fe85ed4d445241ad55f16Dmitri Plotnikov//            case KeyEvent.KEYCODE_CALL: {
9851ce1e7cf261994e46e6fe85ed4d445241ad55f16Dmitri Plotnikov//                if (callSelection()) {
9861ce1e7cf261994e46e6fe85ed4d445241ad55f16Dmitri Plotnikov//                    return true;
9871ce1e7cf261994e46e6fe85ed4d445241ad55f16Dmitri Plotnikov//                }
9881ce1e7cf261994e46e6fe85ed4d445241ad55f16Dmitri Plotnikov//                break;
9891ce1e7cf261994e46e6fe85ed4d445241ad55f16Dmitri Plotnikov//            }
990db3d143dba9a0a9e3fb4cb57f27e619fee98e845Dmitri Plotnikov
9917aa0e4cb91c869108238733ca107d18ccb888df7The Android Open Source Project            case KeyEvent.KEYCODE_DEL: {
9926c776bcfa3bde9b5a94dddac8f6ebde1f358a796Dmitri Plotnikov                if (deleteSelection()) {
9937aa0e4cb91c869108238733ca107d18ccb888df7The Android Open Source Project                    return true;
9947aa0e4cb91c869108238733ca107d18ccb888df7The Android Open Source Project                }
9957aa0e4cb91c869108238733ca107d18ccb888df7The Android Open Source Project                break;
9967aa0e4cb91c869108238733ca107d18ccb888df7The Android Open Source Project            }
9977bb2add27b874d194c294d30c1661dffa78f44bbDaniel Lehmann            default: {
9987bb2add27b874d194c294d30c1661dffa78f44bbDaniel Lehmann                // Bring up the search UI if the user starts typing
9997bb2add27b874d194c294d30c1661dffa78f44bbDaniel Lehmann                final int unicodeChar = event.getUnicodeChar();
10004f3aa85131e16594fef22ca60439f4320016767fDaniel Lehmann                if (unicodeChar != 0 && !Character.isWhitespace(unicodeChar)) {
10017bb2add27b874d194c294d30c1661dffa78f44bbDaniel Lehmann                    String query = new String(new int[]{ unicodeChar }, 0, 1);
1002b5760b94bbf56ce348876ec36f4669d20a1530f5Katherine Kuan                    if (!mActionBarAdapter.isSearchMode()) {
1003b5760b94bbf56ce348876ec36f4669d20a1530f5Katherine Kuan                        mActionBarAdapter.setQueryString(query);
1004b5760b94bbf56ce348876ec36f4669d20a1530f5Katherine Kuan                        mActionBarAdapter.setSearchMode(true);
1005b5760b94bbf56ce348876ec36f4669d20a1530f5Katherine Kuan                        return true;
10067bb2add27b874d194c294d30c1661dffa78f44bbDaniel Lehmann                    } else if (!mRequest.isSearchMode()) {
10077bb2add27b874d194c294d30c1661dffa78f44bbDaniel Lehmann                        if (!mSearchInitiated) {
10087bb2add27b874d194c294d30c1661dffa78f44bbDaniel Lehmann                            mSearchInitiated = true;
10097bb2add27b874d194c294d30c1661dffa78f44bbDaniel Lehmann                            startSearch(query, false, null, false);
10107bb2add27b874d194c294d30c1661dffa78f44bbDaniel Lehmann                            return true;
10117bb2add27b874d194c294d30c1661dffa78f44bbDaniel Lehmann                        }
10127bb2add27b874d194c294d30c1661dffa78f44bbDaniel Lehmann                    }
10137bb2add27b874d194c294d30c1661dffa78f44bbDaniel Lehmann                }
10147bb2add27b874d194c294d30c1661dffa78f44bbDaniel Lehmann            }
10157aa0e4cb91c869108238733ca107d18ccb888df7The Android Open Source Project        }
10167aa0e4cb91c869108238733ca107d18ccb888df7The Android Open Source Project
10177aa0e4cb91c869108238733ca107d18ccb888df7The Android Open Source Project        return super.onKeyDown(keyCode, event);
10187aa0e4cb91c869108238733ca107d18ccb888df7The Android Open Source Project    }
1019ab4d29f6a2edbfae008dbaff35f25baad73aa0dfDmitri Plotnikov
1020ab4d29f6a2edbfae008dbaff35f25baad73aa0dfDmitri Plotnikov    @Override
1021ab4d29f6a2edbfae008dbaff35f25baad73aa0dfDmitri Plotnikov    public void onBackPressed() {
1022ab4d29f6a2edbfae008dbaff35f25baad73aa0dfDmitri Plotnikov        if (mSearchMode && mActionBarAdapter != null) {
1023ab4d29f6a2edbfae008dbaff35f25baad73aa0dfDmitri Plotnikov            mActionBarAdapter.setSearchMode(false);
1024ab4d29f6a2edbfae008dbaff35f25baad73aa0dfDmitri Plotnikov        } else {
1025ab4d29f6a2edbfae008dbaff35f25baad73aa0dfDmitri Plotnikov            super.onBackPressed();
1026ab4d29f6a2edbfae008dbaff35f25baad73aa0dfDmitri Plotnikov        }
1027ab4d29f6a2edbfae008dbaff35f25baad73aa0dfDmitri Plotnikov    }
10287aa0e4cb91c869108238733ca107d18ccb888df7The Android Open Source Project
10296c776bcfa3bde9b5a94dddac8f6ebde1f358a796Dmitri Plotnikov    private boolean deleteSelection() {
10301ce1e7cf261994e46e6fe85ed4d445241ad55f16Dmitri Plotnikov        // TODO move to the fragment
10311ce1e7cf261994e46e6fe85ed4d445241ad55f16Dmitri Plotnikov//        if (mActionCode == ContactsRequest.ACTION_DEFAULT) {
10321ce1e7cf261994e46e6fe85ed4d445241ad55f16Dmitri Plotnikov//            final int position = mListView.getSelectedItemPosition();
10331ce1e7cf261994e46e6fe85ed4d445241ad55f16Dmitri Plotnikov//            if (position != ListView.INVALID_POSITION) {
10341ce1e7cf261994e46e6fe85ed4d445241ad55f16Dmitri Plotnikov//                Uri contactUri = getContactUri(position);
10351ce1e7cf261994e46e6fe85ed4d445241ad55f16Dmitri Plotnikov//                if (contactUri != null) {
10361ce1e7cf261994e46e6fe85ed4d445241ad55f16Dmitri Plotnikov//                    doContactDelete(contactUri);
10371ce1e7cf261994e46e6fe85ed4d445241ad55f16Dmitri Plotnikov//                    return true;
10381ce1e7cf261994e46e6fe85ed4d445241ad55f16Dmitri Plotnikov//                }
10391ce1e7cf261994e46e6fe85ed4d445241ad55f16Dmitri Plotnikov//            }
10401ce1e7cf261994e46e6fe85ed4d445241ad55f16Dmitri Plotnikov//        }
10416c776bcfa3bde9b5a94dddac8f6ebde1f358a796Dmitri Plotnikov        return false;
10426c776bcfa3bde9b5a94dddac8f6ebde1f358a796Dmitri Plotnikov    }
10436c776bcfa3bde9b5a94dddac8f6ebde1f358a796Dmitri Plotnikov
104408e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikov    @Override
104508e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikov    protected void onSaveInstanceState(Bundle outState) {
104608e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikov        super.onSaveInstanceState(outState);
104715ccbb4d22fd65165cacb7970cbe61de1aa9aac4Dmitri Plotnikov        outState.putBoolean(KEY_SEARCH_MODE, mSearchMode);
1048fcfdffb439ccf1ddef971109b82e782c47161572Dmitri Plotnikov        if (mActionBarAdapter != null) {
1049fcfdffb439ccf1ddef971109b82e782c47161572Dmitri Plotnikov            mActionBarAdapter.onSaveInstanceState(outState);
105008e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikov        }
105108e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikov    }
105208e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikov
1053fa49a66979567894c85fe2489d1375216d67597eDmitri Plotnikov    @Override
1054fa49a66979567894c85fe2489d1375216d67597eDmitri Plotnikov    protected void onRestoreInstanceState(Bundle inState) {
1055fa49a66979567894c85fe2489d1375216d67597eDmitri Plotnikov        super.onRestoreInstanceState(inState);
1056fa49a66979567894c85fe2489d1375216d67597eDmitri Plotnikov        mSearchMode = inState.getBoolean(KEY_SEARCH_MODE);
1057fa49a66979567894c85fe2489d1375216d67597eDmitri Plotnikov        if (mActionBarAdapter != null) {
1058fa49a66979567894c85fe2489d1375216d67597eDmitri Plotnikov            mActionBarAdapter.onRestoreInstanceState(inState);
1059fa49a66979567894c85fe2489d1375216d67597eDmitri Plotnikov        }
1060fa49a66979567894c85fe2489d1375216d67597eDmitri Plotnikov    }
1061fa49a66979567894c85fe2489d1375216d67597eDmitri Plotnikov
10623391dbed3575b3454c2bebf35dae4a19d8f987f2Daniel Lehmann    @Override
10633391dbed3575b3454c2bebf35dae4a19d8f987f2Daniel Lehmann    public DialogManager getDialogManager() {
10643391dbed3575b3454c2bebf35dae4a19d8f987f2Daniel Lehmann        return mDialogManager;
10653391dbed3575b3454c2bebf35dae4a19d8f987f2Daniel Lehmann    }
1066ab75f82f6a95b221157f2ce3125d76d62f869ebbDmitri Plotnikov
1067ab75f82f6a95b221157f2ce3125d76d62f869ebbDmitri Plotnikov    // Visible for testing
1068ab75f82f6a95b221157f2ce3125d76d62f869ebbDmitri Plotnikov    public ContactBrowseListFragment getListFragment() {
1069ab75f82f6a95b221157f2ce3125d76d62f869ebbDmitri Plotnikov        return mListFragment;
1070ab75f82f6a95b221157f2ce3125d76d62f869ebbDmitri Plotnikov    }
1071ab75f82f6a95b221157f2ce3125d76d62f869ebbDmitri Plotnikov
1072ab75f82f6a95b221157f2ce3125d76d62f869ebbDmitri Plotnikov    // Visible for testing
1073ab75f82f6a95b221157f2ce3125d76d62f869ebbDmitri Plotnikov    public ContactDetailFragment getDetailFragment() {
1074be18de05d6f6a107c552e369bce58f51c946fde7Katherine Kuan        return mContactDetailFragment;
1075ab75f82f6a95b221157f2ce3125d76d62f869ebbDmitri Plotnikov    }
10767aa0e4cb91c869108238733ca107d18ccb888df7The Android Open Source Project}
1077