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}