aboutsummaryrefslogtreecommitdiffstats
path: root/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/operations/InputDataOperation.java
diff options
context:
space:
mode:
authorVincent Breitmoser <valodim@mugenguild.com>2015-10-23 16:28:48 +0200
committerVincent Breitmoser <valodim@mugenguild.com>2015-10-23 16:40:09 +0200
commit787b17030fe82f4e4807821991e259b6a2a094fc (patch)
tree9299e46fd48a8811de95e0d9b159aa1b76e32f9b /OpenKeychain/src/main/java/org/sufficientlysecure/keychain/operations/InputDataOperation.java
parentdafa604016fe6ec251ba229c97fd6f3c75d3d5af (diff)
downloadopen-keychain-787b17030fe82f4e4807821991e259b6a2a094fc.tar.gz
open-keychain-787b17030fe82f4e4807821991e259b6a2a094fc.tar.bz2
open-keychain-787b17030fe82f4e4807821991e259b6a2a094fc.zip
inputdataoperation: guess filetype from filename for generic application/ mime types
Diffstat (limited to 'OpenKeychain/src/main/java/org/sufficientlysecure/keychain/operations/InputDataOperation.java')
-rw-r--r--OpenKeychain/src/main/java/org/sufficientlysecure/keychain/operations/InputDataOperation.java20
1 files changed, 17 insertions, 3 deletions
diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/operations/InputDataOperation.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/operations/InputDataOperation.java
index 2b91cd06c..a09cf4f27 100644
--- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/operations/InputDataOperation.java
+++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/operations/InputDataOperation.java
@@ -25,10 +25,12 @@ import java.io.InputStream;
import java.io.OutputStream;
import java.util.ArrayList;
+import android.content.ClipDescription;
import android.content.Context;
import android.net.Uri;
import android.support.annotation.NonNull;
import android.text.TextUtils;
+import android.webkit.MimeTypeMap;
import org.apache.james.mime4j.MimeException;
import org.apache.james.mime4j.codec.DecodeMonitor;
@@ -292,12 +294,24 @@ public class InputDataOperation extends BaseOperation<InputDataParcel> {
log.add(LogType.MSG_DATA_MIME_PART, 2);
- log.add(LogType.MSG_DATA_MIME_TYPE, 3, bd.getMimeType());
+ String mimeType = bd.getMimeType();
+
if (mFilename != null) {
log.add(LogType.MSG_DATA_MIME_FILENAME, 3, mFilename);
+ boolean isGenericMimeType = ClipDescription.compareMimeTypes(mimeType, "application/octet-stream")
+ || ClipDescription.compareMimeTypes(mimeType, "application/x-download");
+ if (isGenericMimeType) {
+ String extension = MimeTypeMap.getFileExtensionFromUrl(mFilename);
+ String extMimeType = MimeTypeMap.getSingleton().getMimeTypeFromExtension(extension);
+ if (extMimeType != null) {
+ mimeType = extMimeType;
+ log.add(LogType.MSG_DATA_MIME_FROM_EXTENSION, 3);
+ }
+ }
}
+ log.add(LogType.MSG_DATA_MIME_TYPE, 3, mimeType);
- Uri uri = TemporaryFileProvider.createFile(mContext, mFilename, bd.getMimeType());
+ Uri uri = TemporaryFileProvider.createFile(mContext, mFilename, mimeType);
OutputStream out = mContext.getContentResolver().openOutputStream(uri, "w");
if (out == null) {
@@ -318,7 +332,7 @@ public class InputDataOperation extends BaseOperation<InputDataParcel> {
charset = "utf-8";
}
- OpenPgpMetadata metadata = new OpenPgpMetadata(mFilename, bd.getMimeType(), 0L, totalLength, charset);
+ OpenPgpMetadata metadata = new OpenPgpMetadata(mFilename, mimeType, 0L, totalLength, charset);
out.close();
outputUris.add(uri);