From 509f926ec47258dd35bee3f70b2a39461eac44c2 Mon Sep 17 00:00:00 2001 From: M66B Date: Tue, 6 Sep 2022 08:35:50 +0200 Subject: [PATCH] Added long press take photo to capture video --- .../eu/faircode/email/FragmentCompose.java | 52 ++++++++++++++++--- .../java/eu/faircode/email/WorkerCleanup.java | 3 ++ app/src/main/res/xml/fileprovider_paths.xml | 3 ++ 3 files changed, 50 insertions(+), 8 deletions(-) diff --git a/app/src/main/java/eu/faircode/email/FragmentCompose.java b/app/src/main/java/eu/faircode/email/FragmentCompose.java index 2e3bd0a158..9ff0eb76a2 100644 --- a/app/src/main/java/eu/faircode/email/FragmentCompose.java +++ b/app/src/main/java/eu/faircode/email/FragmentCompose.java @@ -332,13 +332,14 @@ public class FragmentCompose extends FragmentBase { private static final int REQUEST_IMAGE_FILE = 6; private static final int REQUEST_ATTACHMENT = 7; private static final int REQUEST_TAKE_PHOTO = 8; - private static final int REQUEST_RECORD_AUDIO = 9; - private static final int REQUEST_OPENPGP = 10; - private static final int REQUEST_CONTACT_GROUP = 11; - private static final int REQUEST_LINK = 12; - private static final int REQUEST_DISCARD = 13; - private static final int REQUEST_SEND = 14; - private static final int REQUEST_REMOVE_ATTACHMENTS = 15; + private static final int REQUEST_CAPTURE_VIDEO = 9; + private static final int REQUEST_RECORD_AUDIO = 10; + private static final int REQUEST_OPENPGP = 11; + private static final int REQUEST_CONTACT_GROUP = 12; + private static final int REQUEST_LINK = 13; + private static final int REQUEST_DISCARD = 14; + private static final int REQUEST_SEND = 15; + private static final int REQUEST_REMOVE_ATTACHMENTS = 16; private static ExecutorService executor = Helper.getBackgroundExecutor(1, "compose"); @@ -1860,6 +1861,16 @@ public class FragmentCompose extends FragmentBase { menu.findItem(R.id.menu_media).setChecked(media); menu.findItem(R.id.menu_compact).setChecked(compact); + View photo = media_bar.findViewById(R.id.menu_take_photo); + if (photo != null) + photo.setOnLongClickListener(new View.OnLongClickListener() { + @Override + public boolean onLongClick(View v) { + onActionVideo(v.getContext()); + return true; + } + }); + View image = media_bar.findViewById(R.id.menu_image); if (image != null) image.setOnLongClickListener(new View.OnLongClickListener() { @@ -2611,6 +2622,29 @@ public class FragmentCompose extends FragmentBase { onAddImage(photo); } + private void onActionVideo(Context context) { + Long limit = null; + EntityIdentity identity = (EntityIdentity) spIdentity.getSelectedItem(); + if (identity != null && identity.max_size != null) { + limit = 80 * identity.max_size / 100; + Log.i("Video size limit=" + Helper.humanReadableByteCount(limit)); + } + + File dir = new File(context.getFilesDir(), "video"); + if (!dir.exists()) + dir.mkdir(); + File file = new File(dir, working + ".mp4"); + Uri videoUri = FileProvider.getUriForFile(context, BuildConfig.APPLICATION_ID, file); + + // https://developer.android.com/reference/android/provider/MediaStore#ACTION_VIDEO_CAPTURE + Intent capture = new Intent(MediaStore.ACTION_VIDEO_CAPTURE); + capture.putExtra(MediaStore.EXTRA_OUTPUT, videoUri); + if (limit != null) + capture.putExtra(MediaStore.EXTRA_SIZE_LIMIT, limit); + capture.putExtra(MediaStore.EXTRA_VIDEO_QUALITY, 0); // 0=low, 1=high + startActivityForResult(capture, REQUEST_CAPTURE_VIDEO); + } + private void onActionAttachment() { Intent intent = new Intent(Intent.ACTION_GET_CONTENT); intent.addCategory(Intent.CATEGORY_OPENABLE); @@ -2821,6 +2855,7 @@ public class FragmentCompose extends FragmentBase { onAddImageFile(Arrays.asList(photoURI)); } break; + case REQUEST_CAPTURE_VIDEO: case REQUEST_ATTACHMENT: case REQUEST_RECORD_AUDIO: if (resultCode == RESULT_OK && data != null) @@ -4409,7 +4444,8 @@ public class FragmentCompose extends FragmentBase { if (BuildConfig.APPLICATION_ID.equals(uri.getAuthority()) && uri.getPathSegments().size() > 0 && - "photo".equals(uri.getPathSegments().get(0))) { + ("photo".equals(uri.getPathSegments().get(0)) || + "video".equals(uri.getPathSegments().get(0)))) { // content://eu.faircode.email/photo/nnn.jpg File tmp = new File(context.getFilesDir(), uri.getPath()); Log.i("Deleting " + tmp); diff --git a/app/src/main/java/eu/faircode/email/WorkerCleanup.java b/app/src/main/java/eu/faircode/email/WorkerCleanup.java index bcb6c0bc7f..c83702262e 100644 --- a/app/src/main/java/eu/faircode/email/WorkerCleanup.java +++ b/app/src/main/java/eu/faircode/email/WorkerCleanup.java @@ -212,6 +212,7 @@ public class WorkerCleanup extends Worker { File[] references = new File(context.getFilesDir(), "references").listFiles(); File[] encryption = new File(context.getFilesDir(), "encryption").listFiles(); File[] photos = new File(context.getFilesDir(), "photo").listFiles(); + File[] videos = new File(context.getFilesDir(), "video").listFiles(); File[] calendars = new File(context.getFilesDir(), "calendar").listFiles(); if (messages != null) @@ -224,6 +225,8 @@ public class WorkerCleanup extends Worker { files.addAll(Arrays.asList(encryption)); if (photos != null) files.addAll(Arrays.asList(photos)); + if (videos != null) + files.addAll(Arrays.asList(videos)); if (calendars != null) files.addAll(Arrays.asList(calendars)); diff --git a/app/src/main/res/xml/fileprovider_paths.xml b/app/src/main/res/xml/fileprovider_paths.xml index 2b56454ccd..c1d0f5e55a 100644 --- a/app/src/main/res/xml/fileprovider_paths.xml +++ b/app/src/main/res/xml/fileprovider_paths.xml @@ -15,6 +15,9 @@ +