package org.awesomeapp.messenger.ui; import android.content.ContentResolver; import android.content.Context; import android.content.Intent; import android.graphics.Bitmap; import android.graphics.Color; import android.net.Uri; import android.text.TextUtils; import android.util.Log; import android.view.View; import com.bumptech.glide.Glide; import com.bumptech.glide.load.engine.DiskCacheStrategy; import com.bumptech.glide.request.target.ImageViewTarget; import org.awesomeapp.messenger.ImApp; import org.awesomeapp.messenger.ui.widgets.ImageViewActivity; import org.awesomeapp.messenger.util.SecureMediaStore; import java.io.File; import java.net.URLConnection; import java.util.Date; import im.zom.messenger.R; /** * Created by n8fr8 on 2/12/16. */ public class GalleryMediaViewHolder extends MediaViewHolder { private Context context; private ImageViewTarget<Bitmap> mTarget; public GalleryMediaViewHolder (View view, Context context) { super(view); this.context = context; } public void setOnClickListenerMediaThumbnail( final String mimeType, final Uri mediaUri ) { mMediaThumbnail.setOnClickListener( new View.OnClickListener() { @Override public void onClick(View v) { onClickMediaIcon( mimeType, mediaUri ); } }); } public void resetOnClickListenerMediaThumbnail() { mMediaThumbnail.setOnClickListener(null); } long mTimeDiff = -1; public void bind(int id, final String mimeType, final String body, Date date) { if( mimeType != null ) { if (mContainer.getVisibility() == View.GONE) mContainer.setVisibility(View.VISIBLE); Uri mediaUri = Uri.parse( body ) ; showMediaThumbnail(mimeType, mediaUri, id); } else { mContainer.setVisibility(View.GONE); } } private void showMediaThumbnail (String mimeType, Uri mediaUri, int id) { /* Guess the MIME type in case we received a file that we can display or play*/ if (TextUtils.isEmpty(mimeType) || mimeType.startsWith("application")) { String guessed = URLConnection.guessContentTypeFromName(mediaUri.toString()); if (!TextUtils.isEmpty(guessed)) { if (TextUtils.equals(guessed, "video/3gpp")) mimeType = "audio/3gpp"; else mimeType = guessed; } } setOnClickListenerMediaThumbnail(mimeType, mediaUri); if (mMediaThumbnail.getVisibility() == View.GONE) mMediaThumbnail.setVisibility(View.VISIBLE); if( mimeType.startsWith("image/") ) { setImageThumbnail(context.getContentResolver(), id, mediaUri); // mMediaThumbnail.setBackgroundColor(Color.TRANSPARENT); // holder.mMediaThumbnail.setBackgroundColor(Color.WHITE); } else if (mimeType.startsWith("audio")) { mMediaThumbnail.setImageResource(R.drawable.media_audio_play); mMediaThumbnail.setBackgroundColor(Color.TRANSPARENT); } else { mMediaThumbnail.setImageResource(R.drawable.ic_file); // generic file icon } //mContainer.setBackgroundColor(mContainer.getResources().getColor(android.R.color.transparent)); } /** * @param contentResolver * @param id * @param mediaUri */ private void setImageThumbnail(ContentResolver contentResolver, int id, Uri mediaUri) { // pair this holder to the uri. if the holder is recycled, the pairing is broken mMediaUri = mediaUri; // if a content uri - already scanned setThumbnail(contentResolver, mediaUri); } /** * @param contentResolver * @param mediaUri */ private void setThumbnail(ContentResolver contentResolver, Uri mediaUri) { if (mTarget != null) Glide.clear(mTarget); mTarget = new ImageViewTarget<Bitmap>(mMediaThumbnail) { @Override protected void setResource(Bitmap resource) { mMediaThumbnail.setImageBitmap(resource); } }; if(SecureMediaStore.isVfsUri(mediaUri)) { try { Glide.with(context) .load(new info.guardianproject.iocipher.FileInputStream(new File(mediaUri.getPath()).getPath())) .asBitmap() .placeholder(R.drawable.ic_photo_library_white_36dp) .diskCacheStrategy(DiskCacheStrategy.NONE) .into(mTarget); } catch (Exception e) { Log.e(ImApp.LOG_TAG, "unable to load thumbnail: " + e.getMessage()); } } else if (mediaUri.getScheme().equals("asset")) { String assetPath = "file:///android_asset/" + mediaUri.getPath().substring(1); Glide.with(context) .load(assetPath) .asBitmap() .diskCacheStrategy(DiskCacheStrategy.NONE) .into(mTarget); } else { Glide.with(context) .load(mediaUri) .asBitmap() .placeholder(R.drawable.ic_photo_library_white_36dp) .diskCacheStrategy(DiskCacheStrategy.NONE) .into(mTarget); } } public void onClickMediaIcon(String mimeType, Uri mediaUri) { if (mimeType.startsWith("image")) { Intent intent = new Intent(context, ImageViewActivity.class); intent.putExtra( ImageViewActivity.URI, mediaUri.toString()); intent.putExtra( ImageViewActivity.MIMETYPE, mimeType); context.startActivity(intent); } } /** protected void onLongClickMediaIcon(final String mimeType, final Uri mediaUri) { final java.io.File exportPath = SecureMediaStore.exportPath(mimeType, mediaUri); new AlertDialog.Builder(context) .setTitle(context.getString(R.string.export_media)) .setMessage(context.getString(R.string.export_media_file_to, exportPath.getAbsolutePath())) .setNeutralButton("Share on Zom", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialogInterface, int i) { reshareMediaFile(mimeType, mediaUri); } }) .setPositiveButton(R.string.export, new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int whichButton) { exportMediaFile(mimeType, mediaUri, exportPath); return; } }) .setNegativeButton(R.string.cancel, new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int whichButton) { return; } }) .create().show(); }*/ }