extract relevant extension from file name when processing share intent
This commit is contained in:
parent
60588af825
commit
f8b1e8098c
|
@ -14,6 +14,7 @@ import android.net.Uri;
|
||||||
import android.os.Build;
|
import android.os.Build;
|
||||||
import android.os.Environment;
|
import android.os.Environment;
|
||||||
import android.os.ParcelFileDescriptor;
|
import android.os.ParcelFileDescriptor;
|
||||||
|
import android.provider.MediaStore;
|
||||||
import android.provider.OpenableColumns;
|
import android.provider.OpenableColumns;
|
||||||
import android.system.Os;
|
import android.system.Os;
|
||||||
import android.system.StructStat;
|
import android.system.StructStat;
|
||||||
|
@ -248,13 +249,33 @@ public class FileBackend {
|
||||||
}
|
}
|
||||||
|
|
||||||
public void copyFileToPrivateStorage(Message message, Uri uri) throws FileCopyException {
|
public void copyFileToPrivateStorage(Message message, Uri uri) throws FileCopyException {
|
||||||
Log.d(Config.LOGTAG, "copy " + uri.toString() + " to private storage");
|
|
||||||
String mime = mXmppConnectionService.getContentResolver().getType(uri);
|
String mime = mXmppConnectionService.getContentResolver().getType(uri);
|
||||||
|
Log.d(Config.LOGTAG, "copy " + uri.toString() + " to private storage (mime="+mime+")");
|
||||||
String extension = MimeTypeMap.getSingleton().getExtensionFromMimeType(mime);
|
String extension = MimeTypeMap.getSingleton().getExtensionFromMimeType(mime);
|
||||||
|
if (extension == null) {
|
||||||
|
extension = getExtensionFromUri(uri);
|
||||||
|
}
|
||||||
message.setRelativeFilePath(message.getUuid() + "." + extension);
|
message.setRelativeFilePath(message.getUuid() + "." + extension);
|
||||||
copyFileToPrivateStorage(mXmppConnectionService.getFileBackend().getFile(message), uri);
|
copyFileToPrivateStorage(mXmppConnectionService.getFileBackend().getFile(message), uri);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private String getExtensionFromUri(Uri uri) {
|
||||||
|
String[] projection = {MediaStore.MediaColumns.DATA};
|
||||||
|
String filename = null;
|
||||||
|
Cursor cursor = mXmppConnectionService.getContentResolver().query(uri, projection, null, null, null);
|
||||||
|
if (cursor != null) {
|
||||||
|
try {
|
||||||
|
if (cursor.moveToFirst()) {
|
||||||
|
filename = cursor.getString(0);
|
||||||
|
}
|
||||||
|
} finally {
|
||||||
|
cursor.close();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
int pos = filename == null ? -1 : filename.lastIndexOf('.');
|
||||||
|
return pos > 0 ? filename.substring(pos+1) : null;
|
||||||
|
}
|
||||||
|
|
||||||
private void copyImageToPrivateStorage(File file, Uri image, int sampleSize) throws FileCopyException {
|
private void copyImageToPrivateStorage(File file, Uri image, int sampleSize) throws FileCopyException {
|
||||||
file.getParentFile().mkdirs();
|
file.getParentFile().mkdirs();
|
||||||
InputStream is = null;
|
InputStream is = null;
|
||||||
|
|
Loading…
Reference in a new issue