1/*
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
18import android.content.Intent;
19import android.net.Uri;
20import android.os.Bundle;
21import android.view.LayoutInflater;
22import android.view.View;
23import android.view.ViewGroup;
24import android.widget.AdapterView;
25
26import com.android.contacts.R;
27import com.android.contacts.ShortcutIntentBuilder;
28import com.android.contacts.ShortcutIntentBuilder.OnShortcutIntentCreatedListener;
29
30/**
31 * Fragment for the contact list used for browsing contacts (as compared to
32 * picking a contact with one of the PICK or SHORTCUT intents).
33 */
34public class ContactPickerFragment extends ContactEntryListFragment<ContactEntryListAdapter>
35        implements OnShortcutIntentCreatedListener {
36
37    private static final String KEY_EDIT_MODE = "editMode";
38    private static final String KEY_CREATE_CONTACT_ENABLED = "createContactEnabled";
39    private static final String KEY_SHORTCUT_REQUESTED = "shortcutRequested";
40
41    private OnContactPickerActionListener mListener;
42    private boolean mCreateContactEnabled;
43    private boolean mEditMode;
44    private boolean mShortcutRequested;
45
46    public ContactPickerFragment() {
47        setPhotoLoaderEnabled(true);
48        setSectionHeaderDisplayEnabled(true);
49        setVisibleScrollbarEnabled(true);
50        setQuickContactEnabled(false);
51        setDirectorySearchMode(DirectoryListLoader.SEARCH_MODE_CONTACT_SHORTCUT);
52    }
53
54    public void setOnContactPickerActionListener(OnContactPickerActionListener listener) {
55        mListener = listener;
56    }
57
58    public void setCreateContactEnabled(boolean flag) {
59        this.mCreateContactEnabled = flag;
60    }
61
62    public void setEditMode(boolean flag) {
63        mEditMode = flag;
64    }
65
66    public void setShortcutRequested(boolean flag) {
67        mShortcutRequested = flag;
68    }
69
70    @Override
71    public void onSaveInstanceState(Bundle outState) {
72        super.onSaveInstanceState(outState);
73        outState.putBoolean(KEY_EDIT_MODE, mEditMode);
74        outState.putBoolean(KEY_CREATE_CONTACT_ENABLED, mCreateContactEnabled);
75        outState.putBoolean(KEY_SHORTCUT_REQUESTED, mShortcutRequested);
76    }
77
78    @Override
79    public void restoreSavedState(Bundle savedState) {
80        super.restoreSavedState(savedState);
81
82        if (savedState == null) {
83            return;
84        }
85
86        mEditMode = savedState.getBoolean(KEY_EDIT_MODE);
87        mCreateContactEnabled = savedState.getBoolean(KEY_CREATE_CONTACT_ENABLED);
88        mShortcutRequested = savedState.getBoolean(KEY_SHORTCUT_REQUESTED);
89    }
90
91    @Override
92    public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
93        if (position == 0 && mCreateContactEnabled && mListener != null) {
94            mListener.onCreateNewContactAction();
95        } else {
96            super.onItemClick(parent, view, position, id);
97        }
98    }
99
100    @Override
101    protected void onItemClick(int position, long id) {
102        Uri uri;
103        if (isLegacyCompatibilityMode()) {
104            uri = ((LegacyContactListAdapter)getAdapter()).getPersonUri(position);
105        } else {
106            uri = ((ContactListAdapter)getAdapter()).getContactUri(position);
107        }
108        if (uri == null) {
109            return;
110        }
111        if (mEditMode) {
112            editContact(uri);
113        } else  if (mShortcutRequested) {
114            ShortcutIntentBuilder builder = new ShortcutIntentBuilder(getActivity(), this);
115            builder.createContactShortcutIntent(uri);
116        } else {
117            pickContact(uri);
118        }
119    }
120
121    public void editContact(Uri contactUri) {
122        if (mListener != null) {
123            mListener.onEditContactAction(contactUri);
124        }
125    }
126
127    public void pickContact(Uri uri) {
128        if (mListener != null) {
129            mListener.onPickContactAction(uri);
130        }
131    }
132
133    @Override
134    protected ContactEntryListAdapter createListAdapter() {
135        if (!isLegacyCompatibilityMode()) {
136            HeaderEntryContactListAdapter adapter
137                    = new HeaderEntryContactListAdapter(getActivity());
138            adapter.setFilter(ContactListFilter.createFilterWithType(
139                    ContactListFilter.FILTER_TYPE_ALL_ACCOUNTS));
140            adapter.setSectionHeaderDisplayEnabled(true);
141            adapter.setDisplayPhotos(true);
142            adapter.setQuickContactEnabled(false);
143            adapter.setShowCreateContact(mCreateContactEnabled);
144            return adapter;
145        } else {
146            LegacyContactListAdapter adapter = new LegacyContactListAdapter(getActivity());
147            adapter.setSectionHeaderDisplayEnabled(false);
148            adapter.setDisplayPhotos(false);
149            return adapter;
150        }
151    }
152
153    @Override
154    protected View inflateView(LayoutInflater inflater, ViewGroup container) {
155        return inflater.inflate(R.layout.contact_picker_content, null);
156    }
157
158    @Override
159    public void onShortcutIntentCreated(Uri uri, Intent shortcutIntent) {
160        if (mListener != null) {
161            mListener.onShortcutIntentCreated(shortcutIntent);
162        }
163    }
164
165    @Override
166    public void onPickerResult(Intent data) {
167        if (mListener != null) {
168            mListener.onPickContactAction(data.getData());
169        }
170    }
171}
172