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