diff --git a/briar-android/src/main/java/org/briarproject/briar/android/conversation/AttachmentController.java b/briar-android/src/main/java/org/briarproject/briar/android/conversation/AttachmentController.java index b8754e755..2d85e2668 100644 --- a/briar-android/src/main/java/org/briarproject/briar/android/conversation/AttachmentController.java +++ b/briar-android/src/main/java/org/briarproject/briar/android/conversation/AttachmentController.java @@ -4,6 +4,7 @@ import android.content.res.Resources; import android.graphics.BitmapFactory; import android.support.annotation.Nullable; import android.support.media.ExifInterface; +import android.webkit.MimeTypeMap; import org.briarproject.bramble.api.Pair; import org.briarproject.bramble.api.db.DatabaseExecutor; @@ -132,8 +133,14 @@ class AttachmentController { thumbnailSize = getThumbnailSize(size.width, size.height, size.mimeType); } + // get file extension + MimeTypeMap mimeTypeMap = MimeTypeMap.getSingleton(); + String extension = mimeTypeMap.getExtensionFromMimeType(size.mimeType); + if (extension == null) { + return new AttachmentItem(messageId, 0, 0, "", "", 0, 0, true); + } return new AttachmentItem(messageId, size.width, size.height, - size.mimeType, thumbnailSize.width, thumbnailSize.height, + size.mimeType, extension, thumbnailSize.width, thumbnailSize.height, size.error); } diff --git a/briar-android/src/main/java/org/briarproject/briar/android/conversation/AttachmentItem.java b/briar-android/src/main/java/org/briarproject/briar/android/conversation/AttachmentItem.java index 9e36e848a..bbc7c1f6b 100644 --- a/briar-android/src/main/java/org/briarproject/briar/android/conversation/AttachmentItem.java +++ b/briar-android/src/main/java/org/briarproject/briar/android/conversation/AttachmentItem.java @@ -14,7 +14,7 @@ public class AttachmentItem implements Parcelable { private final MessageId messageId; private final int width, height; - private final String mimeType; + private final String mimeType, extension; private final int thumbnailWidth, thumbnailHeight; private final boolean hasError; @@ -32,11 +32,13 @@ public class AttachmentItem implements Parcelable { }; AttachmentItem(MessageId messageId, int width, int height, String mimeType, - int thumbnailWidth, int thumbnailHeight, boolean hasError) { + String extension, int thumbnailWidth, int thumbnailHeight, + boolean hasError) { this.messageId = messageId; this.width = width; this.height = height; this.mimeType = mimeType; + this.extension = extension; this.thumbnailWidth = thumbnailWidth; this.thumbnailHeight = thumbnailHeight; this.hasError = hasError; @@ -49,6 +51,7 @@ public class AttachmentItem implements Parcelable { width = in.readInt(); height = in.readInt(); mimeType = in.readString(); + extension = in.readString(); thumbnailWidth = in.readInt(); thumbnailHeight = in.readInt(); hasError = in.readByte() != 0; @@ -70,6 +73,10 @@ public class AttachmentItem implements Parcelable { return mimeType; } + String getExtension() { + return extension; + } + int getThumbnailWidth() { return thumbnailWidth; } @@ -98,6 +105,7 @@ public class AttachmentItem implements Parcelable { dest.writeInt(width); dest.writeInt(height); dest.writeString(mimeType); + dest.writeString(extension); dest.writeInt(thumbnailWidth); dest.writeInt(thumbnailHeight); dest.writeByte((byte) (hasError ? 1 : 0)); diff --git a/briar-android/src/main/java/org/briarproject/briar/android/conversation/ImageViewModel.java b/briar-android/src/main/java/org/briarproject/briar/android/conversation/ImageViewModel.java index 059f657e3..694887c91 100644 --- a/briar-android/src/main/java/org/briarproject/briar/android/conversation/ImageViewModel.java +++ b/briar-android/src/main/java/org/briarproject/briar/android/conversation/ImageViewModel.java @@ -94,10 +94,8 @@ public class ImageViewModel extends AndroidViewModel { */ void saveImage(AttachmentItem attachment) { File file = getImageFile(attachment); - saveImage(attachment, () -> getOutputStream(file), () -> { - scanFile(getApplication(), new String[] {file.toString()}, null, - null); - }); + saveImage(attachment, () -> getOutputStream(file), () -> scanFile( + getApplication(), new String[] {file.toString()}, null, null)); } private void saveImage(AttachmentItem attachment, OutputStreamProvider osp, @@ -141,7 +139,7 @@ public class ImageViewModel extends AndroidViewModel { //noinspection ResultOfMethodCallIgnored path.mkdirs(); String fileName = getFileName(); - String ext = attachment.getMimeType().replaceFirst("image/", "."); + String ext = "." + attachment.getExtension(); File file = new File(path, fileName + ext); int i = 1; while (file.exists()) {