package org.ebookdroid.ui.library.adapters; import org.ebookdroid.EBookDroidApp; import org.sufficientlysecure.viewer.R; import org.ebookdroid.common.settings.SettingsManager; import android.database.DataSetObserver; import android.view.View; import android.view.ViewGroup; import android.widget.BaseExpandableListAdapter; import android.widget.ImageView; import android.widget.TextView; import java.io.File; import org.emdev.ui.adapters.BaseViewHolder; import org.emdev.utils.FileUtils; public class LibraryAdapter extends BaseExpandableListAdapter { final BooksAdapter adapter; final FolderObserver observer = new FolderObserver(); public LibraryAdapter(final BooksAdapter adapter) { this.adapter = adapter; adapter.registerDataSetObserver(new DataSetObserver() { @Override public void onChanged() { for (BookShelfAdapter a : adapter) { if (a != null && a.id > 0) { a.registerDataSetObserver(observer); } } notifyDataSetChanged(); } @Override public void onInvalidated() { notifyDataSetChanged(); } }); } @Override public BookNode getChild(final int groupPosition, final int childPosition) { return adapter.getItem(groupPosition + 1, childPosition); } @Override public long getChildId(final int groupPosition, final int childPosition) { return childPosition; } @Override public int getChildrenCount(final int groupPosition) { return adapter.getList(groupPosition + 1).getCount(); } @Override public View getChildView(final int groupPosition, final int childPosition, final boolean isLastChild, final View convertView, final ViewGroup parent) { final ViewHolder holder = BaseViewHolder.getOrCreateViewHolder(ViewHolder.class, R.layout.browseritem, convertView, parent); final BookNode book = getChild(groupPosition, childPosition); final File file = new File(book.path); final boolean wasRead = SettingsManager.getBookSettings(file.getAbsolutePath()) != null; holder.name.setText(book.name); holder.image.setImageResource(wasRead ? R.drawable.recent_item_book_watched : R.drawable.recent_item_book); holder.info.setText(FileUtils.getFileDate(file.lastModified())); holder.fileSize.setText(FileUtils.getFileSize(file.length())); return holder.getView(); } @Override public View getGroupView(final int groupPosition, final boolean isExpanded, final View convertView, final ViewGroup parent) { final ViewHolder holder = BaseViewHolder.getOrCreateViewHolder(ViewHolder.class, R.layout.browseritem, convertView, parent); final BookShelfAdapter curr = getGroup(groupPosition); holder.name.setText(curr.name); holder.image.setImageResource(R.drawable.recent_item_folder_open); holder.info.setText(EBookDroidApp.context.getString(R.string.folder_books_count, curr.getCount())); holder.fileSize.setText(""); return holder.getView(); } @Override public BookShelfAdapter getGroup(final int groupPosition) { return adapter.getList(groupPosition + 1); } @Override public int getGroupCount() { return adapter.getListCount() - 1; } @Override public long getGroupId(final int groupPosition) { return groupPosition; } @Override public boolean isChildSelectable(final int groupPosition, final int childPosition) { return true; } @Override public boolean hasStableIds() { return false; } public void clearData() { adapter.clearData(); notifyDataSetInvalidated(); } public static class ViewHolder extends BaseViewHolder { TextView name; ImageView image; TextView info; TextView fileSize; @Override public void init(final View convertView) { super.init(convertView); this.name = (TextView) convertView.findViewById(R.id.browserItemText); this.image = (ImageView) convertView.findViewById(R.id.browserItemIcon); this.info = (TextView) convertView.findViewById(R.id.browserItemInfo); this.fileSize = (TextView) convertView.findViewById(R.id.browserItemfileSize); } } class FolderObserver extends DataSetObserver { @Override public void onChanged() { notifyDataSetChanged(); } @Override public void onInvalidated() { notifyDataSetChanged(); } } }