package io.filepicker.adapters; import android.app.Activity; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.ArrayAdapter; import android.widget.ImageView; import android.widget.TextView; import java.util.ArrayList; import io.filepicker.R; import io.filepicker.models.Node; import io.filepicker.models.PickedFile; import io.filepicker.utils.Constants; import io.filepicker.utils.ImageLoader; import io.filepicker.utils.Utils; /** * Created by maciejwitowski on 10/22/14. */ public class NodesAdapter<T> extends ArrayAdapter<T> { private static final int VIEW_TYPE_COUNT = 3; private static final int TYPE_THUMBNAIL_NAMED_IMAGE = 0; private static final int TYPE_THUMBNAIL_IMAGE = 1; private static final int TYPE_LIST_ITEM = 2; private boolean thumbnail = false; private final ArrayList<PickedFile> pickedFiles; private final Activity context; private final ArrayList<T> nodes; public NodesAdapter(Activity context, ArrayList<T> nodes, ArrayList<PickedFile> pickedFiles) { super(context, R.layout.list_item_node, nodes); this.context = context; this.nodes = nodes; this.pickedFiles = pickedFiles; } @Override public View getView(int position, View convertView, ViewGroup parent) { View row = convertView; ViewHolder viewHolder; if (row == null) { viewHolder = new ViewHolder(); LayoutInflater inflater = context.getLayoutInflater(); switch (getItemViewType(position)) { case TYPE_THUMBNAIL_NAMED_IMAGE: row = inflater.inflate(R.layout.thumbnail_item_image_named_image, null); viewHolder.icon = (ImageView) row.findViewById(R.id.imageFolder); viewHolder.name = (TextView) row.findViewById(R.id.tvFolderName); break; case TYPE_THUMBNAIL_IMAGE: row = inflater.inflate(R.layout.thumbnail_item_node, null); viewHolder.icon = (ImageView) row.findViewById(R.id.thumbNode); break; default: row = inflater.inflate(R.layout.list_item_node, null); viewHolder.icon = (ImageView) row.findViewById(R.id.thumbNode); viewHolder.icon = (ImageView) row.findViewById(R.id.imageNode); viewHolder.name = (TextView) row.findViewById(R.id.tvNodeName); } row.setTag(viewHolder); } else { viewHolder = (ViewHolder) row.getTag(); } Node node = (Node) nodes.get(position); switch (getItemViewType(position)) { case TYPE_THUMBNAIL_NAMED_IMAGE: viewHolder.setName(Utils.getShortName(node.displayName)); viewHolder.setIcon(node.getImageResource()); break; case TYPE_THUMBNAIL_IMAGE: ImageLoader.getImageLoader(context) .load(node.getThumbnailUrl()) .into(viewHolder.icon); break; default: viewHolder.setName(node.displayName); if (!node.isDir && node.hasThumbnail()) { ImageLoader.getImageLoader(context).load(node.getThumbnailUrl()).into(viewHolder.icon); } else { viewHolder.setIcon(node.getImageResource()); } } if (PickedFile.containsPosition(pickedFiles, position)) { row.setAlpha(Constants.ALPHA_FADED); } else { row.setAlpha(Constants.ALPHA_NORMAL); } return row; } @Override public int getViewTypeCount() { return VIEW_TYPE_COUNT; } @Override public int getItemViewType(int position) { Node node = (Node) nodes.get(position); if (thumbnail) { // Directories and files with names (not images) if (node.isDir || !node.isImage()) { return TYPE_THUMBNAIL_NAMED_IMAGE; } else { return TYPE_THUMBNAIL_IMAGE; } } else { return TYPE_LIST_ITEM; } } public void setThumbnail(boolean thumbnail) { this.thumbnail = thumbnail; } static class ViewHolder { TextView name; ImageView icon; void setName(String value) { if (name != null) { this.name.setText(value); } } void setIcon(int res) { if (icon != null) { icon.setImageResource(res); } } } }