diff --git a/src/org/thoughtcrime/securesms/jobs/AttachmentCompressionJob.java b/src/org/thoughtcrime/securesms/jobs/AttachmentCompressionJob.java index df80e72550..d5392daf3a 100644 --- a/src/org/thoughtcrime/securesms/jobs/AttachmentCompressionJob.java +++ b/src/org/thoughtcrime/securesms/jobs/AttachmentCompressionJob.java @@ -28,6 +28,8 @@ import org.thoughtcrime.securesms.transport.UndeliverableMessageException; import org.thoughtcrime.securesms.util.BitmapDecodingException; import org.thoughtcrime.securesms.util.BitmapUtil; import org.thoughtcrime.securesms.util.MediaUtil; +import org.thoughtcrime.securesms.util.MemoryFileDescriptor; +import org.thoughtcrime.securesms.util.MemoryFileDescriptor.MemoryFileException; import org.thoughtcrime.securesms.video.InMemoryTranscoder; import org.thoughtcrime.securesms.video.VideoSizeException; import org.thoughtcrime.securesms.video.VideoSourceException; @@ -110,7 +112,7 @@ public final class AttachmentCompressionJob extends BaseJob { DatabaseAttachment databaseAttachment = database.getAttachment(attachmentId); if (databaseAttachment == null) { - throw new IllegalStateException("Cannot find the specified attachment."); + throw new UndeliverableMessageException("Cannot find the specified attachment."); } MediaConstraints mediaConstraints = mms ? MediaConstraints.getMmsMediaConstraints(mmsSubscriptionId) @@ -185,7 +187,7 @@ public final class AttachmentCompressionJob extends BaseJob { } } } - } catch (VideoSourceException | EncodingException e) { + } catch (VideoSourceException | EncodingException | MemoryFileException e) { if (attachment.getSize() > constraints.getVideoMaxSize(context)) { throw new UndeliverableMessageException("Duration not found, attachment too large to skip transcode", e); } else { diff --git a/src/org/thoughtcrime/securesms/util/MemoryFileDescriptor.java b/src/org/thoughtcrime/securesms/util/MemoryFileDescriptor.java index dcc6ea2785..e8b7b724d9 100644 --- a/src/org/thoughtcrime/securesms/util/MemoryFileDescriptor.java +++ b/src/org/thoughtcrime/securesms/util/MemoryFileDescriptor.java @@ -47,12 +47,12 @@ public final class MemoryFileDescriptor implements Closeable { * Use zero to avoid RAM check. * @return MemoryFileDescriptor * @throws MemoryLimitException If there is not enough available RAM to comfortably fit this file. - * @throws IOException If fails to create a memory file descriptor. + * @throws MemoryFileCreationException If fails to create a memory file descriptor. */ public static MemoryFileDescriptor newMemoryFileDescriptor(@NonNull Context context, @NonNull String debugName, long sizeEstimate) - throws MemoryLimitException, IOException + throws MemoryFileException { if (sizeEstimate < 0) throw new IllegalArgumentException(); @@ -89,7 +89,8 @@ public final class MemoryFileDescriptor implements Closeable { int fileDescriptor = FileUtils.createMemoryFileDescriptor(debugName); if (fileDescriptor < 0) { - throw new IOException("Failed to create a memory file descriptor " + fileDescriptor); + Log.w(TAG, "Failed to create file descriptor: " + fileDescriptor); + throw new MemoryFileCreationException(); } return new MemoryFileDescriptor(ParcelFileDescriptor.adoptFd(fileDescriptor), sizeEstimate); @@ -155,4 +156,13 @@ public final class MemoryFileDescriptor implements Closeable { return fileInputStream.getChannel().size(); } } + + public static class MemoryFileException extends IOException { + } + + private static final class MemoryLimitException extends MemoryFileException { + } + + private static final class MemoryFileCreationException extends MemoryFileException { + } } diff --git a/src/org/thoughtcrime/securesms/util/MemoryLimitException.java b/src/org/thoughtcrime/securesms/util/MemoryLimitException.java deleted file mode 100644 index 2dfe9d0d87..0000000000 --- a/src/org/thoughtcrime/securesms/util/MemoryLimitException.java +++ /dev/null @@ -1,6 +0,0 @@ -package org.thoughtcrime.securesms.util; - -import java.io.IOException; - -public final class MemoryLimitException extends IOException { -}