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:
Greyson Parrelli
2025-02-26 12:44:01 -05:00
committed by Alex Hart
parent 4e07ac0300
commit 9432cca14a
2 changed files with 21 additions and 3 deletions

View File

@@ -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);

View File

@@ -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)
}