mirror of
https://github.com/signalapp/Signal-Android.git
synced 2025-12-23 20:48:43 +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.database.AttachmentTable;
|
||||||
import org.thoughtcrime.securesms.mms.DecryptableStreamUriLoader.DecryptableUri;
|
import org.thoughtcrime.securesms.mms.DecryptableStreamUriLoader.DecryptableUri;
|
||||||
import org.thoughtcrime.securesms.mms.ImageSlide;
|
import org.thoughtcrime.securesms.mms.ImageSlide;
|
||||||
|
import org.thoughtcrime.securesms.mms.PartAuthority;
|
||||||
import org.thoughtcrime.securesms.mms.Slide;
|
import org.thoughtcrime.securesms.mms.Slide;
|
||||||
import org.thoughtcrime.securesms.mms.SlideClickListener;
|
import org.thoughtcrime.securesms.mms.SlideClickListener;
|
||||||
import org.thoughtcrime.securesms.mms.SlidesClickedListener;
|
import org.thoughtcrime.securesms.mms.SlidesClickedListener;
|
||||||
@@ -488,7 +489,12 @@ public class ThumbnailView extends FrameLayout {
|
|||||||
|
|
||||||
transferControlViewStub.setVisibility(View.GONE);
|
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)
|
.diskCacheStrategy(DiskCacheStrategy.NONE)
|
||||||
.downsample(SignalDownsampleStrategy.CENTER_OUTSIDE_NO_UPSCALE)
|
.downsample(SignalDownsampleStrategy.CENTER_OUTSIDE_NO_UPSCALE)
|
||||||
.listener(listener);
|
.listener(listener);
|
||||||
|
|||||||
@@ -2,12 +2,14 @@ package org.thoughtcrime.securesms.mediasend.v2.gallery
|
|||||||
|
|
||||||
import android.animation.ValueAnimator
|
import android.animation.ValueAnimator
|
||||||
import android.graphics.drawable.Drawable
|
import android.graphics.drawable.Drawable
|
||||||
|
import android.net.Uri
|
||||||
import android.view.View
|
import android.view.View
|
||||||
import android.widget.ImageView
|
import android.widget.ImageView
|
||||||
import android.widget.TextView
|
import android.widget.TextView
|
||||||
import androidx.core.view.setPadding
|
import androidx.core.view.setPadding
|
||||||
import com.bumptech.glide.Glide
|
import com.bumptech.glide.Glide
|
||||||
import com.bumptech.glide.load.DataSource
|
import com.bumptech.glide.load.DataSource
|
||||||
|
import com.bumptech.glide.load.engine.DiskCacheStrategy
|
||||||
import com.bumptech.glide.load.engine.GlideException
|
import com.bumptech.glide.load.engine.GlideException
|
||||||
import com.bumptech.glide.request.RequestListener
|
import com.bumptech.glide.request.RequestListener
|
||||||
import com.bumptech.glide.request.target.Target
|
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.Media
|
||||||
import org.thoughtcrime.securesms.mediasend.MediaFolder
|
import org.thoughtcrime.securesms.mediasend.MediaFolder
|
||||||
import org.thoughtcrime.securesms.mms.DecryptableStreamUriLoader
|
import org.thoughtcrime.securesms.mms.DecryptableStreamUriLoader
|
||||||
|
import org.thoughtcrime.securesms.mms.PartAuthority
|
||||||
import org.thoughtcrime.securesms.util.MediaUtil
|
import org.thoughtcrime.securesms.util.MediaUtil
|
||||||
import org.thoughtcrime.securesms.util.adapter.mapping.LayoutFactory
|
import org.thoughtcrime.securesms.util.adapter.mapping.LayoutFactory
|
||||||
import org.thoughtcrime.securesms.util.adapter.mapping.MappingAdapter
|
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) {
|
abstract class BaseViewHolder<T : MappingModel<T>>(itemView: View) : MappingViewHolder<T>(itemView) {
|
||||||
protected val imageView: ShapeableImageView = itemView.findViewById(R.id.media_gallery_image)
|
protected val imageView: ShapeableImageView = itemView.findViewById(R.id.media_gallery_image)
|
||||||
protected val playOverlay: ImageView? = itemView.findViewById(R.id.media_gallery_play_overlay)
|
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) {
|
class FolderViewHolder(itemView: View, private val onMediaFolderClicked: OnMediaFolderClicked) : BaseViewHolder<FolderModel>(itemView) {
|
||||||
override fun bind(model: FolderModel) {
|
override fun bind(model: FolderModel) {
|
||||||
Glide.with(imageView)
|
Glide.with(imageView)
|
||||||
.load(DecryptableStreamUriLoader.DecryptableUri(model.mediaFolder.thumbnailUri))
|
.load(model.mediaFolder.thumbnailUri.toGlideModel())
|
||||||
.into(imageView)
|
.into(imageView)
|
||||||
|
|
||||||
playOverlay?.visible = false
|
playOverlay?.visible = false
|
||||||
@@ -131,7 +142,8 @@ object MediaGallerySelectableItem {
|
|||||||
}
|
}
|
||||||
|
|
||||||
Glide.with(imageView)
|
Glide.with(imageView)
|
||||||
.load(DecryptableStreamUriLoader.DecryptableUri(model.media.uri))
|
.load(model.media.uri.toGlideModel())
|
||||||
|
.diskCacheStrategy(DiskCacheStrategy.ALL)
|
||||||
.addListener(ErrorLoggingRequestListener(FILE_VIEW_HOLDER_TAG))
|
.addListener(ErrorLoggingRequestListener(FILE_VIEW_HOLDER_TAG))
|
||||||
.into(imageView)
|
.into(imageView)
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user