diff options
Diffstat (limited to 'WordPress/src/main/java/org/wordpress/android/ui/media/MediaGalleryAdapter.java')
-rw-r--r-- | WordPress/src/main/java/org/wordpress/android/ui/media/MediaGalleryAdapter.java | 140 |
1 files changed, 140 insertions, 0 deletions
diff --git a/WordPress/src/main/java/org/wordpress/android/ui/media/MediaGalleryAdapter.java b/WordPress/src/main/java/org/wordpress/android/ui/media/MediaGalleryAdapter.java new file mode 100644 index 000000000..93a24ab2f --- /dev/null +++ b/WordPress/src/main/java/org/wordpress/android/ui/media/MediaGalleryAdapter.java @@ -0,0 +1,140 @@ +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); + } + } +} |