diff --git a/src/org/thoughtcrime/securesms/ConversationActivity.java b/src/org/thoughtcrime/securesms/ConversationActivity.java index 025a50e91..a758d6e80 100644 --- a/src/org/thoughtcrime/securesms/ConversationActivity.java +++ b/src/org/thoughtcrime/securesms/ConversationActivity.java @@ -344,7 +344,7 @@ public class ConversationActivity extends PassphraseRequiredActionBarActivity Log.w(TAG, "onActivityResult called: " + reqCode + ", " + resultCode + " , " + data); super.onActivityResult(reqCode, resultCode, data); - if ((data == null && reqCode != TAKE_PHOTO && reqCode != SMS_DEFAULT) || + if ((data == null && reqCode != TAKE_PHOTO && reqCode != RECORD_VIDEO && reqCode != SMS_DEFAULT) || (resultCode != RESULT_OK && reqCode != SMS_DEFAULT)) { return; @@ -378,15 +378,20 @@ public class ConversationActivity extends PassphraseRequiredActionBarActivity supportInvalidateOptionsMenu(); break; case TAKE_PHOTO: - if (attachmentManager.getCaptureUri() != null) { - setMedia(attachmentManager.getCaptureUri(), MediaType.IMAGE); + if (attachmentManager.getImageCaptureUri() != null) { + setMedia(attachmentManager.getImageCaptureUri(), MediaType.IMAGE); } break; case RECORD_VIDEO: - Uri uri = data.getData(); - if(uri!=null) { + Uri uri = null; + if (data!=null) { uri = data.getData(); } + if (uri==null) { uri = attachmentManager.getVideoCaptureUri(); } + if (uri!=null) { setMedia(uri, MediaType.VIDEO); } + else { + Toast.makeText(this, "No video returned from system", Toast.LENGTH_LONG).show(); + } break; case PICK_LOCATION: /* diff --git a/src/org/thoughtcrime/securesms/mms/AttachmentManager.java b/src/org/thoughtcrime/securesms/mms/AttachmentManager.java index 31862a78f..6f6c60927 100644 --- a/src/org/thoughtcrime/securesms/mms/AttachmentManager.java +++ b/src/org/thoughtcrime/securesms/mms/AttachmentManager.java @@ -83,7 +83,8 @@ public class AttachmentManager { private @NonNull List garbage = new LinkedList<>(); private @NonNull Optional slide = Optional.absent(); - private @Nullable Uri captureUri; + private @Nullable Uri imageCaptureUri; + private @Nullable Uri videoCaptureUri; public AttachmentManager(@NonNull Activity activity, @NonNull AttachmentListener listener) { this.context = activity; @@ -139,11 +140,13 @@ public class AttachmentManager { } public void cleanup() { - cleanup(captureUri); + cleanup(imageCaptureUri); + cleanup(videoCaptureUri); cleanup(getSlideUri()); - captureUri = null; - slide = Optional.absent(); + imageCaptureUri = null; + videoCaptureUri = null; + slide = Optional.absent(); Iterator iterator = garbage.listIterator(); @@ -168,11 +171,13 @@ public class AttachmentManager { } private void setSlide(@NonNull Slide slide) { - if (getSlideUri() != null) cleanup(getSlideUri()); - if (captureUri != null && !captureUri.equals(slide.getUri())) cleanup(captureUri); + if (getSlideUri() != null) cleanup(getSlideUri()); + if (imageCaptureUri != null && !imageCaptureUri.equals(slide.getUri())) cleanup(imageCaptureUri); + if (videoCaptureUri != null && !videoCaptureUri.equals(slide.getUri())) cleanup(videoCaptureUri); - this.captureUri = null; - this.slide = Optional.of(slide); + this.imageCaptureUri = null; + this.videoCaptureUri = null; + this.slide = Optional.of(slide); } /* @@ -418,8 +423,12 @@ public class AttachmentManager { return slide.isPresent() ? slide.get().getUri() : null; } - public @Nullable Uri getCaptureUri() { - return captureUri; + public @Nullable Uri getImageCaptureUri() { + return imageCaptureUri; + } + + public @Nullable Uri getVideoCaptureUri() { + return videoCaptureUri; } public void capturePhoto(Activity activity, int requestCode) { @@ -431,11 +440,11 @@ public class AttachmentManager { try { Intent captureIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); if (captureIntent.resolveActivity(activity.getPackageManager()) != null) { - if (captureUri == null) { - captureUri = PersistentBlobProvider.getInstance(context).createForExternal(context, MediaUtil.IMAGE_JPEG); + if (imageCaptureUri == null) { + imageCaptureUri = PersistentBlobProvider.getInstance(context).createForExternal(context, MediaUtil.IMAGE_JPEG); } - Log.w(TAG, "captureUri path is " + captureUri.getPath()); - captureIntent.putExtra(MediaStore.EXTRA_OUTPUT, captureUri); + Log.w(TAG, "imageCaptureUri path is " + imageCaptureUri.getPath()); + captureIntent.putExtra(MediaStore.EXTRA_OUTPUT, imageCaptureUri); activity.startActivityForResult(captureIntent, requestCode); } } catch (IOException ioe) { @@ -454,7 +463,9 @@ public class AttachmentManager { try { Intent captureIntent = new Intent(MediaStore.ACTION_VIDEO_CAPTURE); if (captureIntent.resolveActivity(activity.getPackageManager()) != null) { - Uri videoCaptureUri = PersistentBlobProvider.getInstance(context).createForExternal(context, "video/mp4"); + if (videoCaptureUri==null) { + videoCaptureUri = PersistentBlobProvider.getInstance(context).createForExternal(context, "video/mp4"); + } Log.w(TAG, "videoCaptureUri path is " + videoCaptureUri.getPath()); captureIntent.putExtra(MediaStore.EXTRA_OUTPUT, videoCaptureUri); captureIntent.addFlags(Intent.FLAG_GRANT_WRITE_URI_PERMISSION);