package com.dotcool.reader.adapter; import java.util.ArrayList; import java.util.Collection; import java.util.List; import android.app.Activity; import android.content.Context; import android.util.Log; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.ArrayAdapter; import android.widget.CheckBox; import android.widget.CompoundButton; import android.widget.CompoundButton.OnCheckedChangeListener; import android.widget.TextView; import com.dotcool.R; import com.dotcool.reader.UIHelper; import com.dotcool.reader.dao.NovelsDao; import com.dotcool.reader.helper.Util; import com.dotcool.reader.model.BookModel; import com.dotcool.reader.model.BookmarkModel; import com.dotcool.reader.model.PageModel; public class BookmarkModelAdapter extends ArrayAdapter<BookmarkModel> { private static final String TAG = BookmarkModelAdapter.class.toString(); private final int layoutResourceId; private final Context context; private List<BookmarkModel> data; private PageModel novel = null; public boolean showPage = false; public boolean showCheckBox = false; public BookmarkModelAdapter(Context context, int resourceId, List<BookmarkModel> objects, PageModel parent) { super(context, resourceId, objects); this.layoutResourceId = resourceId; this.context = context; this.data = objects; this.novel = parent; } @Override public void addAll(Collection<? extends BookmarkModel> objects) { synchronized (this) { if (data == null) { data = new ArrayList<BookmarkModel>(); } data.addAll(objects); this.notifyDataSetChanged(); } } @Override public void addAll(BookmarkModel... objects) { synchronized (this) { if (data == null) { data = new ArrayList<BookmarkModel>(); } for (BookmarkModel item : objects) { data.add(item); } this.notifyDataSetChanged(); } } @Override public View getView(int position, View convertView, ViewGroup parent) { View row = convertView; BookmarkModelHolder holder = new BookmarkModelHolder(); final BookmarkModel bookmark = data.get(position); PageModel pageModel = null; try { pageModel = bookmark.getPageModel(); } catch (Exception e) { Log.e(TAG, "Failed to get PageModel for Bookmark.", e); } LayoutInflater inflater = ((Activity) context).getLayoutInflater(); row = inflater.inflate(layoutResourceId, parent, false); holder.txtPIndex = (TextView) row.findViewById(R.id.p_index); if (holder.txtPIndex != null) { holder.txtPIndex.setText("#" + bookmark.getpIndex()); } holder.txtCreateDate = (TextView) row.findViewById(R.id.create_date); if (holder.txtCreateDate != null) { holder.txtCreateDate.setText("Added " + Util.formatDateForDisplay(bookmark.getCreationDate())); } holder.txtExcerpt = (TextView) row.findViewById(R.id.excerpt); if (holder.txtExcerpt != null) { holder.txtExcerpt.setText(bookmark.getExcerpt()); } holder.txtPageTitle = (TextView) row.findViewById(R.id.pageTitle); if (holder.txtPageTitle != null) { if (showPage) { holder.txtPageTitle.setVisibility(View.VISIBLE); try { PageModel parentPage = pageModel.getParentPageModel(); holder.txtPageTitle.setText(parentPage.getTitle()); } catch (Exception ex) { Log.e(TAG, "Failed to get pageModel: " + ex.getMessage(), ex); holder.txtPageTitle.setText(bookmark.getPage()); } } else { holder.txtPageTitle.setVisibility(View.GONE); } } holder.txtPageSubTitle = (TextView) row.findViewById(R.id.page_subtitle); if (holder.txtPageSubTitle != null) { if (showPage) { String subTitle = bookmark.getPage(); holder.txtPageSubTitle.setVisibility(View.VISIBLE); try { subTitle = pageModel.getTitle(); try { BookModel book = pageModel.getBook(); subTitle = String.format("(%s) %s", book.getTitle(), subTitle); } catch (Exception ex) { Log.e(TAG, "Failed to get bookModel: " + ex.getMessage(), ex); } } catch (Exception ex) { Log.e(TAG, "Failed to get pageModel: " + ex.getMessage(), ex); } holder.txtPageSubTitle.setText(subTitle); } else { holder.txtPageSubTitle.setVisibility(View.GONE); } } holder.chkSelection = (CheckBox) row.findViewById(R.id.chk_selection); if (holder.chkSelection != null) { if (showCheckBox) { holder.chkSelection.setVisibility(View.VISIBLE); holder.chkSelection.setOnCheckedChangeListener(new OnCheckedChangeListener() { public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { bookmark.setSelected(isChecked); } }); } else holder.chkSelection.setVisibility(View.GONE); } row.setTag(holder); return row; } public void refreshData() { clear(); if (novel != null) { addAll(NovelsDao.getInstance().getBookmarks(novel)); } else { addAll(NovelsDao.getInstance().getAllBookmarks(UIHelper.getAllBookmarkOrder(context))); } notifyDataSetChanged(); Log.d(TAG, "Refreshing data..."); } static class BookmarkModelHolder { TextView txtPageTitle; TextView txtPIndex; TextView txtExcerpt; TextView txtCreateDate; TextView txtPageSubTitle; CheckBox chkSelection; } }