ContactBrowseListFragment.java revision cfc648986f569bde83715584a91f89ed28dd8335
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 com.android.contacts.R;
19
20import android.content.CursorLoader;
21import android.content.Loader;
22import android.database.Cursor;
23import android.net.Uri;
24import android.os.Bundle;
25import android.provider.ContactsContract.Contacts;
26import android.widget.ListView;
27
28/**
29 * Fragment containing a contact list used for browsing (as compared to
30 * picking a contact with one of the PICK intents).
31 */
32public abstract class ContactBrowseListFragment extends
33        ContactEntryListFragment<ContactListAdapter> {
34
35    private static final String KEY_SELECTED_URI = "selectedUri";
36
37    private static final int SELECTED_ID_LOADER = -3;
38
39    private Uri mSelectedContactUri;
40
41    private OnContactBrowserActionListener mListener;
42
43    @Override
44    public void restoreSavedState(Bundle savedState) {
45        super.restoreSavedState(savedState);
46
47        if (savedState == null) {
48            return;
49        }
50
51        mSelectedContactUri = savedState.getParcelable(KEY_SELECTED_URI);
52    }
53
54    @Override
55    public void onSaveInstanceState(Bundle outState) {
56        super.onSaveInstanceState(outState);
57        outState.putParcelable(KEY_SELECTED_URI, mSelectedContactUri);
58    }
59
60    @Override
61    public void onStart() {
62        super.onStart();
63        if (mSelectedContactUri != null && isSelectionVisible()) {
64            startLoading(SELECTED_ID_LOADER, null);
65        }
66   }
67
68    @Override
69    protected Loader<Cursor> onCreateLoader(int id, Bundle args) {
70        if (id == SELECTED_ID_LOADER) {
71            return new CursorLoader(getContext(),
72                    mSelectedContactUri,
73                    new String[] { Contacts._ID },
74                    null,
75                    null,
76                    null);
77        }
78
79        return super.onCreateLoader(id, args);
80    }
81
82    @Override
83    protected void onLoadFinished(Loader<Cursor> loader, Cursor data) {
84        if (loader.getId() == SELECTED_ID_LOADER) {
85            long selectedId = ListView.INVALID_ROW_ID;
86            if (data.moveToFirst()) {
87                selectedId = data.getLong(0);
88            }
89            getAdapter().setSelectedContactId(selectedId);
90            return;
91        }
92
93        super.onLoadFinished(loader, data);
94    }
95
96    @Override
97    protected void prepareEmptyView() {
98        if (isSearchMode()) {
99            return;
100        } else if (isSyncActive()) {
101            if (hasIccCard()) {
102                setEmptyText(R.string.noContactsHelpTextWithSync);
103            } else {
104                setEmptyText(R.string.noContactsNoSimHelpTextWithSync);
105            }
106        } else {
107            if (hasIccCard()) {
108                setEmptyText(R.string.noContactsHelpText);
109            } else {
110                setEmptyText(R.string.noContactsNoSimHelpText);
111            }
112        }
113    }
114
115    public Uri getSelectedContactUri() {
116        return mSelectedContactUri;
117    }
118
119    public void setSelectedContactUri(Uri uri) {
120        if ((mSelectedContactUri == null && uri != null)
121                || (mSelectedContactUri != null && !mSelectedContactUri.equals(uri))) {
122            this.mSelectedContactUri = uri;
123            if (mSelectedContactUri != null) {
124                CursorLoader loader = (CursorLoader)getLoader(SELECTED_ID_LOADER);
125                if (loader == null) {
126                    startLoading(SELECTED_ID_LOADER, null);
127                } else {
128                    loader.setUri(mSelectedContactUri);
129                    loader.forceLoad();
130                }
131            }
132        }
133    }
134
135    public void setOnContactListActionListener(OnContactBrowserActionListener listener) {
136        mListener = listener;
137    }
138
139    public void createNewContact() {
140        mListener.onCreateNewContactAction();
141    }
142
143    public void viewContact(Uri contactUri) {
144        mListener.onViewContactAction(contactUri);
145    }
146
147    public void editContact(Uri contactUri) {
148        mListener.onEditContactAction(contactUri);
149    }
150
151    public void deleteContact(Uri contactUri) {
152        mListener.onDeleteContactAction(contactUri);
153    }
154
155    public void addToFavorites(Uri contactUri) {
156        mListener.onAddToFavoritesAction(contactUri);
157    }
158
159    public void removeFromFavorites(Uri contactUri) {
160        mListener.onRemoveFromFavoritesAction(contactUri);
161    }
162
163    public void callContact(Uri contactUri) {
164        mListener.onCallContactAction(contactUri);
165    }
166
167    public void smsContact(Uri contactUri) {
168        mListener.onSmsContactAction(contactUri);
169    }
170
171    @Override
172    protected void finish() {
173        super.finish();
174        mListener.onFinishAction();
175    }
176}
177