From adc0907906b709a56b4109ceed1340ccf0208159 Mon Sep 17 00:00:00 2001 From: alex-signal Date: Tue, 15 Oct 2019 13:51:16 -0300 Subject: [PATCH] Copy image to encrypted blob and delete from device immediately. Fixes #9097 --- .../conversation/ConversationActivity.java | 25 ++++++++++++++++--- 1 file changed, 22 insertions(+), 3 deletions(-) diff --git a/src/org/thoughtcrime/securesms/conversation/ConversationActivity.java b/src/org/thoughtcrime/securesms/conversation/ConversationActivity.java index aa2826b4de..5ad7fbea49 100644 --- a/src/org/thoughtcrime/securesms/conversation/ConversationActivity.java +++ b/src/org/thoughtcrime/securesms/conversation/ConversationActivity.java @@ -38,6 +38,7 @@ import android.net.Uri; import android.os.AsyncTask; import android.os.Build; import android.os.Bundle; +import android.os.ParcelFileDescriptor; import android.os.Vibrator; import android.provider.Browser; import android.provider.ContactsContract; @@ -541,9 +542,7 @@ public class ConversationActivity extends PassphraseRequiredActionBarActivity supportInvalidateOptionsMenu(); break; case TAKE_PHOTO: - if (attachmentManager.getCaptureUri() != null) { - setMedia(attachmentManager.getCaptureUri(), MediaType.IMAGE); - } + handleImageFromDeviceCameraApp(); break; case ADD_CONTACT: onRecipientChanged(recipient.get()); @@ -621,6 +620,26 @@ public class ConversationActivity extends PassphraseRequiredActionBarActivity } } + private void handleImageFromDeviceCameraApp() { + if (attachmentManager.getCaptureUri() == null) { + Log.w(TAG, "No image available."); + return; + } + + try { + Uri mediaUri = BlobProvider.getInstance() + .forData(getContentResolver().openInputStream(attachmentManager.getCaptureUri()), 0L) + .withMimeType(MediaUtil.IMAGE_JPEG) + .createForSingleSessionOnDisk(this); + + getContentResolver().delete(attachmentManager.getCaptureUri(), null, null); + + setMedia(mediaUri, MediaType.IMAGE); + } catch (IOException ioe) { + Log.w(TAG, "Could not handle public image", ioe); + } + } + @Override public void startActivity(Intent intent) { if (intent.getStringExtra(Browser.EXTRA_APPLICATION_ID) != null) {