package org.openintents.filemanager.bookmarks; import java.io.File; import java.util.ArrayList; import org.openintents.filemanager.R; import org.openintents.filemanager.ThumbnailLoader; import org.openintents.filemanager.files.FileHolder; import android.app.Activity; import android.content.Context; import android.database.Cursor; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.webkit.WebIconDatabase.IconListener; import android.widget.BaseAdapter; import android.widget.ImageView; import android.widget.TextView; /** * @author George Venios */ public class BookmarkListAdapter extends BaseAdapter{ private ArrayList<Bookmark> items; private LayoutInflater inflater; private Activity act; // Thumbnail specific private ThumbnailLoader mThumbnailLoader; private boolean scrolling = false; public BookmarkListAdapter(Activity activity){ items = new ArrayList<>(); act = activity; refreshItems(); inflater = (LayoutInflater) activity.getSystemService(Context.LAYOUT_INFLATER_SERVICE); mThumbnailLoader = new ThumbnailLoader(act); } private void refreshItems() { items.clear(); String[] projection = {BookmarksProvider._ID, BookmarksProvider.NAME, BookmarksProvider.PATH}; Cursor c = act.managedQuery(BookmarksProvider.CONTENT_URI, projection, null, null, null); Bookmark b; while(c.moveToNext()){ b = new Bookmark(); b.id = c.getLong(0); b.name = c.getString(1); b.path = c.getString(2); items.add(b); } } @Override public void notifyDataSetChanged() { super.notifyDataSetChanged(); refreshItems(); } @Override public int getCount() { return items.size(); } @Override public Object getItem(int position) { return items.get(position); } @Override public long getItemId(int position) { return items.get(position).id; } @Override public boolean hasStableIds() { return true; } @Override public View getView(int position, View convertView, ViewGroup parent) { FileHolder item = new FileHolder(new File(items.get(position).path), act); ViewHolder viewHolder; if(convertView == null) { convertView = inflater.inflate(R.layout.item_filelist, null); viewHolder = new ViewHolder(); viewHolder.icon = (ImageView) convertView.findViewById(R.id.icon); viewHolder.primaryInfo = (TextView) convertView.findViewById(R.id.primary_info); viewHolder.secondaryInfo = (TextView) convertView.findViewById(R.id.secondary_info); convertView.setTag(viewHolder); } else { viewHolder = (ViewHolder) convertView.getTag(); } viewHolder.primaryInfo.setText(items.get(position).name); viewHolder.secondaryInfo.setText(items.get(position).path); if(item.getFile().isDirectory()) { viewHolder.icon.setImageResource(R.drawable.ic_launcher_folder); } if (shouldLoadIcon(item) && mThumbnailLoader != null) { mThumbnailLoader.loadImage(item, viewHolder.icon); } return convertView; } /** * Inform this adapter about scrolling state of list so that lists don't lag due to cache ops. * @param isScrolling True if the ListView is still scrolling. */ public void setScrolling(boolean isScrolling){ scrolling = isScrolling; if(!isScrolling) notifyDataSetChanged(); } private boolean shouldLoadIcon(FileHolder item){ return !scrolling && item.getFile().isFile() && !item.getMimeType().equals("video/mpeg"); } public static class Bookmark{ long id; String name; String path; public String getName() { return name; } } private static class ViewHolder { public TextView primaryInfo; public TextView secondaryInfo; public ImageView icon; } }