Fix DecryptableStreamLocalUriFetcher bug for external video thumbnails.

Fix bug where external video thumbnails do not appear.
This commit is contained in:
alex-signal 2019-09-19 13:42:34 -03:00 committed by Greyson Parrelli
parent d1a6582ad7
commit faafa40122
2 changed files with 18 additions and 4 deletions

View File

@ -4,10 +4,10 @@ import android.content.ContentResolver;
import android.content.Context; import android.content.Context;
import android.graphics.Bitmap; import android.graphics.Bitmap;
import android.net.Uri; import android.net.Uri;
import org.thoughtcrime.securesms.logging.Log;
import com.bumptech.glide.load.data.StreamLocalUriFetcher; import com.bumptech.glide.load.data.StreamLocalUriFetcher;
import org.thoughtcrime.securesms.logging.Log;
import org.thoughtcrime.securesms.util.MediaUtil; import org.thoughtcrime.securesms.util.MediaUtil;
import java.io.ByteArrayInputStream; import java.io.ByteArrayInputStream;

View File

@ -3,6 +3,7 @@ package org.thoughtcrime.securesms.util;
import android.content.ContentResolver; import android.content.ContentResolver;
import android.content.Context; import android.content.Context;
import android.graphics.Bitmap; import android.graphics.Bitmap;
import android.media.ThumbnailUtils;
import android.net.Uri; import android.net.Uri;
import android.provider.MediaStore; import android.provider.MediaStore;
import androidx.annotation.NonNull; import androidx.annotation.NonNull;
@ -33,6 +34,7 @@ import org.thoughtcrime.securesms.mms.VideoSlide;
import java.io.FileNotFoundException; import java.io.FileNotFoundException;
import java.io.IOException; import java.io.IOException;
import java.io.InputStream; import java.io.InputStream;
import java.net.URLConnection;
import java.util.concurrent.ExecutionException; import java.util.concurrent.ExecutionException;
public class MediaUtil { public class MediaUtil {
@ -242,7 +244,7 @@ public class MediaUtil {
} }
public static boolean hasVideoThumbnail(Uri uri) { public static boolean hasVideoThumbnail(Uri uri) {
if (uri == null || !ContentResolver.SCHEME_CONTENT.equals(uri.getScheme())) { if (uri == null || !isSupportedVideoUriScheme(uri.getScheme())) {
return false; return false;
} }
@ -250,10 +252,13 @@ public class MediaUtil {
return uri.getLastPathSegment().contains("video"); return uri.getLastPathSegment().contains("video");
} else if (uri.toString().startsWith(MediaStore.Video.Media.EXTERNAL_CONTENT_URI.toString())) { } else if (uri.toString().startsWith(MediaStore.Video.Media.EXTERNAL_CONTENT_URI.toString())) {
return true; 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) { public static @Nullable Bitmap getVideoThumbnail(Context context, Uri uri) {
if ("com.android.providers.media.documents".equals(uri.getAuthority())) { if ("com.android.providers.media.documents".equals(uri.getAuthority())) {
@ -270,6 +275,10 @@ public class MediaUtil {
videoId, videoId,
MediaStore.Images.Thumbnails.MINI_KIND, MediaStore.Images.Thumbnails.MINI_KIND,
null); 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; return null;
@ -307,4 +316,9 @@ public class MediaUtil {
bitmap.recycle(); bitmap.recycle();
} }
} }
private static boolean isSupportedVideoUriScheme(@Nullable String scheme) {
return ContentResolver.SCHEME_CONTENT.equals(scheme) ||
ContentResolver.SCHEME_FILE.equals(scheme);
}
} }