package com.dteviot.epubviewer;
import com.dteviot.epubviewer.epub.NavPoint;
import com.dteviot.epubviewer.epub.TableOfContents;
import android.app.ListActivity;
import android.content.Context;
import android.content.Intent;
import android.net.Uri;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ListView;
import android.widget.TextView;
public class ListChaptersActivity extends ListActivity {
public static final String CHAPTERS_EXTRA = "CHAPTERS_EXTRA";
public static final String CHAPTER_EXTRA = "CHAPTER_EXTRA";
private TableOfContents mToc;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
mToc = new TableOfContents(getIntent(), CHAPTERS_EXTRA);
getListView().setAdapter(new EpubChapterAdapter(this));
}
/*
* Class implementing the "ViewHolder pattern", for better ListView
* performance
*/
private static class ViewHolder {
public TextView textView; // refers to ListView item's TextView
public NavPoint chapter;
}
/*
* Populates entries on the list
*/
private class EpubChapterAdapter extends BaseAdapter {
private LayoutInflater mInflater;
public EpubChapterAdapter(Context context) {
mInflater = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE);
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder viewHolder; // holds references to current item's GUI
// if convertView is null, inflate GUI and create ViewHolder;
// otherwise, get existing ViewHolder
if (convertView == null) {
convertView = mInflater.inflate(R.layout.epub_list_item, null);
viewHolder = new ViewHolder();
viewHolder.textView = (TextView) convertView.findViewById(R.id.epub_title);
convertView.setTag(viewHolder); // store as View's tag
} else {
viewHolder = (ViewHolder) convertView.getTag();
}
// Populate the list item (view) with the chapters details
viewHolder.chapter = (NavPoint)getItem(position);
String title = viewHolder.chapter.getNavLabel();
viewHolder.textView.setText(title);
return convertView;
}
@Override
public int getCount() {
return mToc.size();
}
@Override
public Object getItem(int position) {
return mToc.get(position);
}
@Override
public long getItemId(int position) {
return position;
}
}
@Override
protected void onListItemClick(ListView l, View v, int position, long id) {
super.onListItemClick(l, v, position, id);
// return URI of selected chapter
Intent intent = new Intent();
Uri uri = ((ViewHolder)v.getTag()).chapter.getContentWithoutTag();
intent.putExtra(CHAPTER_EXTRA, uri);
setResult(RESULT_OK, intent);
finish();
}
}