From faafa40122153087455029c3313b3e58c1034626 Mon Sep 17 00:00:00 2001 From: alex-signal Date: Thu, 19 Sep 2019 13:42:34 -0300 Subject: [PATCH] Fix DecryptableStreamLocalUriFetcher bug for external video thumbnails. Fix bug where external video thumbnails do not appear. --- .../mms/DecryptableStreamLocalUriFetcher.java | 2 +- .../securesms/util/MediaUtil.java | 20 ++++++++++++++++--- 2 files changed, 18 insertions(+), 4 deletions(-) diff --git a/src/org/thoughtcrime/securesms/mms/DecryptableStreamLocalUriFetcher.java b/src/org/thoughtcrime/securesms/mms/DecryptableStreamLocalUriFetcher.java index 2b11974a67..0543e737cd 100644 --- a/src/org/thoughtcrime/securesms/mms/DecryptableStreamLocalUriFetcher.java +++ b/src/org/thoughtcrime/securesms/mms/DecryptableStreamLocalUriFetcher.java @@ -4,10 +4,10 @@ import android.content.ContentResolver; import android.content.Context; import android.graphics.Bitmap; import android.net.Uri; -import org.thoughtcrime.securesms.logging.Log; import com.bumptech.glide.load.data.StreamLocalUriFetcher; +import org.thoughtcrime.securesms.logging.Log; import org.thoughtcrime.securesms.util.MediaUtil; import java.io.ByteArrayInputStream; diff --git a/src/org/thoughtcrime/securesms/util/MediaUtil.java b/src/org/thoughtcrime/securesms/util/MediaUtil.java index 7d510b8fcd..88755d7871 100644 --- a/src/org/thoughtcrime/securesms/util/MediaUtil.java +++ b/src/org/thoughtcrime/securesms/util/MediaUtil.java @@ -3,6 +3,7 @@ package org.thoughtcrime.securesms.util; import android.content.ContentResolver; import android.content.Context; import android.graphics.Bitmap; +import android.media.ThumbnailUtils; import android.net.Uri; import android.provider.MediaStore; import androidx.annotation.NonNull; @@ -33,6 +34,7 @@ import org.thoughtcrime.securesms.mms.VideoSlide; import java.io.FileNotFoundException; import java.io.IOException; import java.io.InputStream; +import java.net.URLConnection; import java.util.concurrent.ExecutionException; public class MediaUtil { @@ -242,7 +244,7 @@ public class MediaUtil { } public static boolean hasVideoThumbnail(Uri uri) { - if (uri == null || !ContentResolver.SCHEME_CONTENT.equals(uri.getScheme())) { + if (uri == null || !isSupportedVideoUriScheme(uri.getScheme())) { return false; } @@ -250,9 +252,12 @@ public class MediaUtil { return uri.getLastPathSegment().contains("video"); } else if (uri.toString().startsWith(MediaStore.Video.Media.EXTERNAL_CONTENT_URI.toString())) { return true; + } else if (uri.toString().startsWith("file://") && + MediaUtil.isVideo(URLConnection.guessContentTypeFromName(uri.toString()))) { + return true; + } else { + return false; } - - return false; } public static @Nullable Bitmap getVideoThumbnail(Context context, Uri uri) { @@ -270,6 +275,10 @@ public class MediaUtil { videoId, MediaStore.Images.Thumbnails.MINI_KIND, null); + } else if (uri.toString().startsWith("file://") && + MediaUtil.isVideo(URLConnection.guessContentTypeFromName(uri.toString()))) { + return ThumbnailUtils.createVideoThumbnail(uri.toString().replace("file://", ""), + MediaStore.Video.Thumbnails.MINI_KIND); } return null; @@ -307,4 +316,9 @@ public class MediaUtil { bitmap.recycle(); } } + + private static boolean isSupportedVideoUriScheme(@Nullable String scheme) { + return ContentResolver.SCHEME_CONTENT.equals(scheme) || + ContentResolver.SCHEME_FILE.equals(scheme); + } }