diff --git a/src/main/java/eu/siacs/conversations/persistance/FileBackend.java b/src/main/java/eu/siacs/conversations/persistance/FileBackend.java index 2472503f8eb407d9cc2ce21d6a991e3f23f3d4a5..fc4ef397cc4f1bb7454a324cd137ba6a7daaeb77 100644 --- a/src/main/java/eu/siacs/conversations/persistance/FileBackend.java +++ b/src/main/java/eu/siacs/conversations/persistance/FileBackend.java @@ -761,12 +761,32 @@ public class FileBackend { try { setupRelativeFilePath(message, uri, extension); copyFileToPrivateStorage(mXmppConnectionService.getFileBackend().getFile(message), uri); + final String name = getDisplayNameFromUri(uri); + if (name != null) { + message.getFileParams().setName(name); + } } catch (final XmppConnectionService.BlockedMediaException e) { message.setRelativeFilePath(null); message.setDeleted(true); } } + private String getDisplayNameFromUri(final Uri uri) { + final String[] projection = {OpenableColumns.DISPLAY_NAME}; + String filename = null; + try (final Cursor cursor = + mXmppConnectionService + .getContentResolver() + .query(uri, projection, null, null, null)) { + if (cursor != null && cursor.moveToFirst()) { + filename = cursor.getString(0); + } + } catch (final Exception e) { + filename = null; + } + return filename; + } + private String getExtensionFromUri(final Uri uri) { final String[] projection = {MediaStore.MediaColumns.DATA}; String filename = null; @@ -1762,7 +1782,7 @@ public class FileBackend { } else { fileParams.url = url; } - fileParams.setName(file.getName()); + if (fileParams.getName() == null) fileParams.setName(file.getName()); fileParams.setMediaType(mime); if (encrypted && !file.exists()) { Log.d(Config.LOGTAG, "skipping updateFileParams because file is encrypted");