blob: e1f33b4ebbbd25263229286b40db1de485354860 [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;
Gary Maiac459a22016-12-14 17:29:33 -080024import android.widget.AdapterView;
Dmitri Plotnikov732f6522010-04-27 10:30:59 -070025
Chiao Chenge0b2f1e2012-06-12 13:07:56 -070026import com.android.contacts.R;
Gary Mai69c182a2016-12-05 13:07:03 -080027import com.android.contacts.list.ShortcutIntentBuilder.OnShortcutIntentCreatedListener;
Chiao Chenge0b2f1e2012-06-12 13:07:56 -070028
Dmitri Plotnikov732f6522010-04-27 10:30:59 -070029/**
Dmitri Plotnikov416b5692010-04-27 18:14:58 -070030 * Fragment for the contact list used for browsing contacts (as compared to
31 * picking a contact with one of the PICK or SHORTCUT intents).
Dmitri Plotnikov732f6522010-04-27 10:30:59 -070032 */
Dmitri Plotnikov41377272010-05-07 10:28:47 -070033public class ContactPickerFragment extends ContactEntryListFragment<ContactEntryListAdapter>
Dmitri Plotnikov8a783192010-05-05 18:59:36 -070034 implements OnShortcutIntentCreatedListener {
Dmitri Plotnikov732f6522010-04-27 10:30:59 -070035
Dmitri Plotnikov86092522010-10-27 17:03:52 -070036 private static final String KEY_EDIT_MODE = "editMode";
37 private static final String KEY_CREATE_CONTACT_ENABLED = "createContactEnabled";
38 private static final String KEY_SHORTCUT_REQUESTED = "shortcutRequested";
39
Dmitri Plotnikov416b5692010-04-27 18:14:58 -070040 private OnContactPickerActionListener mListener;
Dmitri Plotnikov732f6522010-04-27 10:30:59 -070041 private boolean mCreateContactEnabled;
Dmitri Plotnikov86092522010-10-27 17:03:52 -070042 private boolean mEditMode;
Dmitri Plotnikov8a783192010-05-05 18:59:36 -070043 private boolean mShortcutRequested;
Dmitri Plotnikov732f6522010-04-27 10:30:59 -070044
Dmitri Plotnikovd621f712010-06-16 17:28:07 -070045 public ContactPickerFragment() {
46 setPhotoLoaderEnabled(true);
Dmitri Plotnikovd3758b02010-06-17 11:34:59 -070047 setSectionHeaderDisplayEnabled(true);
Dmitri Plotnikov5245ea62010-12-10 15:03:13 -080048 setVisibleScrollbarEnabled(true);
Dmitri Plotnikov84b3cc72010-10-11 18:19:51 -070049 setQuickContactEnabled(false);
Dmitri Plotnikov4d174aa2010-10-25 15:38:54 -070050 setDirectorySearchMode(DirectoryListLoader.SEARCH_MODE_CONTACT_SHORTCUT);
Dmitri Plotnikovd621f712010-06-16 17:28:07 -070051 }
52
Dmitri Plotnikov416b5692010-04-27 18:14:58 -070053 public void setOnContactPickerActionListener(OnContactPickerActionListener listener) {
Dmitri Plotnikov732f6522010-04-27 10:30:59 -070054 mListener = listener;
55 }
56
Dmitri Plotnikovb6c7c6f2010-05-05 14:11:35 -070057 public void setCreateContactEnabled(boolean flag) {
58 this.mCreateContactEnabled = flag;
59 }
60
Dmitri Plotnikov86092522010-10-27 17:03:52 -070061 public void setEditMode(boolean flag) {
62 mEditMode = flag;
63 }
64
Dmitri Plotnikov8a783192010-05-05 18:59:36 -070065 public void setShortcutRequested(boolean flag) {
66 mShortcutRequested = flag;
Dmitri Plotnikovb6c7c6f2010-05-05 14:11:35 -070067 }
68
69 @Override
Dmitri Plotnikov86092522010-10-27 17:03:52 -070070 public void onSaveInstanceState(Bundle outState) {
71 super.onSaveInstanceState(outState);
72 outState.putBoolean(KEY_EDIT_MODE, mEditMode);
73 outState.putBoolean(KEY_CREATE_CONTACT_ENABLED, mCreateContactEnabled);
74 outState.putBoolean(KEY_SHORTCUT_REQUESTED, mShortcutRequested);
75 }
76
77 @Override
78 public void restoreSavedState(Bundle savedState) {
79 super.restoreSavedState(savedState);
80
81 if (savedState == null) {
82 return;
83 }
84
85 mEditMode = savedState.getBoolean(KEY_EDIT_MODE);
86 mCreateContactEnabled = savedState.getBoolean(KEY_CREATE_CONTACT_ENABLED);
87 mShortcutRequested = savedState.getBoolean(KEY_SHORTCUT_REQUESTED);
88 }
89
90 @Override
Gary Maiac459a22016-12-14 17:29:33 -080091 public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
92 if (position == 0 && mCreateContactEnabled && mListener != null) {
93 mListener.onCreateNewContactAction();
94 } else {
95 super.onItemClick(parent, view, position, id);
96 }
97 }
98
99 @Override
Dmitri Plotnikov732f6522010-04-27 10:30:59 -0700100 protected void onItemClick(int position, long id) {
Dmitri Plotnikovd3758b02010-06-17 11:34:59 -0700101 Uri uri;
102 if (isLegacyCompatibilityMode()) {
103 uri = ((LegacyContactListAdapter)getAdapter()).getPersonUri(position);
Dmitri Plotnikov416b5692010-04-27 18:14:58 -0700104 } else {
Dmitri Plotnikovd3758b02010-06-17 11:34:59 -0700105 uri = ((ContactListAdapter)getAdapter()).getContactUri(position);
106 }
Brian Attwellb831b142014-10-03 15:45:18 -0700107 if (uri == null) {
108 return;
109 }
Dmitri Plotnikov86092522010-10-27 17:03:52 -0700110 if (mEditMode) {
111 editContact(uri);
112 } else if (mShortcutRequested) {
Dmitri Plotnikovd3758b02010-06-17 11:34:59 -0700113 ShortcutIntentBuilder builder = new ShortcutIntentBuilder(getActivity(), this);
114 builder.createContactShortcutIntent(uri);
115 } else {
Dmitri Plotnikov86092522010-10-27 17:03:52 -0700116 pickContact(uri);
Dmitri Plotnikov732f6522010-04-27 10:30:59 -0700117 }
118 }
119
Dmitri Plotnikov86092522010-10-27 17:03:52 -0700120 public void editContact(Uri contactUri) {
Walter Jang9e230612015-05-05 11:35:15 -0700121 if (mListener != null) {
122 mListener.onEditContactAction(contactUri);
123 }
Dmitri Plotnikov86092522010-10-27 17:03:52 -0700124 }
125
126 public void pickContact(Uri uri) {
Walter Jang9e230612015-05-05 11:35:15 -0700127 if (mListener != null) {
128 mListener.onPickContactAction(uri);
129 }
Dmitri Plotnikov86092522010-10-27 17:03:52 -0700130 }
131
Dmitri Plotnikov732f6522010-04-27 10:30:59 -0700132 @Override
Dmitri Plotnikov41377272010-05-07 10:28:47 -0700133 protected ContactEntryListAdapter createListAdapter() {
Dmitri Plotnikov1ce1e7c2010-05-13 16:41:00 -0700134 if (!isLegacyCompatibilityMode()) {
Brian Attwellbbd22012014-07-16 15:59:10 -0700135 HeaderEntryContactListAdapter adapter
136 = new HeaderEntryContactListAdapter(getActivity());
Katherine Kuanbe18de02011-06-07 12:38:29 -0700137 adapter.setFilter(ContactListFilter.createFilterWithType(
138 ContactListFilter.FILTER_TYPE_ALL_ACCOUNTS));
Dmitri Plotnikov41377272010-05-07 10:28:47 -0700139 adapter.setSectionHeaderDisplayEnabled(true);
140 adapter.setDisplayPhotos(true);
141 adapter.setQuickContactEnabled(false);
Brian Attwellbbd22012014-07-16 15:59:10 -0700142 adapter.setShowCreateContact(mCreateContactEnabled);
Dmitri Plotnikov41377272010-05-07 10:28:47 -0700143 return adapter;
144 } else {
145 LegacyContactListAdapter adapter = new LegacyContactListAdapter(getActivity());
146 adapter.setSectionHeaderDisplayEnabled(false);
147 adapter.setDisplayPhotos(false);
148 return adapter;
149 }
150 }
Dmitri Plotnikovb6c7c6f2010-05-05 14:11:35 -0700151
Dmitri Plotnikov41377272010-05-07 10:28:47 -0700152 @Override
Dmitri Plotnikov732f6522010-04-27 10:30:59 -0700153 protected View inflateView(LayoutInflater inflater, ViewGroup container) {
Dmitri Plotnikov84b3cc72010-10-11 18:19:51 -0700154 return inflater.inflate(R.layout.contact_picker_content, null);
Dmitri Plotnikov732f6522010-04-27 10:30:59 -0700155 }
Dmitri Plotnikov8a783192010-05-05 18:59:36 -0700156
Dmitri Plotnikov68e32a32010-05-06 16:15:14 -0700157 @Override
Dmitri Plotnikov8a783192010-05-05 18:59:36 -0700158 public void onShortcutIntentCreated(Uri uri, Intent shortcutIntent) {
Walter Jang9e230612015-05-05 11:35:15 -0700159 if (mListener != null) {
160 mListener.onShortcutIntentCreated(shortcutIntent);
161 }
Dmitri Plotnikov8a783192010-05-05 18:59:36 -0700162 }
Dmitri Plotnikovd3758b02010-06-17 11:34:59 -0700163
164 @Override
Dmitri Plotnikove8a95172010-06-23 16:18:10 -0700165 public void onPickerResult(Intent data) {
Walter Jang9e230612015-05-05 11:35:15 -0700166 if (mListener != null) {
167 mListener.onPickContactAction(data.getData());
168 }
Dmitri Plotnikovd3758b02010-06-17 11:34:59 -0700169 }
Dmitri Plotnikov732f6522010-04-27 10:30:59 -0700170}