package org.openintents.filemanager; import java.util.List; import org.openintents.filemanager.files.FileHolder; import org.openintents.filemanager.view.ViewHolder; import android.content.Context; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.BaseAdapter; import android.widget.ImageView; import android.widget.TextView; public class FileHolderListAdapter extends BaseAdapter { private List<FileHolder> mItems; private LayoutInflater mInflater; private Context mContext; private int mItemLayoutId = R.layout.item_filelist; // Thumbnail specific private ThumbnailLoader mThumbnailLoader; private boolean scrolling = false; public FileHolderListAdapter(List<FileHolder> files, Context c){ mItems = files; mInflater = (LayoutInflater) c.getSystemService(Context.LAYOUT_INFLATER_SERVICE); mContext = c; mThumbnailLoader = new ThumbnailLoader(c); } public Context getContext(){ return mContext; } @Override public boolean hasStableIds() { return true; } @Override public int getCount() { return mItems.size(); } @Override public Object getItem(int position) { return mItems.get(position); } @Override public long getItemId(int position) { return position; } /** * Set the layout to be used for item drawing. * @param resId The item layout id. 0 to reset. */ public void setItemLayout(int resId){ if(resId > 0) mItemLayoutId = resId; else mItemLayoutId = R.layout.item_filelist; } /** * Creates a new list item view, along with it's ViewHolder set as a tag. * @return The new view. */ protected View newView(){ View view = mInflater.inflate(mItemLayoutId, null); ViewHolder holder = new ViewHolder(); holder.icon = (ImageView) view.findViewById(R.id.icon); holder.primaryInfo = (TextView) view.findViewById(R.id.primary_info); holder.secondaryInfo = (TextView) view.findViewById(R.id.secondary_info); holder.tertiaryInfo = (TextView) view.findViewById(R.id.tertiary_info); view.setTag(holder); return view; } @Override public View getView(int position, View convertView, ViewGroup parent) { FileHolder item = mItems.get(position); if(convertView == null) convertView = newView(); ViewHolder holder = (ViewHolder) convertView.getTag(); holder.icon.setImageDrawable(item.getIcon()); holder.primaryInfo.setText(item.getName()); holder.secondaryInfo.setText(item.getFormattedModificationDate(mContext)); // Hide directories' size as it's irrelevant if we can't recursively find it. holder.tertiaryInfo.setText(item.getFile().isDirectory()? "" : item.getFormattedSize(mContext, false)); if(shouldLoadIcon(item) && mThumbnailLoader != null){ mThumbnailLoader.loadImage(item, holder.icon); } return convertView; } public void startProcessingThumbnailLoaderQueue() { if (mThumbnailLoader != null) { mThumbnailLoader.startProcessingLoaderQueue(); } } public void stopProcessingThumbnailLoaderQueue() { if (mThumbnailLoader != null) { mThumbnailLoader.stopProcessingLoaderQueue(); } } private boolean shouldLoadIcon(FileHolder item){ return item.getFile().isFile() && !item.getMimeType().equals("video/mpeg"); } }