1eda61bd20eaf7b1f627bc44962709bf8f1b09628Jeff Hamilton/* 2eda61bd20eaf7b1f627bc44962709bf8f1b09628Jeff Hamilton * Copyright (C) 2010 Google Inc. 3eda61bd20eaf7b1f627bc44962709bf8f1b09628Jeff Hamilton * 4eda61bd20eaf7b1f627bc44962709bf8f1b09628Jeff Hamilton * Licensed under the Apache License, Version 2.0 (the "License"); 5eda61bd20eaf7b1f627bc44962709bf8f1b09628Jeff Hamilton * you may not use this file except in compliance with the License. 6eda61bd20eaf7b1f627bc44962709bf8f1b09628Jeff Hamilton * You may obtain a copy of the License at 7eda61bd20eaf7b1f627bc44962709bf8f1b09628Jeff Hamilton * 8eda61bd20eaf7b1f627bc44962709bf8f1b09628Jeff Hamilton * http://www.apache.org/licenses/LICENSE-2.0 9eda61bd20eaf7b1f627bc44962709bf8f1b09628Jeff Hamilton * 10eda61bd20eaf7b1f627bc44962709bf8f1b09628Jeff Hamilton * Unless required by applicable law or agreed to in writing, software 11eda61bd20eaf7b1f627bc44962709bf8f1b09628Jeff Hamilton * distributed under the License is distributed on an "AS IS" BASIS, 12eda61bd20eaf7b1f627bc44962709bf8f1b09628Jeff Hamilton * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13eda61bd20eaf7b1f627bc44962709bf8f1b09628Jeff Hamilton * See the License for the specific language governing permissions and 14eda61bd20eaf7b1f627bc44962709bf8f1b09628Jeff Hamilton * limitations under the License 15eda61bd20eaf7b1f627bc44962709bf8f1b09628Jeff Hamilton */ 16eda61bd20eaf7b1f627bc44962709bf8f1b09628Jeff Hamilton 17eda61bd20eaf7b1f627bc44962709bf8f1b09628Jeff Hamiltonpackage com.android.loaderapp.fragments; 18eda61bd20eaf7b1f627bc44962709bf8f1b09628Jeff Hamilton 199b694a3b8f0339356c304ae078f63ae91df42226Jeff Hamiltonimport com.android.loaderapp.CursorFactoryListAdapter; 20eda61bd20eaf7b1f627bc44962709bf8f1b09628Jeff Hamiltonimport com.android.loaderapp.R; 219b694a3b8f0339356c304ae078f63ae91df42226Jeff Hamiltonimport com.android.loaderapp.CursorFactoryListAdapter.ResourceViewFactory; 22eda61bd20eaf7b1f627bc44962709bf8f1b09628Jeff Hamiltonimport com.android.loaderapp.model.GroupsListLoader; 23eda61bd20eaf7b1f627bc44962709bf8f1b09628Jeff Hamilton 249b694a3b8f0339356c304ae078f63ae91df42226Jeff Hamiltonimport android.app.LoaderManagingFragment; 259b694a3b8f0339356c304ae078f63ae91df42226Jeff Hamiltonimport android.content.Loader; 26eda61bd20eaf7b1f627bc44962709bf8f1b09628Jeff Hamiltonimport android.database.Cursor; 27eda61bd20eaf7b1f627bc44962709bf8f1b09628Jeff Hamiltonimport android.database.MatrixCursor; 28eda61bd20eaf7b1f627bc44962709bf8f1b09628Jeff Hamiltonimport android.database.MergeCursor; 29eda61bd20eaf7b1f627bc44962709bf8f1b09628Jeff Hamiltonimport android.os.Bundle; 30eda61bd20eaf7b1f627bc44962709bf8f1b09628Jeff Hamiltonimport android.view.LayoutInflater; 31eda61bd20eaf7b1f627bc44962709bf8f1b09628Jeff Hamiltonimport android.view.View; 32eda61bd20eaf7b1f627bc44962709bf8f1b09628Jeff Hamiltonimport android.view.ViewGroup; 33eda61bd20eaf7b1f627bc44962709bf8f1b09628Jeff Hamiltonimport android.widget.AdapterView; 34eda61bd20eaf7b1f627bc44962709bf8f1b09628Jeff Hamiltonimport android.widget.ListView; 35eda61bd20eaf7b1f627bc44962709bf8f1b09628Jeff Hamiltonimport android.widget.AdapterView.OnItemClickListener; 36eda61bd20eaf7b1f627bc44962709bf8f1b09628Jeff Hamilton 37eda61bd20eaf7b1f627bc44962709bf8f1b09628Jeff Hamiltonpublic class GroupsListFragment extends LoaderManagingFragment<Cursor> 38eda61bd20eaf7b1f627bc44962709bf8f1b09628Jeff Hamilton implements OnItemClickListener { 39eda61bd20eaf7b1f627bc44962709bf8f1b09628Jeff Hamilton private static final long GROUP_ID_ALL_CONTACTS = -1; 40eda61bd20eaf7b1f627bc44962709bf8f1b09628Jeff Hamilton private static final long GROUP_ID_FAVORITES = -2; 41eda61bd20eaf7b1f627bc44962709bf8f1b09628Jeff Hamilton 42eda61bd20eaf7b1f627bc44962709bf8f1b09628Jeff Hamilton private static final int LOADER_GROUPS = 0; 43eda61bd20eaf7b1f627bc44962709bf8f1b09628Jeff Hamilton 44eda61bd20eaf7b1f627bc44962709bf8f1b09628Jeff Hamilton Controller mController; 45eda61bd20eaf7b1f627bc44962709bf8f1b09628Jeff Hamilton ListView mList; 46eda61bd20eaf7b1f627bc44962709bf8f1b09628Jeff Hamilton CursorFactoryListAdapter mAdapter; 47eda61bd20eaf7b1f627bc44962709bf8f1b09628Jeff Hamilton 48eda61bd20eaf7b1f627bc44962709bf8f1b09628Jeff Hamilton public interface Controller { 49eda61bd20eaf7b1f627bc44962709bf8f1b09628Jeff Hamilton public void onAllContactsSelected(); 50eda61bd20eaf7b1f627bc44962709bf8f1b09628Jeff Hamilton public void onFavoritesSelected(); 51eda61bd20eaf7b1f627bc44962709bf8f1b09628Jeff Hamilton public void onGroupSelected(String name); 52eda61bd20eaf7b1f627bc44962709bf8f1b09628Jeff Hamilton } 53eda61bd20eaf7b1f627bc44962709bf8f1b09628Jeff Hamilton 54eda61bd20eaf7b1f627bc44962709bf8f1b09628Jeff Hamilton public void setController(Controller controller) { 55eda61bd20eaf7b1f627bc44962709bf8f1b09628Jeff Hamilton mController = controller; 56eda61bd20eaf7b1f627bc44962709bf8f1b09628Jeff Hamilton } 57eda61bd20eaf7b1f627bc44962709bf8f1b09628Jeff Hamilton 58eda61bd20eaf7b1f627bc44962709bf8f1b09628Jeff Hamilton @Override 59b8f21e4c3acceba68a69088e1c4dc489321737f2Jeff Hamilton public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedState) { 60eda61bd20eaf7b1f627bc44962709bf8f1b09628Jeff Hamilton ListView list = (ListView) inflater.inflate(R.layout.contacts_list, container, false); 61eda61bd20eaf7b1f627bc44962709bf8f1b09628Jeff Hamilton list.setOnItemClickListener(this); 62eda61bd20eaf7b1f627bc44962709bf8f1b09628Jeff Hamilton mAdapter = new CursorFactoryListAdapter(getActivity(), 63eda61bd20eaf7b1f627bc44962709bf8f1b09628Jeff Hamilton new ResourceViewFactory(R.layout.xlarge_list_item)); 64eda61bd20eaf7b1f627bc44962709bf8f1b09628Jeff Hamilton list.setAdapter(mAdapter); 65eda61bd20eaf7b1f627bc44962709bf8f1b09628Jeff Hamilton mList = list; 66eda61bd20eaf7b1f627bc44962709bf8f1b09628Jeff Hamilton return list; 67eda61bd20eaf7b1f627bc44962709bf8f1b09628Jeff Hamilton } 68eda61bd20eaf7b1f627bc44962709bf8f1b09628Jeff Hamilton 69eda61bd20eaf7b1f627bc44962709bf8f1b09628Jeff Hamilton @Override 70eda61bd20eaf7b1f627bc44962709bf8f1b09628Jeff Hamilton public void onInitializeLoaders() { 71eda61bd20eaf7b1f627bc44962709bf8f1b09628Jeff Hamilton startLoading(LOADER_GROUPS, null); 72eda61bd20eaf7b1f627bc44962709bf8f1b09628Jeff Hamilton } 73eda61bd20eaf7b1f627bc44962709bf8f1b09628Jeff Hamilton 74eda61bd20eaf7b1f627bc44962709bf8f1b09628Jeff Hamilton @Override 75eda61bd20eaf7b1f627bc44962709bf8f1b09628Jeff Hamilton protected Loader onCreateLoader(int id, Bundle args) { 76eda61bd20eaf7b1f627bc44962709bf8f1b09628Jeff Hamilton switch (id) { 77eda61bd20eaf7b1f627bc44962709bf8f1b09628Jeff Hamilton case LOADER_GROUPS: { 78eda61bd20eaf7b1f627bc44962709bf8f1b09628Jeff Hamilton return new GroupsListLoader(getActivity()); 79eda61bd20eaf7b1f627bc44962709bf8f1b09628Jeff Hamilton } 80eda61bd20eaf7b1f627bc44962709bf8f1b09628Jeff Hamilton } 81eda61bd20eaf7b1f627bc44962709bf8f1b09628Jeff Hamilton 82eda61bd20eaf7b1f627bc44962709bf8f1b09628Jeff Hamilton return null; 83eda61bd20eaf7b1f627bc44962709bf8f1b09628Jeff Hamilton } 84eda61bd20eaf7b1f627bc44962709bf8f1b09628Jeff Hamilton 85eda61bd20eaf7b1f627bc44962709bf8f1b09628Jeff Hamilton @Override 86eda61bd20eaf7b1f627bc44962709bf8f1b09628Jeff Hamilton public void onLoadFinished(Loader loader, Cursor data) { 87eda61bd20eaf7b1f627bc44962709bf8f1b09628Jeff Hamilton switch (loader.getId()) { 88eda61bd20eaf7b1f627bc44962709bf8f1b09628Jeff Hamilton case LOADER_GROUPS: { 89eda61bd20eaf7b1f627bc44962709bf8f1b09628Jeff Hamilton setData(data); 90eda61bd20eaf7b1f627bc44962709bf8f1b09628Jeff Hamilton break; 91eda61bd20eaf7b1f627bc44962709bf8f1b09628Jeff Hamilton } 92eda61bd20eaf7b1f627bc44962709bf8f1b09628Jeff Hamilton } 93eda61bd20eaf7b1f627bc44962709bf8f1b09628Jeff Hamilton } 94eda61bd20eaf7b1f627bc44962709bf8f1b09628Jeff Hamilton 95eda61bd20eaf7b1f627bc44962709bf8f1b09628Jeff Hamilton private void setData(Cursor groups) { 96eda61bd20eaf7b1f627bc44962709bf8f1b09628Jeff Hamilton MatrixCursor psuedoGroups = new MatrixCursor(new String[] { "_id", "name" }); 97eda61bd20eaf7b1f627bc44962709bf8f1b09628Jeff Hamilton psuedoGroups.newRow().add(-1).add("All Contacts"); 98eda61bd20eaf7b1f627bc44962709bf8f1b09628Jeff Hamilton psuedoGroups.newRow().add(-2).add("Favorites"); 99eda61bd20eaf7b1f627bc44962709bf8f1b09628Jeff Hamilton mAdapter.changeCursor(new MergeCursor(new Cursor[] { psuedoGroups, groups })); 100eda61bd20eaf7b1f627bc44962709bf8f1b09628Jeff Hamilton } 101eda61bd20eaf7b1f627bc44962709bf8f1b09628Jeff Hamilton 102eda61bd20eaf7b1f627bc44962709bf8f1b09628Jeff Hamilton public void onItemClick(AdapterView<?> parent, View view, int position, long id) { 103eda61bd20eaf7b1f627bc44962709bf8f1b09628Jeff Hamilton if (id == GROUP_ID_ALL_CONTACTS) { 104eda61bd20eaf7b1f627bc44962709bf8f1b09628Jeff Hamilton mController.onAllContactsSelected(); 105eda61bd20eaf7b1f627bc44962709bf8f1b09628Jeff Hamilton } else if (id == GROUP_ID_FAVORITES) { 106eda61bd20eaf7b1f627bc44962709bf8f1b09628Jeff Hamilton mController.onFavoritesSelected(); 107eda61bd20eaf7b1f627bc44962709bf8f1b09628Jeff Hamilton } else { 108eda61bd20eaf7b1f627bc44962709bf8f1b09628Jeff Hamilton Cursor cursor = (Cursor) mAdapter.getItem(position); 109eda61bd20eaf7b1f627bc44962709bf8f1b09628Jeff Hamilton mController.onGroupSelected(cursor.getString(GroupsListLoader.COLUMN_TITLE)); 110eda61bd20eaf7b1f627bc44962709bf8f1b09628Jeff Hamilton } 111eda61bd20eaf7b1f627bc44962709bf8f1b09628Jeff Hamilton } 112eda61bd20eaf7b1f627bc44962709bf8f1b09628Jeff Hamilton}