package be.digitalia.fosdem.fragments;
import android.content.Context;
import android.content.Intent;
import android.database.Cursor;
import android.os.Bundle;
import android.support.v4.app.LoaderManager.LoaderCallbacks;
import android.support.v4.content.Loader;
import android.support.v4.widget.CursorAdapter;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AlphabetIndexer;
import android.widget.ListView;
import android.widget.SectionIndexer;
import android.widget.TextView;
import be.digitalia.fosdem.R;
import be.digitalia.fosdem.activities.PersonInfoActivity;
import be.digitalia.fosdem.db.DatabaseManager;
import be.digitalia.fosdem.loaders.SimpleCursorLoader;
import be.digitalia.fosdem.model.Person;
public class PersonsListFragment extends SmoothListFragment implements LoaderCallbacks<Cursor> {
private static final int PERSONS_LOADER_ID = 1;
private PersonsAdapter adapter;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
adapter = new PersonsAdapter(getActivity());
setListAdapter(adapter);
}
@Override
public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
getListView().setFastScrollEnabled(true);
setEmptyText(getString(R.string.no_data));
setListShown(false);
getLoaderManager().initLoader(PERSONS_LOADER_ID, null, this);
}
private static class PersonsLoader extends SimpleCursorLoader {
public PersonsLoader(Context context) {
super(context);
}
@Override
protected Cursor getCursor() {
return DatabaseManager.getInstance().getPersons();
}
}
@Override
public Loader<Cursor> onCreateLoader(int id, Bundle args) {
return new PersonsLoader(getActivity());
}
@Override
public void onLoadFinished(Loader<Cursor> loader, Cursor data) {
if (data != null) {
adapter.swapCursor(data);
}
setListShown(true);
}
@Override
public void onLoaderReset(Loader<Cursor> loader) {
adapter.swapCursor(null);
}
@Override
public void onListItemClick(ListView l, View v, int position, long id) {
Person person = adapter.getItem(position);
Intent intent = new Intent(getActivity(), PersonInfoActivity.class).putExtra(PersonInfoActivity.EXTRA_PERSON, person);
startActivity(intent);
}
private static class PersonsAdapter extends CursorAdapter implements SectionIndexer {
private static final String ALPHABET = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
private final LayoutInflater inflater;
private final AlphabetIndexer indexer;
public PersonsAdapter(Context context) {
super(context, null, 0);
inflater = LayoutInflater.from(context);
indexer = new AlphabetIndexer(null, DatabaseManager.PERSON_NAME_COLUMN_INDEX, ALPHABET);
}
@Override
public Person getItem(int position) {
return DatabaseManager.toPerson((Cursor) super.getItem(position));
}
@Override
public View newView(Context context, Cursor cursor, ViewGroup parent) {
View view = inflater.inflate(R.layout.simple_list_item_1_material, parent, false);
ViewHolder holder = new ViewHolder();
holder.textView = (TextView) view.findViewById(android.R.id.text1);
view.setTag(holder);
return view;
}
@Override
public void bindView(View view, Context context, Cursor cursor) {
ViewHolder holder = (ViewHolder) view.getTag();
holder.person = DatabaseManager.toPerson(cursor, holder.person);
holder.textView.setText(holder.person.getName());
}
@Override
public Cursor swapCursor(Cursor newCursor) {
indexer.setCursor(newCursor);
return super.swapCursor(newCursor);
}
@Override
public int getPositionForSection(int sectionIndex) {
return indexer.getPositionForSection(sectionIndex);
}
@Override
public int getSectionForPosition(int position) {
return indexer.getSectionForPosition(position);
}
@Override
public Object[] getSections() {
return indexer.getSections();
}
static class ViewHolder {
public TextView textView;
public Person person;
}
}
}