Fix for broken attachments

Fixes #6467
// FREEBIE
This commit is contained in:
Moxie Marlinspike 2017-04-02 09:29:26 -07:00
parent 5b8e75c068
commit 2ce9eeabed

View File

@ -196,8 +196,7 @@ 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>() {
@ -210,34 +209,20 @@ 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;
}
}
@Override
protected void onPostExecute(@Nullable final Slide slide) {
@ -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();
}