From 382f652f8bd35f113969c796d6fe4b31a13f4b5c Mon Sep 17 00:00:00 2001 From: Branden Archer Date: Sun, 8 Apr 2018 10:22:11 -0400 Subject: [PATCH 1/4] Move export file provider to a separate, empty class This is to avoid a name conflict with using the no nonsense filepicker in a future commit. --- app/src/main/AndroidManifest.xml | 2 +- .../videotranscoder/provider/ExportFileProvider.java | 11 +++++++++++ 2 files changed, 12 insertions(+), 1 deletion(-) create mode 100644 app/src/main/java/protect/videotranscoder/provider/ExportFileProvider.java diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index f573001f..be22ec3f 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -26,7 +26,7 @@ diff --git a/app/src/main/java/protect/videotranscoder/provider/ExportFileProvider.java b/app/src/main/java/protect/videotranscoder/provider/ExportFileProvider.java new file mode 100644 index 00000000..f3fc206a --- /dev/null +++ b/app/src/main/java/protect/videotranscoder/provider/ExportFileProvider.java @@ -0,0 +1,11 @@ +package protect.videotranscoder.provider; + +import android.support.v4.content.FileProvider; + +/** + * This file picker exists only to avoid a name conflict with + * a used package that uses the FileProvider directly. + */ +public class ExportFileProvider extends FileProvider +{ +} From f011c3238091e7a8c58d44f1aeab131022e45a09 Mon Sep 17 00:00:00 2001 From: Branden Archer Date: Sun, 8 Apr 2018 10:31:14 -0400 Subject: [PATCH 2/4] Use no nonsense file picker The codekidX file picker had some issues which occasionally resulted in crashes. Some of these bugs have been reported to the upstream project, but as the bug reports are from Google Play not that much information was available to give. The no nonsense file picker is used by the NewPipe app, and it appears to be successful. Switching to it to hopefully simplify the file selection process and make it more robust. --- app/build.gradle | 2 +- app/src/main/AndroidManifest.xml | 18 +++++++ .../activity/MainActivity.java | 48 ++++++++++++------- app/src/main/res/values/styles.xml | 23 +++++++++ 4 files changed, 72 insertions(+), 19 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index 38bae3c1..e59bb07f 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -43,7 +43,7 @@ dependencies { compile 'com.crystal:crystalrangeseekbar:1.1.3' compile 'commons-io:commons-io:2.5' compile group: 'com.google.guava', name: 'guava', version: '20.0' - compile 'com.github.codekidX:storage-chooser:2.0.3' + compile 'com.nononsenseapps:filepicker:4.2.1' implementation group: 'org.javatuples', name: 'javatuples', version: '1.2' implementation 'com.fasterxml.jackson.core:jackson-databind:2.8.11.1' diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index be22ec3f..b79f1f68 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -25,6 +25,15 @@ + + + + + + + + + BASIC_SETTINGS_IDS = Collections.unmodifiableList(Arrays.asList( R.id.basicSettingsText, R.id.basicSettingsTopDivider, @@ -483,30 +488,37 @@ public void onClick(DialogInterface dialog, int which) } /** - * Opening gallery for uploading video + * Opening gallery for selecting video file */ private void selectVideo() { - final StorageChooser fileChooser = new StorageChooser.Builder() - .withActivity(MainActivity.this) - .withFragmentManager(getFragmentManager()) - .allowCustomPath(true) - .setType(StorageChooser.FILE_PICKER) - .disableMultiSelect() - .build(); + Intent i = new Intent(this, FilePickerActivity.class); + + i.putExtra(FilePickerActivity.EXTRA_ALLOW_MULTIPLE, false); + i.putExtra(FilePickerActivity.EXTRA_ALLOW_CREATE_DIR, false); + i.putExtra(FilePickerActivity.EXTRA_MODE, FilePickerActivity.MODE_FILE); + + i.putExtra(FilePickerActivity.EXTRA_START_PATH, Environment.getExternalStorageDirectory().getPath()); - // get path that the user has chosen - fileChooser.setOnSelectListener(new StorageChooser.OnSelectListener() + startActivityForResult(i, SELECT_FILE_REQUEST); + } + + protected void onActivityResult(int requestCode, int resultCode, Intent intent) + { + if (requestCode == SELECT_FILE_REQUEST && resultCode == Activity.RESULT_OK) { - @Override - public void onSelect(String filePath) + // Use the provided utility method to parse the result + List files = Utils.getSelectedFilesFromResult(intent); + + // There should be at most once result + if(files.size() > 0) { - Log.i(TAG, "Selected file: " + filePath); - setSelectMediaFile(filePath); - } - }); + File file = Utils.getFileForUri(files.get(0)); - fileChooser.show(); + Log.i(TAG, "Selected file: " + file.getAbsolutePath()); + setSelectMediaFile(file.getAbsolutePath()); + } + } } private List getFfmpegEncodingArgs(String inputFilePath, Integer startTimeSec, Integer endTimeSec, diff --git a/app/src/main/res/values/styles.xml b/app/src/main/res/values/styles.xml index 3f11058a..ca6c9691 100644 --- a/app/src/main/res/values/styles.xml +++ b/app/src/main/res/values/styles.xml @@ -7,4 +7,27 @@ @color/colorPrimaryDark @color/colorAccent + + + + + From 2fd35f025561e839304e67ef02cd0e08e026d76e Mon Sep 17 00:00:00 2001 From: Branden Archer Date: Thu, 17 May 2018 22:41:04 -0400 Subject: [PATCH 3/4] Update credit for file picker being used --- .../java/protect/videotranscoder/activity/MainActivity.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/src/main/java/protect/videotranscoder/activity/MainActivity.java b/app/src/main/java/protect/videotranscoder/activity/MainActivity.java index 38f663ad..b4427e79 100644 --- a/app/src/main/java/protect/videotranscoder/activity/MainActivity.java +++ b/app/src/main/java/protect/videotranscoder/activity/MainActivity.java @@ -1406,7 +1406,7 @@ private void displayAboutDialog() .put("FFmpeg Android", "https://github.com/bravobit/FFmpeg-Android") .put("Guava", "https://github.com/google/guava") .put("Crystal Range Seekbar", "https://github.com/syedowaisali/crystal-range-seekbar") - .put("Storage Chooser", "https://github.com/codekidX/storage-chooser") + .put("NoNonsense-FilePicker", "https://github.com/spacecowboy/NoNonsense-FilePicker") .put("javatuples", "https://www.javatuples.org/") .put("jackson-databind", "https://github.com/FasterXML/jackson-databind") .build(); From c35039903385e195b15622bb176fd8a36cdbadcf Mon Sep 17 00:00:00 2001 From: Branden Archer Date: Thu, 17 May 2018 23:53:59 -0400 Subject: [PATCH 4/4] Report stdout when ffprobe fails during tests --- app/src/test/shell/test.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/src/test/shell/test.py b/app/src/test/shell/test.py index 98046ef7..37224cca 100644 --- a/app/src/test/shell/test.py +++ b/app/src/test/shell/test.py @@ -185,7 +185,7 @@ def ffprobe(filename): stdout, stderr = p.communicate() rc = p.wait() if rc != 0: - raise Exception("ffprobe failed with " + str(rc) + " on " + filename + ":\n" + stderr) + raise Exception("ffprobe failed with " + str(rc) + " on " + filename + ":\n" + stdout + "\n" + stderr) data = json.loads(stdout) return data