blob: 93a24ab2f366d7ab7f13a011ade0e4fcbeb1e7d8 [file] [log] [blame]
package org.wordpress.android.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 org.wordpress.android.R;
import org.wordpress.android.WordPress;
import org.wordpress.android.WordPressDB;
import org.wordpress.android.util.MediaUtils;
import org.wordpress.android.util.StringUtils;
/**
* 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 = WordPress.imageLoader;
}
}
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);
}
}
@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(WordPressDB.COLUMN_NAME_UPLOAD_STATE));
boolean isLocalFile = MediaUtils.isLocalFile(state);
// file name
String fileName = cursor.getString(cursor.getColumnIndex(WordPressDB.COLUMN_NAME_FILE_NAME));
if (holder.filenameView != null) {
holder.filenameView.setText(String.format(context.getString(R.string.media_file_name), fileName));
}
// title of media
String title = cursor.getString(cursor.getColumnIndex(WordPressDB.COLUMN_NAME_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(WordPressDB.COLUMN_NAME_DATE_CREATED_GMT)));
holder.uploadDateView.setText(String.format(context.getString(R.string.media_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(WordPressDB.COLUMN_NAME_FILE_PATH)));
if (filePath.isEmpty())
filePath = StringUtils.notNullStr(cursor.getString(cursor.getColumnIndex(WordPressDB.COLUMN_NAME_FILE_URL)));
// file type
String fileExtension = filePath.replaceAll(".*\\.(\\w+)$", "$1").toUpperCase();
if (holder.fileTypeView != null) {
holder.fileTypeView.setText(String.format(context.getString(R.string.media_file_type), fileExtension));
}
// dimensions
if (holder.dimensionView != null) {
if( MediaUtils.isValidImage(filePath)) {
int width = cursor.getInt(cursor.getColumnIndex(WordPressDB.COLUMN_NAME_WIDTH));
int height = cursor.getInt(cursor.getColumnIndex(WordPressDB.COLUMN_NAME_HEIGHT));
if (width > 0 && height > 0) {
String dimensions = width + "x" + height;
holder.dimensionView.setText(String.format(context.getString(R.string.media_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(WordPressDB.COLUMN_NAME_THUMBNAIL_URL));
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);
}
}
}