PeopleActivity.java revision 7aa9b2888e4f630c6311458ea27ecbc13a527b00
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
1927834b2ae8bb5a65dfc20c212844d98d1c252caeDmitri Plotnikovimport com.android.contacts.R;
209692f2664e678b0a264c586c70cc4a9c0ffabc21Dmitri Plotnikovimport com.android.contacts.interactions.ContactDeletionInteraction;
21aa1dffe03f6cb3d147556cf53cbf23ad86852cabDmitri Plotnikovimport com.android.contacts.interactions.ImportExportInteraction;
22b4e8886bcb25cde3b03eedcc815c0166329af3a4Dmitri Plotnikovimport com.android.contacts.interactions.PhoneNumberInteraction;
23416b569901ce4c577c1f76c3f29496d1adab29e1Dmitri Plotnikovimport com.android.contacts.list.ContactBrowseListContextMenuAdapter;
2408e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikovimport com.android.contacts.list.ContactBrowseListFragment;
2559fb48e7e6a37f26901ad5a4996947dcd25a73d9Dmitri Plotnikovimport com.android.contacts.list.ContactEntryListFragment;
260906ee326a5553a224eb7b004536f35b340bdcd3Dmitri Plotnikovimport com.android.contacts.list.ContactsIntentResolver;
271ce1e7cf261994e46e6fe85ed4d445241ad55f16Dmitri Plotnikovimport com.android.contacts.list.ContactsRequest;
28238d9847d8f2ace658fb7337c8847a2088ddc9d1Dmitri Plotnikovimport com.android.contacts.list.DefaultContactBrowseListFragment;
29732f65236e7f804941e84757c077a84eb11eab16Dmitri Plotnikovimport com.android.contacts.list.OnContactBrowserActionListener;
30238d9847d8f2ace658fb7337c8847a2088ddc9d1Dmitri Plotnikovimport com.android.contacts.list.StrequentContactListFragment;
311ea45f2fa000d6f35b3b2918d4d22dc5aa7b8f4fDmitri Plotnikovimport com.android.contacts.ui.ContactsPreferencesActivity;
323391dbed3575b3454c2bebf35dae4a19d8f987f2Daniel Lehmannimport com.android.contacts.util.DialogManager;
33424440bd932482c0a08b782a570d600051c56eb4Dmitri Plotnikovimport com.android.contacts.views.detail.ContactDetailFragment;
34c0ca13a86793082c8969e44c70d4dc8fb83eb1f8Dmitri Plotnikovimport com.android.contacts.views.detail.ContactNoneFragment;
35424440bd932482c0a08b782a570d600051c56eb4Dmitri Plotnikovimport com.android.contacts.views.editor.ContactEditorFragment;
361323d69c40649914ae2195088573a20cc35da86eDmitri Plotnikovimport com.android.contacts.widget.ContextMenuAdapter;
3757cf30f316b8013e172150d1ad0e197be6b46b87Tadashi G. Takaoka
384af3b0710ac6f08450b723a3784495469e45ba05Dmitri Plotnikovimport android.app.ActionBar;
397aa0e4cb91c869108238733ca107d18ccb888df7The Android Open Source Projectimport android.app.Activity;
4049d17b3e7692ae9442c342db236fa93d4a837c28Jeff Sharkeyimport android.app.Dialog;
4192a6fdf1b07b8f1447560174e24455fd46aee7cdDmitri Plotnikovimport android.app.Fragment;
427aa0e4cb91c869108238733ca107d18ccb888df7The Android Open Source Projectimport android.content.ContentValues;
437aa0e4cb91c869108238733ca107d18ccb888df7The Android Open Source Projectimport android.content.Intent;
447aa0e4cb91c869108238733ca107d18ccb888df7The Android Open Source Projectimport android.net.Uri;
457aa0e4cb91c869108238733ca107d18ccb888df7The Android Open Source Projectimport android.os.Bundle;
46d7c4af2b932ffc65476fb1ac6d74feac74b48f3cDmitri Plotnikovimport android.provider.ContactsContract;
47e05296673449dc6686c4fec4dd2e98ab47a78056Jeff Hamiltonimport android.provider.ContactsContract.Contacts;
489692f2664e678b0a264c586c70cc4a9c0ffabc21Dmitri Plotnikovimport android.provider.Settings;
49424440bd932482c0a08b782a570d600051c56eb4Dmitri Plotnikovimport android.text.TextUtils;
507aa0e4cb91c869108238733ca107d18ccb888df7The Android Open Source Projectimport android.view.KeyEvent;
517aa0e4cb91c869108238733ca107d18ccb888df7The Android Open Source Projectimport android.view.Menu;
52d9798aefc844dd9ce29da085cb8ab7e769f63e75Jeff Sharkeyimport android.view.MenuInflater;
537aa0e4cb91c869108238733ca107d18ccb888df7The Android Open Source Projectimport android.view.MenuItem;
547aa0e4cb91c869108238733ca107d18ccb888df7The Android Open Source Projectimport android.view.View;
554af3b0710ac6f08450b723a3784495469e45ba05Dmitri Plotnikovimport android.view.Window;
56424440bd932482c0a08b782a570d600051c56eb4Dmitri Plotnikovimport android.widget.Toast;
577aa0e4cb91c869108238733ca107d18ccb888df7The Android Open Source Project
587aa0e4cb91c869108238733ca107d18ccb888df7The Android Open Source Project/**
59bd772a5bfd907f3b14589a07378fb26dfd924d93Daniel Lehmann * Displays a list to browse contacts. For xlarge screens, this also displays a detail-pane on
60bd772a5bfd907f3b14589a07378fb26dfd924d93Daniel Lehmann * the right
617aa0e4cb91c869108238733ca107d18ccb888df7The Android Open Source Project */
62cfa39004ed111f131bfb7d8841d5b9a9ee8221fbDmitri Plotnikovpublic class ContactBrowserActivity extends Activity
63fcfdffb439ccf1ddef971109b82e782c47161572Dmitri Plotnikov        implements View.OnCreateContextMenuListener, ActionBarAdapter.Listener,
643391dbed3575b3454c2bebf35dae4a19d8f987f2Daniel Lehmann        DialogManager.DialogShowingViewActivity {
6557d27da940983fba40d8e3a6d8b99a57b48419eaDmitri Plotnikov
66bd772a5bfd907f3b14589a07378fb26dfd924d93Daniel Lehmann    private static final String TAG = "ContactBrowserActivity";
677aa0e4cb91c869108238733ca107d18ccb888df7The Android Open Source Project
6892a6fdf1b07b8f1447560174e24455fd46aee7cdDmitri Plotnikov    private static final String KEY_MODE = "mode";
6992a6fdf1b07b8f1447560174e24455fd46aee7cdDmitri Plotnikov
7022fb2053fe2bfe98376bf1a0e564f23ae9cecdedDaniel Lehmann    private static final int SUBACTIVITY_NEW_CONTACT = 2;
717aa9b2888e4f630c6311458ea27ecbc13a527b00Daniel Lehmann    private static final int SUBACTIVITY_DISPLAY_GROUP = 3;
72032bb36086d55529b59cbd6ea03d2f9b6cfe36afDmitri Plotnikov
733b7d5949bfa524534e5d1aa29b8eaff8733ae00cDaniel Lehmann    private DialogManager mDialogManager = new DialogManager(this);
743391dbed3575b3454c2bebf35dae4a19d8f987f2Daniel Lehmann
75ac0f783adb82ee8056e742fae4994e848e82ea3dDmitri Plotnikov    private ContactsIntentResolver mIntentResolver;
76fcfdffb439ccf1ddef971109b82e782c47161572Dmitri Plotnikov    private ContactsRequest mRequest;
77caf498bd71e2ab4b6771cfa17453dd827041f238Dmitri Plotnikov
78fcfdffb439ccf1ddef971109b82e782c47161572Dmitri Plotnikov    private boolean mHasActionBar;
79fcfdffb439ccf1ddef971109b82e782c47161572Dmitri Plotnikov    private ActionBarAdapter mActionBarAdapter;
807c5286ed8ba0d7fbe3683b560f69b3a2d4ff1e2aDmitri Plotnikov
81fcfdffb439ccf1ddef971109b82e782c47161572Dmitri Plotnikov    /**
82fcfdffb439ccf1ddef971109b82e782c47161572Dmitri Plotnikov     * Contact browser mode, see {@link ContactBrowserMode}.
83fcfdffb439ccf1ddef971109b82e782c47161572Dmitri Plotnikov     */
84fcfdffb439ccf1ddef971109b82e782c47161572Dmitri Plotnikov    private int mMode = -1;
85fcfdffb439ccf1ddef971109b82e782c47161572Dmitri Plotnikov
86fcfdffb439ccf1ddef971109b82e782c47161572Dmitri Plotnikov    private ContactBrowseListFragment mListFragment;
87c0ca13a86793082c8969e44c70d4dc8fb83eb1f8Dmitri Plotnikov    private ContactNoneFragment mEmptyFragment;
88c0ca13a86793082c8969e44c70d4dc8fb83eb1f8Dmitri Plotnikov
89fcfdffb439ccf1ddef971109b82e782c47161572Dmitri Plotnikov    private boolean mContactContentDisplayed;
90424440bd932482c0a08b782a570d600051c56eb4Dmitri Plotnikov    private ContactDetailFragment mDetailFragment;
91424440bd932482c0a08b782a570d600051c56eb4Dmitri Plotnikov    private DetailFragmentListener mDetailFragmentListener = new DetailFragmentListener();
92424440bd932482c0a08b782a570d600051c56eb4Dmitri Plotnikov
93424440bd932482c0a08b782a570d600051c56eb4Dmitri Plotnikov    private ContactEditorFragment mEditorFragment;
94424440bd932482c0a08b782a570d600051c56eb4Dmitri Plotnikov    private EditorFragmentListener mEditorFragmentListener = new EditorFragmentListener();
95424440bd932482c0a08b782a570d600051c56eb4Dmitri Plotnikov
96fcfdffb439ccf1ddef971109b82e782c47161572Dmitri Plotnikov    private PhoneNumberInteraction mPhoneNumberCallInteraction;
97fcfdffb439ccf1ddef971109b82e782c47161572Dmitri Plotnikov    private PhoneNumberInteraction mSendTextMessageInteraction;
98fcfdffb439ccf1ddef971109b82e782c47161572Dmitri Plotnikov    private ContactDeletionInteraction mContactDeletionInteraction;
99fcfdffb439ccf1ddef971109b82e782c47161572Dmitri Plotnikov    private ImportExportInteraction mImportExportInteraction;
1004af3b0710ac6f08450b723a3784495469e45ba05Dmitri Plotnikov
101fcfdffb439ccf1ddef971109b82e782c47161572Dmitri Plotnikov    private boolean mSearchInitiated;
102e1d4c0617ede33b4b0cdb1137aca971b3dacc747Dmitri Plotnikov
103cfa39004ed111f131bfb7d8841d5b9a9ee8221fbDmitri Plotnikov    public ContactBrowserActivity() {
1041540674a23a2ac0277a5aca3fa4ed41a6e1b74c3Dmitri Plotnikov        mIntentResolver = new ContactsIntentResolver(this);
1056178cb47846e7efc9c245a9b9ba93032a0038921Dmitri Plotnikov    }
1066178cb47846e7efc9c245a9b9ba93032a0038921Dmitri Plotnikov
1077aa0e4cb91c869108238733ca107d18ccb888df7The Android Open Source Project    @Override
10892a6fdf1b07b8f1447560174e24455fd46aee7cdDmitri Plotnikov    public void onAttachFragment(Fragment fragment) {
10992a6fdf1b07b8f1447560174e24455fd46aee7cdDmitri Plotnikov        if (fragment instanceof ContactBrowseListFragment) {
11092a6fdf1b07b8f1447560174e24455fd46aee7cdDmitri Plotnikov            mListFragment = (ContactBrowseListFragment)fragment;
11192a6fdf1b07b8f1447560174e24455fd46aee7cdDmitri Plotnikov            mListFragment.setOnContactListActionListener(new ContactBrowserActionListener());
112d364314c460152db7089b304beec81b3675893baDmitri Plotnikov        } else if (fragment instanceof ContactNoneFragment) {
113d364314c460152db7089b304beec81b3675893baDmitri Plotnikov            mEmptyFragment = (ContactNoneFragment)fragment;
114d364314c460152db7089b304beec81b3675893baDmitri Plotnikov        } else if (fragment instanceof ContactDetailFragment) {
115d364314c460152db7089b304beec81b3675893baDmitri Plotnikov            mDetailFragment = (ContactDetailFragment)fragment;
116d364314c460152db7089b304beec81b3675893baDmitri Plotnikov            mDetailFragment.setListener(mDetailFragmentListener);
117d364314c460152db7089b304beec81b3675893baDmitri Plotnikov        } else if (fragment instanceof ContactEditorFragment) {
118d364314c460152db7089b304beec81b3675893baDmitri Plotnikov            mEditorFragment = (ContactEditorFragment)fragment;
119d364314c460152db7089b304beec81b3675893baDmitri Plotnikov            mEditorFragment.setListener(mEditorFragmentListener);
12092a6fdf1b07b8f1447560174e24455fd46aee7cdDmitri Plotnikov        }
12192a6fdf1b07b8f1447560174e24455fd46aee7cdDmitri Plotnikov    }
12292a6fdf1b07b8f1447560174e24455fd46aee7cdDmitri Plotnikov
12392a6fdf1b07b8f1447560174e24455fd46aee7cdDmitri Plotnikov    @Override
12408e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikov    protected void onCreate(Bundle savedState) {
12508e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikov        super.onCreate(savedState);
1267aa0e4cb91c869108238733ca107d18ccb888df7The Android Open Source Project
12792a6fdf1b07b8f1447560174e24455fd46aee7cdDmitri Plotnikov        if (savedState != null) {
12892a6fdf1b07b8f1447560174e24455fd46aee7cdDmitri Plotnikov            mMode = savedState.getInt(KEY_MODE);
12992a6fdf1b07b8f1447560174e24455fd46aee7cdDmitri Plotnikov        }
13092a6fdf1b07b8f1447560174e24455fd46aee7cdDmitri Plotnikov
1311ce1e7cf261994e46e6fe85ed4d445241ad55f16Dmitri Plotnikov        // Extract relevant information from the intent
1321ce1e7cf261994e46e6fe85ed4d445241ad55f16Dmitri Plotnikov        mRequest = mIntentResolver.resolveIntent(getIntent());
1331ce1e7cf261994e46e6fe85ed4d445241ad55f16Dmitri Plotnikov        if (!mRequest.isValid()) {
1346178cb47846e7efc9c245a9b9ba93032a0038921Dmitri Plotnikov            setResult(RESULT_CANCELED);
1357aa0e4cb91c869108238733ca107d18ccb888df7The Android Open Source Project            finish();
1361ce1e7cf261994e46e6fe85ed4d445241ad55f16Dmitri Plotnikov            return;
1376178cb47846e7efc9c245a9b9ba93032a0038921Dmitri Plotnikov        }
1386178cb47846e7efc9c245a9b9ba93032a0038921Dmitri Plotnikov
1391ce1e7cf261994e46e6fe85ed4d445241ad55f16Dmitri Plotnikov        Intent redirect = mRequest.getRedirectIntent();
1401ce1e7cf261994e46e6fe85ed4d445241ad55f16Dmitri Plotnikov        if (redirect != null) {
1411ce1e7cf261994e46e6fe85ed4d445241ad55f16Dmitri Plotnikov            // Need to start a different activity
1426178cb47846e7efc9c245a9b9ba93032a0038921Dmitri Plotnikov            startActivity(redirect);
1437aa0e4cb91c869108238733ca107d18ccb888df7The Android Open Source Project            finish();
1441ce1e7cf261994e46e6fe85ed4d445241ad55f16Dmitri Plotnikov            return;
1457aa0e4cb91c869108238733ca107d18ccb888df7The Android Open Source Project        }
1467aa0e4cb91c869108238733ca107d18ccb888df7The Android Open Source Project
1471ce1e7cf261994e46e6fe85ed4d445241ad55f16Dmitri Plotnikov        setTitle(mRequest.getActivityTitle());
148e1d4c0617ede33b4b0cdb1137aca971b3dacc747Dmitri Plotnikov        setContentView(R.layout.contact_browser);
1491ce1e7cf261994e46e6fe85ed4d445241ad55f16Dmitri Plotnikov
150e1d4c0617ede33b4b0cdb1137aca971b3dacc747Dmitri Plotnikov        mHasActionBar = getWindow().hasFeature(Window.FEATURE_ACTION_BAR);
15165ad5eedb8f44f11e1d29cce141eddd88c0941b3Dmitri Plotnikov        mContactContentDisplayed = findViewById(R.id.detail_container) != null;
15265ad5eedb8f44f11e1d29cce141eddd88c0941b3Dmitri Plotnikov
153e1d4c0617ede33b4b0cdb1137aca971b3dacc747Dmitri Plotnikov        if (mHasActionBar) {
154fcfdffb439ccf1ddef971109b82e782c47161572Dmitri Plotnikov            mActionBarAdapter = new ActionBarAdapter(this);
155fcfdffb439ccf1ddef971109b82e782c47161572Dmitri Plotnikov            mActionBarAdapter.onCreate(savedState, mRequest);
156fcfdffb439ccf1ddef971109b82e782c47161572Dmitri Plotnikov            mActionBarAdapter.setListener(this);
15708e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikov
158e1d4c0617ede33b4b0cdb1137aca971b3dacc747Dmitri Plotnikov            ActionBar actionBar = getActionBar();
159fcfdffb439ccf1ddef971109b82e782c47161572Dmitri Plotnikov            View navBarView = mActionBarAdapter.onCreateView(getLayoutInflater());
160e1d4c0617ede33b4b0cdb1137aca971b3dacc747Dmitri Plotnikov            actionBar.setCustomNavigationMode(navBarView);
161d364314c460152db7089b304beec81b3675893baDmitri Plotnikov        }
16208e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikov
16308e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikov        configureListFragment();
16408e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikov
165e1d4c0617ede33b4b0cdb1137aca971b3dacc747Dmitri Plotnikov        if (mContactContentDisplayed) {
166e1d4c0617ede33b4b0cdb1137aca971b3dacc747Dmitri Plotnikov            setupContactDetailFragment(mListFragment.getSelectedContactUri());
16708e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikov        }
168e1d4c0617ede33b4b0cdb1137aca971b3dacc747Dmitri Plotnikov    }
16908e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikov
170e1d4c0617ede33b4b0cdb1137aca971b3dacc747Dmitri Plotnikov    private void configureListFragment() {
171e1d4c0617ede33b4b0cdb1137aca971b3dacc747Dmitri Plotnikov        int mode = -1;
172e1d4c0617ede33b4b0cdb1137aca971b3dacc747Dmitri Plotnikov        if (mHasActionBar) {
173fcfdffb439ccf1ddef971109b82e782c47161572Dmitri Plotnikov            mode = mActionBarAdapter.getMode();
174fcfdffb439ccf1ddef971109b82e782c47161572Dmitri Plotnikov            if (mode == ContactBrowserMode.MODE_SEARCH
175fcfdffb439ccf1ddef971109b82e782c47161572Dmitri Plotnikov                    && TextUtils.isEmpty(mActionBarAdapter.getQueryString())) {
176fcfdffb439ccf1ddef971109b82e782c47161572Dmitri Plotnikov                mode = mActionBarAdapter.getDefaultMode();
177e1d4c0617ede33b4b0cdb1137aca971b3dacc747Dmitri Plotnikov            }
178e1d4c0617ede33b4b0cdb1137aca971b3dacc747Dmitri Plotnikov        } else {
179e1d4c0617ede33b4b0cdb1137aca971b3dacc747Dmitri Plotnikov            int actionCode = mRequest.getActionCode();
180e1d4c0617ede33b4b0cdb1137aca971b3dacc747Dmitri Plotnikov            if (actionCode == ContactsRequest.ACTION_FREQUENT ||
181e1d4c0617ede33b4b0cdb1137aca971b3dacc747Dmitri Plotnikov                    actionCode == ContactsRequest.ACTION_STARRED ||
182e1d4c0617ede33b4b0cdb1137aca971b3dacc747Dmitri Plotnikov                    actionCode == ContactsRequest.ACTION_STREQUENT) {
183fcfdffb439ccf1ddef971109b82e782c47161572Dmitri Plotnikov                mode = ContactBrowserMode.MODE_FAVORITES;
184e1d4c0617ede33b4b0cdb1137aca971b3dacc747Dmitri Plotnikov            } else {
185fcfdffb439ccf1ddef971109b82e782c47161572Dmitri Plotnikov                mode = ContactBrowserMode.MODE_CONTACTS;
18608e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikov            }
18708e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikov        }
18808e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikov
189e1d4c0617ede33b4b0cdb1137aca971b3dacc747Dmitri Plotnikov        boolean replaceList = (mode != mMode);
190e1d4c0617ede33b4b0cdb1137aca971b3dacc747Dmitri Plotnikov        if (replaceList) {
191e1d4c0617ede33b4b0cdb1137aca971b3dacc747Dmitri Plotnikov            closeListFragment();
192e1d4c0617ede33b4b0cdb1137aca971b3dacc747Dmitri Plotnikov            mMode = mode;
193e1d4c0617ede33b4b0cdb1137aca971b3dacc747Dmitri Plotnikov            switch (mMode) {
194fcfdffb439ccf1ddef971109b82e782c47161572Dmitri Plotnikov                case ContactBrowserMode.MODE_CONTACTS: {
195e1d4c0617ede33b4b0cdb1137aca971b3dacc747Dmitri Plotnikov                    mListFragment = createListFragment(ContactsRequest.ACTION_DEFAULT);
196e1d4c0617ede33b4b0cdb1137aca971b3dacc747Dmitri Plotnikov                    break;
197e1d4c0617ede33b4b0cdb1137aca971b3dacc747Dmitri Plotnikov                }
198fcfdffb439ccf1ddef971109b82e782c47161572Dmitri Plotnikov                case ContactBrowserMode.MODE_FAVORITES: {
199e1d4c0617ede33b4b0cdb1137aca971b3dacc747Dmitri Plotnikov                    int favoritesAction = mRequest.getActionCode();
200e1d4c0617ede33b4b0cdb1137aca971b3dacc747Dmitri Plotnikov                    if (favoritesAction == ContactsRequest.ACTION_DEFAULT) {
201e1d4c0617ede33b4b0cdb1137aca971b3dacc747Dmitri Plotnikov                        favoritesAction = ContactsRequest.ACTION_STREQUENT;
202e1d4c0617ede33b4b0cdb1137aca971b3dacc747Dmitri Plotnikov                    }
203e1d4c0617ede33b4b0cdb1137aca971b3dacc747Dmitri Plotnikov                    mListFragment = createListFragment(favoritesAction);
204e1d4c0617ede33b4b0cdb1137aca971b3dacc747Dmitri Plotnikov                    break;
205e1d4c0617ede33b4b0cdb1137aca971b3dacc747Dmitri Plotnikov                }
206fcfdffb439ccf1ddef971109b82e782c47161572Dmitri Plotnikov                case ContactBrowserMode.MODE_SEARCH: {
207e1d4c0617ede33b4b0cdb1137aca971b3dacc747Dmitri Plotnikov                    mListFragment = createContactSearchFragment();
208e1d4c0617ede33b4b0cdb1137aca971b3dacc747Dmitri Plotnikov                    break;
20908e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikov                }
21008e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikov            }
21108e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikov        }
21208e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikov
213fcfdffb439ccf1ddef971109b82e782c47161572Dmitri Plotnikov        if (mMode == ContactBrowserMode.MODE_SEARCH) {
214fcfdffb439ccf1ddef971109b82e782c47161572Dmitri Plotnikov            mListFragment.setQueryString(mActionBarAdapter.getQueryString());
215cfc648986f569bde83715584a91f89ed28dd8335Dmitri Plotnikov        }
216cfc648986f569bde83715584a91f89ed28dd8335Dmitri Plotnikov
217e1d4c0617ede33b4b0cdb1137aca971b3dacc747Dmitri Plotnikov        if (mHasActionBar) {
218fcfdffb439ccf1ddef971109b82e782c47161572Dmitri Plotnikov            Bundle savedStateForMode = mActionBarAdapter.getSavedStateForMode(mMode);
219e1d4c0617ede33b4b0cdb1137aca971b3dacc747Dmitri Plotnikov            if (savedStateForMode != null) {
220e1d4c0617ede33b4b0cdb1137aca971b3dacc747Dmitri Plotnikov                mListFragment.restoreSavedState(savedStateForMode);
221e1d4c0617ede33b4b0cdb1137aca971b3dacc747Dmitri Plotnikov            }
222e1d4c0617ede33b4b0cdb1137aca971b3dacc747Dmitri Plotnikov        }
223cfc648986f569bde83715584a91f89ed28dd8335Dmitri Plotnikov
224e1d4c0617ede33b4b0cdb1137aca971b3dacc747Dmitri Plotnikov        if (replaceList) {
225e1d4c0617ede33b4b0cdb1137aca971b3dacc747Dmitri Plotnikov            openFragmentTransaction()
226e1d4c0617ede33b4b0cdb1137aca971b3dacc747Dmitri Plotnikov                    .replace(R.id.list_container, mListFragment)
227e1d4c0617ede33b4b0cdb1137aca971b3dacc747Dmitri Plotnikov                    .commit();
228e1d4c0617ede33b4b0cdb1137aca971b3dacc747Dmitri Plotnikov        }
22908e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikov    }
23008e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikov
23192a6fdf1b07b8f1447560174e24455fd46aee7cdDmitri Plotnikov    private void closeListFragment() {
23292a6fdf1b07b8f1447560174e24455fd46aee7cdDmitri Plotnikov        if (mListFragment != null) {
23392a6fdf1b07b8f1447560174e24455fd46aee7cdDmitri Plotnikov            mListFragment.setOnContactListActionListener(null);
23492a6fdf1b07b8f1447560174e24455fd46aee7cdDmitri Plotnikov
235e1d4c0617ede33b4b0cdb1137aca971b3dacc747Dmitri Plotnikov            if (mHasActionBar) {
23692a6fdf1b07b8f1447560174e24455fd46aee7cdDmitri Plotnikov                Bundle state = new Bundle();
23792a6fdf1b07b8f1447560174e24455fd46aee7cdDmitri Plotnikov                mListFragment.onSaveInstanceState(state);
238fcfdffb439ccf1ddef971109b82e782c47161572Dmitri Plotnikov                mActionBarAdapter.saveStateForMode(mMode, state);
23992a6fdf1b07b8f1447560174e24455fd46aee7cdDmitri Plotnikov            }
240e1d4c0617ede33b4b0cdb1137aca971b3dacc747Dmitri Plotnikov
241e1d4c0617ede33b4b0cdb1137aca971b3dacc747Dmitri Plotnikov            mListFragment = null;
24292a6fdf1b07b8f1447560174e24455fd46aee7cdDmitri Plotnikov        }
24392a6fdf1b07b8f1447560174e24455fd46aee7cdDmitri Plotnikov    }
24492a6fdf1b07b8f1447560174e24455fd46aee7cdDmitri Plotnikov
245d364314c460152db7089b304beec81b3675893baDmitri Plotnikov    private void setupContactDetailFragment(Uri contactLookupUri) {
2469cd1708f333eda622dc6a4fed2a0df9058193a9dDmitri Plotnikov
2479cd1708f333eda622dc6a4fed2a0df9058193a9dDmitri Plotnikov        // If we are already editing this URI - just continue editing
2489cd1708f333eda622dc6a4fed2a0df9058193a9dDmitri Plotnikov        if (mEditorFragment != null && contactLookupUri != null
2499cd1708f333eda622dc6a4fed2a0df9058193a9dDmitri Plotnikov                && contactLookupUri.equals(mEditorFragment.getUri())) {
2509cd1708f333eda622dc6a4fed2a0df9058193a9dDmitri Plotnikov            return;
2519cd1708f333eda622dc6a4fed2a0df9058193a9dDmitri Plotnikov        }
2529cd1708f333eda622dc6a4fed2a0df9058193a9dDmitri Plotnikov
2539cd1708f333eda622dc6a4fed2a0df9058193a9dDmitri Plotnikov        if (mDetailFragment != null && contactLookupUri != null
2549cd1708f333eda622dc6a4fed2a0df9058193a9dDmitri Plotnikov                && contactLookupUri.equals(mDetailFragment.getUri())) {
2559cd1708f333eda622dc6a4fed2a0df9058193a9dDmitri Plotnikov            return;
2569cd1708f333eda622dc6a4fed2a0df9058193a9dDmitri Plotnikov        }
2579cd1708f333eda622dc6a4fed2a0df9058193a9dDmitri Plotnikov
258424440bd932482c0a08b782a570d600051c56eb4Dmitri Plotnikov        // No editor here
259ca98444277723c60be83062cf5a25ec7ca1fdb34Daniel Lehmann        closeEditorFragment(true);
260424440bd932482c0a08b782a570d600051c56eb4Dmitri Plotnikov
261d364314c460152db7089b304beec81b3675893baDmitri Plotnikov        if (contactLookupUri != null) {
262c0ca13a86793082c8969e44c70d4dc8fb83eb1f8Dmitri Plotnikov            // Already showing? Nothing to do
263c0ca13a86793082c8969e44c70d4dc8fb83eb1f8Dmitri Plotnikov            if (mDetailFragment != null) {
264d364314c460152db7089b304beec81b3675893baDmitri Plotnikov                mDetailFragment.loadUri(contactLookupUri);
265c0ca13a86793082c8969e44c70d4dc8fb83eb1f8Dmitri Plotnikov                return;
266c0ca13a86793082c8969e44c70d4dc8fb83eb1f8Dmitri Plotnikov            }
267424440bd932482c0a08b782a570d600051c56eb4Dmitri Plotnikov
268c0ca13a86793082c8969e44c70d4dc8fb83eb1f8Dmitri Plotnikov            closeEmptyFragment();
269424440bd932482c0a08b782a570d600051c56eb4Dmitri Plotnikov
270c0ca13a86793082c8969e44c70d4dc8fb83eb1f8Dmitri Plotnikov            mDetailFragment = new ContactDetailFragment();
271d364314c460152db7089b304beec81b3675893baDmitri Plotnikov            mDetailFragment.loadUri(contactLookupUri);
272c0ca13a86793082c8969e44c70d4dc8fb83eb1f8Dmitri Plotnikov
273c0ca13a86793082c8969e44c70d4dc8fb83eb1f8Dmitri Plotnikov            // Nothing showing yet? Create (this happens during Activity-Startup)
274c0ca13a86793082c8969e44c70d4dc8fb83eb1f8Dmitri Plotnikov            openFragmentTransaction()
275e1d4c0617ede33b4b0cdb1137aca971b3dacc747Dmitri Plotnikov                    .replace(R.id.detail_container, mDetailFragment)
276c0ca13a86793082c8969e44c70d4dc8fb83eb1f8Dmitri Plotnikov                    .commit();
277c0ca13a86793082c8969e44c70d4dc8fb83eb1f8Dmitri Plotnikov        } else {
278c0ca13a86793082c8969e44c70d4dc8fb83eb1f8Dmitri Plotnikov            closeDetailFragment();
279c0ca13a86793082c8969e44c70d4dc8fb83eb1f8Dmitri Plotnikov
280c0ca13a86793082c8969e44c70d4dc8fb83eb1f8Dmitri Plotnikov            mEmptyFragment = new ContactNoneFragment();
281c0ca13a86793082c8969e44c70d4dc8fb83eb1f8Dmitri Plotnikov            openFragmentTransaction()
282e1d4c0617ede33b4b0cdb1137aca971b3dacc747Dmitri Plotnikov                    .replace(R.id.detail_container, mEmptyFragment)
283c0ca13a86793082c8969e44c70d4dc8fb83eb1f8Dmitri Plotnikov                    .commit();
284c0ca13a86793082c8969e44c70d4dc8fb83eb1f8Dmitri Plotnikov        }
285424440bd932482c0a08b782a570d600051c56eb4Dmitri Plotnikov    }
286424440bd932482c0a08b782a570d600051c56eb4Dmitri Plotnikov
28760ad01b47e1073bac4b9299a54673132f4451378Daniel Lehmann    private void setupContactEditorFragment(Uri contactLookupUri) {
288424440bd932482c0a08b782a570d600051c56eb4Dmitri Plotnikov        // No detail view here
289c0ca13a86793082c8969e44c70d4dc8fb83eb1f8Dmitri Plotnikov        closeDetailFragment();
290c0ca13a86793082c8969e44c70d4dc8fb83eb1f8Dmitri Plotnikov        closeEmptyFragment();
291424440bd932482c0a08b782a570d600051c56eb4Dmitri Plotnikov
292424440bd932482c0a08b782a570d600051c56eb4Dmitri Plotnikov        // Already showing? Nothing to do
293424440bd932482c0a08b782a570d600051c56eb4Dmitri Plotnikov        if (mEditorFragment != null) return;
294424440bd932482c0a08b782a570d600051c56eb4Dmitri Plotnikov
295424440bd932482c0a08b782a570d600051c56eb4Dmitri Plotnikov        mEditorFragment = new ContactEditorFragment();
29660ad01b47e1073bac4b9299a54673132f4451378Daniel Lehmann        mEditorFragment.load(Intent.ACTION_EDIT, contactLookupUri,
29760ad01b47e1073bac4b9299a54673132f4451378Daniel Lehmann                Contacts.CONTENT_ITEM_TYPE, new Bundle());
298424440bd932482c0a08b782a570d600051c56eb4Dmitri Plotnikov
299424440bd932482c0a08b782a570d600051c56eb4Dmitri Plotnikov        // Nothing showing yet? Create (this happens during Activity-Startup)
300424440bd932482c0a08b782a570d600051c56eb4Dmitri Plotnikov        openFragmentTransaction()
301e1d4c0617ede33b4b0cdb1137aca971b3dacc747Dmitri Plotnikov                .replace(R.id.detail_container, mEditorFragment)
302424440bd932482c0a08b782a570d600051c56eb4Dmitri Plotnikov                .commit();
303424440bd932482c0a08b782a570d600051c56eb4Dmitri Plotnikov    }
304424440bd932482c0a08b782a570d600051c56eb4Dmitri Plotnikov
305c0ca13a86793082c8969e44c70d4dc8fb83eb1f8Dmitri Plotnikov    private void closeDetailFragment() {
306c0ca13a86793082c8969e44c70d4dc8fb83eb1f8Dmitri Plotnikov        if (mDetailFragment != null) {
307c0ca13a86793082c8969e44c70d4dc8fb83eb1f8Dmitri Plotnikov            mDetailFragment.setListener(null);
308c0ca13a86793082c8969e44c70d4dc8fb83eb1f8Dmitri Plotnikov            mDetailFragment = null;
309c0ca13a86793082c8969e44c70d4dc8fb83eb1f8Dmitri Plotnikov        }
310c0ca13a86793082c8969e44c70d4dc8fb83eb1f8Dmitri Plotnikov    }
311c0ca13a86793082c8969e44c70d4dc8fb83eb1f8Dmitri Plotnikov
312ca98444277723c60be83062cf5a25ec7ca1fdb34Daniel Lehmann    /**
313ca98444277723c60be83062cf5a25ec7ca1fdb34Daniel Lehmann     * Closes the editor, if it is currently open
314ca98444277723c60be83062cf5a25ec7ca1fdb34Daniel Lehmann     * @param save Whether the changes should be saved. This should always be true, unless
315ca98444277723c60be83062cf5a25ec7ca1fdb34Daniel Lehmann     * this is called from a Revert/Undo button
316ca98444277723c60be83062cf5a25ec7ca1fdb34Daniel Lehmann     */
317ca98444277723c60be83062cf5a25ec7ca1fdb34Daniel Lehmann    private void closeEditorFragment(boolean save) {
318c0ca13a86793082c8969e44c70d4dc8fb83eb1f8Dmitri Plotnikov        if (mEditorFragment != null) {
319ca98444277723c60be83062cf5a25ec7ca1fdb34Daniel Lehmann            if (save) mEditorFragment.save();
320c0ca13a86793082c8969e44c70d4dc8fb83eb1f8Dmitri Plotnikov            mEditorFragment.setListener(null);
321c0ca13a86793082c8969e44c70d4dc8fb83eb1f8Dmitri Plotnikov            mEditorFragment = null;
322c0ca13a86793082c8969e44c70d4dc8fb83eb1f8Dmitri Plotnikov        }
323c0ca13a86793082c8969e44c70d4dc8fb83eb1f8Dmitri Plotnikov    }
324c0ca13a86793082c8969e44c70d4dc8fb83eb1f8Dmitri Plotnikov
325c0ca13a86793082c8969e44c70d4dc8fb83eb1f8Dmitri Plotnikov    private void closeEmptyFragment() {
326c0ca13a86793082c8969e44c70d4dc8fb83eb1f8Dmitri Plotnikov        mEmptyFragment = null;
327c0ca13a86793082c8969e44c70d4dc8fb83eb1f8Dmitri Plotnikov    }
328c0ca13a86793082c8969e44c70d4dc8fb83eb1f8Dmitri Plotnikov
329fcfdffb439ccf1ddef971109b82e782c47161572Dmitri Plotnikov    /**
330fcfdffb439ccf1ddef971109b82e782c47161572Dmitri Plotnikov     * Handler for action bar actions.
331fcfdffb439ccf1ddef971109b82e782c47161572Dmitri Plotnikov     */
332fe42e55dfc483b69c8a7831c16fbdbc5ab19929eDmitri Plotnikov    @Override
333fcfdffb439ccf1ddef971109b82e782c47161572Dmitri Plotnikov    public void onAction() {
334e1d4c0617ede33b4b0cdb1137aca971b3dacc747Dmitri Plotnikov        configureListFragment();
335e1d4c0617ede33b4b0cdb1137aca971b3dacc747Dmitri Plotnikov        setupContactDetailFragment(mListFragment.getSelectedContactUri());
336fe42e55dfc483b69c8a7831c16fbdbc5ab19929eDmitri Plotnikov    }
337fe42e55dfc483b69c8a7831c16fbdbc5ab19929eDmitri Plotnikov
338ca98444277723c60be83062cf5a25ec7ca1fdb34Daniel Lehmann    @Override
339ca98444277723c60be83062cf5a25ec7ca1fdb34Daniel Lehmann    protected void onPause() {
340ca98444277723c60be83062cf5a25ec7ca1fdb34Daniel Lehmann        super.onPause();
341ca98444277723c60be83062cf5a25ec7ca1fdb34Daniel Lehmann
342ca98444277723c60be83062cf5a25ec7ca1fdb34Daniel Lehmann        // if anything was left unsaved, save it now
343ca98444277723c60be83062cf5a25ec7ca1fdb34Daniel Lehmann        closeEditorFragment(true);
344ca98444277723c60be83062cf5a25ec7ca1fdb34Daniel Lehmann    }
345ca98444277723c60be83062cf5a25ec7ca1fdb34Daniel Lehmann
3461ce1e7cf261994e46e6fe85ed4d445241ad55f16Dmitri Plotnikov    /**
34708e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikov     * Creates the list fragment for the specified mode.
3481ce1e7cf261994e46e6fe85ed4d445241ad55f16Dmitri Plotnikov     */
34908e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikov    private ContactBrowseListFragment createListFragment(int actionCode) {
35008e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikov        switch (actionCode) {
351b979b4294c14f2bc562a5279910bafb7ac1a92b4Dmitri Plotnikov            case ContactsRequest.ACTION_DEFAULT: {
352238d9847d8f2ace658fb7337c8847a2088ddc9d1Dmitri Plotnikov                DefaultContactBrowseListFragment fragment = new DefaultContactBrowseListFragment();
35308e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikov                fragment.setContactsRequest(mRequest);
3541ce1e7cf261994e46e6fe85ed4d445241ad55f16Dmitri Plotnikov                fragment.setOnContactListActionListener(new ContactBrowserActionListener());
3551ce1e7cf261994e46e6fe85ed4d445241ad55f16Dmitri Plotnikov                fragment.setDisplayWithPhonesOnlyOption(mRequest.getDisplayWithPhonesOnlyOption());
3564cc85dd15d6546bcb2feb587691bfca3f1654d94Dmitri Plotnikov                fragment.setVisibleContactsRestrictionEnabled(mRequest.getDisplayOnlyVisible());
3571ce1e7cf261994e46e6fe85ed4d445241ad55f16Dmitri Plotnikov                fragment.setContextMenuAdapter(new ContactBrowseListContextMenuAdapter(fragment));
3581ce1e7cf261994e46e6fe85ed4d445241ad55f16Dmitri Plotnikov                fragment.setSearchMode(mRequest.isSearchMode());
3591ce1e7cf261994e46e6fe85ed4d445241ad55f16Dmitri Plotnikov                fragment.setQueryString(mRequest.getQueryString());
360e2bbe1db7e21e5c1ade79dd2dc74216f82b65e01Dmitri Plotnikov                fragment.setDirectorySearchEnabled(
361e2bbe1db7e21e5c1ade79dd2dc74216f82b65e01Dmitri Plotnikov                        mRequest.isSearchMode() && mRequest.isDirectorySearchEnabled());
36208e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikov                fragment.setAizyEnabled(!mRequest.isSearchMode());
363e1d4c0617ede33b4b0cdb1137aca971b3dacc747Dmitri Plotnikov                fragment.setSelectionVisible(mContactContentDisplayed);
36408e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikov                return fragment;
3651ce1e7cf261994e46e6fe85ed4d445241ad55f16Dmitri Plotnikov            }
366238d9847d8f2ace658fb7337c8847a2088ddc9d1Dmitri Plotnikov
3671ce1e7cf261994e46e6fe85ed4d445241ad55f16Dmitri Plotnikov            case ContactsRequest.ACTION_GROUP: {
3681ce1e7cf261994e46e6fe85ed4d445241ad55f16Dmitri Plotnikov                throw new UnsupportedOperationException("Not yet implemented");
3691ce1e7cf261994e46e6fe85ed4d445241ad55f16Dmitri Plotnikov            }
370238d9847d8f2ace658fb7337c8847a2088ddc9d1Dmitri Plotnikov
3711ce1e7cf261994e46e6fe85ed4d445241ad55f16Dmitri Plotnikov            case ContactsRequest.ACTION_STARRED: {
3721ce1e7cf261994e46e6fe85ed4d445241ad55f16Dmitri Plotnikov                StrequentContactListFragment fragment = new StrequentContactListFragment();
3731ce1e7cf261994e46e6fe85ed4d445241ad55f16Dmitri Plotnikov                fragment.setOnContactListActionListener(new ContactBrowserActionListener());
3741ce1e7cf261994e46e6fe85ed4d445241ad55f16Dmitri Plotnikov                fragment.setFrequentlyContactedContactsIncluded(false);
3751ce1e7cf261994e46e6fe85ed4d445241ad55f16Dmitri Plotnikov                fragment.setStarredContactsIncluded(true);
376e1d4c0617ede33b4b0cdb1137aca971b3dacc747Dmitri Plotnikov                fragment.setSelectionVisible(mContactContentDisplayed);
37708e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikov                return fragment;
3781ce1e7cf261994e46e6fe85ed4d445241ad55f16Dmitri Plotnikov            }
379238d9847d8f2ace658fb7337c8847a2088ddc9d1Dmitri Plotnikov
3801ce1e7cf261994e46e6fe85ed4d445241ad55f16Dmitri Plotnikov            case ContactsRequest.ACTION_FREQUENT: {
3811ce1e7cf261994e46e6fe85ed4d445241ad55f16Dmitri Plotnikov                StrequentContactListFragment fragment = new StrequentContactListFragment();
3821ce1e7cf261994e46e6fe85ed4d445241ad55f16Dmitri Plotnikov                fragment.setOnContactListActionListener(new ContactBrowserActionListener());
3831ce1e7cf261994e46e6fe85ed4d445241ad55f16Dmitri Plotnikov                fragment.setFrequentlyContactedContactsIncluded(true);
3841ce1e7cf261994e46e6fe85ed4d445241ad55f16Dmitri Plotnikov                fragment.setStarredContactsIncluded(false);
385e1d4c0617ede33b4b0cdb1137aca971b3dacc747Dmitri Plotnikov                fragment.setSelectionVisible(mContactContentDisplayed);
38608e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikov                return fragment;
3871ce1e7cf261994e46e6fe85ed4d445241ad55f16Dmitri Plotnikov            }
388238d9847d8f2ace658fb7337c8847a2088ddc9d1Dmitri Plotnikov
3891ce1e7cf261994e46e6fe85ed4d445241ad55f16Dmitri Plotnikov            case ContactsRequest.ACTION_STREQUENT: {
3901ce1e7cf261994e46e6fe85ed4d445241ad55f16Dmitri Plotnikov                StrequentContactListFragment fragment = new StrequentContactListFragment();
3911ce1e7cf261994e46e6fe85ed4d445241ad55f16Dmitri Plotnikov                fragment.setOnContactListActionListener(new ContactBrowserActionListener());
3921ce1e7cf261994e46e6fe85ed4d445241ad55f16Dmitri Plotnikov                fragment.setFrequentlyContactedContactsIncluded(true);
3931ce1e7cf261994e46e6fe85ed4d445241ad55f16Dmitri Plotnikov                fragment.setStarredContactsIncluded(true);
394e1d4c0617ede33b4b0cdb1137aca971b3dacc747Dmitri Plotnikov                fragment.setSelectionVisible(mContactContentDisplayed);
39508e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikov                return fragment;
3961ce1e7cf261994e46e6fe85ed4d445241ad55f16Dmitri Plotnikov            }
397238d9847d8f2ace658fb7337c8847a2088ddc9d1Dmitri Plotnikov
3981ce1e7cf261994e46e6fe85ed4d445241ad55f16Dmitri Plotnikov            default:
39908e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikov                throw new IllegalStateException("Invalid action code: " + actionCode);
4001ce1e7cf261994e46e6fe85ed4d445241ad55f16Dmitri Plotnikov        }
40108e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikov    }
40208e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikov
40308e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikov    private ContactBrowseListFragment createContactSearchFragment() {
40408e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikov        DefaultContactBrowseListFragment fragment = new DefaultContactBrowseListFragment();
40508e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikov        fragment.setOnContactListActionListener(new ContactBrowserActionListener());
40608e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikov        fragment.setDisplayWithPhonesOnlyOption(ContactsRequest.DISPLAY_ONLY_WITH_PHONES_DISABLED);
40708e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikov        fragment.setVisibleContactsRestrictionEnabled(true);
40808e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikov        fragment.setContextMenuAdapter(new ContactBrowseListContextMenuAdapter(fragment));
40908e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikov        fragment.setSearchMode(true);
41008e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikov        fragment.setDirectorySearchEnabled(true);
41108e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikov        fragment.setAizyEnabled(false);
4120d5774911ea5885f0bbe6256c1d59719b3ca3e35Dmitri Plotnikov        fragment.setSelectionVisible(true);
41308e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikov        return fragment;
4141ce1e7cf261994e46e6fe85ed4d445241ad55f16Dmitri Plotnikov    }
4151323d69c40649914ae2195088573a20cc35da86eDmitri Plotnikov
4161ce1e7cf261994e46e6fe85ed4d445241ad55f16Dmitri Plotnikov    private final class ContactBrowserActionListener implements OnContactBrowserActionListener {
41760ad01b47e1073bac4b9299a54673132f4451378Daniel Lehmann        public void onViewContactAction(Uri contactLookupUri, boolean force) {
418e1d4c0617ede33b4b0cdb1137aca971b3dacc747Dmitri Plotnikov            if (mContactContentDisplayed) {
41960ad01b47e1073bac4b9299a54673132f4451378Daniel Lehmann                if (force) closeEditorFragment(true);
420cfc648986f569bde83715584a91f89ed28dd8335Dmitri Plotnikov                mListFragment.setSelectedContactUri(contactLookupUri);
421d364314c460152db7089b304beec81b3675893baDmitri Plotnikov                setupContactDetailFragment(contactLookupUri);
422424440bd932482c0a08b782a570d600051c56eb4Dmitri Plotnikov            } else {
423424440bd932482c0a08b782a570d600051c56eb4Dmitri Plotnikov                startActivity(new Intent(Intent.ACTION_VIEW, contactLookupUri));
424424440bd932482c0a08b782a570d600051c56eb4Dmitri Plotnikov            }
4251ce1e7cf261994e46e6fe85ed4d445241ad55f16Dmitri Plotnikov        }
426e3fbfd99842607a0c208d0a930878bb54bb91dedDmitri Plotnikov
4271ce1e7cf261994e46e6fe85ed4d445241ad55f16Dmitri Plotnikov        public void onCreateNewContactAction() {
4281ce1e7cf261994e46e6fe85ed4d445241ad55f16Dmitri Plotnikov            Intent intent = new Intent(Intent.ACTION_INSERT, Contacts.CONTENT_URI);
4291ce1e7cf261994e46e6fe85ed4d445241ad55f16Dmitri Plotnikov            Bundle extras = getIntent().getExtras();
4301ce1e7cf261994e46e6fe85ed4d445241ad55f16Dmitri Plotnikov            if (extras != null) {
4311ce1e7cf261994e46e6fe85ed4d445241ad55f16Dmitri Plotnikov                intent.putExtras(extras);
432416b569901ce4c577c1f76c3f29496d1adab29e1Dmitri Plotnikov            }
4331ce1e7cf261994e46e6fe85ed4d445241ad55f16Dmitri Plotnikov            startActivity(intent);
4341ce1e7cf261994e46e6fe85ed4d445241ad55f16Dmitri Plotnikov        }
435416b569901ce4c577c1f76c3f29496d1adab29e1Dmitri Plotnikov
4361ce1e7cf261994e46e6fe85ed4d445241ad55f16Dmitri Plotnikov        public void onEditContactAction(Uri contactLookupUri) {
43760ad01b47e1073bac4b9299a54673132f4451378Daniel Lehmann            if (mContactContentDisplayed) {
43860ad01b47e1073bac4b9299a54673132f4451378Daniel Lehmann                closeEditorFragment(true);
43960ad01b47e1073bac4b9299a54673132f4451378Daniel Lehmann                mListFragment.setSelectedContactUri(contactLookupUri);
44060ad01b47e1073bac4b9299a54673132f4451378Daniel Lehmann                setupContactEditorFragment(contactLookupUri);
44160ad01b47e1073bac4b9299a54673132f4451378Daniel Lehmann            } else {
44260ad01b47e1073bac4b9299a54673132f4451378Daniel Lehmann                Intent intent = new Intent(Intent.ACTION_EDIT, contactLookupUri);
44360ad01b47e1073bac4b9299a54673132f4451378Daniel Lehmann                Bundle extras = getIntent().getExtras();
44460ad01b47e1073bac4b9299a54673132f4451378Daniel Lehmann                if (extras != null) {
44560ad01b47e1073bac4b9299a54673132f4451378Daniel Lehmann                    intent.putExtras(extras);
44660ad01b47e1073bac4b9299a54673132f4451378Daniel Lehmann                }
44760ad01b47e1073bac4b9299a54673132f4451378Daniel Lehmann                startActivity(intent);
4481ce1e7cf261994e46e6fe85ed4d445241ad55f16Dmitri Plotnikov            }
4491ce1e7cf261994e46e6fe85ed4d445241ad55f16Dmitri Plotnikov        }
450413772711054c9fca8bf0c22bc81f613c883ae7eDmitri Plotnikov
4511ce1e7cf261994e46e6fe85ed4d445241ad55f16Dmitri Plotnikov        public void onAddToFavoritesAction(Uri contactUri) {
4521ce1e7cf261994e46e6fe85ed4d445241ad55f16Dmitri Plotnikov            ContentValues values = new ContentValues(1);
4531ce1e7cf261994e46e6fe85ed4d445241ad55f16Dmitri Plotnikov            values.put(Contacts.STARRED, 1);
4541ce1e7cf261994e46e6fe85ed4d445241ad55f16Dmitri Plotnikov            getContentResolver().update(contactUri, values, null, null);
4551ce1e7cf261994e46e6fe85ed4d445241ad55f16Dmitri Plotnikov        }
4568a7831944232fd01740492b39bc67d746213b82bDmitri Plotnikov
4571ce1e7cf261994e46e6fe85ed4d445241ad55f16Dmitri Plotnikov        public void onRemoveFromFavoritesAction(Uri contactUri) {
4581ce1e7cf261994e46e6fe85ed4d445241ad55f16Dmitri Plotnikov            ContentValues values = new ContentValues(1);
4591ce1e7cf261994e46e6fe85ed4d445241ad55f16Dmitri Plotnikov            values.put(Contacts.STARRED, 0);
4601ce1e7cf261994e46e6fe85ed4d445241ad55f16Dmitri Plotnikov            getContentResolver().update(contactUri, values, null, null);
4611ce1e7cf261994e46e6fe85ed4d445241ad55f16Dmitri Plotnikov        }
462416b569901ce4c577c1f76c3f29496d1adab29e1Dmitri Plotnikov
4631ce1e7cf261994e46e6fe85ed4d445241ad55f16Dmitri Plotnikov        public void onCallContactAction(Uri contactUri) {
464b4e8886bcb25cde3b03eedcc815c0166329af3a4Dmitri Plotnikov            getPhoneNumberCallInteraction().startInteraction(contactUri);
4651ce1e7cf261994e46e6fe85ed4d445241ad55f16Dmitri Plotnikov        }
466416b569901ce4c577c1f76c3f29496d1adab29e1Dmitri Plotnikov
4671ce1e7cf261994e46e6fe85ed4d445241ad55f16Dmitri Plotnikov        public void onSmsContactAction(Uri contactUri) {
468b4e8886bcb25cde3b03eedcc815c0166329af3a4Dmitri Plotnikov            getSendTextMessageInteraction().startInteraction(contactUri);
4691ce1e7cf261994e46e6fe85ed4d445241ad55f16Dmitri Plotnikov        }
470e3fbfd99842607a0c208d0a930878bb54bb91dedDmitri Plotnikov
4711ce1e7cf261994e46e6fe85ed4d445241ad55f16Dmitri Plotnikov        public void onDeleteContactAction(Uri contactUri) {
4729692f2664e678b0a264c586c70cc4a9c0ffabc21Dmitri Plotnikov            getContactDeletionInteraction().deleteContact(contactUri);
4731ce1e7cf261994e46e6fe85ed4d445241ad55f16Dmitri Plotnikov        }
4748a7831944232fd01740492b39bc67d746213b82bDmitri Plotnikov
4751ce1e7cf261994e46e6fe85ed4d445241ad55f16Dmitri Plotnikov        public void onFinishAction() {
4761ce1e7cf261994e46e6fe85ed4d445241ad55f16Dmitri Plotnikov            onBackPressed();
4771ce1e7cf261994e46e6fe85ed4d445241ad55f16Dmitri Plotnikov        }
4781ce1e7cf261994e46e6fe85ed4d445241ad55f16Dmitri Plotnikov    }
479416b569901ce4c577c1f76c3f29496d1adab29e1Dmitri Plotnikov
480424440bd932482c0a08b782a570d600051c56eb4Dmitri Plotnikov    private class DetailFragmentListener implements ContactDetailFragment.Listener {
48169e7fec6dd8a3d24054863c6c648512577fce35cDaniel Lehmann        @Override
482424440bd932482c0a08b782a570d600051c56eb4Dmitri Plotnikov        public void onContactNotFound() {
48369e7fec6dd8a3d24054863c6c648512577fce35cDaniel Lehmann            setupContactDetailFragment(null);
484424440bd932482c0a08b782a570d600051c56eb4Dmitri Plotnikov        }
485424440bd932482c0a08b782a570d600051c56eb4Dmitri Plotnikov
48669e7fec6dd8a3d24054863c6c648512577fce35cDaniel Lehmann        @Override
487424440bd932482c0a08b782a570d600051c56eb4Dmitri Plotnikov        public void onEditRequested(Uri contactLookupUri) {
48860ad01b47e1073bac4b9299a54673132f4451378Daniel Lehmann            setupContactEditorFragment(contactLookupUri);
489424440bd932482c0a08b782a570d600051c56eb4Dmitri Plotnikov        }
490424440bd932482c0a08b782a570d600051c56eb4Dmitri Plotnikov
49169e7fec6dd8a3d24054863c6c648512577fce35cDaniel Lehmann        @Override
492424440bd932482c0a08b782a570d600051c56eb4Dmitri Plotnikov        public void onItemClicked(Intent intent) {
493424440bd932482c0a08b782a570d600051c56eb4Dmitri Plotnikov            startActivity(intent);
494424440bd932482c0a08b782a570d600051c56eb4Dmitri Plotnikov        }
495424440bd932482c0a08b782a570d600051c56eb4Dmitri Plotnikov
49669e7fec6dd8a3d24054863c6c648512577fce35cDaniel Lehmann        @Override
49769e7fec6dd8a3d24054863c6c648512577fce35cDaniel Lehmann        public void onDeleteRequested(Uri contactLookupUri) {
49869e7fec6dd8a3d24054863c6c648512577fce35cDaniel Lehmann            getContactDeletionInteraction().deleteContact(contactLookupUri);
499424440bd932482c0a08b782a570d600051c56eb4Dmitri Plotnikov        }
500424440bd932482c0a08b782a570d600051c56eb4Dmitri Plotnikov    }
501424440bd932482c0a08b782a570d600051c56eb4Dmitri Plotnikov
502424440bd932482c0a08b782a570d600051c56eb4Dmitri Plotnikov    private class EditorFragmentListener implements ContactEditorFragment.Listener {
503424440bd932482c0a08b782a570d600051c56eb4Dmitri Plotnikov        @Override
50422fb2053fe2bfe98376bf1a0e564f23ae9cecdedDaniel Lehmann        public void onReverted() {
505ca98444277723c60be83062cf5a25ec7ca1fdb34Daniel Lehmann            final Uri uri = mEditorFragment.getUri();
506ca98444277723c60be83062cf5a25ec7ca1fdb34Daniel Lehmann            closeEditorFragment(false);
507ca98444277723c60be83062cf5a25ec7ca1fdb34Daniel Lehmann            setupContactDetailFragment(uri);
508424440bd932482c0a08b782a570d600051c56eb4Dmitri Plotnikov        }
509424440bd932482c0a08b782a570d600051c56eb4Dmitri Plotnikov
510424440bd932482c0a08b782a570d600051c56eb4Dmitri Plotnikov        @Override
51122fb2053fe2bfe98376bf1a0e564f23ae9cecdedDaniel Lehmann        public void onSaveFinished(int resultCode, Intent resultIntent) {
512ca98444277723c60be83062cf5a25ec7ca1fdb34Daniel Lehmann            // it is already saved, so no need to save again here
513ca98444277723c60be83062cf5a25ec7ca1fdb34Daniel Lehmann            final Uri uri = mEditorFragment.getUri();
514ca98444277723c60be83062cf5a25ec7ca1fdb34Daniel Lehmann            closeEditorFragment(false);
515ca98444277723c60be83062cf5a25ec7ca1fdb34Daniel Lehmann            setupContactDetailFragment(uri);
516424440bd932482c0a08b782a570d600051c56eb4Dmitri Plotnikov        }
517424440bd932482c0a08b782a570d600051c56eb4Dmitri Plotnikov
518424440bd932482c0a08b782a570d600051c56eb4Dmitri Plotnikov        @Override
51922fb2053fe2bfe98376bf1a0e564f23ae9cecdedDaniel Lehmann        public void onSplit() {
520ca98444277723c60be83062cf5a25ec7ca1fdb34Daniel Lehmann            Toast.makeText(ContactBrowserActivity.this, "closeAfterSplit",
521ca98444277723c60be83062cf5a25ec7ca1fdb34Daniel Lehmann                    Toast.LENGTH_LONG).show();
522424440bd932482c0a08b782a570d600051c56eb4Dmitri Plotnikov        }
523424440bd932482c0a08b782a570d600051c56eb4Dmitri Plotnikov
524424440bd932482c0a08b782a570d600051c56eb4Dmitri Plotnikov        @Override
52522fb2053fe2bfe98376bf1a0e564f23ae9cecdedDaniel Lehmann        public void onAccountSelectorAborted() {
526cfa39004ed111f131bfb7d8841d5b9a9ee8221fbDmitri Plotnikov            Toast.makeText(ContactBrowserActivity.this, "closeBecauseAccountSelectorAborted",
527424440bd932482c0a08b782a570d600051c56eb4Dmitri Plotnikov                    Toast.LENGTH_LONG).show();
528424440bd932482c0a08b782a570d600051c56eb4Dmitri Plotnikov        }
529424440bd932482c0a08b782a570d600051c56eb4Dmitri Plotnikov
530424440bd932482c0a08b782a570d600051c56eb4Dmitri Plotnikov        @Override
53122fb2053fe2bfe98376bf1a0e564f23ae9cecdedDaniel Lehmann        public void onContactNotFound() {
532cfa39004ed111f131bfb7d8841d5b9a9ee8221fbDmitri Plotnikov            Toast.makeText(ContactBrowserActivity.this, "closeBecauseContactNotFound",
533424440bd932482c0a08b782a570d600051c56eb4Dmitri Plotnikov                    Toast.LENGTH_LONG).show();
534424440bd932482c0a08b782a570d600051c56eb4Dmitri Plotnikov        }
535424440bd932482c0a08b782a570d600051c56eb4Dmitri Plotnikov
536424440bd932482c0a08b782a570d600051c56eb4Dmitri Plotnikov        @Override
537424440bd932482c0a08b782a570d600051c56eb4Dmitri Plotnikov        public void setTitleTo(int resourceId) {
538424440bd932482c0a08b782a570d600051c56eb4Dmitri Plotnikov        }
539424440bd932482c0a08b782a570d600051c56eb4Dmitri Plotnikov    }
540424440bd932482c0a08b782a570d600051c56eb4Dmitri Plotnikov
541732f65236e7f804941e84757c077a84eb11eab16Dmitri Plotnikov    public void startActivityAndForwardResult(final Intent intent) {
542732f65236e7f804941e84757c077a84eb11eab16Dmitri Plotnikov        intent.setFlags(Intent.FLAG_ACTIVITY_FORWARD_RESULT);
543732f65236e7f804941e84757c077a84eb11eab16Dmitri Plotnikov
544732f65236e7f804941e84757c077a84eb11eab16Dmitri Plotnikov        // Forward extras to the new activity
545732f65236e7f804941e84757c077a84eb11eab16Dmitri Plotnikov        Bundle extras = getIntent().getExtras();
546732f65236e7f804941e84757c077a84eb11eab16Dmitri Plotnikov        if (extras != null) {
547732f65236e7f804941e84757c077a84eb11eab16Dmitri Plotnikov            intent.putExtras(extras);
548732f65236e7f804941e84757c077a84eb11eab16Dmitri Plotnikov        }
549732f65236e7f804941e84757c077a84eb11eab16Dmitri Plotnikov        startActivity(intent);
550732f65236e7f804941e84757c077a84eb11eab16Dmitri Plotnikov        finish();
551732f65236e7f804941e84757c077a84eb11eab16Dmitri Plotnikov    }
552732f65236e7f804941e84757c077a84eb11eab16Dmitri Plotnikov
5537aa0e4cb91c869108238733ca107d18ccb888df7The Android Open Source Project    @Override
5547aa0e4cb91c869108238733ca107d18ccb888df7The Android Open Source Project    public boolean onCreateOptionsMenu(Menu menu) {
555d9798aefc844dd9ce29da085cb8ab7e769f63e75Jeff Sharkey        super.onCreateOptionsMenu(menu);
556d9798aefc844dd9ce29da085cb8ab7e769f63e75Jeff Sharkey
557d3758b00601ce3ff8c4336b45cc1249806e52c13Dmitri Plotnikov        MenuInflater inflater = getMenuInflater();
558fcfdffb439ccf1ddef971109b82e782c47161572Dmitri Plotnikov        if (mHasActionBar) {
5594af3b0710ac6f08450b723a3784495469e45ba05Dmitri Plotnikov            inflater.inflate(R.menu.actions, menu);
5604af3b0710ac6f08450b723a3784495469e45ba05Dmitri Plotnikov            return true;
56108e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikov        } else if (mRequest.getActionCode() == ContactsRequest.ACTION_DEFAULT ||
56208e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikov                mRequest.getActionCode() == ContactsRequest.ACTION_STREQUENT) {
5631ce1e7cf261994e46e6fe85ed4d445241ad55f16Dmitri Plotnikov            inflater.inflate(R.menu.list, menu);
564d3758b00601ce3ff8c4336b45cc1249806e52c13Dmitri Plotnikov            return true;
565d3758b00601ce3ff8c4336b45cc1249806e52c13Dmitri Plotnikov        } else if (!mListFragment.isSearchMode()) {
566d3758b00601ce3ff8c4336b45cc1249806e52c13Dmitri Plotnikov            inflater.inflate(R.menu.search, menu);
567d3758b00601ce3ff8c4336b45cc1249806e52c13Dmitri Plotnikov            return true;
568d3758b00601ce3ff8c4336b45cc1249806e52c13Dmitri Plotnikov        } else {
569d3758b00601ce3ff8c4336b45cc1249806e52c13Dmitri Plotnikov            return false;
5707aa0e4cb91c869108238733ca107d18ccb888df7The Android Open Source Project        }
571d9798aefc844dd9ce29da085cb8ab7e769f63e75Jeff Sharkey    }
5727aa0e4cb91c869108238733ca107d18ccb888df7The Android Open Source Project
573d9798aefc844dd9ce29da085cb8ab7e769f63e75Jeff Sharkey    @Override
574d9798aefc844dd9ce29da085cb8ab7e769f63e75Jeff Sharkey    public boolean onPrepareOptionsMenu(Menu menu) {
575d3758b00601ce3ff8c4336b45cc1249806e52c13Dmitri Plotnikov        MenuItem displayGroups = menu.findItem(R.id.menu_display_groups);
576d3758b00601ce3ff8c4336b45cc1249806e52c13Dmitri Plotnikov        if (displayGroups != null) {
577d3758b00601ce3ff8c4336b45cc1249806e52c13Dmitri Plotnikov            displayGroups.setVisible(
57808e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikov                    mRequest.getActionCode() == ContactsRequest.ACTION_DEFAULT);
5794af3b0710ac6f08450b723a3784495469e45ba05Dmitri Plotnikov        }
580d9798aefc844dd9ce29da085cb8ab7e769f63e75Jeff Sharkey        return true;
5817aa0e4cb91c869108238733ca107d18ccb888df7The Android Open Source Project    }
5827aa0e4cb91c869108238733ca107d18ccb888df7The Android Open Source Project
5837aa0e4cb91c869108238733ca107d18ccb888df7The Android Open Source Project    @Override
5847aa0e4cb91c869108238733ca107d18ccb888df7The Android Open Source Project    public boolean onOptionsItemSelected(MenuItem item) {
5857aa0e4cb91c869108238733ca107d18ccb888df7The Android Open Source Project        switch (item.getItemId()) {
586d9798aefc844dd9ce29da085cb8ab7e769f63e75Jeff Sharkey            case R.id.menu_display_groups: {
5871ea45f2fa000d6f35b3b2918d4d22dc5aa7b8f4fDmitri Plotnikov                final Intent intent = new Intent(this, ContactsPreferencesActivity.class);
588d5c5b9a8ec06b510066b8f814bda739a8fadcf7eJeff Sharkey                startActivityForResult(intent, SUBACTIVITY_DISPLAY_GROUP);
5897aa0e4cb91c869108238733ca107d18ccb888df7The Android Open Source Project                return true;
590d9798aefc844dd9ce29da085cb8ab7e769f63e75Jeff Sharkey            }
591d9798aefc844dd9ce29da085cb8ab7e769f63e75Jeff Sharkey            case R.id.menu_search: {
5928e86b75681659ce124e89f73d0410efe39025d11Dmitri Plotnikov                onSearchRequested();
5937aa0e4cb91c869108238733ca107d18ccb888df7The Android Open Source Project                return true;
594d9798aefc844dd9ce29da085cb8ab7e769f63e75Jeff Sharkey            }
595d9798aefc844dd9ce29da085cb8ab7e769f63e75Jeff Sharkey            case R.id.menu_add: {
596d9798aefc844dd9ce29da085cb8ab7e769f63e75Jeff Sharkey                final Intent intent = new Intent(Intent.ACTION_INSERT, Contacts.CONTENT_URI);
59722fb2053fe2bfe98376bf1a0e564f23ae9cecdedDaniel Lehmann                startActivityForResult(intent, SUBACTIVITY_NEW_CONTACT);
598d9798aefc844dd9ce29da085cb8ab7e769f63e75Jeff Sharkey                return true;
599d9798aefc844dd9ce29da085cb8ab7e769f63e75Jeff Sharkey            }
60049d17b3e7692ae9442c342db236fa93d4a837c28Jeff Sharkey            case R.id.menu_import_export: {
601aa1dffe03f6cb3d147556cf53cbf23ad86852cabDmitri Plotnikov                getImportExportInteraction().startInteraction();
602d9798aefc844dd9ce29da085cb8ab7e769f63e75Jeff Sharkey                return true;
603d9798aefc844dd9ce29da085cb8ab7e769f63e75Jeff Sharkey            }
604d9798aefc844dd9ce29da085cb8ab7e769f63e75Jeff Sharkey            case R.id.menu_accounts: {
605d9798aefc844dd9ce29da085cb8ab7e769f63e75Jeff Sharkey                final Intent intent = new Intent(Settings.ACTION_SYNC_SETTINGS);
606fe42e55dfc483b69c8a7831c16fbdbc5ab19929eDmitri Plotnikov                intent.putExtra(Settings.EXTRA_AUTHORITIES, new String[] {
607d9798aefc844dd9ce29da085cb8ab7e769f63e75Jeff Sharkey                    ContactsContract.AUTHORITY
608d9798aefc844dd9ce29da085cb8ab7e769f63e75Jeff Sharkey                });
609d9798aefc844dd9ce29da085cb8ab7e769f63e75Jeff Sharkey                startActivity(intent);
610d9798aefc844dd9ce29da085cb8ab7e769f63e75Jeff Sharkey                return true;
611d9798aefc844dd9ce29da085cb8ab7e769f63e75Jeff Sharkey            }
6127aa0e4cb91c869108238733ca107d18ccb888df7The Android Open Source Project        }
6137aa0e4cb91c869108238733ca107d18ccb888df7The Android Open Source Project        return false;
6147aa0e4cb91c869108238733ca107d18ccb888df7The Android Open Source Project    }
6157aa0e4cb91c869108238733ca107d18ccb888df7The Android Open Source Project
6168e86b75681659ce124e89f73d0410efe39025d11Dmitri Plotnikov    @Override
6178e86b75681659ce124e89f73d0410efe39025d11Dmitri Plotnikov    public void startSearch(String initialQuery, boolean selectInitialQuery, Bundle appSearchData,
6188e86b75681659ce124e89f73d0410efe39025d11Dmitri Plotnikov            boolean globalSearch) {
61912def9de851b8803b95038694563770104306864Dmitri Plotnikov// TODO
62012def9de851b8803b95038694563770104306864Dmitri Plotnikov//        if (mProviderStatus != ProviderStatus.STATUS_NORMAL) {
62112def9de851b8803b95038694563770104306864Dmitri Plotnikov//            return;
62212def9de851b8803b95038694563770104306864Dmitri Plotnikov//        }
6233b73d8b49e07b93b80a4f363a40c0680377f5225Dmitri Plotnikov
6248e86b75681659ce124e89f73d0410efe39025d11Dmitri Plotnikov        if (globalSearch) {
6258e86b75681659ce124e89f73d0410efe39025d11Dmitri Plotnikov            super.startSearch(initialQuery, selectInitialQuery, appSearchData, globalSearch);
6268e86b75681659ce124e89f73d0410efe39025d11Dmitri Plotnikov        } else {
627d3758b00601ce3ff8c4336b45cc1249806e52c13Dmitri Plotnikov            mListFragment.startSearch(initialQuery);
628db3d143dba9a0a9e3fb4cb57f27e619fee98e845Dmitri Plotnikov        }
629db3d143dba9a0a9e3fb4cb57f27e619fee98e845Dmitri Plotnikov    }
630db3d143dba9a0a9e3fb4cb57f27e619fee98e845Dmitri Plotnikov
63149d17b3e7692ae9442c342db236fa93d4a837c28Jeff Sharkey    @Override
6323b73d8b49e07b93b80a4f363a40c0680377f5225Dmitri Plotnikov    protected Dialog onCreateDialog(int id, Bundle bundle) {
6333b7d5949bfa524534e5d1aa29b8eaff8733ae00cDaniel Lehmann        if (DialogManager.isManagedId(id)) return mDialogManager.onCreateDialog(id, bundle);
6343391dbed3575b3454c2bebf35dae4a19d8f987f2Daniel Lehmann
6359692f2664e678b0a264c586c70cc4a9c0ffabc21Dmitri Plotnikov        Dialog dialog = getContactDeletionInteraction().onCreateDialog(id, bundle);
6369692f2664e678b0a264c586c70cc4a9c0ffabc21Dmitri Plotnikov        if (dialog != null) {
6379692f2664e678b0a264c586c70cc4a9c0ffabc21Dmitri Plotnikov            return dialog;
6389692f2664e678b0a264c586c70cc4a9c0ffabc21Dmitri Plotnikov        }
6399692f2664e678b0a264c586c70cc4a9c0ffabc21Dmitri Plotnikov
640b4e8886bcb25cde3b03eedcc815c0166329af3a4Dmitri Plotnikov        dialog = getPhoneNumberCallInteraction().onCreateDialog(id, bundle);
641b4e8886bcb25cde3b03eedcc815c0166329af3a4Dmitri Plotnikov        if (dialog != null) {
642b4e8886bcb25cde3b03eedcc815c0166329af3a4Dmitri Plotnikov            return dialog;
643b4e8886bcb25cde3b03eedcc815c0166329af3a4Dmitri Plotnikov        }
644b4e8886bcb25cde3b03eedcc815c0166329af3a4Dmitri Plotnikov
645b4e8886bcb25cde3b03eedcc815c0166329af3a4Dmitri Plotnikov        dialog = getSendTextMessageInteraction().onCreateDialog(id, bundle);
646b4e8886bcb25cde3b03eedcc815c0166329af3a4Dmitri Plotnikov        if (dialog != null) {
647b4e8886bcb25cde3b03eedcc815c0166329af3a4Dmitri Plotnikov            return dialog;
648b4e8886bcb25cde3b03eedcc815c0166329af3a4Dmitri Plotnikov        }
649b4e8886bcb25cde3b03eedcc815c0166329af3a4Dmitri Plotnikov
650aa1dffe03f6cb3d147556cf53cbf23ad86852cabDmitri Plotnikov        dialog = getImportExportInteraction().onCreateDialog(id, bundle);
651aa1dffe03f6cb3d147556cf53cbf23ad86852cabDmitri Plotnikov        if (dialog != null) {
652aa1dffe03f6cb3d147556cf53cbf23ad86852cabDmitri Plotnikov            return dialog;
65349d17b3e7692ae9442c342db236fa93d4a837c28Jeff Sharkey        }
654aa1dffe03f6cb3d147556cf53cbf23ad86852cabDmitri Plotnikov
6553b73d8b49e07b93b80a4f363a40c0680377f5225Dmitri Plotnikov        return super.onCreateDialog(id, bundle);
65649d17b3e7692ae9442c342db236fa93d4a837c28Jeff Sharkey    }
65749d17b3e7692ae9442c342db236fa93d4a837c28Jeff Sharkey
6589692f2664e678b0a264c586c70cc4a9c0ffabc21Dmitri Plotnikov    @Override
6599692f2664e678b0a264c586c70cc4a9c0ffabc21Dmitri Plotnikov    protected void onPrepareDialog(int id, Dialog dialog, Bundle bundle) {
6609692f2664e678b0a264c586c70cc4a9c0ffabc21Dmitri Plotnikov        if (getContactDeletionInteraction().onPrepareDialog(id, dialog, bundle)) {
6619692f2664e678b0a264c586c70cc4a9c0ffabc21Dmitri Plotnikov            return;
6629692f2664e678b0a264c586c70cc4a9c0ffabc21Dmitri Plotnikov        }
6639692f2664e678b0a264c586c70cc4a9c0ffabc21Dmitri Plotnikov
664b4e8886bcb25cde3b03eedcc815c0166329af3a4Dmitri Plotnikov        if (getPhoneNumberCallInteraction().onPrepareDialog(id, dialog, bundle)) {
665b4e8886bcb25cde3b03eedcc815c0166329af3a4Dmitri Plotnikov            return;
666b4e8886bcb25cde3b03eedcc815c0166329af3a4Dmitri Plotnikov        }
667b4e8886bcb25cde3b03eedcc815c0166329af3a4Dmitri Plotnikov
668b4e8886bcb25cde3b03eedcc815c0166329af3a4Dmitri Plotnikov        if (getSendTextMessageInteraction().onPrepareDialog(id, dialog, bundle)) {
669b4e8886bcb25cde3b03eedcc815c0166329af3a4Dmitri Plotnikov            return;
670b4e8886bcb25cde3b03eedcc815c0166329af3a4Dmitri Plotnikov        }
671b4e8886bcb25cde3b03eedcc815c0166329af3a4Dmitri Plotnikov
6729692f2664e678b0a264c586c70cc4a9c0ffabc21Dmitri Plotnikov        super.onPrepareDialog(id, dialog, bundle);
6739692f2664e678b0a264c586c70cc4a9c0ffabc21Dmitri Plotnikov    }
674d9798aefc844dd9ce29da085cb8ab7e769f63e75Jeff Sharkey
675d3758b00601ce3ff8c4336b45cc1249806e52c13Dmitri Plotnikov    @Override
676d3758b00601ce3ff8c4336b45cc1249806e52c13Dmitri Plotnikov    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
677d3758b00601ce3ff8c4336b45cc1249806e52c13Dmitri Plotnikov        switch (requestCode) {
67822fb2053fe2bfe98376bf1a0e564f23ae9cecdedDaniel Lehmann            case SUBACTIVITY_NEW_CONTACT: {
67922fb2053fe2bfe98376bf1a0e564f23ae9cecdedDaniel Lehmann                if (resultCode == RESULT_OK && mContactContentDisplayed) {
68022fb2053fe2bfe98376bf1a0e564f23ae9cecdedDaniel Lehmann                    final Uri newContactUri = data.getData();
68122fb2053fe2bfe98376bf1a0e564f23ae9cecdedDaniel Lehmann                    mListFragment.setSelectedContactUri(newContactUri);
68222fb2053fe2bfe98376bf1a0e564f23ae9cecdedDaniel Lehmann                    setupContactDetailFragment(newContactUri);
68322fb2053fe2bfe98376bf1a0e564f23ae9cecdedDaniel Lehmann                }
68422fb2053fe2bfe98376bf1a0e564f23ae9cecdedDaniel Lehmann                break;
68522fb2053fe2bfe98376bf1a0e564f23ae9cecdedDaniel Lehmann            }
686d3758b00601ce3ff8c4336b45cc1249806e52c13Dmitri Plotnikov
6877aa9b2888e4f630c6311458ea27ecbc13a527b00Daniel Lehmann            case SUBACTIVITY_DISPLAY_GROUP:
6887aa9b2888e4f630c6311458ea27ecbc13a527b00Daniel Lehmann                // TODO: Force the ListFragment to reload its setting and update (don't lookup
6897aa9b2888e4f630c6311458ea27ecbc13a527b00Daniel Lehmann                // directories here)
6907aa9b2888e4f630c6311458ea27ecbc13a527b00Daniel Lehmann                break;
6917aa9b2888e4f630c6311458ea27ecbc13a527b00Daniel Lehmann
6927aa9b2888e4f630c6311458ea27ecbc13a527b00Daniel Lehmann            // TODO: Using the new startActivityWithResultFromFragment API this should not be needed
6937aa9b2888e4f630c6311458ea27ecbc13a527b00Daniel Lehmann            // anymore
694e8a9517483cfa0c4d521b834d872a8cb05482badDmitri Plotnikov            case ContactEntryListFragment.ACTIVITY_REQUEST_CODE_PICKER:
695d3758b00601ce3ff8c4336b45cc1249806e52c13Dmitri Plotnikov                if (resultCode == RESULT_OK) {
696e8a9517483cfa0c4d521b834d872a8cb05482badDmitri Plotnikov                    mListFragment.onPickerResult(data);
697d3758b00601ce3ff8c4336b45cc1249806e52c13Dmitri Plotnikov                }
698d3758b00601ce3ff8c4336b45cc1249806e52c13Dmitri Plotnikov
699d3758b00601ce3ff8c4336b45cc1249806e52c13Dmitri Plotnikov// TODO fix or remove multipicker code
700d3758b00601ce3ff8c4336b45cc1249806e52c13Dmitri Plotnikov//                else if (resultCode == RESULT_CANCELED && mMode == MODE_PICK_MULTIPLE_PHONES) {
7011ce1e7cf261994e46e6fe85ed4d445241ad55f16Dmitri Plotnikov//                    // Finish the activity if the sub activity was canceled as back key is used
7021ce1e7cf261994e46e6fe85ed4d445241ad55f16Dmitri Plotnikov//                    // to confirm user selection in MODE_PICK_MULTIPLE_PHONES.
7031ce1e7cf261994e46e6fe85ed4d445241ad55f16Dmitri Plotnikov//                    finish();
7041ce1e7cf261994e46e6fe85ed4d445241ad55f16Dmitri Plotnikov//                }
7051ce1e7cf261994e46e6fe85ed4d445241ad55f16Dmitri Plotnikov//                break;
706d3758b00601ce3ff8c4336b45cc1249806e52c13Dmitri Plotnikov        }
707d3758b00601ce3ff8c4336b45cc1249806e52c13Dmitri Plotnikov    }
7087aa0e4cb91c869108238733ca107d18ccb888df7The Android Open Source Project
7097aa0e4cb91c869108238733ca107d18ccb888df7The Android Open Source Project    @Override
7107aa0e4cb91c869108238733ca107d18ccb888df7The Android Open Source Project    public boolean onContextItemSelected(MenuItem item) {
711502741df555dc7cf59a10885272d432940ae35adDmitri Plotnikov        ContextMenuAdapter menuAdapter = mListFragment.getContextMenuAdapter();
712502741df555dc7cf59a10885272d432940ae35adDmitri Plotnikov        if (menuAdapter != null) {
713502741df555dc7cf59a10885272d432940ae35adDmitri Plotnikov            return menuAdapter.onContextItemSelected(item);
7147aa0e4cb91c869108238733ca107d18ccb888df7The Android Open Source Project        }
7157aa0e4cb91c869108238733ca107d18ccb888df7The Android Open Source Project
7167aa0e4cb91c869108238733ca107d18ccb888df7The Android Open Source Project        return super.onContextItemSelected(item);
7177aa0e4cb91c869108238733ca107d18ccb888df7The Android Open Source Project    }
7187aa0e4cb91c869108238733ca107d18ccb888df7The Android Open Source Project
7197aa0e4cb91c869108238733ca107d18ccb888df7The Android Open Source Project    @Override
7207aa0e4cb91c869108238733ca107d18ccb888df7The Android Open Source Project    public boolean onKeyDown(int keyCode, KeyEvent event) {
7211ce1e7cf261994e46e6fe85ed4d445241ad55f16Dmitri Plotnikov        // TODO move to the fragment
7227aa0e4cb91c869108238733ca107d18ccb888df7The Android Open Source Project        switch (keyCode) {
7231ce1e7cf261994e46e6fe85ed4d445241ad55f16Dmitri Plotnikov//            case KeyEvent.KEYCODE_CALL: {
7241ce1e7cf261994e46e6fe85ed4d445241ad55f16Dmitri Plotnikov//                if (callSelection()) {
7251ce1e7cf261994e46e6fe85ed4d445241ad55f16Dmitri Plotnikov//                    return true;
7261ce1e7cf261994e46e6fe85ed4d445241ad55f16Dmitri Plotnikov//                }
7271ce1e7cf261994e46e6fe85ed4d445241ad55f16Dmitri Plotnikov//                break;
7281ce1e7cf261994e46e6fe85ed4d445241ad55f16Dmitri Plotnikov//            }
729db3d143dba9a0a9e3fb4cb57f27e619fee98e845Dmitri Plotnikov
7307aa0e4cb91c869108238733ca107d18ccb888df7The Android Open Source Project            case KeyEvent.KEYCODE_DEL: {
7316c776bcfa3bde9b5a94dddac8f6ebde1f358a796Dmitri Plotnikov                if (deleteSelection()) {
7327aa0e4cb91c869108238733ca107d18ccb888df7The Android Open Source Project                    return true;
7337aa0e4cb91c869108238733ca107d18ccb888df7The Android Open Source Project                }
7347aa0e4cb91c869108238733ca107d18ccb888df7The Android Open Source Project                break;
7357aa0e4cb91c869108238733ca107d18ccb888df7The Android Open Source Project            }
7367bb2add27b874d194c294d30c1661dffa78f44bbDaniel Lehmann            default: {
7377bb2add27b874d194c294d30c1661dffa78f44bbDaniel Lehmann                // Bring up the search UI if the user starts typing
7387bb2add27b874d194c294d30c1661dffa78f44bbDaniel Lehmann                final int unicodeChar = event.getUnicodeChar();
7397bb2add27b874d194c294d30c1661dffa78f44bbDaniel Lehmann
7407bb2add27b874d194c294d30c1661dffa78f44bbDaniel Lehmann                if (unicodeChar != 0) {
7417bb2add27b874d194c294d30c1661dffa78f44bbDaniel Lehmann                    String query = new String(new int[]{ unicodeChar }, 0, 1);
742fcfdffb439ccf1ddef971109b82e782c47161572Dmitri Plotnikov                    if (mHasActionBar) {
743fcfdffb439ccf1ddef971109b82e782c47161572Dmitri Plotnikov                        if (mActionBarAdapter.getMode() != ContactBrowserMode.MODE_SEARCH) {
744fcfdffb439ccf1ddef971109b82e782c47161572Dmitri Plotnikov                            mActionBarAdapter.setQueryString(query);
745fcfdffb439ccf1ddef971109b82e782c47161572Dmitri Plotnikov                            mActionBarAdapter.setMode(ContactBrowserMode.MODE_SEARCH);
7467bb2add27b874d194c294d30c1661dffa78f44bbDaniel Lehmann                            return true;
7477bb2add27b874d194c294d30c1661dffa78f44bbDaniel Lehmann                        }
7487bb2add27b874d194c294d30c1661dffa78f44bbDaniel Lehmann                    } else if (!mRequest.isSearchMode()) {
7497bb2add27b874d194c294d30c1661dffa78f44bbDaniel Lehmann                        if (!mSearchInitiated) {
7507bb2add27b874d194c294d30c1661dffa78f44bbDaniel Lehmann                            mSearchInitiated = true;
7517bb2add27b874d194c294d30c1661dffa78f44bbDaniel Lehmann                            startSearch(query, false, null, false);
7527bb2add27b874d194c294d30c1661dffa78f44bbDaniel Lehmann                            return true;
7537bb2add27b874d194c294d30c1661dffa78f44bbDaniel Lehmann                        }
7547bb2add27b874d194c294d30c1661dffa78f44bbDaniel Lehmann                    }
7557bb2add27b874d194c294d30c1661dffa78f44bbDaniel Lehmann                }
7567bb2add27b874d194c294d30c1661dffa78f44bbDaniel Lehmann            }
7577aa0e4cb91c869108238733ca107d18ccb888df7The Android Open Source Project        }
7587aa0e4cb91c869108238733ca107d18ccb888df7The Android Open Source Project
7597aa0e4cb91c869108238733ca107d18ccb888df7The Android Open Source Project        return super.onKeyDown(keyCode, event);
7607aa0e4cb91c869108238733ca107d18ccb888df7The Android Open Source Project    }
7617aa0e4cb91c869108238733ca107d18ccb888df7The Android Open Source Project
7626c776bcfa3bde9b5a94dddac8f6ebde1f358a796Dmitri Plotnikov    private boolean deleteSelection() {
7631ce1e7cf261994e46e6fe85ed4d445241ad55f16Dmitri Plotnikov        // TODO move to the fragment
7641ce1e7cf261994e46e6fe85ed4d445241ad55f16Dmitri Plotnikov//        if (mActionCode == ContactsRequest.ACTION_DEFAULT) {
7651ce1e7cf261994e46e6fe85ed4d445241ad55f16Dmitri Plotnikov//            final int position = mListView.getSelectedItemPosition();
7661ce1e7cf261994e46e6fe85ed4d445241ad55f16Dmitri Plotnikov//            if (position != ListView.INVALID_POSITION) {
7671ce1e7cf261994e46e6fe85ed4d445241ad55f16Dmitri Plotnikov//                Uri contactUri = getContactUri(position);
7681ce1e7cf261994e46e6fe85ed4d445241ad55f16Dmitri Plotnikov//                if (contactUri != null) {
7691ce1e7cf261994e46e6fe85ed4d445241ad55f16Dmitri Plotnikov//                    doContactDelete(contactUri);
7701ce1e7cf261994e46e6fe85ed4d445241ad55f16Dmitri Plotnikov//                    return true;
7711ce1e7cf261994e46e6fe85ed4d445241ad55f16Dmitri Plotnikov//                }
7721ce1e7cf261994e46e6fe85ed4d445241ad55f16Dmitri Plotnikov//            }
7731ce1e7cf261994e46e6fe85ed4d445241ad55f16Dmitri Plotnikov//        }
7746c776bcfa3bde9b5a94dddac8f6ebde1f358a796Dmitri Plotnikov        return false;
7756c776bcfa3bde9b5a94dddac8f6ebde1f358a796Dmitri Plotnikov    }
7766c776bcfa3bde9b5a94dddac8f6ebde1f358a796Dmitri Plotnikov
77708e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikov    @Override
77808e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikov    protected void onSaveInstanceState(Bundle outState) {
77908e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikov        super.onSaveInstanceState(outState);
78092a6fdf1b07b8f1447560174e24455fd46aee7cdDmitri Plotnikov        outState.putInt(KEY_MODE, mMode);
781fcfdffb439ccf1ddef971109b82e782c47161572Dmitri Plotnikov        if (mActionBarAdapter != null) {
782fcfdffb439ccf1ddef971109b82e782c47161572Dmitri Plotnikov            mActionBarAdapter.onSaveInstanceState(outState);
78308e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikov        }
78408e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikov    }
78508e1c4e49947daee26cfc435d01605febb7ae6faDmitri Plotnikov
786b4e8886bcb25cde3b03eedcc815c0166329af3a4Dmitri Plotnikov    private PhoneNumberInteraction getPhoneNumberCallInteraction() {
787b4e8886bcb25cde3b03eedcc815c0166329af3a4Dmitri Plotnikov        if (mPhoneNumberCallInteraction == null) {
788b4e8886bcb25cde3b03eedcc815c0166329af3a4Dmitri Plotnikov            mPhoneNumberCallInteraction = new PhoneNumberInteraction(this, false, null);
789b4e8886bcb25cde3b03eedcc815c0166329af3a4Dmitri Plotnikov        }
790b4e8886bcb25cde3b03eedcc815c0166329af3a4Dmitri Plotnikov        return mPhoneNumberCallInteraction;
791b4e8886bcb25cde3b03eedcc815c0166329af3a4Dmitri Plotnikov    }
792b4e8886bcb25cde3b03eedcc815c0166329af3a4Dmitri Plotnikov
793b4e8886bcb25cde3b03eedcc815c0166329af3a4Dmitri Plotnikov    private PhoneNumberInteraction getSendTextMessageInteraction() {
794b4e8886bcb25cde3b03eedcc815c0166329af3a4Dmitri Plotnikov        if (mSendTextMessageInteraction == null) {
795b4e8886bcb25cde3b03eedcc815c0166329af3a4Dmitri Plotnikov            mSendTextMessageInteraction = new PhoneNumberInteraction(this, true, null);
7967c5286ed8ba0d7fbe3683b560f69b3a2d4ff1e2aDmitri Plotnikov        }
797b4e8886bcb25cde3b03eedcc815c0166329af3a4Dmitri Plotnikov        return mSendTextMessageInteraction;
7987c5286ed8ba0d7fbe3683b560f69b3a2d4ff1e2aDmitri Plotnikov    }
7999692f2664e678b0a264c586c70cc4a9c0ffabc21Dmitri Plotnikov
8009692f2664e678b0a264c586c70cc4a9c0ffabc21Dmitri Plotnikov    private ContactDeletionInteraction getContactDeletionInteraction() {
8019692f2664e678b0a264c586c70cc4a9c0ffabc21Dmitri Plotnikov        if (mContactDeletionInteraction == null) {
8029692f2664e678b0a264c586c70cc4a9c0ffabc21Dmitri Plotnikov            mContactDeletionInteraction = new ContactDeletionInteraction();
8039692f2664e678b0a264c586c70cc4a9c0ffabc21Dmitri Plotnikov            mContactDeletionInteraction.attachToActivity(this);
8049692f2664e678b0a264c586c70cc4a9c0ffabc21Dmitri Plotnikov        }
8059692f2664e678b0a264c586c70cc4a9c0ffabc21Dmitri Plotnikov        return mContactDeletionInteraction;
8069692f2664e678b0a264c586c70cc4a9c0ffabc21Dmitri Plotnikov    }
807aa1dffe03f6cb3d147556cf53cbf23ad86852cabDmitri Plotnikov
808aa1dffe03f6cb3d147556cf53cbf23ad86852cabDmitri Plotnikov    private ImportExportInteraction getImportExportInteraction() {
809aa1dffe03f6cb3d147556cf53cbf23ad86852cabDmitri Plotnikov        if (mImportExportInteraction == null) {
810aa1dffe03f6cb3d147556cf53cbf23ad86852cabDmitri Plotnikov            mImportExportInteraction = new ImportExportInteraction(this);
811aa1dffe03f6cb3d147556cf53cbf23ad86852cabDmitri Plotnikov        }
812aa1dffe03f6cb3d147556cf53cbf23ad86852cabDmitri Plotnikov        return mImportExportInteraction;
813aa1dffe03f6cb3d147556cf53cbf23ad86852cabDmitri Plotnikov    }
8143391dbed3575b3454c2bebf35dae4a19d8f987f2Daniel Lehmann
8153391dbed3575b3454c2bebf35dae4a19d8f987f2Daniel Lehmann    @Override
8163391dbed3575b3454c2bebf35dae4a19d8f987f2Daniel Lehmann    public DialogManager getDialogManager() {
8173391dbed3575b3454c2bebf35dae4a19d8f987f2Daniel Lehmann        return mDialogManager;
8183391dbed3575b3454c2bebf35dae4a19d8f987f2Daniel Lehmann    }
8197aa0e4cb91c869108238733ca107d18ccb888df7The Android Open Source Project}
820