From 47128338534482a7a92610b5ec6c690925727be1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bastian=20K=C3=B6cher?= Date: Mon, 6 Apr 2020 10:54:36 +0200 Subject: [PATCH] Always convert HEIC images to JPEG. This pr changes the behavior of sending HEIC images to always convert them to JPEG. This conversion is required to support image inline viewing accross different devices and operating systems. This follows the same strategy as on IOS: https://github.com/signalapp/Signal-iOS/pull/2511 Fixes: https://github.com/signalapp/Signal-iOS/issues/4374 & https://github.com/signalapp/Signal-Android/issues/9395 --- .../securesms/jobs/AttachmentCompressionJob.java | 4 ++++ .../java/org/thoughtcrime/securesms/util/MediaUtil.java | 9 +++++++++ 2 files changed, 13 insertions(+) diff --git a/app/src/main/java/org/thoughtcrime/securesms/jobs/AttachmentCompressionJob.java b/app/src/main/java/org/thoughtcrime/securesms/jobs/AttachmentCompressionJob.java index 1b9a865692..74cbdddd24 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/jobs/AttachmentCompressionJob.java +++ b/app/src/main/java/org/thoughtcrime/securesms/jobs/AttachmentCompressionJob.java @@ -145,6 +145,10 @@ public final class AttachmentCompressionJob extends BaseJob { if (!constraints.isSatisfied(context, attachment)) { throw new UndeliverableMessageException("Size constraints could not be met on video!"); } + } else if (MediaUtil.isHeic(attachment)) { + MediaStream converted = getResizedMedia(context, attachment, constraints); + attachmentDatabase.updateAttachmentData(attachment, converted, false); + attachmentDatabase.markAttachmentAsTransformed(attachmentId); } else if (constraints.isSatisfied(context, attachment)) { if (MediaUtil.isJpeg(attachment)) { MediaStream stripped = getResizedMedia(context, attachment, constraints); diff --git a/app/src/main/java/org/thoughtcrime/securesms/util/MediaUtil.java b/app/src/main/java/org/thoughtcrime/securesms/util/MediaUtil.java index 49562ccf01..1cb1b46acd 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/util/MediaUtil.java +++ b/app/src/main/java/org/thoughtcrime/securesms/util/MediaUtil.java @@ -49,6 +49,7 @@ public class MediaUtil { public static final String IMAGE_PNG = "image/png"; public static final String IMAGE_JPEG = "image/jpeg"; + public static final String IMAGE_HEIC = "image/heic"; public static final String IMAGE_WEBP = "image/webp"; public static final String IMAGE_GIF = "image/gif"; public static final String AUDIO_AAC = "audio/aac"; @@ -219,6 +220,10 @@ public class MediaUtil { return isJpegType(attachment.getContentType()); } + public static boolean isHeic(Attachment attachment) { + return isHeicType(attachment.getContentType()); + } + public static boolean isImage(Attachment attachment) { return isImageType(attachment.getContentType()); } @@ -247,6 +252,10 @@ public class MediaUtil { return !TextUtils.isEmpty(contentType) && contentType.trim().equals(IMAGE_JPEG); } + public static boolean isHeicType(String contentType) { + return !TextUtils.isEmpty(contentType) && contentType.trim().equals(IMAGE_HEIC); + } + public static boolean isFile(Attachment attachment) { return !isGif(attachment) && !isImage(attachment) && !isAudio(attachment) && !isVideo(attachment); }