diff options
Diffstat (limited to 'OpenKeychain/src/main/java/org')
2 files changed, 18 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); diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/operations/results/OperationResult.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/operations/results/OperationResult.java index ca5931f8d..0b8c3e6c7 100644 --- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/operations/results/OperationResult.java +++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/operations/results/OperationResult.java @@ -836,6 +836,7 @@ public abstract class OperationResult implements Parcelable { MSG_DATA_DETACHED_TRAILING (LogLevel.WARN, R.string.msg_data_detached_trailing), MSG_DATA_DETACHED_UNSUPPORTED (LogLevel.WARN, R.string.msg_data_detached_unsupported), MSG_DATA_MIME_BAD(LogLevel.INFO, R.string.msg_data_mime_bad), + MSG_DATA_MIME_FROM_EXTENSION (LogLevel.DEBUG, R.string.msg_data_mime_from_extension), MSG_DATA_MIME_FILENAME (LogLevel.DEBUG, R.string.msg_data_mime_filename), MSG_DATA_MIME_LENGTH (LogLevel.DEBUG, R.string.msg_data_mime_length), MSG_DATA_MIME (LogLevel.DEBUG, R.string.msg_data_mime), |