blob: 4e813891619999fb931d639f0780756ccc53266f [file] [log] [blame]
Dmitri Plotnikov732f6522010-04-27 10:30:59 -07001/*
2 * Copyright (C) 2010 The Android Open Source Project
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 * http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
16package com.android.contacts.list;
17
Dmitri Plotnikov8a783192010-05-05 18:59:36 -070018import android.content.Intent;
19import android.net.Uri;
Dmitri Plotnikov86092522010-10-27 17:03:52 -070020import android.os.Bundle;
Dmitri Plotnikov732f6522010-04-27 10:30:59 -070021import android.view.LayoutInflater;
22import android.view.View;
23import android.view.ViewGroup;
Dmitri Plotnikovb6c7c6f2010-05-05 14:11:35 -070024import android.widget.AdapterView;
Dmitri Plotnikov732f6522010-04-27 10:30:59 -070025
Chiao Chenge0b2f1e2012-06-12 13:07:56 -070026import com.android.contacts.R;
Chiao Chenga0233a02012-11-01 16:41:08 -070027import com.android.contacts.common.list.ContactEntryListAdapter;
Chiao Cheng821a6572012-12-04 17:42:52 -080028import com.android.contacts.common.list.ContactEntryListFragment;
Chiao Chenga0233a02012-11-01 16:41:08 -070029import com.android.contacts.common.list.ContactListAdapter;
30import com.android.contacts.common.list.ContactListFilter;
Chiao Chenga0233a02012-11-01 16:41:08 -070031import com.android.contacts.common.list.DirectoryListLoader;
Chiao Cheng30868d42012-11-28 17:45:57 -080032import com.android.contacts.common.list.ShortcutIntentBuilder;
33import com.android.contacts.common.list.ShortcutIntentBuilder.OnShortcutIntentCreatedListener;
Chiao Chenge0b2f1e2012-06-12 13:07:56 -070034
Dmitri Plotnikov732f6522010-04-27 10:30:59 -070035/**
Dmitri Plotnikov416b5692010-04-27 18:14:58 -070036 * Fragment for the contact list used for browsing contacts (as compared to
37 * picking a contact with one of the PICK or SHORTCUT intents).
Dmitri Plotnikov732f6522010-04-27 10:30:59 -070038 */
Dmitri Plotnikov41377272010-05-07 10:28:47 -070039public class ContactPickerFragment extends ContactEntryListFragment<ContactEntryListAdapter>
Dmitri Plotnikov8a783192010-05-05 18:59:36 -070040 implements OnShortcutIntentCreatedListener {
Dmitri Plotnikov732f6522010-04-27 10:30:59 -070041
Dmitri Plotnikov86092522010-10-27 17:03:52 -070042 private static final String KEY_EDIT_MODE = "editMode";
43 private static final String KEY_CREATE_CONTACT_ENABLED = "createContactEnabled";
44 private static final String KEY_SHORTCUT_REQUESTED = "shortcutRequested";
45
Dmitri Plotnikov416b5692010-04-27 18:14:58 -070046 private OnContactPickerActionListener mListener;
Dmitri Plotnikov732f6522010-04-27 10:30:59 -070047 private boolean mCreateContactEnabled;
Dmitri Plotnikov86092522010-10-27 17:03:52 -070048 private boolean mEditMode;
Dmitri Plotnikov8a783192010-05-05 18:59:36 -070049 private boolean mShortcutRequested;
Dmitri Plotnikov732f6522010-04-27 10:30:59 -070050
Dmitri Plotnikovd621f712010-06-16 17:28:07 -070051 public ContactPickerFragment() {
52 setPhotoLoaderEnabled(true);
Dmitri Plotnikovd3758b02010-06-17 11:34:59 -070053 setSectionHeaderDisplayEnabled(true);
Dmitri Plotnikov5245ea62010-12-10 15:03:13 -080054 setVisibleScrollbarEnabled(true);
Dmitri Plotnikov84b3cc72010-10-11 18:19:51 -070055 setQuickContactEnabled(false);
Dmitri Plotnikov4d174aa2010-10-25 15:38:54 -070056 setDirectorySearchMode(DirectoryListLoader.SEARCH_MODE_CONTACT_SHORTCUT);
Dmitri Plotnikovd621f712010-06-16 17:28:07 -070057 }
58
Dmitri Plotnikov416b5692010-04-27 18:14:58 -070059 public void setOnContactPickerActionListener(OnContactPickerActionListener listener) {
Dmitri Plotnikov732f6522010-04-27 10:30:59 -070060 mListener = listener;
61 }
62
Dmitri Plotnikov8a783192010-05-05 18:59:36 -070063 public boolean isCreateContactEnabled() {
64 return mCreateContactEnabled;
65 }
66
Dmitri Plotnikovb6c7c6f2010-05-05 14:11:35 -070067 public void setCreateContactEnabled(boolean flag) {
68 this.mCreateContactEnabled = flag;
69 }
70
Dmitri Plotnikov86092522010-10-27 17:03:52 -070071 public boolean isEditMode() {
72 return mEditMode;
73 }
74
75 public void setEditMode(boolean flag) {
76 mEditMode = flag;
77 }
78
Dmitri Plotnikov8a783192010-05-05 18:59:36 -070079 public void setShortcutRequested(boolean flag) {
80 mShortcutRequested = flag;
Dmitri Plotnikovb6c7c6f2010-05-05 14:11:35 -070081 }
82
83 @Override
Dmitri Plotnikov86092522010-10-27 17:03:52 -070084 public void onSaveInstanceState(Bundle outState) {
85 super.onSaveInstanceState(outState);
86 outState.putBoolean(KEY_EDIT_MODE, mEditMode);
87 outState.putBoolean(KEY_CREATE_CONTACT_ENABLED, mCreateContactEnabled);
88 outState.putBoolean(KEY_SHORTCUT_REQUESTED, mShortcutRequested);
89 }
90
91 @Override
92 public void restoreSavedState(Bundle savedState) {
93 super.restoreSavedState(savedState);
94
95 if (savedState == null) {
96 return;
97 }
98
99 mEditMode = savedState.getBoolean(KEY_EDIT_MODE);
100 mCreateContactEnabled = savedState.getBoolean(KEY_CREATE_CONTACT_ENABLED);
101 mShortcutRequested = savedState.getBoolean(KEY_SHORTCUT_REQUESTED);
102 }
103
104 @Override
Dmitri Plotnikovbba62ac2010-06-03 10:22:59 -0700105 protected void onCreateView(LayoutInflater inflater, ViewGroup container) {
106 super.onCreateView(inflater, container);
Brian Attwellbbd22012014-07-16 15:59:10 -0700107 if (mCreateContactEnabled && isLegacyCompatibilityMode()) {
108 // Since we are using the legacy adapter setShowCreateContact(true) isn't supported.
109 // So we need to add an ugly header above the list.
Dmitri Plotnikovb6c7c6f2010-05-05 14:11:35 -0700110 getListView().addHeaderView(inflater.inflate(R.layout.create_new_contact, null, false));
111 }
Dmitri Plotnikovb6c7c6f2010-05-05 14:11:35 -0700112 }
113
Dmitri Plotnikov732f6522010-04-27 10:30:59 -0700114 @Override
Dmitri Plotnikovb6c7c6f2010-05-05 14:11:35 -0700115 public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
Walter Jang9e230612015-05-05 11:35:15 -0700116 if (position == 0 && mCreateContactEnabled && mListener != null) {
Dmitri Plotnikovb6c7c6f2010-05-05 14:11:35 -0700117 mListener.onCreateNewContactAction();
118 } else {
119 super.onItemClick(parent, view, position, id);
120 }
121 }
122
123 @Override
Dmitri Plotnikov732f6522010-04-27 10:30:59 -0700124 protected void onItemClick(int position, long id) {
Dmitri Plotnikovd3758b02010-06-17 11:34:59 -0700125 Uri uri;
126 if (isLegacyCompatibilityMode()) {
127 uri = ((LegacyContactListAdapter)getAdapter()).getPersonUri(position);
Dmitri Plotnikov416b5692010-04-27 18:14:58 -0700128 } else {
Dmitri Plotnikovd3758b02010-06-17 11:34:59 -0700129 uri = ((ContactListAdapter)getAdapter()).getContactUri(position);
130 }
Brian Attwellb831b142014-10-03 15:45:18 -0700131 if (uri == null) {
132 return;
133 }
Dmitri Plotnikov86092522010-10-27 17:03:52 -0700134 if (mEditMode) {
135 editContact(uri);
136 } else if (mShortcutRequested) {
Dmitri Plotnikovd3758b02010-06-17 11:34:59 -0700137 ShortcutIntentBuilder builder = new ShortcutIntentBuilder(getActivity(), this);
138 builder.createContactShortcutIntent(uri);
139 } else {
Dmitri Plotnikov86092522010-10-27 17:03:52 -0700140 pickContact(uri);
Dmitri Plotnikov732f6522010-04-27 10:30:59 -0700141 }
142 }
143
Dmitri Plotnikov86092522010-10-27 17:03:52 -0700144 public void createNewContact() {
Walter Jang9e230612015-05-05 11:35:15 -0700145 if (mListener != null) {
146 mListener.onCreateNewContactAction();
147 }
Dmitri Plotnikov86092522010-10-27 17:03:52 -0700148 }
149
150 public void editContact(Uri contactUri) {
Walter Jang9e230612015-05-05 11:35:15 -0700151 if (mListener != null) {
152 mListener.onEditContactAction(contactUri);
153 }
Dmitri Plotnikov86092522010-10-27 17:03:52 -0700154 }
155
156 public void pickContact(Uri uri) {
Walter Jang9e230612015-05-05 11:35:15 -0700157 if (mListener != null) {
158 mListener.onPickContactAction(uri);
159 }
Dmitri Plotnikov86092522010-10-27 17:03:52 -0700160 }
161
Dmitri Plotnikov732f6522010-04-27 10:30:59 -0700162 @Override
Dmitri Plotnikov41377272010-05-07 10:28:47 -0700163 protected ContactEntryListAdapter createListAdapter() {
Dmitri Plotnikov1ce1e7c2010-05-13 16:41:00 -0700164 if (!isLegacyCompatibilityMode()) {
Brian Attwellbbd22012014-07-16 15:59:10 -0700165 HeaderEntryContactListAdapter adapter
166 = new HeaderEntryContactListAdapter(getActivity());
Katherine Kuanbe18de02011-06-07 12:38:29 -0700167 adapter.setFilter(ContactListFilter.createFilterWithType(
168 ContactListFilter.FILTER_TYPE_ALL_ACCOUNTS));
Dmitri Plotnikov41377272010-05-07 10:28:47 -0700169 adapter.setSectionHeaderDisplayEnabled(true);
170 adapter.setDisplayPhotos(true);
171 adapter.setQuickContactEnabled(false);
Brian Attwellbbd22012014-07-16 15:59:10 -0700172 adapter.setShowCreateContact(mCreateContactEnabled);
Dmitri Plotnikov41377272010-05-07 10:28:47 -0700173 return adapter;
174 } else {
175 LegacyContactListAdapter adapter = new LegacyContactListAdapter(getActivity());
176 adapter.setSectionHeaderDisplayEnabled(false);
177 adapter.setDisplayPhotos(false);
178 return adapter;
179 }
180 }
Dmitri Plotnikovb6c7c6f2010-05-05 14:11:35 -0700181
Dmitri Plotnikov41377272010-05-07 10:28:47 -0700182 @Override
183 protected void configureAdapter() {
184 super.configureAdapter();
Dmitri Plotnikovd3758b02010-06-17 11:34:59 -0700185
Dmitri Plotnikov41377272010-05-07 10:28:47 -0700186 ContactEntryListAdapter adapter = getAdapter();
Dmitri Plotnikove44b0432010-04-30 15:23:41 -0700187
Dmitri Plotnikov68e32a32010-05-06 16:15:14 -0700188 // If "Create new contact" is shown, don't display the empty list UI
189 adapter.setEmptyListEnabled(!isCreateContactEnabled());
Dmitri Plotnikov732f6522010-04-27 10:30:59 -0700190 }
191
192 @Override
193 protected View inflateView(LayoutInflater inflater, ViewGroup container) {
Dmitri Plotnikov84b3cc72010-10-11 18:19:51 -0700194 return inflater.inflate(R.layout.contact_picker_content, null);
Dmitri Plotnikov732f6522010-04-27 10:30:59 -0700195 }
Dmitri Plotnikov8a783192010-05-05 18:59:36 -0700196
Dmitri Plotnikov68e32a32010-05-06 16:15:14 -0700197 @Override
Dmitri Plotnikov8a783192010-05-05 18:59:36 -0700198 public void onShortcutIntentCreated(Uri uri, Intent shortcutIntent) {
Walter Jang9e230612015-05-05 11:35:15 -0700199 if (mListener != null) {
200 mListener.onShortcutIntentCreated(shortcutIntent);
201 }
Dmitri Plotnikov8a783192010-05-05 18:59:36 -0700202 }
Dmitri Plotnikovd3758b02010-06-17 11:34:59 -0700203
204 @Override
Dmitri Plotnikove8a95172010-06-23 16:18:10 -0700205 public void onPickerResult(Intent data) {
Walter Jang9e230612015-05-05 11:35:15 -0700206 if (mListener != null) {
207 mListener.onPickContactAction(data.getData());
208 }
Dmitri Plotnikovd3758b02010-06-17 11:34:59 -0700209 }
Dmitri Plotnikov732f6522010-04-27 10:30:59 -0700210}