package org.ebookdroid.ui.library.adapters; import org.sufficientlysecure.viewer.R; import org.ebookdroid.common.settings.LibSettings; import org.ebookdroid.common.settings.SettingsManager; 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.io.FileFilter; import java.util.ArrayList; import java.util.Arrays; import java.util.Collections; import java.util.Comparator; import java.util.List; import java.util.Set; import org.emdev.ui.adapters.BaseViewHolder; import org.emdev.utils.FileUtils; import org.emdev.utils.LengthUtils; public class BrowserAdapter extends BaseAdapter implements Comparator<File> { private final FileFilter filter; private File currentDirectory; private List<File> files = Collections.emptyList(); public BrowserAdapter(final FileFilter filter) { this.filter = filter; } @Override public int getCount() { return files.size(); } @Override public File getItem(final int i) { return 0 <= i && i < files.size() ? files.get(i) : null; } @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.browseritem, view, parent); final File file = getItem(i); String ap = file.getAbsolutePath(); holder.textView.setText(file.getName()); if (file.isDirectory()) { Set<String> autoScanDirs = LibSettings.current().autoScanDirs; String mp = FileUtils.invertMountPrefix(ap); final boolean watched = autoScanDirs.contains(ap) || (mp != null && autoScanDirs.contains(mp)); holder.imageView.setImageResource(watched ? R.drawable.browser_item_folder_watched : R.drawable.browser_item_folder_open); holder.info.setText(""); holder.fileSize.setText(""); } else { final boolean wasRead = SettingsManager.getBookSettings(ap) != null; holder.imageView.setImageResource(wasRead ? R.drawable.recent_item_book_watched : R.drawable.browser_item_book); holder.info.setText(FileUtils.getFileDate(file.lastModified())); holder.fileSize.setText(FileUtils.getFileSize(file.length())); } return holder.getView(); } public void setCurrentDirectory(final File currentDirectory) { if (currentDirectory.getAbsolutePath().startsWith("/sys")) { return; } this.currentDirectory = currentDirectory; final File[] files = currentDirectory.listFiles(filter); if (LengthUtils.isNotEmpty(files)) { Arrays.sort(files, this); } setFiles(files); } private void setFiles(final File[] files) { final List<File> ff = LengthUtils.isNotEmpty(files) ? new ArrayList<File>(Arrays.asList(files)) : new ArrayList<File>(); this.files = ff; notifyDataSetChanged(); } public File getCurrentDirectory() { return currentDirectory; } public void remove(final File file) { if (files.remove(file)) { notifyDataSetChanged(); } } @Override public int compare(final File f1, final File f2) { if (f1.isDirectory() && f2.isFile()) { return -1; } if (f1.isFile() && f2.isDirectory()) { return 1; } return f1.getName().compareTo(f2.getName()); } public static class ViewHolder extends BaseViewHolder { TextView textView; ImageView imageView; TextView info; TextView fileSize; @Override public void init(final View convertView) { super.init(convertView); textView = (TextView) convertView.findViewById(R.id.browserItemText); imageView = (ImageView) convertView.findViewById(R.id.browserItemIcon); info = (TextView) convertView.findViewById(R.id.browserItemInfo); fileSize = (TextView) convertView.findViewById(R.id.browserItemfileSize); } } }