blob: c8ad712a77ef629b328334035af1702d89b248d9 [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;
28import com.android.contacts.common.list.ContactListAdapter;
29import com.android.contacts.common.list.ContactListFilter;
30import com.android.contacts.common.list.DefaultContactListAdapter;
31import 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);
Dmitri Plotnikovb6c7c6f2010-05-05 14:11:35 -0700107 if (mCreateContactEnabled) {
108 getListView().addHeaderView(inflater.inflate(R.layout.create_new_contact, null, false));
109 }
Dmitri Plotnikovb6c7c6f2010-05-05 14:11:35 -0700110 }
111
Dmitri Plotnikov732f6522010-04-27 10:30:59 -0700112 @Override
Dmitri Plotnikovb6c7c6f2010-05-05 14:11:35 -0700113 public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
Dmitri Plotnikov86092522010-10-27 17:03:52 -0700114 if (position == 0 && mCreateContactEnabled) {
Dmitri Plotnikovb6c7c6f2010-05-05 14:11:35 -0700115 mListener.onCreateNewContactAction();
116 } else {
117 super.onItemClick(parent, view, position, id);
118 }
119 }
120
121 @Override
Dmitri Plotnikov732f6522010-04-27 10:30:59 -0700122 protected void onItemClick(int position, long id) {
Dmitri Plotnikovd3758b02010-06-17 11:34:59 -0700123 Uri uri;
124 if (isLegacyCompatibilityMode()) {
125 uri = ((LegacyContactListAdapter)getAdapter()).getPersonUri(position);
Dmitri Plotnikov416b5692010-04-27 18:14:58 -0700126 } else {
Dmitri Plotnikovd3758b02010-06-17 11:34:59 -0700127 uri = ((ContactListAdapter)getAdapter()).getContactUri(position);
128 }
Dmitri Plotnikov86092522010-10-27 17:03:52 -0700129 if (mEditMode) {
130 editContact(uri);
131 } else if (mShortcutRequested) {
Dmitri Plotnikovd3758b02010-06-17 11:34:59 -0700132 ShortcutIntentBuilder builder = new ShortcutIntentBuilder(getActivity(), this);
133 builder.createContactShortcutIntent(uri);
134 } else {
Dmitri Plotnikov86092522010-10-27 17:03:52 -0700135 pickContact(uri);
Dmitri Plotnikov732f6522010-04-27 10:30:59 -0700136 }
137 }
138
Dmitri Plotnikov86092522010-10-27 17:03:52 -0700139 public void createNewContact() {
140 mListener.onCreateNewContactAction();
141 }
142
143 public void editContact(Uri contactUri) {
144 mListener.onEditContactAction(contactUri);
145 }
146
147 public void pickContact(Uri uri) {
148 mListener.onPickContactAction(uri);
149 }
150
Dmitri Plotnikov732f6522010-04-27 10:30:59 -0700151 @Override
Dmitri Plotnikov41377272010-05-07 10:28:47 -0700152 protected ContactEntryListAdapter createListAdapter() {
Dmitri Plotnikov1ce1e7c2010-05-13 16:41:00 -0700153 if (!isLegacyCompatibilityMode()) {
Dmitri Plotnikov58be7ed2010-10-13 09:09:05 -0700154 DefaultContactListAdapter adapter = new DefaultContactListAdapter(getActivity());
Katherine Kuanbe18de02011-06-07 12:38:29 -0700155 adapter.setFilter(ContactListFilter.createFilterWithType(
156 ContactListFilter.FILTER_TYPE_ALL_ACCOUNTS));
Dmitri Plotnikov41377272010-05-07 10:28:47 -0700157 adapter.setSectionHeaderDisplayEnabled(true);
158 adapter.setDisplayPhotos(true);
159 adapter.setQuickContactEnabled(false);
160 return adapter;
161 } else {
162 LegacyContactListAdapter adapter = new LegacyContactListAdapter(getActivity());
163 adapter.setSectionHeaderDisplayEnabled(false);
164 adapter.setDisplayPhotos(false);
165 return adapter;
166 }
167 }
Dmitri Plotnikovb6c7c6f2010-05-05 14:11:35 -0700168
Dmitri Plotnikov41377272010-05-07 10:28:47 -0700169 @Override
170 protected void configureAdapter() {
171 super.configureAdapter();
Dmitri Plotnikovd3758b02010-06-17 11:34:59 -0700172
Dmitri Plotnikov41377272010-05-07 10:28:47 -0700173 ContactEntryListAdapter adapter = getAdapter();
Dmitri Plotnikove44b0432010-04-30 15:23:41 -0700174
Dmitri Plotnikov68e32a32010-05-06 16:15:14 -0700175 // If "Create new contact" is shown, don't display the empty list UI
176 adapter.setEmptyListEnabled(!isCreateContactEnabled());
Dmitri Plotnikov732f6522010-04-27 10:30:59 -0700177 }
178
179 @Override
180 protected View inflateView(LayoutInflater inflater, ViewGroup container) {
Dmitri Plotnikov84b3cc72010-10-11 18:19:51 -0700181 return inflater.inflate(R.layout.contact_picker_content, null);
Dmitri Plotnikov732f6522010-04-27 10:30:59 -0700182 }
Dmitri Plotnikov8a783192010-05-05 18:59:36 -0700183
Dmitri Plotnikov68e32a32010-05-06 16:15:14 -0700184 @Override
Dmitri Plotnikov8a783192010-05-05 18:59:36 -0700185 public void onShortcutIntentCreated(Uri uri, Intent shortcutIntent) {
186 mListener.onShortcutIntentCreated(shortcutIntent);
187 }
Dmitri Plotnikovd3758b02010-06-17 11:34:59 -0700188
189 @Override
Dmitri Plotnikove8a95172010-06-23 16:18:10 -0700190 public void onPickerResult(Intent data) {
191 mListener.onPickContactAction(data.getData());
Dmitri Plotnikovd3758b02010-06-17 11:34:59 -0700192 }
Dmitri Plotnikov732f6522010-04-27 10:30:59 -0700193}