delegate mime type from intent

This commit is contained in:
Daniel Gultsch 2018-03-03 16:58:04 +01:00
parent 2f71c0cb79
commit c1c314f47a
6 changed files with 21 additions and 17 deletions

View File

@ -311,10 +311,10 @@ public class FileBackend {
} }
} }
public void copyFileToPrivateStorage(Message message, Uri uri) throws FileCopyException { public void copyFileToPrivateStorage(Message message, Uri uri, String type) throws FileCopyException {
String mime = MimeUtils.guessMimeTypeFromUri(mXmppConnectionService, uri); String mime = type != null ? type : MimeUtils.guessMimeTypeFromUri(mXmppConnectionService, uri);
Log.d(Config.LOGTAG, "copy " + uri.toString() + " to private storage (mime=" + mime + ")"); Log.d(Config.LOGTAG, "copy " + uri.toString() + " to private storage (mime=" + mime + ")");
String extension = MimeTypeMap.getSingleton().getExtensionFromMimeType(mime); String extension = MimeUtils.guessExtensionFromMimeType(mime);
if (extension == null) { if (extension == null) {
extension = getExtensionFromUri(uri); extension = getExtensionFromUri(uri);
} }

View File

@ -30,17 +30,19 @@ public class AttachFileToConversationRunnable implements Runnable, MediaTranscod
private final XmppConnectionService mXmppConnectionService; private final XmppConnectionService mXmppConnectionService;
private final Message message; private final Message message;
private final Uri uri; private final Uri uri;
private final String type;
private final UiCallback<Message> callback; private final UiCallback<Message> callback;
private final boolean isVideoMessage; private final boolean isVideoMessage;
private final long originalFileSize; private final long originalFileSize;
private int currentProgress = -1; private int currentProgress = -1;
public AttachFileToConversationRunnable(XmppConnectionService xmppConnectionService, Uri uri, Message message, UiCallback<Message> callback) { public AttachFileToConversationRunnable(XmppConnectionService xmppConnectionService, Uri uri, String type, Message message, UiCallback<Message> callback) {
this.uri = uri; this.uri = uri;
this.type = type;
this.mXmppConnectionService = xmppConnectionService; this.mXmppConnectionService = xmppConnectionService;
this.message = message; this.message = message;
this.callback = callback; this.callback = callback;
final String mimeType = MimeUtils.guessMimeTypeFromUri(mXmppConnectionService, uri); final String mimeType = type != null ? type : MimeUtils.guessMimeTypeFromUri(mXmppConnectionService, uri);
final int autoAcceptFileSize = mXmppConnectionService.getResources().getInteger(R.integer.auto_accept_filesize); final int autoAcceptFileSize = mXmppConnectionService.getResources().getInteger(R.integer.auto_accept_filesize);
this.originalFileSize = FileBackend.getFileSize(mXmppConnectionService,uri); this.originalFileSize = FileBackend.getFileSize(mXmppConnectionService,uri);
this.isVideoMessage = (mimeType != null && mimeType.startsWith("video/") this.isVideoMessage = (mimeType != null && mimeType.startsWith("video/")
@ -65,7 +67,7 @@ public class AttachFileToConversationRunnable implements Runnable, MediaTranscod
} }
} else { } else {
try { try {
mXmppConnectionService.getFileBackend().copyFileToPrivateStorage(message, uri); mXmppConnectionService.getFileBackend().copyFileToPrivateStorage(message, uri, type);
mXmppConnectionService.getFileBackend().updateFileParams(message); mXmppConnectionService.getFileBackend().updateFileParams(message);
if (message.getEncryption() == Message.ENCRYPTION_DECRYPTED) { if (message.getEncryption() == Message.ENCRYPTION_DECRYPTED) {
final PgpEngine pgpEngine = mXmppConnectionService.getPgpEngine(); final PgpEngine pgpEngine = mXmppConnectionService.getPgpEngine();

View File

@ -464,9 +464,7 @@ public class XmppConnectionService extends Service {
} }
} }
public void attachFileToConversation(final Conversation conversation, public void attachFileToConversation(final Conversation conversation, final Uri uri, final String type, final UiCallback<Message> callback) {
final Uri uri,
final UiCallback<Message> callback) {
if (FileBackend.weOwnFile(this, uri)) { if (FileBackend.weOwnFile(this, uri)) {
Log.d(Config.LOGTAG, "trying to attach file that belonged to us"); Log.d(Config.LOGTAG, "trying to attach file that belonged to us");
callback.error(R.string.security_error_invalid_file_access, null); callback.error(R.string.security_error_invalid_file_access, null);
@ -480,7 +478,7 @@ public class XmppConnectionService extends Service {
} }
message.setCounterpart(conversation.getNextCounterpart()); message.setCounterpart(conversation.getNextCounterpart());
message.setType(Message.TYPE_FILE); message.setType(Message.TYPE_FILE);
final AttachFileToConversationRunnable runnable = new AttachFileToConversationRunnable(this, uri, message, callback); final AttachFileToConversationRunnable runnable = new AttachFileToConversationRunnable(this, uri, type, message, callback);
if (runnable.isVideoMessage()) { if (runnable.isVideoMessage()) {
mVideoCompressionExecutor.execute(runnable); mVideoCompressionExecutor.execute(runnable);
} else { } else {
@ -502,7 +500,7 @@ public class XmppConnectionService extends Service {
|| ("auto".equals(compressPictures) && getFileBackend().useImageAsIs(uri)) || ("auto".equals(compressPictures) && getFileBackend().useImageAsIs(uri))
|| (mimeType != null && mimeType.endsWith("/gif"))) { || (mimeType != null && mimeType.endsWith("/gif"))) {
Log.d(Config.LOGTAG, conversation.getAccount().getJid().toBareJid() + ": not compressing picture. sending as file"); Log.d(Config.LOGTAG, conversation.getAccount().getJid().toBareJid() + ": not compressing picture. sending as file");
attachFileToConversation(conversation, uri, callback); attachFileToConversation(conversation, uri, mimeType, callback);
return; return;
} }
final Message message; final Message message;

View File

@ -508,14 +508,14 @@ public class ConversationFragment extends XmppFragment implements EditMessage.Ke
}); });
} }
private void attachFileToConversation(Conversation conversation, Uri uri) { private void attachFileToConversation(Conversation conversation, Uri uri, String type) {
if (conversation == null) { if (conversation == null) {
return; return;
} }
final Toast prepareFileToast = Toast.makeText(getActivity(), getText(R.string.preparing_file), Toast.LENGTH_LONG); final Toast prepareFileToast = Toast.makeText(getActivity(), getText(R.string.preparing_file), Toast.LENGTH_LONG);
prepareFileToast.show(); prepareFileToast.show();
activity.delegateUriPermissionsToService(uri); activity.delegateUriPermissionsToService(uri);
activity.xmppConnectionService.attachFileToConversation(conversation, uri, new UiInformableCallback<Message>() { activity.xmppConnectionService.attachFileToConversation(conversation, uri, type, new UiInformableCallback<Message>() {
@Override @Override
public void inform(final String text) { public void inform(final String text) {
hidePrepareFileToast(prepareFileToast); hidePrepareFileToast(prepareFileToast);
@ -705,10 +705,11 @@ public class ConversationFragment extends XmppFragment implements EditMessage.Ke
case ATTACHMENT_CHOICE_RECORD_VIDEO: case ATTACHMENT_CHOICE_RECORD_VIDEO:
case ATTACHMENT_CHOICE_RECORD_VOICE: case ATTACHMENT_CHOICE_RECORD_VOICE:
final List<Uri> fileUris = AttachmentTool.extractUriFromIntent(data); final List<Uri> fileUris = AttachmentTool.extractUriFromIntent(data);
String type = data.getType();
final PresenceSelector.OnPresenceSelected callback = () -> { final PresenceSelector.OnPresenceSelected callback = () -> {
for (Iterator<Uri> i = fileUris.iterator(); i.hasNext(); i.remove()) { for (Iterator<Uri> i = fileUris.iterator(); i.hasNext(); i.remove()) {
Log.d(Config.LOGTAG, "ConversationsActivity.onActivityResult() - attaching file to conversations. CHOOSE_FILE/RECORD_VOICE/RECORD_VIDEO"); Log.d(Config.LOGTAG, "ConversationsActivity.onActivityResult() - attaching file to conversations. CHOOSE_FILE/RECORD_VOICE/RECORD_VIDEO");
attachFileToConversation(conversation, i.next()); attachFileToConversation(conversation, i.next(), type);
} }
}; };
if (conversation == null || conversation.getMode() == Conversation.MODE_MULTI || FileBackend.allFilesUnderSize(getActivity(), fileUris, getMaxHttpUploadSize(conversation))) { if (conversation == null || conversation.getMode() == Conversation.MODE_MULTI || FileBackend.allFilesUnderSize(getActivity(), fileUris, getMaxHttpUploadSize(conversation))) {

View File

@ -53,6 +53,7 @@ public class ShareWithActivity extends XmppActivity implements XmppConnectionSer
public String text; public String text;
public String uuid; public String uuid;
public boolean multiple = false; public boolean multiple = false;
public String type;
} }
private Share share; private Share share;
@ -215,6 +216,7 @@ public class ShareWithActivity extends XmppActivity implements XmppConnectionSer
this.share.uris.clear(); this.share.uris.clear();
this.share.uris.add(uri); this.share.uris.add(uri);
this.share.image = type.startsWith("image/") || isImage(uri); this.share.image = type.startsWith("image/") || isImage(uri);
this.share.type = type;
} else { } else {
this.share.text = text; this.share.text = text;
} }
@ -315,7 +317,7 @@ public class ShareWithActivity extends XmppActivity implements XmppConnectionSer
replaceToast(getString(R.string.preparing_file)); replaceToast(getString(R.string.preparing_file));
final Uri uri = share.uris.get(0); final Uri uri = share.uris.get(0);
delegateUriPermissionsToService(uri); delegateUriPermissionsToService(uri);
xmppConnectionService.attachFileToConversation(conversation, uri, attachFileCallback); xmppConnectionService.attachFileToConversation(conversation, uri, share.type, attachFileCallback);
} }
}; };
if (account.httpUploadAvailable() if (account.httpUploadAvailable()

View File

@ -55,7 +55,6 @@ public final class MimeUtils {
add("application/msaccess", "mdb"); add("application/msaccess", "mdb");
add("application/oda", "oda"); add("application/oda", "oda");
add("application/ogg", "ogg"); add("application/ogg", "ogg");
add("application/ogg", "oga");
add("application/pdf", "pdf"); add("application/pdf", "pdf");
add("application/pgp-keys", "key"); add("application/pgp-keys", "key");
add("application/pgp-signature", "pgp"); add("application/pgp-signature", "pgp");
@ -234,6 +233,7 @@ public final class MimeUtils {
add("audio/mpeg", "mp2"); add("audio/mpeg", "mp2");
add("audio/mpeg", "m4a"); add("audio/mpeg", "m4a");
add("audio/mpegurl", "m3u"); add("audio/mpegurl", "m3u");
add("audio/ogg","oga");
add("audio/prs.sid", "sid"); add("audio/prs.sid", "sid");
add("audio/x-aiff", "aif"); add("audio/x-aiff", "aif");
add("audio/x-aiff", "aiff"); add("audio/x-aiff", "aiff");
@ -355,6 +355,7 @@ public final class MimeUtils {
add("video/fli", "fli"); add("video/fli", "fli");
add("video/m4v", "m4v"); add("video/m4v", "m4v");
add("video/mp2ts", "ts"); add("video/mp2ts", "ts");
add("video/ogg","ogv");
add("video/mpeg", "mpeg"); add("video/mpeg", "mpeg");
add("video/mpeg", "mpg"); add("video/mpeg", "mpg");
add("video/mpeg", "mpe"); add("video/mpeg", "mpe");
@ -489,7 +490,7 @@ public final class MimeUtils {
if (mimeType == null || mimeType.isEmpty()) { if (mimeType == null || mimeType.isEmpty()) {
return null; return null;
} }
return mimeTypeToExtensionMap.get(mimeType); return mimeTypeToExtensionMap.get(mimeType.split(";")[0]);
} }
public static String guessMimeTypeFromUri(Context context, Uri uri) { public static String guessMimeTypeFromUri(Context context, Uri uri) {