mirror of
https://github.com/signalapp/Signal-Android.git
synced 2025-12-23 04:28:35 +00:00
Fix some media not appearing in the gallery picker.
Works around the glide issue by using the straight URI when possible, which allows glide to not have to keep a buffer. However, as soon as you select it, it'll be an encrypted file, and we'll run into this same issue where glide needs to keep a buffer for the input stream. Related to #11014
This commit is contained in:
committed by
Alex Hart
parent
4e07ac0300
commit
9432cca14a
@@ -47,6 +47,7 @@ import org.thoughtcrime.securesms.components.transfercontrols.TransferControlVie
|
||||
import org.thoughtcrime.securesms.database.AttachmentTable;
|
||||
import org.thoughtcrime.securesms.mms.DecryptableStreamUriLoader.DecryptableUri;
|
||||
import org.thoughtcrime.securesms.mms.ImageSlide;
|
||||
import org.thoughtcrime.securesms.mms.PartAuthority;
|
||||
import org.thoughtcrime.securesms.mms.Slide;
|
||||
import org.thoughtcrime.securesms.mms.SlideClickListener;
|
||||
import org.thoughtcrime.securesms.mms.SlidesClickedListener;
|
||||
@@ -488,7 +489,12 @@ public class ThumbnailView extends FrameLayout {
|
||||
|
||||
transferControlViewStub.setVisibility(View.GONE);
|
||||
|
||||
RequestBuilder<Drawable> request = requestManager.load(new DecryptableUri(uri))
|
||||
Object glideModel = uri;
|
||||
if (PartAuthority.isLocalUri(uri)) {
|
||||
glideModel = new DecryptableUri(uri);
|
||||
}
|
||||
|
||||
RequestBuilder<Drawable> request = requestManager.load(glideModel)
|
||||
.diskCacheStrategy(DiskCacheStrategy.NONE)
|
||||
.downsample(SignalDownsampleStrategy.CENTER_OUTSIDE_NO_UPSCALE)
|
||||
.listener(listener);
|
||||
|
||||
@@ -2,12 +2,14 @@ package org.thoughtcrime.securesms.mediasend.v2.gallery
|
||||
|
||||
import android.animation.ValueAnimator
|
||||
import android.graphics.drawable.Drawable
|
||||
import android.net.Uri
|
||||
import android.view.View
|
||||
import android.widget.ImageView
|
||||
import android.widget.TextView
|
||||
import androidx.core.view.setPadding
|
||||
import com.bumptech.glide.Glide
|
||||
import com.bumptech.glide.load.DataSource
|
||||
import com.bumptech.glide.load.engine.DiskCacheStrategy
|
||||
import com.bumptech.glide.load.engine.GlideException
|
||||
import com.bumptech.glide.request.RequestListener
|
||||
import com.bumptech.glide.request.target.Target
|
||||
@@ -18,6 +20,7 @@ import org.thoughtcrime.securesms.R
|
||||
import org.thoughtcrime.securesms.mediasend.Media
|
||||
import org.thoughtcrime.securesms.mediasend.MediaFolder
|
||||
import org.thoughtcrime.securesms.mms.DecryptableStreamUriLoader
|
||||
import org.thoughtcrime.securesms.mms.PartAuthority
|
||||
import org.thoughtcrime.securesms.util.MediaUtil
|
||||
import org.thoughtcrime.securesms.util.adapter.mapping.LayoutFactory
|
||||
import org.thoughtcrime.securesms.util.adapter.mapping.MappingAdapter
|
||||
@@ -66,6 +69,14 @@ object MediaGallerySelectableItem {
|
||||
}
|
||||
}
|
||||
|
||||
private fun Uri.toGlideModel(): Any {
|
||||
return if (PartAuthority.isLocalUri(this)) {
|
||||
DecryptableStreamUriLoader.DecryptableUri(this)
|
||||
} else {
|
||||
this
|
||||
}
|
||||
}
|
||||
|
||||
abstract class BaseViewHolder<T : MappingModel<T>>(itemView: View) : MappingViewHolder<T>(itemView) {
|
||||
protected val imageView: ShapeableImageView = itemView.findViewById(R.id.media_gallery_image)
|
||||
protected val playOverlay: ImageView? = itemView.findViewById(R.id.media_gallery_play_overlay)
|
||||
@@ -76,7 +87,7 @@ object MediaGallerySelectableItem {
|
||||
class FolderViewHolder(itemView: View, private val onMediaFolderClicked: OnMediaFolderClicked) : BaseViewHolder<FolderModel>(itemView) {
|
||||
override fun bind(model: FolderModel) {
|
||||
Glide.with(imageView)
|
||||
.load(DecryptableStreamUriLoader.DecryptableUri(model.mediaFolder.thumbnailUri))
|
||||
.load(model.mediaFolder.thumbnailUri.toGlideModel())
|
||||
.into(imageView)
|
||||
|
||||
playOverlay?.visible = false
|
||||
@@ -131,7 +142,8 @@ object MediaGallerySelectableItem {
|
||||
}
|
||||
|
||||
Glide.with(imageView)
|
||||
.load(DecryptableStreamUriLoader.DecryptableUri(model.media.uri))
|
||||
.load(model.media.uri.toGlideModel())
|
||||
.diskCacheStrategy(DiskCacheStrategy.ALL)
|
||||
.addListener(ErrorLoggingRequestListener(FILE_VIEW_HOLDER_TAG))
|
||||
.into(imageView)
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user