ContactPickerFragment.java revision d3758b00601ce3ff8c4336b45cc1249806e52c13
1732f65236e7f804941e84757c077a84eb11eab16Dmitri Plotnikov/*
2732f65236e7f804941e84757c077a84eb11eab16Dmitri Plotnikov * Copyright (C) 2010 The Android Open Source Project
3732f65236e7f804941e84757c077a84eb11eab16Dmitri Plotnikov *
4732f65236e7f804941e84757c077a84eb11eab16Dmitri Plotnikov * Licensed under the Apache License, Version 2.0 (the "License");
5732f65236e7f804941e84757c077a84eb11eab16Dmitri Plotnikov * you may not use this file except in compliance with the License.
6732f65236e7f804941e84757c077a84eb11eab16Dmitri Plotnikov * You may obtain a copy of the License at
7732f65236e7f804941e84757c077a84eb11eab16Dmitri Plotnikov *
8732f65236e7f804941e84757c077a84eb11eab16Dmitri Plotnikov *      http://www.apache.org/licenses/LICENSE-2.0
9732f65236e7f804941e84757c077a84eb11eab16Dmitri Plotnikov *
10732f65236e7f804941e84757c077a84eb11eab16Dmitri Plotnikov * Unless required by applicable law or agreed to in writing, software
11732f65236e7f804941e84757c077a84eb11eab16Dmitri Plotnikov * distributed under the License is distributed on an "AS IS" BASIS,
12732f65236e7f804941e84757c077a84eb11eab16Dmitri Plotnikov * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13732f65236e7f804941e84757c077a84eb11eab16Dmitri Plotnikov * See the License for the specific language governing permissions and
14732f65236e7f804941e84757c077a84eb11eab16Dmitri Plotnikov * limitations under the License.
15732f65236e7f804941e84757c077a84eb11eab16Dmitri Plotnikov */
16732f65236e7f804941e84757c077a84eb11eab16Dmitri Plotnikovpackage com.android.contacts.list;
17732f65236e7f804941e84757c077a84eb11eab16Dmitri Plotnikov
18d3758b00601ce3ff8c4336b45cc1249806e52c13Dmitri Plotnikovimport com.android.contacts.ContactsSearchManager;
19732f65236e7f804941e84757c077a84eb11eab16Dmitri Plotnikovimport com.android.contacts.R;
208a7831944232fd01740492b39bc67d746213b82bDmitri Plotnikovimport com.android.contacts.list.ShortcutIntentBuilder.OnShortcutIntentCreatedListener;
21732f65236e7f804941e84757c077a84eb11eab16Dmitri Plotnikov
228a7831944232fd01740492b39bc67d746213b82bDmitri Plotnikovimport android.content.Intent;
238a7831944232fd01740492b39bc67d746213b82bDmitri Plotnikovimport android.net.Uri;
24732f65236e7f804941e84757c077a84eb11eab16Dmitri Plotnikovimport android.view.LayoutInflater;
25732f65236e7f804941e84757c077a84eb11eab16Dmitri Plotnikovimport android.view.View;
26732f65236e7f804941e84757c077a84eb11eab16Dmitri Plotnikovimport android.view.ViewGroup;
27b6c7c6f8feddc476f84e28289fe9491327db1788Dmitri Plotnikovimport android.widget.AdapterView;
28732f65236e7f804941e84757c077a84eb11eab16Dmitri Plotnikov
29732f65236e7f804941e84757c077a84eb11eab16Dmitri Plotnikov/**
30416b569901ce4c577c1f76c3f29496d1adab29e1Dmitri Plotnikov * Fragment for the contact list used for browsing contacts (as compared to
31416b569901ce4c577c1f76c3f29496d1adab29e1Dmitri Plotnikov * picking a contact with one of the PICK or SHORTCUT intents).
32732f65236e7f804941e84757c077a84eb11eab16Dmitri Plotnikov */
33413772711054c9fca8bf0c22bc81f613c883ae7eDmitri Plotnikovpublic class ContactPickerFragment extends ContactEntryListFragment<ContactEntryListAdapter>
348a7831944232fd01740492b39bc67d746213b82bDmitri Plotnikov        implements OnShortcutIntentCreatedListener {
35732f65236e7f804941e84757c077a84eb11eab16Dmitri Plotnikov
36416b569901ce4c577c1f76c3f29496d1adab29e1Dmitri Plotnikov    private OnContactPickerActionListener mListener;
37732f65236e7f804941e84757c077a84eb11eab16Dmitri Plotnikov    private boolean mCreateContactEnabled;
388a7831944232fd01740492b39bc67d746213b82bDmitri Plotnikov    private boolean mShortcutRequested;
39732f65236e7f804941e84757c077a84eb11eab16Dmitri Plotnikov
40d621f71428a7fd1aa15bd101423c9a690b44ea07Dmitri Plotnikov    public ContactPickerFragment() {
41d621f71428a7fd1aa15bd101423c9a690b44ea07Dmitri Plotnikov        setPhotoLoaderEnabled(true);
42d3758b00601ce3ff8c4336b45cc1249806e52c13Dmitri Plotnikov        setSectionHeaderDisplayEnabled(true);
43d3758b00601ce3ff8c4336b45cc1249806e52c13Dmitri Plotnikov        setAizyEnabled(true);
44d621f71428a7fd1aa15bd101423c9a690b44ea07Dmitri Plotnikov    }
45d621f71428a7fd1aa15bd101423c9a690b44ea07Dmitri Plotnikov
46416b569901ce4c577c1f76c3f29496d1adab29e1Dmitri Plotnikov    public void setOnContactPickerActionListener(OnContactPickerActionListener listener) {
47732f65236e7f804941e84757c077a84eb11eab16Dmitri Plotnikov        mListener = listener;
48732f65236e7f804941e84757c077a84eb11eab16Dmitri Plotnikov    }
49732f65236e7f804941e84757c077a84eb11eab16Dmitri Plotnikov
508a7831944232fd01740492b39bc67d746213b82bDmitri Plotnikov    public boolean isCreateContactEnabled() {
518a7831944232fd01740492b39bc67d746213b82bDmitri Plotnikov        return mCreateContactEnabled;
528a7831944232fd01740492b39bc67d746213b82bDmitri Plotnikov    }
538a7831944232fd01740492b39bc67d746213b82bDmitri Plotnikov
54b6c7c6f8feddc476f84e28289fe9491327db1788Dmitri Plotnikov    public void setCreateContactEnabled(boolean flag) {
55b6c7c6f8feddc476f84e28289fe9491327db1788Dmitri Plotnikov        this.mCreateContactEnabled = flag;
56b6c7c6f8feddc476f84e28289fe9491327db1788Dmitri Plotnikov    }
57b6c7c6f8feddc476f84e28289fe9491327db1788Dmitri Plotnikov
588a7831944232fd01740492b39bc67d746213b82bDmitri Plotnikov    public boolean isShortcutRequested() {
598a7831944232fd01740492b39bc67d746213b82bDmitri Plotnikov        return mShortcutRequested;
608a7831944232fd01740492b39bc67d746213b82bDmitri Plotnikov    }
618a7831944232fd01740492b39bc67d746213b82bDmitri Plotnikov
628a7831944232fd01740492b39bc67d746213b82bDmitri Plotnikov    public void setShortcutRequested(boolean flag) {
638a7831944232fd01740492b39bc67d746213b82bDmitri Plotnikov        mShortcutRequested = flag;
64b6c7c6f8feddc476f84e28289fe9491327db1788Dmitri Plotnikov    }
65b6c7c6f8feddc476f84e28289fe9491327db1788Dmitri Plotnikov
66b6c7c6f8feddc476f84e28289fe9491327db1788Dmitri Plotnikov    @Override
67bba62ac4a2d519be8e4896261d14b168fa49fbdfDmitri Plotnikov    protected void onCreateView(LayoutInflater inflater, ViewGroup container) {
68bba62ac4a2d519be8e4896261d14b168fa49fbdfDmitri Plotnikov        super.onCreateView(inflater, container);
69b6c7c6f8feddc476f84e28289fe9491327db1788Dmitri Plotnikov        if (mCreateContactEnabled) {
70b6c7c6f8feddc476f84e28289fe9491327db1788Dmitri Plotnikov            getListView().addHeaderView(inflater.inflate(R.layout.create_new_contact, null, false));
71b6c7c6f8feddc476f84e28289fe9491327db1788Dmitri Plotnikov        }
72b6c7c6f8feddc476f84e28289fe9491327db1788Dmitri Plotnikov    }
73b6c7c6f8feddc476f84e28289fe9491327db1788Dmitri Plotnikov
74732f65236e7f804941e84757c077a84eb11eab16Dmitri Plotnikov    @Override
75b6c7c6f8feddc476f84e28289fe9491327db1788Dmitri Plotnikov    public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
76b6c7c6f8feddc476f84e28289fe9491327db1788Dmitri Plotnikov        if (position == 0 && !isSearchMode() && mCreateContactEnabled) {
77b6c7c6f8feddc476f84e28289fe9491327db1788Dmitri Plotnikov            mListener.onCreateNewContactAction();
78b6c7c6f8feddc476f84e28289fe9491327db1788Dmitri Plotnikov        } else {
79b6c7c6f8feddc476f84e28289fe9491327db1788Dmitri Plotnikov            super.onItemClick(parent, view, position, id);
80b6c7c6f8feddc476f84e28289fe9491327db1788Dmitri Plotnikov        }
81b6c7c6f8feddc476f84e28289fe9491327db1788Dmitri Plotnikov    }
82b6c7c6f8feddc476f84e28289fe9491327db1788Dmitri Plotnikov
83b6c7c6f8feddc476f84e28289fe9491327db1788Dmitri Plotnikov    @Override
84732f65236e7f804941e84757c077a84eb11eab16Dmitri Plotnikov    protected void onItemClick(int position, long id) {
85d3758b00601ce3ff8c4336b45cc1249806e52c13Dmitri Plotnikov        Uri uri;
86d3758b00601ce3ff8c4336b45cc1249806e52c13Dmitri Plotnikov        if (isLegacyCompatibilityMode()) {
87d3758b00601ce3ff8c4336b45cc1249806e52c13Dmitri Plotnikov            uri = ((LegacyContactListAdapter)getAdapter()).getPersonUri(position);
88416b569901ce4c577c1f76c3f29496d1adab29e1Dmitri Plotnikov        } else {
89d3758b00601ce3ff8c4336b45cc1249806e52c13Dmitri Plotnikov            uri = ((ContactListAdapter)getAdapter()).getContactUri(position);
90d3758b00601ce3ff8c4336b45cc1249806e52c13Dmitri Plotnikov        }
91d3758b00601ce3ff8c4336b45cc1249806e52c13Dmitri Plotnikov        if (mShortcutRequested) {
92d3758b00601ce3ff8c4336b45cc1249806e52c13Dmitri Plotnikov            ShortcutIntentBuilder builder = new ShortcutIntentBuilder(getActivity(), this);
93d3758b00601ce3ff8c4336b45cc1249806e52c13Dmitri Plotnikov            builder.createContactShortcutIntent(uri);
94d3758b00601ce3ff8c4336b45cc1249806e52c13Dmitri Plotnikov        } else {
95d3758b00601ce3ff8c4336b45cc1249806e52c13Dmitri Plotnikov            mListener.onPickContactAction(uri);
96732f65236e7f804941e84757c077a84eb11eab16Dmitri Plotnikov        }
97732f65236e7f804941e84757c077a84eb11eab16Dmitri Plotnikov    }
98732f65236e7f804941e84757c077a84eb11eab16Dmitri Plotnikov
99732f65236e7f804941e84757c077a84eb11eab16Dmitri Plotnikov    @Override
100413772711054c9fca8bf0c22bc81f613c883ae7eDmitri Plotnikov    protected ContactEntryListAdapter createListAdapter() {
1011ce1e7cf261994e46e6fe85ed4d445241ad55f16Dmitri Plotnikov        if (!isLegacyCompatibilityMode()) {
102413772711054c9fca8bf0c22bc81f613c883ae7eDmitri Plotnikov            ContactListAdapter adapter = new DefaultContactListAdapter(getActivity());
103413772711054c9fca8bf0c22bc81f613c883ae7eDmitri Plotnikov            adapter.setSectionHeaderDisplayEnabled(true);
104413772711054c9fca8bf0c22bc81f613c883ae7eDmitri Plotnikov            adapter.setDisplayPhotos(true);
105413772711054c9fca8bf0c22bc81f613c883ae7eDmitri Plotnikov            adapter.setQuickContactEnabled(false);
106413772711054c9fca8bf0c22bc81f613c883ae7eDmitri Plotnikov            return adapter;
107413772711054c9fca8bf0c22bc81f613c883ae7eDmitri Plotnikov        } else {
108413772711054c9fca8bf0c22bc81f613c883ae7eDmitri Plotnikov            LegacyContactListAdapter adapter = new LegacyContactListAdapter(getActivity());
109413772711054c9fca8bf0c22bc81f613c883ae7eDmitri Plotnikov            adapter.setSectionHeaderDisplayEnabled(false);
110413772711054c9fca8bf0c22bc81f613c883ae7eDmitri Plotnikov            adapter.setDisplayPhotos(false);
111413772711054c9fca8bf0c22bc81f613c883ae7eDmitri Plotnikov            return adapter;
112413772711054c9fca8bf0c22bc81f613c883ae7eDmitri Plotnikov        }
113413772711054c9fca8bf0c22bc81f613c883ae7eDmitri Plotnikov    }
114b6c7c6f8feddc476f84e28289fe9491327db1788Dmitri Plotnikov
115413772711054c9fca8bf0c22bc81f613c883ae7eDmitri Plotnikov    @Override
116413772711054c9fca8bf0c22bc81f613c883ae7eDmitri Plotnikov    protected void configureAdapter() {
117413772711054c9fca8bf0c22bc81f613c883ae7eDmitri Plotnikov        super.configureAdapter();
118d3758b00601ce3ff8c4336b45cc1249806e52c13Dmitri Plotnikov
119413772711054c9fca8bf0c22bc81f613c883ae7eDmitri Plotnikov        ContactEntryListAdapter adapter = getAdapter();
120d3758b00601ce3ff8c4336b45cc1249806e52c13Dmitri Plotnikov        if (adapter instanceof DefaultContactListAdapter) {
121d3758b00601ce3ff8c4336b45cc1249806e52c13Dmitri Plotnikov            ((DefaultContactListAdapter)adapter).setVisibleContactsOnly(true);
122d3758b00601ce3ff8c4336b45cc1249806e52c13Dmitri Plotnikov        }
123e44b043f8a49c0974bd2f705f98ac3277aaf1b67Dmitri Plotnikov
12468e32a3e3248a36f90e43e4f970ebe0196e74e43Dmitri Plotnikov        // If "Create new contact" is shown, don't display the empty list UI
12568e32a3e3248a36f90e43e4f970ebe0196e74e43Dmitri Plotnikov        adapter.setEmptyListEnabled(!isCreateContactEnabled());
126732f65236e7f804941e84757c077a84eb11eab16Dmitri Plotnikov    }
127732f65236e7f804941e84757c077a84eb11eab16Dmitri Plotnikov
128732f65236e7f804941e84757c077a84eb11eab16Dmitri Plotnikov    @Override
129732f65236e7f804941e84757c077a84eb11eab16Dmitri Plotnikov    protected View inflateView(LayoutInflater inflater, ViewGroup container) {
130d3758b00601ce3ff8c4336b45cc1249806e52c13Dmitri Plotnikov        return inflater.inflate(R.layout.contacts_list_content, null);
131732f65236e7f804941e84757c077a84eb11eab16Dmitri Plotnikov    }
1328a7831944232fd01740492b39bc67d746213b82bDmitri Plotnikov
13368e32a3e3248a36f90e43e4f970ebe0196e74e43Dmitri Plotnikov    @Override
13468e32a3e3248a36f90e43e4f970ebe0196e74e43Dmitri Plotnikov    protected void prepareEmptyView() {
13568e32a3e3248a36f90e43e4f970ebe0196e74e43Dmitri Plotnikov        if (isSearchMode()) {
13668e32a3e3248a36f90e43e4f970ebe0196e74e43Dmitri Plotnikov            return;
13768e32a3e3248a36f90e43e4f970ebe0196e74e43Dmitri Plotnikov        } else if (isSearchResultsMode()) {
13868e32a3e3248a36f90e43e4f970ebe0196e74e43Dmitri Plotnikov            setEmptyText(R.string.noMatchingContacts);
13968e32a3e3248a36f90e43e4f970ebe0196e74e43Dmitri Plotnikov        } else if (isSyncActive()) {
14068e32a3e3248a36f90e43e4f970ebe0196e74e43Dmitri Plotnikov            if (mShortcutRequested) {
14168e32a3e3248a36f90e43e4f970ebe0196e74e43Dmitri Plotnikov                // Help text is the same no matter whether there is SIM or not.
14268e32a3e3248a36f90e43e4f970ebe0196e74e43Dmitri Plotnikov                setEmptyText(R.string.noContactsHelpTextWithSyncForCreateShortcut);
14368e32a3e3248a36f90e43e4f970ebe0196e74e43Dmitri Plotnikov            } else if (hasIccCard()) {
14468e32a3e3248a36f90e43e4f970ebe0196e74e43Dmitri Plotnikov                setEmptyText(R.string.noContactsHelpTextWithSync);
14568e32a3e3248a36f90e43e4f970ebe0196e74e43Dmitri Plotnikov            } else {
14668e32a3e3248a36f90e43e4f970ebe0196e74e43Dmitri Plotnikov                setEmptyText(R.string.noContactsNoSimHelpTextWithSync);
14768e32a3e3248a36f90e43e4f970ebe0196e74e43Dmitri Plotnikov            }
14868e32a3e3248a36f90e43e4f970ebe0196e74e43Dmitri Plotnikov        } else {
14968e32a3e3248a36f90e43e4f970ebe0196e74e43Dmitri Plotnikov            if (mShortcutRequested) {
15068e32a3e3248a36f90e43e4f970ebe0196e74e43Dmitri Plotnikov                // Help text is the same no matter whether there is SIM or not.
15168e32a3e3248a36f90e43e4f970ebe0196e74e43Dmitri Plotnikov                setEmptyText(R.string.noContactsHelpTextWithSyncForCreateShortcut);
15268e32a3e3248a36f90e43e4f970ebe0196e74e43Dmitri Plotnikov            } else if (hasIccCard()) {
15368e32a3e3248a36f90e43e4f970ebe0196e74e43Dmitri Plotnikov                setEmptyText(R.string.noContactsHelpText);
15468e32a3e3248a36f90e43e4f970ebe0196e74e43Dmitri Plotnikov            } else {
15568e32a3e3248a36f90e43e4f970ebe0196e74e43Dmitri Plotnikov                setEmptyText(R.string.noContactsNoSimHelpText);
15668e32a3e3248a36f90e43e4f970ebe0196e74e43Dmitri Plotnikov            }
15768e32a3e3248a36f90e43e4f970ebe0196e74e43Dmitri Plotnikov        }
15868e32a3e3248a36f90e43e4f970ebe0196e74e43Dmitri Plotnikov    }
15968e32a3e3248a36f90e43e4f970ebe0196e74e43Dmitri Plotnikov
1608a7831944232fd01740492b39bc67d746213b82bDmitri Plotnikov    public void onShortcutIntentCreated(Uri uri, Intent shortcutIntent) {
1618a7831944232fd01740492b39bc67d746213b82bDmitri Plotnikov        mListener.onShortcutIntentCreated(shortcutIntent);
1628a7831944232fd01740492b39bc67d746213b82bDmitri Plotnikov    }
163d3758b00601ce3ff8c4336b45cc1249806e52c13Dmitri Plotnikov
164d3758b00601ce3ff8c4336b45cc1249806e52c13Dmitri Plotnikov    @Override
165d3758b00601ce3ff8c4336b45cc1249806e52c13Dmitri Plotnikov    public void startSearch(String initialQuery) {
166d3758b00601ce3ff8c4336b45cc1249806e52c13Dmitri Plotnikov        ContactsSearchManager.startSearchForResult(getActivity(), initialQuery,
167d3758b00601ce3ff8c4336b45cc1249806e52c13Dmitri Plotnikov                ACTIVITY_REQUEST_CODE_FILTER, getContactsRequest());
168d3758b00601ce3ff8c4336b45cc1249806e52c13Dmitri Plotnikov    }
169732f65236e7f804941e84757c077a84eb11eab16Dmitri Plotnikov}
170