diff options
author | Vincent Breitmoser <valodim@mugenguild.com> | 2015-10-23 16:28:48 +0200 |
---|---|---|
committer | Vincent Breitmoser <valodim@mugenguild.com> | 2015-10-23 16:40:09 +0200 |
commit | 787b17030fe82f4e4807821991e259b6a2a094fc (patch) | |
tree | 9299e46fd48a8811de95e0d9b159aa1b76e32f9b /OpenKeychain/src/main/java/org/sufficientlysecure/keychain/operations/InputDataOperation.java | |
parent | dafa604016fe6ec251ba229c97fd6f3c75d3d5af (diff) | |
download | open-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.java | 20 |
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); |