Fix for broken attachments

Fixes #6467
// FREEBIE
pull/1/head
Moxie Marlinspike 7 years ago
parent 5b8e75c068
commit 2ce9eeabed

@ -196,11 +196,10 @@ public class AttachmentManager {
public void setMedia(@NonNull final MasterSecret masterSecret,
@NonNull final Uri uri,
@NonNull final MediaType mediaType,
@NonNull final MediaConstraints constraints)
{
@NonNull final MediaConstraints constraints) {
inflateStub();
new AsyncTask<Void, Void, Slide>() {
new AsyncTask<Void, Void, Slide>() {
@Override
protected void onPreExecute() {
thumbnail.clear();
@ -210,33 +209,19 @@ public class AttachmentManager {
@Override
protected @Nullable Slide doInBackground(Void... params) {
long start = System.currentTimeMillis();
Cursor cursor = null;
try {
if (PartAuthority.isLocalUri(uri)) {
long mediaSize = MediaUtil.getMediaSize(context, masterSecret, uri);
Log.w(TAG, "local slide with size " + mediaSize + " took " + (System.currentTimeMillis() - start) + "ms");
return mediaType.createSlide(context, uri, null, null, mediaSize);
return getManuallyCalculatedSlideInfo(uri);
} else {
cursor = context.getContentResolver().query(uri, null, null, null, null);
Slide result = getContentResolverSlideInfo(uri);
if (cursor != null && cursor.moveToFirst()) {
String fileName = cursor.getString(cursor.getColumnIndexOrThrow(OpenableColumns.DISPLAY_NAME));
long fileSize = cursor.getLong(cursor.getColumnIndexOrThrow(OpenableColumns.SIZE));
String mimeType = context.getContentResolver().getType(uri);
Log.w(TAG, "remote slide with size " + fileSize + " took " + (System.currentTimeMillis() - start) + "ms");
return mediaType.createSlide(context, uri, fileName, mimeType, fileSize);
}
if (result == null) return getManuallyCalculatedSlideInfo(uri);
else return result;
}
} catch (IOException e) {
Log.w(TAG, e);
} finally {
if (cursor != null) cursor.close();
return null;
}
return null;
}
@Override
@ -259,7 +244,7 @@ public class AttachmentManager {
audioView.setAudio(masterSecret, (AudioSlide) slide, false);
removableMediaView.display(audioView, false);
} else if (slide.hasDocument()) {
documentView.setDocument((DocumentSlide)slide, false);
documentView.setDocument((DocumentSlide) slide, false);
removableMediaView.display(documentView, false);
} else {
thumbnail.setImageResource(masterSecret, slide, false);
@ -269,6 +254,36 @@ public class AttachmentManager {
attachmentListener.onAttachmentChanged();
}
}
private @Nullable Slide getContentResolverSlideInfo(Uri uri) {
Cursor cursor = null;
long start = System.currentTimeMillis();
try {
cursor = context.getContentResolver().query(uri, null, null, null, null);
if (cursor != null && cursor.moveToFirst()) {
String fileName = cursor.getString(cursor.getColumnIndexOrThrow(OpenableColumns.DISPLAY_NAME));
long fileSize = cursor.getLong(cursor.getColumnIndexOrThrow(OpenableColumns.SIZE));
String mimeType = context.getContentResolver().getType(uri);
Log.w(TAG, "remote slide with size " + fileSize + " took " + (System.currentTimeMillis() - start) + "ms");
return mediaType.createSlide(context, uri, fileName, mimeType, fileSize);
}
} finally {
if (cursor != null) cursor.close();
}
return null;
}
private @NonNull Slide getManuallyCalculatedSlideInfo(Uri uri) throws IOException {
long start = System.currentTimeMillis();
long mediaSize = MediaUtil.getMediaSize(context, masterSecret, uri);
Log.w(TAG, "local slide with size " + mediaSize + " took " + (System.currentTimeMillis() - start) + "ms");
return mediaType.createSlide(context, uri, null, null, mediaSize);
}
}.execute();
}

Loading…
Cancel
Save