package org.ebookdroid.ui.library.adapters; import org.sufficientlysecure.viewer.R; import org.ebookdroid.common.settings.books.BookSettings; import org.ebookdroid.ui.library.IBrowserActivity; import android.view.View; import android.view.ViewGroup; import android.widget.BaseAdapter; import android.widget.ImageView; import android.widget.TextView; import java.io.File; import java.util.ArrayList; import java.util.Collection; import java.util.HashMap; import java.util.List; import java.util.Map; import org.emdev.common.filesystem.FileExtensionFilter; import org.emdev.ui.adapters.BaseViewHolder; import org.emdev.utils.FileUtils; public class RecentAdapter extends BaseAdapter { final IBrowserActivity base; private final List<BookNode> books = new ArrayList<BookNode>(); private final Map<String, BookNode> nodes = new HashMap<String, BookNode>(); public RecentAdapter(final IBrowserActivity base) { this.base = base; } @Override public int getCount() { return books.size(); } @Override public BookNode getItem(final int i) { return books.get(i); } @Override public long getItemId(final int i) { return i; } @Override public View getView(final int i, final View view, final ViewGroup parent) { final ViewHolder holder = BaseViewHolder.getOrCreateViewHolder(ViewHolder.class, R.layout.recentitem, view, parent); final BookNode node = books.get(i); final File file = new File(node.path); holder.name.setText(file.getName()); base.loadThumbnail(node.path, holder.imageView, R.drawable.recent_item_book); holder.info.setText(FileUtils.getFileDate(file.lastModified())); holder.fileSize.setText(FileUtils.getFileSize(file.length())); return holder.getView(); } public void clearBooks() { this.books.clear(); this.nodes.clear(); notifyDataSetChanged(); } public BookNode getNode(final String path) { final BookNode n = nodes.get(path); if (n != null) { return n; } final String mpath = FileUtils.invertMountPrefix(path); return mpath != null ? nodes.get(mpath) : null; } public void setBooks(final Collection<BookSettings> books, final FileExtensionFilter filter) { this.books.clear(); this.nodes.clear(); for (final BookSettings bs : books) { if (filter == null || filter.accept(bs.fileName)) { final BookNode node = new BookNode(bs); addNode(node); } } notifyDataSetChanged(); } public void addNode(final BookNode node) { this.books.add(node); nodes.put(node.path, node); if (node.mpath != null) { nodes.put(node.mpath, node); } } public void replaceBook(final BookNode origin, final BookSettings target) { if (origin != null) { final BookNode oldNode1 = nodes.remove(origin.path); final BookNode oldNode2 = origin.mpath != null ? nodes.remove(origin.mpath) : null; if (oldNode1 != null) { books.remove(oldNode1); } if (oldNode2 != null) { books.remove(oldNode2); } books.remove(origin); } final BookNode newNode = new BookNode(target); final BookNode prevNode1 = nodes.put(newNode.path, newNode); final BookNode prevNode2 = newNode.mpath != null ? nodes.put(newNode.mpath, newNode) : null; if (prevNode1 != null) { books.remove(prevNode1); } if (prevNode2 != null) { books.remove(prevNode2); } books.add(0, newNode); notifyDataSetChanged(); } public void removeBook(final BookNode book) { if (books.remove(book)) { nodes.remove(book.path); if (book.mpath != null) { nodes.remove(book.mpath); } notifyDataSetChanged(); } } public static class ViewHolder extends BaseViewHolder { TextView name; ImageView imageView; TextView info; TextView fileSize; @Override public void init(final View convertView) { super.init(convertView); name = (TextView) convertView.findViewById(R.id.recentItemName); imageView = (ImageView) convertView.findViewById(R.id.recentItemIcon); info = (TextView) convertView.findViewById(R.id.recentItemInfo); fileSize = (TextView) convertView.findViewById(R.id.recentItemfileSize); } } }