From b36b34b1fdc79f58d281e24173f6cecbae4665f1 Mon Sep 17 00:00:00 2001 From: Alex Hart Date: Mon, 7 Feb 2022 13:27:35 -0400 Subject: [PATCH] Do not display SVGs as selectable images. Fixes #10922 Fixes #11032 --- .../securesms/database/MediaDatabase.java | 9 ++++++--- .../securesms/mediasend/MediaRepository.java | 14 ++++++++------ 2 files changed, 14 insertions(+), 9 deletions(-) diff --git a/app/src/main/java/org/thoughtcrime/securesms/database/MediaDatabase.java b/app/src/main/java/org/thoughtcrime/securesms/database/MediaDatabase.java index 8404d9d5c..c65cbfff3 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/database/MediaDatabase.java +++ b/app/src/main/java/org/thoughtcrime/securesms/database/MediaDatabase.java @@ -74,13 +74,16 @@ public class MediaDatabase extends Database { + "WHERE " + AttachmentDatabase.STICKER_PACK_ID + " IS NULL " + "GROUP BY " + AttachmentDatabase.DATA; - private static final String GALLERY_MEDIA_QUERY = String.format(BASE_MEDIA_QUERY, AttachmentDatabase.CONTENT_TYPE + " LIKE 'image/%' OR " + AttachmentDatabase.CONTENT_TYPE + " LIKE 'video/%'"); + private static final String GALLERY_MEDIA_QUERY = String.format(BASE_MEDIA_QUERY, AttachmentDatabase.CONTENT_TYPE + " NOT LIKE 'image/svg%' AND (" + + AttachmentDatabase.CONTENT_TYPE + " LIKE 'image/%' OR " + + AttachmentDatabase.CONTENT_TYPE + " LIKE 'video/%')"); private static final String AUDIO_MEDIA_QUERY = String.format(BASE_MEDIA_QUERY, AttachmentDatabase.CONTENT_TYPE + " LIKE 'audio/%'"); private static final String ALL_MEDIA_QUERY = String.format(BASE_MEDIA_QUERY, AttachmentDatabase.CONTENT_TYPE + " NOT LIKE 'text/x-signal-plain'"); - private static final String DOCUMENT_MEDIA_QUERY = String.format(BASE_MEDIA_QUERY, AttachmentDatabase.CONTENT_TYPE + " NOT LIKE 'image/%' AND " + + private static final String DOCUMENT_MEDIA_QUERY = String.format(BASE_MEDIA_QUERY, AttachmentDatabase.CONTENT_TYPE + " LIKE 'image/svg%' OR (" + + AttachmentDatabase.CONTENT_TYPE + " NOT LIKE 'image/%' AND " + AttachmentDatabase.CONTENT_TYPE + " NOT LIKE 'video/%' AND " + AttachmentDatabase.CONTENT_TYPE + " NOT LIKE 'audio/%' AND " + - AttachmentDatabase.CONTENT_TYPE + " NOT LIKE 'text/x-signal-plain'"); + AttachmentDatabase.CONTENT_TYPE + " NOT LIKE 'text/x-signal-plain')"); MediaDatabase(Context context, SignalDatabase databaseHelper) { super(context, databaseHelper); diff --git a/app/src/main/java/org/thoughtcrime/securesms/mediasend/MediaRepository.java b/app/src/main/java/org/thoughtcrime/securesms/mediasend/MediaRepository.java index 0dcff0286..f328b3d91 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/mediasend/MediaRepository.java +++ b/app/src/main/java/org/thoughtcrime/securesms/mediasend/MediaRepository.java @@ -24,6 +24,7 @@ import org.signal.core.util.logging.Log; import org.thoughtcrime.securesms.R; import org.thoughtcrime.securesms.mms.PartAuthority; import org.thoughtcrime.securesms.util.MediaUtil; +import org.thoughtcrime.securesms.util.SqlUtil; import org.thoughtcrime.securesms.util.Stopwatch; import org.thoughtcrime.securesms.util.StorageUtil; import org.thoughtcrime.securesms.util.Util; @@ -163,10 +164,11 @@ public class MediaRepository { Map folders = new HashMap<>(); String[] projection = new String[] { Images.Media._ID, Images.Media.BUCKET_ID, Images.Media.BUCKET_DISPLAY_NAME, Images.Media.DATE_MODIFIED }; - String selection = isNotPending(); + String selection = isNotPending() + " AND " + Images.Media.MIME_TYPE + " NOT LIKE ?"; + String[] args = SqlUtil.buildArgs("%image/svg%"); String sortBy = Images.Media.BUCKET_DISPLAY_NAME + " COLLATE NOCASE ASC, " + Images.Media.DATE_MODIFIED + " DESC"; - try (Cursor cursor = context.getContentResolver().query(contentUri, projection, selection, null, sortBy)) { + try (Cursor cursor = context.getContentResolver().query(contentUri, projection, selection, args, sortBy)) { while (cursor != null && cursor.moveToNext()) { long rowId = cursor.getLong(cursor.getColumnIndexOrThrow(projection[0])); Uri thumbnail = ContentUris.withAppendedId(contentUri, rowId); @@ -222,8 +224,8 @@ public class MediaRepository { @WorkerThread private @NonNull List getMediaInBucket(@NonNull Context context, @NonNull String bucketId, @NonNull Uri contentUri, boolean isImage) { List media = new LinkedList<>(); - String selection = Images.Media.BUCKET_ID + " = ? AND " + isNotPending(); - String[] selectionArgs = new String[] { bucketId }; + String selection = Images.Media.BUCKET_ID + " = ? AND " + isNotPending() + " AND " + Images.Media.MIME_TYPE + " NOT LIKE ?"; + String[] selectionArgs = new String[] { bucketId, "%image/svg%" }; String sortBy = Images.Media.DATE_MODIFIED + " DESC"; String[] projection; @@ -235,8 +237,8 @@ public class MediaRepository { } if (Media.ALL_MEDIA_BUCKET_ID.equals(bucketId)) { - selection = isNotPending(); - selectionArgs = null; + selection = isNotPending() + " AND " + Images.Media.MIME_TYPE + " NOT LIKE ?"; + selectionArgs = SqlUtil.buildArgs("%image/svg%"); } try (Cursor cursor = context.getContentResolver().query(contentUri, projection, selection, selectionArgs, sortBy)) {