package kr.kdev.dg1s.biowiki.ui.media; import android.content.Context; import android.database.Cursor; import android.net.Uri; import android.view.View; import android.widget.ImageView; import android.widget.TextView; import com.android.volley.toolbox.ImageLoader; import com.android.volley.toolbox.NetworkImageView; import com.mobeta.android.dslv.ResourceDragSortCursorAdapter; import kr.kdev.dg1s.biowiki.BioWiki; import kr.kdev.dg1s.biowiki.R; import kr.kdev.dg1s.biowiki.util.MediaUtils; import kr.kdev.dg1s.biowiki.util.StringUtils; import kr.kdev.dg1s.biowiki.util.Utils; /** * Adapter for a drag-sort listview where the user can drag media items to sort their order * for a media gallery */ class MediaGalleryAdapter extends ResourceDragSortCursorAdapter { private ImageLoader mImageLoader; public MediaGalleryAdapter(Context context, int layout, Cursor c, boolean autoRequery, ImageLoader imageLoader) { super(context, layout, c, autoRequery); setImageLoader(imageLoader); } void setImageLoader(ImageLoader imageLoader) { if (imageLoader != null) { mImageLoader = imageLoader; } else { mImageLoader = BioWiki.imageLoader; } } @Override public void bindView(View view, Context context, Cursor cursor) { final GridViewHolder holder; if (view.getTag() instanceof GridViewHolder) { holder = (GridViewHolder) view.getTag(); } else { holder = new GridViewHolder(view); view.setTag(holder); } String state = cursor.getString(cursor.getColumnIndex("uploadState")); boolean isLocalFile = MediaUtils.isLocalFile(state); // file name String fileName = cursor.getString(cursor.getColumnIndex("fileName")); if (holder.filenameView != null) { holder.filenameView.setText("File name: " + fileName); } // title of media String title = cursor.getString(cursor.getColumnIndex("title")); if (title == null || title.equals("")) title = fileName; holder.titleView.setText(title); // upload date if (holder.uploadDateView != null) { String date = MediaUtils.getDate(cursor.getLong(cursor.getColumnIndex("date_created_gmt"))); holder.uploadDateView.setText("Uploaded on: " + date); } // load image if (isLocalFile) { // should not be local file } else { loadNetworkImage(cursor, (NetworkImageView) holder.imageView); } // get the file extension from the fileURL String filePath = StringUtils.notNullStr(cursor.getString(cursor.getColumnIndex("filePath"))); if (filePath.isEmpty()) filePath = StringUtils.notNullStr(cursor.getString(cursor.getColumnIndex("fileURL"))); // file type String fileType = filePath.replaceAll(".*\\.(\\w+)$", "$1").toUpperCase(); if (Utils.isXLarge(context)) { holder.fileTypeView.setText("File type: " + fileType); } else { holder.fileTypeView.setText(fileType); } // dimensions if (holder.dimensionView != null) { if (MediaUtils.isValidImage(filePath)) { int width = cursor.getInt(cursor.getColumnIndex("width")); int height = cursor.getInt(cursor.getColumnIndex("height")); if (width > 0 && height > 0) { String dimensions = width + "x" + height; holder.dimensionView.setText("Dimensions: " + dimensions); holder.dimensionView.setVisibility(View.VISIBLE); } } else { holder.dimensionView.setVisibility(View.GONE); } } } private void loadNetworkImage(Cursor cursor, NetworkImageView imageView) { String thumbnailURL = cursor.getString(cursor.getColumnIndex("thumbnailURL")); if (thumbnailURL == null) { imageView.setImageUrl(null, null); return; } Uri uri = Uri.parse(thumbnailURL); if (uri != null && MediaUtils.isValidImage(uri.getLastPathSegment())) { imageView.setTag(thumbnailURL); imageView.setImageUrl(thumbnailURL, mImageLoader); } else { imageView.setImageUrl(null, null); } } private static class GridViewHolder { private final TextView filenameView; private final TextView titleView; private final TextView uploadDateView; private final ImageView imageView; private final TextView fileTypeView; private final TextView dimensionView; GridViewHolder(View view) { filenameView = (TextView) view.findViewById(R.id.media_grid_item_filename); titleView = (TextView) view.findViewById(R.id.media_grid_item_name); uploadDateView = (TextView) view.findViewById(R.id.media_grid_item_upload_date); imageView = (ImageView) view.findViewById(R.id.media_grid_item_image); fileTypeView = (TextView) view.findViewById(R.id.media_grid_item_filetype); dimensionView = (TextView) view.findViewById(R.id.media_grid_item_dimension); } } }