implement alternative method to get recorded videos

This commit is contained in:
B. Petersen 2019-05-11 14:09:26 +02:00
parent a0b7aa4066
commit 9d255bc343
No known key found for this signature in database
GPG key ID: 3B88E92DEA8E9AFC
2 changed files with 36 additions and 20 deletions

View file

@ -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();
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:
/*

View file

@ -83,7 +83,8 @@ public class AttachmentManager {
private @NonNull List<Uri> garbage = new LinkedList<>();
private @NonNull Optional<Slide> 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,10 +140,12 @@ public class AttachmentManager {
}
public void cleanup() {
cleanup(captureUri);
cleanup(imageCaptureUri);
cleanup(videoCaptureUri);
cleanup(getSlideUri());
captureUri = null;
imageCaptureUri = null;
videoCaptureUri = null;
slide = Optional.absent();
Iterator<Uri> iterator = garbage.listIterator();
@ -169,9 +172,11 @@ public class AttachmentManager {
private void setSlide(@NonNull Slide slide) {
if (getSlideUri() != null) cleanup(getSlideUri());
if (captureUri != null && !captureUri.equals(slide.getUri())) cleanup(captureUri);
if (imageCaptureUri != null && !imageCaptureUri.equals(slide.getUri())) cleanup(imageCaptureUri);
if (videoCaptureUri != null && !videoCaptureUri.equals(slide.getUri())) cleanup(videoCaptureUri);
this.captureUri = null;
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);