• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (C) 2011 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  */
16 package com.android.contacts.list;
17 
18 import com.android.contacts.ContactPhotoManager;
19 import com.android.contacts.ContactTileLoaderFactory;
20 import com.android.contacts.R;
21 import com.android.contacts.list.ContactTileAdapter.DisplayType;
22 
23 import android.app.Activity;
24 import android.app.Fragment;
25 import android.app.LoaderManager;
26 import android.app.LoaderManager.LoaderCallbacks;
27 import android.content.CursorLoader;
28 import android.content.Loader;
29 import android.content.res.Resources;
30 import android.database.Cursor;
31 import android.net.Uri;
32 import android.os.Bundle;
33 import android.view.LayoutInflater;
34 import android.view.View;
35 import android.view.ViewGroup;
36 import android.widget.ListView;
37 import android.widget.TextView;
38 
39 /**
40  * Fragment containing a list of starred contacts followed by a list of frequently contacted.
41  */
42 public class ContactTileListFragment extends Fragment {
43     private static final String TAG = ContactTileListFragment.class.getSimpleName();
44 
45     public interface Listener {
onContactSelected(Uri contactUri)46         public void onContactSelected(Uri contactUri);
47     }
48 
49     private static int LOADER_CONTACTS = 1;
50 
51     private Listener mListener;
52     private ContactTileAdapter mAdapter;
53     private DisplayType mDisplayType;
54     private TextView mEmptyView;
55     private ListView mListView;
56 
57     @Override
onAttach(Activity activity)58     public void onAttach(Activity activity) {
59         super.onAttach(activity);
60 
61         Resources res = getResources();
62         int columnCount = res.getInteger(R.integer.contact_tile_column_count);
63 
64         mAdapter = new ContactTileAdapter(activity, mAdapterListener,
65                 columnCount, mDisplayType);
66         mAdapter.setPhotoLoader(ContactPhotoManager.getInstance(activity));
67     }
68 
69     @Override
onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)70     public View onCreateView(LayoutInflater inflater, ViewGroup container,
71             Bundle savedInstanceState) {
72         View listLayout = inflater.inflate(R.layout.contact_tile_list, container, false);
73 
74         mEmptyView = (TextView) listLayout.findViewById(R.id.contact_tile_list_empty);
75         mListView = (ListView) listLayout.findViewById(R.id.contact_tile_list);
76 
77         mListView.setItemsCanFocus(true);
78         mListView.setAdapter(mAdapter);
79 
80         return listLayout;
81     }
82 
83     @Override
onStart()84     public void onStart() {
85         super.onStart();
86         // TODO: Use initLoader?
87         getLoaderManager().restartLoader(LOADER_CONTACTS, null, mContactTileLoaderListener);
88     }
89 
setColumnCount(int columnCount)90     public void setColumnCount(int columnCount) {
91         mAdapter.setColumnCount(columnCount);
92     }
93 
setDisplayType(DisplayType displayType)94     public void setDisplayType(DisplayType displayType) {
95         mDisplayType = displayType;
96         mAdapter.setDisplayType(mDisplayType);
97     }
98 
enableQuickContact(boolean enableQuickContact)99     public void enableQuickContact(boolean enableQuickContact) {
100         mAdapter.enableQuickContact(enableQuickContact);
101     }
102 
103     private final LoaderManager.LoaderCallbacks<Cursor> mContactTileLoaderListener =
104             new LoaderCallbacks<Cursor>() {
105 
106         @Override
107         public CursorLoader onCreateLoader(int id, Bundle args) {
108             switch (mDisplayType) {
109               case STARRED_ONLY:
110                   return ContactTileLoaderFactory.createStarredLoader(getActivity());
111               case STREQUENT:
112                   return ContactTileLoaderFactory.createStrequentLoader(getActivity());
113               case STREQUENT_PHONE_ONLY:
114                   return ContactTileLoaderFactory.createStrequentPhoneOnlyLoader(getActivity());
115               case FREQUENT_ONLY:
116                   return ContactTileLoaderFactory.createFrequentLoader(getActivity());
117               default:
118                   throw new IllegalStateException(
119                       "Unrecognized DisplayType " + mDisplayType);
120             }
121         }
122 
123         @Override
124         public void onLoadFinished(Loader<Cursor> loader, Cursor data) {
125             mAdapter.setContactCursor(data);
126             mEmptyView.setText(getEmptyStateText());
127             mListView.setEmptyView(mEmptyView);
128         }
129 
130         @Override
131         public void onLoaderReset(Loader<Cursor> loader) {}
132     };
133 
getEmptyStateText()134     private String getEmptyStateText() {
135         String emptyText;
136         switch (mDisplayType) {
137             case STREQUENT:
138             case STREQUENT_PHONE_ONLY:
139             case STARRED_ONLY:
140                 emptyText = getString(R.string.listTotalAllContactsZeroStarred);
141                 break;
142             case FREQUENT_ONLY:
143             case GROUP_MEMBERS:
144                 emptyText = getString(R.string.noContacts);
145                 break;
146             default:
147                 throw new IllegalArgumentException("Unrecognized DisplayType " + mDisplayType);
148         }
149         return emptyText;
150     }
151 
setListener(Listener listener)152     public void setListener(Listener listener) {
153         mListener = listener;
154     }
155 
156     private ContactTileAdapter.Listener mAdapterListener =
157             new ContactTileAdapter.Listener() {
158         @Override
159         public void onContactSelected(Uri contactUri) {
160             if (mListener != null) {
161                 mListener.onContactSelected(contactUri);
162             }
163         }
164     };
165 }
166