From e21ad09454f1038edf548669ec016af090162854 Mon Sep 17 00:00:00 2001 From: Arhipov Date: Thu, 6 Apr 2017 16:40:38 +0300 Subject: [PATCH 1/2] deleted tests, examples and unnecessary dependencies --- build.gradle | 4 - examples/.gitignore | 1 - examples/build.gradle | 27 -- examples/proguard-rules.pro | 17 - .../filepicker/examples/ApplicationTest.java | 13 - examples/src/main/AndroidManifest.xml | 26 -- .../BackHandlingFilePickerActivity.java | 50 --- .../BackHandlingFilePickerFragment.java | 34 -- .../src/main/res/mipmap-hdpi/ic_launcher.png | Bin 3418 -> 0 bytes .../src/main/res/mipmap-mdpi/ic_launcher.png | Bin 2206 -> 0 bytes .../src/main/res/mipmap-xhdpi/ic_launcher.png | Bin 4842 -> 0 bytes .../main/res/mipmap-xxhdpi/ic_launcher.png | Bin 7718 -> 0 bytes .../main/res/mipmap-xxxhdpi/ic_launcher.png | Bin 10486 -> 0 bytes examples/src/main/res/values/colors.xml | 6 - examples/src/main/res/values/strings.xml | 3 - examples/src/main/res/values/styles.xml | 17 - .../filepicker/examples/ExampleUnitTest.java | 15 - library/build.gradle | 26 +- .../AbstractFilePickerFragment.java | 3 +- .../filepicker/FilePickerFragmentTest.java | 89 ---- .../nononsenseapps/filepicker/UtilsTest.java | 49 -- sample/README.md | 20 - sample/build.gradle | 68 --- sample/libs/ALL_LIBS_ARE_FOR_DROPBOX | 0 sample/libs/HTTPCOMPONENTS-LICENSE.txt | 182 -------- sample/libs/JSON-SIMPLE-LICENSE.txt | 202 --------- sample/libs/dropbox-android-sdk-1.6.3.jar | Bin 168350 -> 0 bytes sample/libs/httpmime-4.0.3.jar | Bin 25447 -> 0 bytes sample/libs/json_simple-1.1.jar | Bin 16046 -> 0 bytes sample/proguard-rules.txt | 17 - .../sample/FastScrollerNewFile.java | 425 ------------------ .../filepicker/sample/FtpPicker.java | 73 --- .../filepicker/sample/PermissionGranter.java | 51 --- .../filepicker/sample/SelectNewFile.java | 406 ----------------- .../sample/SelectNewFileStartPathIsFile.java | 90 ---- sample/src/main/AndroidManifest.xml | 156 ------- .../sample/FilePickerActivity2.java | 17 - .../sample/NoNonsenseFilePicker.java | 278 ------------ .../sample/NoNonsenseFilePickerTest.java | 128 ------ .../dropbox/DropboxFilePickerActivity.java | 53 --- .../dropbox/DropboxFilePickerActivity2.java | 14 - .../dropbox/DropboxFilePickerFragment.java | 307 ------------- .../sample/dropbox/DropboxSyncHelper.java | 63 --- .../FastScrollerFileItemAdapter.java | 29 -- .../FastScrollerFilePickerActivity.java | 37 -- .../FastScrollerFilePickerActivity2.java | 7 - .../FastScrollerFilePickerFragment.java | 15 - .../filepicker/sample/ftp/FTPPath.java | 49 -- .../filepicker/sample/ftp/FtpDir.java | 32 -- .../filepicker/sample/ftp/FtpFile.java | 112 ----- .../sample/ftp/FtpPickerActivity.java | 35 -- .../sample/ftp/FtpPickerActivity2.java | 15 - .../sample/ftp/FtpPickerFragment.java | 389 ---------------- .../multimedia/MultimediaPickerActivity.java | 37 -- .../multimedia/MultimediaPickerActivity2.java | 13 - .../multimedia/MultimediaPickerFragment.java | 136 ------ .../sample/root/SUErrorFragment.java | 36 -- .../sample/root/SUPickerActivity.java | 32 -- .../sample/root/SUPickerActivity2.java | 7 - .../sample/root/SUPickerFragment.java | 71 --- .../main/res/drawable-hdpi/ic_launcher.png | Bin 9397 -> 0 bytes .../main/res/drawable-mdpi/ic_launcher.png | Bin 5237 -> 0 bytes .../main/res/drawable-xhdpi/ic_launcher.png | Bin 14383 -> 0 bytes .../main/res/drawable-xxhdpi/ic_launcher.png | Bin 19388 -> 0 bytes .../activity_no_nonsense_file_picker.xml | 215 --------- .../fragment_fastscrollerfilepicker.xml | 111 ----- .../layout/fragment_loading_filepicker.xml | 118 ----- sample/src/main/res/layout/listitem_image.xml | 42 -- .../res/layout/listitem_image_checkable.xml | 54 --- .../main/res/menu/no_nonsense_file_picker.xml | 16 - sample/src/main/res/values-w820dp/dimens.xml | 12 - sample/src/main/res/values/colors.xml | 17 - sample/src/main/res/values/dimens.xml | 12 - sample/src/main/res/values/strings.xml | 14 - sample/src/main/res/values/styles.xml | 46 -- settings.gradle | 2 +- 76 files changed, 4 insertions(+), 4637 deletions(-) delete mode 100644 examples/.gitignore delete mode 100644 examples/build.gradle delete mode 100644 examples/proguard-rules.pro delete mode 100644 examples/src/androidTest/java/com/nononsenseapps/filepicker/examples/ApplicationTest.java delete mode 100644 examples/src/main/AndroidManifest.xml delete mode 100644 examples/src/main/java/com/nononsenseapps/filepicker/examples/backbutton/BackHandlingFilePickerActivity.java delete mode 100644 examples/src/main/java/com/nononsenseapps/filepicker/examples/backbutton/BackHandlingFilePickerFragment.java delete mode 100644 examples/src/main/res/mipmap-hdpi/ic_launcher.png delete mode 100644 examples/src/main/res/mipmap-mdpi/ic_launcher.png delete mode 100644 examples/src/main/res/mipmap-xhdpi/ic_launcher.png delete mode 100644 examples/src/main/res/mipmap-xxhdpi/ic_launcher.png delete mode 100644 examples/src/main/res/mipmap-xxxhdpi/ic_launcher.png delete mode 100644 examples/src/main/res/values/colors.xml delete mode 100644 examples/src/main/res/values/strings.xml delete mode 100644 examples/src/main/res/values/styles.xml delete mode 100644 examples/src/test/java/com/nononsenseapps/filepicker/examples/ExampleUnitTest.java delete mode 100644 library/src/test/java/com/nononsenseapps/filepicker/FilePickerFragmentTest.java delete mode 100644 library/src/test/java/com/nononsenseapps/filepicker/UtilsTest.java delete mode 100644 sample/README.md delete mode 100644 sample/build.gradle delete mode 100644 sample/libs/ALL_LIBS_ARE_FOR_DROPBOX delete mode 100644 sample/libs/HTTPCOMPONENTS-LICENSE.txt delete mode 100644 sample/libs/JSON-SIMPLE-LICENSE.txt delete mode 100644 sample/libs/dropbox-android-sdk-1.6.3.jar delete mode 100644 sample/libs/httpmime-4.0.3.jar delete mode 100644 sample/libs/json_simple-1.1.jar delete mode 100644 sample/proguard-rules.txt delete mode 100644 sample/src/androidTest/java/com/nononsenseapps/filepicker/sample/FastScrollerNewFile.java delete mode 100644 sample/src/androidTest/java/com/nononsenseapps/filepicker/sample/FtpPicker.java delete mode 100644 sample/src/androidTest/java/com/nononsenseapps/filepicker/sample/PermissionGranter.java delete mode 100644 sample/src/androidTest/java/com/nononsenseapps/filepicker/sample/SelectNewFile.java delete mode 100644 sample/src/androidTest/java/com/nononsenseapps/filepicker/sample/SelectNewFileStartPathIsFile.java delete mode 100644 sample/src/main/AndroidManifest.xml delete mode 100644 sample/src/main/java/com/nononsenseapps/filepicker/sample/FilePickerActivity2.java delete mode 100644 sample/src/main/java/com/nononsenseapps/filepicker/sample/NoNonsenseFilePicker.java delete mode 100644 sample/src/main/java/com/nononsenseapps/filepicker/sample/NoNonsenseFilePickerTest.java delete mode 100644 sample/src/main/java/com/nononsenseapps/filepicker/sample/dropbox/DropboxFilePickerActivity.java delete mode 100644 sample/src/main/java/com/nononsenseapps/filepicker/sample/dropbox/DropboxFilePickerActivity2.java delete mode 100644 sample/src/main/java/com/nononsenseapps/filepicker/sample/dropbox/DropboxFilePickerFragment.java delete mode 100644 sample/src/main/java/com/nononsenseapps/filepicker/sample/dropbox/DropboxSyncHelper.java delete mode 100644 sample/src/main/java/com/nononsenseapps/filepicker/sample/fastscroller/FastScrollerFileItemAdapter.java delete mode 100644 sample/src/main/java/com/nononsenseapps/filepicker/sample/fastscroller/FastScrollerFilePickerActivity.java delete mode 100644 sample/src/main/java/com/nononsenseapps/filepicker/sample/fastscroller/FastScrollerFilePickerActivity2.java delete mode 100644 sample/src/main/java/com/nononsenseapps/filepicker/sample/fastscroller/FastScrollerFilePickerFragment.java delete mode 100644 sample/src/main/java/com/nononsenseapps/filepicker/sample/ftp/FTPPath.java delete mode 100644 sample/src/main/java/com/nononsenseapps/filepicker/sample/ftp/FtpDir.java delete mode 100644 sample/src/main/java/com/nononsenseapps/filepicker/sample/ftp/FtpFile.java delete mode 100644 sample/src/main/java/com/nononsenseapps/filepicker/sample/ftp/FtpPickerActivity.java delete mode 100644 sample/src/main/java/com/nononsenseapps/filepicker/sample/ftp/FtpPickerActivity2.java delete mode 100644 sample/src/main/java/com/nononsenseapps/filepicker/sample/ftp/FtpPickerFragment.java delete mode 100644 sample/src/main/java/com/nononsenseapps/filepicker/sample/multimedia/MultimediaPickerActivity.java delete mode 100644 sample/src/main/java/com/nononsenseapps/filepicker/sample/multimedia/MultimediaPickerActivity2.java delete mode 100644 sample/src/main/java/com/nononsenseapps/filepicker/sample/multimedia/MultimediaPickerFragment.java delete mode 100644 sample/src/main/java/com/nononsenseapps/filepicker/sample/root/SUErrorFragment.java delete mode 100644 sample/src/main/java/com/nononsenseapps/filepicker/sample/root/SUPickerActivity.java delete mode 100644 sample/src/main/java/com/nononsenseapps/filepicker/sample/root/SUPickerActivity2.java delete mode 100644 sample/src/main/java/com/nononsenseapps/filepicker/sample/root/SUPickerFragment.java delete mode 100644 sample/src/main/res/drawable-hdpi/ic_launcher.png delete mode 100644 sample/src/main/res/drawable-mdpi/ic_launcher.png delete mode 100644 sample/src/main/res/drawable-xhdpi/ic_launcher.png delete mode 100644 sample/src/main/res/drawable-xxhdpi/ic_launcher.png delete mode 100644 sample/src/main/res/layout/activity_no_nonsense_file_picker.xml delete mode 100644 sample/src/main/res/layout/fragment_fastscrollerfilepicker.xml delete mode 100644 sample/src/main/res/layout/fragment_loading_filepicker.xml delete mode 100644 sample/src/main/res/layout/listitem_image.xml delete mode 100644 sample/src/main/res/layout/listitem_image_checkable.xml delete mode 100644 sample/src/main/res/menu/no_nonsense_file_picker.xml delete mode 100644 sample/src/main/res/values-w820dp/dimens.xml delete mode 100644 sample/src/main/res/values/colors.xml delete mode 100644 sample/src/main/res/values/dimens.xml delete mode 100644 sample/src/main/res/values/strings.xml delete mode 100644 sample/src/main/res/values/styles.xml diff --git a/build.gradle b/build.gradle index f527396..09d2895 100644 --- a/build.gradle +++ b/build.gradle @@ -10,10 +10,6 @@ buildscript { repositories { jcenter() } - dependencies { - classpath 'com.android.tools.build:gradle:2.1.3' - classpath 'com.novoda:bintray-release:0.3.4' - } } allprojects { diff --git a/examples/.gitignore b/examples/.gitignore deleted file mode 100644 index 796b96d..0000000 --- a/examples/.gitignore +++ /dev/null @@ -1 +0,0 @@ -/build diff --git a/examples/build.gradle b/examples/build.gradle deleted file mode 100644 index cd373f2..0000000 --- a/examples/build.gradle +++ /dev/null @@ -1,27 +0,0 @@ -apply plugin: 'com.android.application' - -android { - compileSdkVersion 24 - buildToolsVersion "24.0.1" - - defaultConfig { - applicationId "com.nononsenseapps.filepicker.examples" - minSdkVersion 15 - targetSdkVersion 24 - versionCode 1 - versionName "1.0" - } - buildTypes { - release { - minifyEnabled false - proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' - } - } -} - -dependencies { - compile fileTree(dir: 'libs', include: ['*.jar']) - compile project(':library') - testCompile 'junit:junit:4.12' - compile 'com.android.support:appcompat-v7:24.2.0' -} diff --git a/examples/proguard-rules.pro b/examples/proguard-rules.pro deleted file mode 100644 index e1675e5..0000000 --- a/examples/proguard-rules.pro +++ /dev/null @@ -1,17 +0,0 @@ -# Add project specific ProGuard rules here. -# By default, the flags in this file are appended to flags specified -# in /home/jonas/Android/Sdk/tools/proguard/proguard-android.txt -# You can edit the include path and order by changing the proguardFiles -# directive in build.gradle. -# -# For more details, see -# http://developer.android.com/guide/developing/tools/proguard.html - -# Add any project specific keep options here: - -# If your project uses WebView with JS, uncomment the following -# and specify the fully qualified class name to the JavaScript interface -# class: -#-keepclassmembers class fqcn.of.javascript.interface.for.webview { -# public *; -#} diff --git a/examples/src/androidTest/java/com/nononsenseapps/filepicker/examples/ApplicationTest.java b/examples/src/androidTest/java/com/nononsenseapps/filepicker/examples/ApplicationTest.java deleted file mode 100644 index 3775895..0000000 --- a/examples/src/androidTest/java/com/nononsenseapps/filepicker/examples/ApplicationTest.java +++ /dev/null @@ -1,13 +0,0 @@ -package com.nononsenseapps.filepicker.examples; - -import android.app.Application; -import android.test.ApplicationTestCase; - -/** - * Testing Fundamentals - */ -public class ApplicationTest extends ApplicationTestCase { - public ApplicationTest() { - super(Application.class); - } -} \ No newline at end of file diff --git a/examples/src/main/AndroidManifest.xml b/examples/src/main/AndroidManifest.xml deleted file mode 100644 index 890a54d..0000000 --- a/examples/src/main/AndroidManifest.xml +++ /dev/null @@ -1,26 +0,0 @@ - - - - - - - - - - - - - - - - - diff --git a/examples/src/main/java/com/nononsenseapps/filepicker/examples/backbutton/BackHandlingFilePickerActivity.java b/examples/src/main/java/com/nononsenseapps/filepicker/examples/backbutton/BackHandlingFilePickerActivity.java deleted file mode 100644 index 4a076f3..0000000 --- a/examples/src/main/java/com/nononsenseapps/filepicker/examples/backbutton/BackHandlingFilePickerActivity.java +++ /dev/null @@ -1,50 +0,0 @@ -package com.nononsenseapps.filepicker.examples.backbutton; - -import android.os.Environment; - -import com.nononsenseapps.filepicker.AbstractFilePickerFragment; -import com.nononsenseapps.filepicker.FilePickerActivity; - -import java.io.File; - -public class BackHandlingFilePickerActivity extends FilePickerActivity { - - /** - * Need access to the fragment - */ - BackHandlingFilePickerFragment currentFragment; - - /** - * Return a copy of the new fragment and set the variable above. - */ - @Override - protected AbstractFilePickerFragment getFragment( - final String startPath, final int mode, final boolean allowMultiple, - final boolean allowDirCreate, final boolean allowExistingFile, - final boolean singleClick) { - - // startPath is allowed to be null. - // In that case, default folder should be SD-card and not "/" - String path = (startPath != null ? startPath - : Environment.getExternalStorageDirectory().getPath()); - - currentFragment = new BackHandlingFilePickerFragment(); - currentFragment.setArgs(path, mode, allowMultiple, allowDirCreate, - allowExistingFile, singleClick); - return currentFragment; - } - - /** - * Override the back-button. - */ - @Override - public void onBackPressed() { - // If at top most level, normal behaviour - if (currentFragment.isBackTop()) { - super.onBackPressed(); - } else { - // Else go up - currentFragment.goUp(); - } - } -} diff --git a/examples/src/main/java/com/nononsenseapps/filepicker/examples/backbutton/BackHandlingFilePickerFragment.java b/examples/src/main/java/com/nononsenseapps/filepicker/examples/backbutton/BackHandlingFilePickerFragment.java deleted file mode 100644 index 56a2a14..0000000 --- a/examples/src/main/java/com/nononsenseapps/filepicker/examples/backbutton/BackHandlingFilePickerFragment.java +++ /dev/null @@ -1,34 +0,0 @@ -package com.nononsenseapps.filepicker.examples.backbutton; - -import com.nononsenseapps.filepicker.FilePickerFragment; - -import java.io.File; - -public class BackHandlingFilePickerFragment extends FilePickerFragment { - - /** - * For consistency, the top level the back button checks against should be the start path. - * But it will fall back on /. - */ - public File getBackTop() { - return getPath(getArguments().getString(KEY_START_PATH, "/")); - } - - /** - * @return true if the current path is the startpath or / - */ - public boolean isBackTop() { - return 0 == compareFiles(mCurrentPath, getBackTop()) || - 0 == compareFiles(mCurrentPath, new File("/")); - } - - /** - * Go up on level, same as pressing on "..". - */ - public void goUp() { - mCurrentPath = getParent(mCurrentPath); - mCheckedItems.clear(); - mCheckedVisibleViewHolders.clear(); - refresh(mCurrentPath); - } -} \ No newline at end of file diff --git a/examples/src/main/res/mipmap-hdpi/ic_launcher.png b/examples/src/main/res/mipmap-hdpi/ic_launcher.png deleted file mode 100644 index cde69bcccec65160d92116f20ffce4fce0b5245c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3418 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 diff --git a/examples/src/main/res/mipmap-xhdpi/ic_launcher.png b/examples/src/main/res/mipmap-xhdpi/ic_launcher.png deleted file mode 100644 index bfa42f0e7b91d006d22352c9ff2f134e504e3c1d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4842 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 diff --git a/examples/src/main/res/mipmap-xxhdpi/ic_launcher.png b/examples/src/main/res/mipmap-xxhdpi/ic_launcher.png deleted file mode 100644 index 324e72cdd7480cb983fa1bcc7ce686e51ef87fe7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7718 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 diff --git a/examples/src/main/res/mipmap-xxxhdpi/ic_launcher.png b/examples/src/main/res/mipmap-xxxhdpi/ic_launcher.png deleted file mode 100644 index aee44e138434630332d88b1680f33c4b24c70ab3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 10486 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 - - #F44336 - #D32F2F - #FFAB00 - diff --git a/examples/src/main/res/values/strings.xml b/examples/src/main/res/values/strings.xml deleted file mode 100644 index 855b71e..0000000 --- a/examples/src/main/res/values/strings.xml +++ /dev/null @@ -1,3 +0,0 @@ - - Examples - diff --git a/examples/src/main/res/values/styles.xml b/examples/src/main/res/values/styles.xml deleted file mode 100644 index a59f4d1..0000000 --- a/examples/src/main/res/values/styles.xml +++ /dev/null @@ -1,17 +0,0 @@ - - - - - - - diff --git a/examples/src/test/java/com/nononsenseapps/filepicker/examples/ExampleUnitTest.java b/examples/src/test/java/com/nononsenseapps/filepicker/examples/ExampleUnitTest.java deleted file mode 100644 index c71797e..0000000 --- a/examples/src/test/java/com/nononsenseapps/filepicker/examples/ExampleUnitTest.java +++ /dev/null @@ -1,15 +0,0 @@ -package com.nononsenseapps.filepicker.examples; - -import org.junit.Test; - -import static org.junit.Assert.*; - -/** - * To work on unit tests, switch the Test Artifact in the Build Variants view. - */ -public class ExampleUnitTest { - @Test - public void addition_isCorrect() throws Exception { - assertEquals(4, 2 + 2); - } -} \ No newline at end of file diff --git a/library/build.gradle b/library/build.gradle index bcf7986..b745a56 100644 --- a/library/build.gradle +++ b/library/build.gradle @@ -5,23 +5,13 @@ apply plugin: 'com.android.library' * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ -// must be applied after your artifact generating plugin (eg. java / com.android.library) -apply plugin: 'bintray-release' - -// query git for the the SHA, Tag and commit count. Use these to automate versioning. -def gitTag = 'git describe --tags'.execute([], project.rootDir).text.trim() -def gitCommitCount = - Integer.parseInt('git rev-list --count HEAD'.execute([], project.rootDir).text.trim()) - android { compileSdkVersion 23 - buildToolsVersion "23.0.2" + buildToolsVersion '25.0.0' defaultConfig { minSdkVersion 9 targetSdkVersion 23 - versionCode gitCommitCount - versionName gitTag } } @@ -30,18 +20,4 @@ dependencies { compile 'com.android.support:appcompat-v7:23.4.0' compile 'com.android.support:support-v4:23.4.0' compile 'com.android.support:recyclerview-v7:23.4.0' - - testCompile 'junit:junit:4.12' -} - -publish { - groupId = 'com.nononsenseapps' - artifactId = 'filepicker' - publishVersion = gitTag - description = 'An extendable Android file/directory-picker you can include in your app' - website = 'https://github.com/spacecowboy/NoNonsense-FilePicker' - licences = ['MPL-2.0'] - uploadName = 'com.nononsenseapps:filepicker' - bintrayUser = project.hasProperty("BINTRAY_USER")? BINTRAY_USER: "Dummy" - bintrayKey = project.hasProperty("BINTRAY_KEY") ? BINTRAY_KEY: "Dummy" } diff --git a/library/src/main/java/com/nononsenseapps/filepicker/AbstractFilePickerFragment.java b/library/src/main/java/com/nononsenseapps/filepicker/AbstractFilePickerFragment.java index 2f3e51f..371c141 100644 --- a/library/src/main/java/com/nononsenseapps/filepicker/AbstractFilePickerFragment.java +++ b/library/src/main/java/com/nononsenseapps/filepicker/AbstractFilePickerFragment.java @@ -14,6 +14,7 @@ import android.net.Uri; import android.os.Bundle; import android.support.annotation.NonNull; import android.support.annotation.Nullable; +import android.support.v4.app.DialogFragment; import android.support.v4.app.Fragment; import android.support.v4.app.LoaderManager; import android.support.v4.content.Loader; @@ -49,7 +50,7 @@ import static com.nononsenseapps.filepicker.Utils.appendPath; * OnFilePickedListener} * interface. */ -public abstract class AbstractFilePickerFragment extends Fragment +public abstract class AbstractFilePickerFragment extends DialogFragment implements LoaderManager.LoaderCallbacks>, NewItemFragment.OnNewFolderListener, LogicHandler { diff --git a/library/src/test/java/com/nononsenseapps/filepicker/FilePickerFragmentTest.java b/library/src/test/java/com/nononsenseapps/filepicker/FilePickerFragmentTest.java deleted file mode 100644 index dddd833..0000000 --- a/library/src/test/java/com/nononsenseapps/filepicker/FilePickerFragmentTest.java +++ /dev/null @@ -1,89 +0,0 @@ -/* - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at http://mozilla.org/MPL/2.0/. - */ - -package com.nononsenseapps.filepicker; - -import org.junit.AfterClass; -import org.junit.BeforeClass; -import org.junit.Test; - -import java.io.File; - -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertTrue; -import static org.junit.Assert.fail; - - -public class FilePickerFragmentTest { - - private static FilePickerFragment fragment; - private static File somePath; - private static String someName; - - @BeforeClass - public static void runBeforeClass() { - // Runs ONCE, before all tests - fragment = new FilePickerFragment(); - someName = "FileName"; - somePath = new File("/path/to/some/" + someName); - } - - @AfterClass - public static void runAfterClass() { - } - - @Test - public void testGetName() throws Exception { - assertEquals(someName, fragment.getName(somePath)); - } - - @Test - public void testGetParent() throws Exception { - assertEquals("/path/to/some", fragment.getParent(somePath).getPath()); - - // Self - assertEquals(fragment.getRoot().getPath(), fragment.getParent(new File("/path")).getPath()); - assertEquals(fragment.getRoot().getPath(), fragment.getParent(new File("/")).getPath()); - } - - @Test - public void testGetPath() throws Exception { - assertEquals("/some/path", fragment.getPath("/some/path").getPath()); - } - - @Test - public void testGetFullPath() throws Exception { - assertEquals("/some/path", fragment.getFullPath(new File("/some/path"))); - } - - @Test - public void testGetRoot() throws Exception { - assertEquals("/", fragment.getRoot().getPath()); - } - - @Test - public void testSetArgsMultipleNewFiles() throws Exception { - try { - fragment.setArgs(null, AbstractFilePickerFragment.MODE_NEW_FILE, true, false, true, false); - fail("Expected exception"); - } catch (IllegalArgumentException e) { - assertTrue("Should mention the mode limitations: " + e.getMessage(), - e.getMessage().contains("MODE_NEW_FILE")); - } - } - - @Test - public void testCompareFiles() throws Exception { - assertEquals(0, fragment.compareFiles(new File("/A/A"), new File("/A/A"))); - assertEquals(-1, fragment.compareFiles(new File("/A/A"), new File("/A/B"))); - assertEquals(1, fragment.compareFiles(new File("/A/B"), new File("/A/A"))); - - // Dir is assumed to be the same - assertEquals(1, fragment.compareFiles(new File("/A/B"), new File("/B/A"))); - assertEquals(-1, fragment.compareFiles(new File("/B/A"), new File("/A/B"))); - assertEquals(0, fragment.compareFiles(new File("/A/B"), new File("/B/B"))); - } -} \ No newline at end of file diff --git a/library/src/test/java/com/nononsenseapps/filepicker/UtilsTest.java b/library/src/test/java/com/nononsenseapps/filepicker/UtilsTest.java deleted file mode 100644 index 6350e98..0000000 --- a/library/src/test/java/com/nononsenseapps/filepicker/UtilsTest.java +++ /dev/null @@ -1,49 +0,0 @@ -package com.nononsenseapps.filepicker; - -import org.junit.Test; - -import static org.junit.Assert.*; - -public class UtilsTest { - - @Test - public void appendPathSimple() throws Exception { - assertEquals("A/B", Utils.appendPath("A", "B")); - assertEquals("A/B", Utils.appendPath("A", "B/")); - assertEquals("/A/B", Utils.appendPath("/A", "B")); - assertEquals("/A/B/C/D", Utils.appendPath("/A/B", "C/D")); - assertEquals("A/B/C/D", Utils.appendPath("A/B", "C/D/")); - } - - @Test - public void appendPathDot() throws Exception { - assertEquals("A/./B", Utils.appendPath("A", "./B")); - assertEquals("A/./B", Utils.appendPath("A", "./B/")); - assertEquals("/A/./B", Utils.appendPath("/A", "./B")); - assertEquals("/A/B/./C/D", Utils.appendPath("/A/B", "./C/D")); - assertEquals("A/B/./C/D", Utils.appendPath("A/B", "./C/D/")); - } - - @Test - public void appendPathDotDot() throws Exception { - assertEquals("A/../B", Utils.appendPath("A", "../B")); - assertEquals("A/../B", Utils.appendPath("A", "../B/")); - assertEquals("/A/../B", Utils.appendPath("/A", "../B")); - assertEquals("/A/B/../C/D", Utils.appendPath("/A/B", "../C/D")); - assertEquals("A/B/C/../D", Utils.appendPath("A/B", "C/../D/")); - } - - @Test - public void appendPathRoot() throws Exception { - assertEquals("A/B", Utils.appendPath("A", "/B")); - assertEquals("/A/B", Utils.appendPath("/A", "/B")); - assertEquals("/A/B/C/D", Utils.appendPath("/A/B", "/C/D")); - assertEquals("/A/B/C/D", Utils.appendPath("/A/B", "/C/D/")); - } - - @Test - public void appendSlashesSlashesSlashes() throws Exception { - assertEquals("A/B", Utils.appendPath("A//", "///B")); - assertEquals("/", Utils.appendPath("////", "/////")); - } -} \ No newline at end of file diff --git a/sample/README.md b/sample/README.md deleted file mode 100644 index b0b4422..0000000 --- a/sample/README.md +++ /dev/null @@ -1,20 +0,0 @@ -# SD-card picker - -The sample app demonstrates the SD-card file chooser in action. No configuration is necessary for that. - - -# Dropbox picker - -If you want to try the Dropbox part of the sample, you'll need to get your own -API-keys at [https://www.dropbox.com/developers/apps](https://www.dropbox.com/developers/apps) -and insert them into DropboxSyncHelper.java and AndroidManifest.xml. See Dropbox for more details -on that: - - - -The dropbox sample uses the Core API. If you want to use the Sync API, have look at: - -https://github.com/spacecowboy/NotePad/tree/master/core/src/com/nononsenseapps/filepicker - -for an example of that. diff --git a/sample/build.gradle b/sample/build.gradle deleted file mode 100644 index 7edaddf..0000000 --- a/sample/build.gradle +++ /dev/null @@ -1,68 +0,0 @@ -/* - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at http://mozilla.org/MPL/2.0/. - */ - -apply plugin: 'com.android.application' - -def gitTag = 'git describe --tags'.execute([], project.rootDir).text.trim() -def gitCommitCount = - Integer.parseInt('git rev-list --count HEAD'.execute([], project.rootDir).text.trim()) - -android { - compileSdkVersion 23 - buildToolsVersion "23.0.2" - - packagingOptions { - exclude 'META-INF/LICENSE.txt' - exclude 'META-INF/NOTICE.txt' - } - - lintOptions { - abortOnError false - } - - defaultConfig { - minSdkVersion 18 - targetSdkVersion 23 - versionCode gitCommitCount - versionName gitTag - archivesBaseName = "nononsensefilepicker-sample-${gitTag}".toString() - testInstrumentationRunner 'android.support.test.runner.AndroidJUnitRunner' - } - - buildTypes { - release { - release { - archivesBaseName = "nononsensefilepicker-sample-${gitTag}".toString() - //minifyEnabled true - //shrinkResources true - //proguardFiles getDefaultProguardFile('proguard-android.txt') - } - } - } -} - -dependencies { - compile fileTree(dir: 'libs', include: ['*.jar']) - compile project(':library') - - // Image loading sample - compile 'com.github.bumptech.glide:glide:3.6.1' - - // FTP browser sample - compile 'commons-net:commons-net:3.3' - - // Root example - compile 'eu.chainfire:libsuperuser:1.0.0.+' - - // Fast scroll example - compile 'com.simplecityapps:recyclerview-fastscroll:1.0.9' - - // UI Tests - compile 'com.android.support.test.espresso:espresso-core:2.2.2' - compile 'com.android.support.test:runner:0.5' - compile 'com.android.support.test.espresso:espresso-contrib:2.2.2' - compile 'com.android.support.test.uiautomator:uiautomator-v18:2.1.2' -} diff --git a/sample/libs/ALL_LIBS_ARE_FOR_DROPBOX b/sample/libs/ALL_LIBS_ARE_FOR_DROPBOX deleted file mode 100644 index e69de29..0000000 diff --git a/sample/libs/HTTPCOMPONENTS-LICENSE.txt b/sample/libs/HTTPCOMPONENTS-LICENSE.txt deleted file mode 100644 index 2c41ec8..0000000 --- a/sample/libs/HTTPCOMPONENTS-LICENSE.txt +++ /dev/null @@ -1,182 +0,0 @@ - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - - END OF TERMS AND CONDITIONS - -This project contains annotations derived from JCIP-ANNOTATIONS -Copyright (c) 2005 Brian Goetz and Tim Peierls. -See http://www.jcip.net and the Creative Commons Attribution License -(http://creativecommons.org/licenses/by/2.5) - diff --git a/sample/libs/JSON-SIMPLE-LICENSE.txt b/sample/libs/JSON-SIMPLE-LICENSE.txt deleted file mode 100644 index 57bc88a..0000000 --- a/sample/libs/JSON-SIMPLE-LICENSE.txt +++ /dev/null @@ -1,202 +0,0 @@ - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - - END OF TERMS AND CONDITIONS - - APPENDIX: How to apply the Apache License to your work. - - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "[]" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. - - Copyright [yyyy] [name of copyright owner] - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - diff --git a/sample/libs/dropbox-android-sdk-1.6.3.jar b/sample/libs/dropbox-android-sdk-1.6.3.jar deleted file mode 100644 index 1a0ee368631edda102d9c7631a91bce1c2510abc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 168350 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
  • (OlmRI7_%4pK^Dt;R5r&S9%US19VU3qn39K!$B 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�stzY$L=fl?rAP;QZ74%#D}tMd3CtP|Mm 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 mActivityTestRule = - new ActivityTestRule<>(NoNonsenseFilePickerTest.class); - - @Before - public void allowPermissions() { - allowPermissionsIfNeeded(mActivityTestRule.getActivity()); - } - - @Test - public void selectNewFile() throws IOException { - ViewInteraction radioButton = onView( - allOf(withId(R.id.radioNewFile), withText("Select new file"), - withParent(withId(R.id.radioGroup)), - isDisplayed())); - radioButton.perform(click()); - - ViewInteraction checkBox = onView( - allOf(withId(R.id.checkAllowExistingFile), withText("Allow selection of existing (new) file"), isDisplayed())); - checkBox.perform(click()); - - onView(withId(R.id.button_fastscroll)).perform(ViewActions.scrollTo()); - - ViewInteraction button = onView( - allOf(withId(R.id.button_fastscroll), withText("Pick With Fast Scroller"), - isDisplayed())); - button.perform(click()); - - ViewInteraction recyclerView = onView( - allOf(withId(android.R.id.list), isDisplayed())); - - // Refresh view (into dir, and out again) - recyclerView.perform(actionOnItemAtPosition(1, click())); - recyclerView.perform(actionOnItemAtPosition(0, click())); - - // Click on test dir - recyclerView.perform(actionOnItemAtPosition(1, click())); - // sub dir - recyclerView.perform(actionOnItemAtPosition(3, click())); - - ViewInteraction appCompatEditText = onView( - allOf(withId(R.id.nnf_text_filename), - withParent(allOf(withId(R.id.nnf_newfile_button_container), - withParent(withId(R.id.nnf_buttons_container)))), - isDisplayed())); - // new file name - appCompatEditText.perform(replaceText("testfile")); - - ViewInteraction appCompatImageButton = onView( - allOf(withId(R.id.nnf_button_ok_newfile), - withParent(allOf(withId(R.id.nnf_newfile_button_container), - withParent(withId(R.id.nnf_buttons_container)))), - isDisplayed())); - // Click ok - appCompatImageButton.perform(click()); - - ViewInteraction textView = onView(withId(R.id.text)); - textView.check(matches(withText("file:///storage/emulated/0/000000_nonsense-tests/C-dir/testfile"))); - } - - @Test - public void withSingleClick() throws IOException { - ViewInteraction radioButton = onView( - allOf(withId(R.id.radioNewFile), - withParent(withId(R.id.radioGroup)), - isDisplayed())); - radioButton.perform(click()); - - ViewInteraction checkBox = onView( - allOf(withId(R.id.checkSingleClick), isDisplayed())); - checkBox.perform(click()); - - onView(withId(R.id.button_fastscroll)).perform(ViewActions.scrollTo()); - - ViewInteraction button = onView( - allOf(withId(R.id.button_fastscroll), isDisplayed())); - button.perform(click()); - - ViewInteraction recyclerView = onView( - allOf(withId(android.R.id.list), isDisplayed())); - - // Refresh view (into dir, and out again) - recyclerView.perform(actionOnItemAtPosition(1, click())); - recyclerView.perform(actionOnItemAtPosition(0, click())); - - // Navigate to file - recyclerView.perform(actionOnItemAtPosition(1, click())); - recyclerView.perform(actionOnItemAtPosition(2, click())); - // Click file - recyclerView.perform(actionOnItemAtPosition(4, click())); - - // Should have returned - ViewInteraction textView = onView(withId(R.id.text)); - textView.check(matches(withText("file:///storage/emulated/0/000000_nonsense-tests/B-dir/file-3.txt"))); - } - - @Test - public void clickTwiceShouldNotClearFilename() throws IOException { - ViewInteraction radioButton = onView( - allOf(withId(R.id.radioNewFile), withText("Select new file"), - withParent(withId(R.id.radioGroup)), - isDisplayed())); - radioButton.perform(click()); - - onView(withId(R.id.button_fastscroll)).perform(ViewActions.scrollTo()); - - ViewInteraction button = onView( - allOf(withId(R.id.button_fastscroll), withText("Pick With Fast Scroller"), - isDisplayed())); - button.perform(click()); - - ViewInteraction recyclerView = onView( - allOf(withId(android.R.id.list), isDisplayed())); - - // Refresh view (into dir, and out again) - recyclerView.perform(actionOnItemAtPosition(1, click())); - recyclerView.perform(actionOnItemAtPosition(0, click())); - - // Navigate to file - recyclerView.perform(actionOnItemAtPosition(1, click())); - - recyclerView.perform(actionOnItemAtPosition(2, click())); - - // Click on file once - recyclerView.perform(actionOnItemAtPosition(4, click())); - - // Filename should be entered in field - ViewInteraction editText = onView(withId(R.id.nnf_text_filename)); - editText.check(matches(withText("file-3.txt"))); - - // Click twice - recyclerView.perform(actionOnItemAtPosition(4, click())); - - // Filename should not change - editText.check(matches(withText("file-3.txt"))); - } - - @Test - public void enterFileNameWithPathWhichExists() throws IOException { - ViewInteraction radioButton = onView( - allOf(withId(R.id.radioNewFile), withText("Select new file"), - withParent(withId(R.id.radioGroup)), - isDisplayed())); - radioButton.perform(click()); - - ViewInteraction checkBox = onView( - allOf(withId(R.id.checkAllowExistingFile), - withText("Allow selection of existing (new) file"), isDisplayed())); - checkBox.perform(click()); - - onView(withId(R.id.button_fastscroll)).perform(ViewActions.scrollTo()); - - ViewInteraction button = onView( - allOf(withId(R.id.button_fastscroll), withText("Pick With Fast Scroller"), isDisplayed())); - button.perform(click()); - - ViewInteraction recyclerView = onView( - allOf(withId(android.R.id.list), isDisplayed())); - - // Refresh view (into dir, and out again) - recyclerView.perform(actionOnItemAtPosition(1, click())); - recyclerView.perform(actionOnItemAtPosition(0, click())); - - // Click on test dir - recyclerView.perform(actionOnItemAtPosition(1, click())); - - // Enter path in filename - ViewInteraction appCompatEditText = onView( - allOf(withId(R.id.nnf_text_filename), - withParent(allOf(withId(R.id.nnf_newfile_button_container), - withParent(withId(R.id.nnf_buttons_container)))), - isDisplayed())); - // new file name - appCompatEditText.perform(replaceText("B-dir/file-3.txt")); - - // Click ok - ViewInteraction appCompatImageButton = onView( - allOf(withId(R.id.nnf_button_ok_newfile), - withParent(allOf(withId(R.id.nnf_newfile_button_container), - withParent(withId(R.id.nnf_buttons_container)))), - isDisplayed())); - appCompatImageButton.perform(click()); - - // Should have returned - ViewInteraction textView = onView(withId(R.id.text)); - textView.check(matches(withText("file:///storage/emulated/0/000000_nonsense-tests/B-dir/file-3.txt"))); - } - - @Test - public void enterFileNameWithPathWhichDoesNotExist() throws IOException { - ViewInteraction radioButton = onView( - allOf(withId(R.id.radioNewFile), withText("Select new file"), - withParent(withId(R.id.radioGroup)), - isDisplayed())); - radioButton.perform(click()); - - ViewInteraction checkBox = onView( - allOf(withId(R.id.checkAllowExistingFile), - withText("Allow selection of existing (new) file"), isDisplayed())); - checkBox.perform(click()); - - onView(withId(R.id.button_fastscroll)).perform(ViewActions.scrollTo()); - - ViewInteraction button = onView( - allOf(withId(R.id.button_fastscroll), withText("Pick With Fast Scroller"), isDisplayed())); - button.perform(click()); - - ViewInteraction recyclerView = onView( - allOf(withId(android.R.id.list), isDisplayed())); - - // Refresh view (into dir, and out again) - recyclerView.perform(actionOnItemAtPosition(1, click())); - recyclerView.perform(actionOnItemAtPosition(0, click())); - - // Click on test dir - recyclerView.perform(actionOnItemAtPosition(1, click())); - - // Enter path in filename - ViewInteraction appCompatEditText = onView( - allOf(withId(R.id.nnf_text_filename), - withParent(allOf(withId(R.id.nnf_newfile_button_container), - withParent(withId(R.id.nnf_buttons_container)))), - isDisplayed())); - // new file name - appCompatEditText.perform(replaceText("path/to/file")); - - // Click ok - ViewInteraction appCompatImageButton = onView( - allOf(withId(R.id.nnf_button_ok_newfile), - withParent(allOf(withId(R.id.nnf_newfile_button_container), - withParent(withId(R.id.nnf_buttons_container)))), - isDisplayed())); - appCompatImageButton.perform(click()); - - // Should have returned - ViewInteraction textView = onView(withId(R.id.text)); - textView.check(matches(withText("file:///storage/emulated/0/000000_nonsense-tests/path/to/file"))); - } - - @Test - public void enterFileNameWithDotDot() throws IOException { - ViewInteraction radioButton = onView( - allOf(withId(R.id.radioNewFile), withText("Select new file"), - withParent(withId(R.id.radioGroup)), - isDisplayed())); - radioButton.perform(click()); - - ViewInteraction checkBox = onView( - allOf(withId(R.id.checkAllowExistingFile), - withText("Allow selection of existing (new) file"), isDisplayed())); - checkBox.perform(click()); - - onView(withId(R.id.button_fastscroll)).perform(ViewActions.scrollTo()); - - ViewInteraction button = onView( - allOf(withId(R.id.button_fastscroll), withText("Pick With Fast Scroller"), isDisplayed())); - button.perform(click()); - - ViewInteraction recyclerView = onView( - allOf(withId(android.R.id.list), isDisplayed())); - - // Refresh view (into dir, and out again) - recyclerView.perform(actionOnItemAtPosition(1, click())); - recyclerView.perform(actionOnItemAtPosition(0, click())); - - // Click on test dir - recyclerView.perform(actionOnItemAtPosition(1, click())); - - // Enter path in filename - ViewInteraction appCompatEditText = onView( - allOf(withId(R.id.nnf_text_filename), - withParent(allOf(withId(R.id.nnf_newfile_button_container), - withParent(withId(R.id.nnf_buttons_container)))), - isDisplayed())); - // new file name - appCompatEditText.perform(replaceText("../file.txt")); - - // Click ok - ViewInteraction appCompatImageButton = onView( - allOf(withId(R.id.nnf_button_ok_newfile), - withParent(allOf(withId(R.id.nnf_newfile_button_container), - withParent(withId(R.id.nnf_buttons_container)))), - isDisplayed())); - appCompatImageButton.perform(click()); - - // Should have returned - ViewInteraction textView = onView(withId(R.id.text)); - textView.check(matches(withText("file:///storage/emulated/0/000000_nonsense-tests/../file.txt"))); - } - - @Test - public void enterFileNameWithDot() throws IOException { - ViewInteraction radioButton = onView( - allOf(withId(R.id.radioNewFile), withText("Select new file"), - withParent(withId(R.id.radioGroup)), - isDisplayed())); - radioButton.perform(click()); - - ViewInteraction checkBox = onView( - allOf(withId(R.id.checkAllowExistingFile), - withText("Allow selection of existing (new) file"), isDisplayed())); - checkBox.perform(click()); - - onView(withId(R.id.button_fastscroll)).perform(ViewActions.scrollTo()); - - ViewInteraction button = onView( - allOf(withId(R.id.button_fastscroll), withText("Pick With Fast Scroller"), isDisplayed())); - button.perform(click()); - - ViewInteraction recyclerView = onView( - allOf(withId(android.R.id.list), isDisplayed())); - - // Refresh view (into dir, and out again) - recyclerView.perform(actionOnItemAtPosition(1, click())); - recyclerView.perform(actionOnItemAtPosition(0, click())); - - // Click on test dir - recyclerView.perform(actionOnItemAtPosition(1, click())); - - // Enter path in filename - ViewInteraction appCompatEditText = onView( - allOf(withId(R.id.nnf_text_filename), - withParent(allOf(withId(R.id.nnf_newfile_button_container), - withParent(withId(R.id.nnf_buttons_container)))), - isDisplayed())); - // new file name - appCompatEditText.perform(replaceText("./file.txt")); - - // Click ok - ViewInteraction appCompatImageButton = onView( - allOf(withId(R.id.nnf_button_ok_newfile), - withParent(allOf(withId(R.id.nnf_newfile_button_container), - withParent(withId(R.id.nnf_buttons_container)))), - isDisplayed())); - appCompatImageButton.perform(click()); - - // Should have returned - ViewInteraction textView = onView(withId(R.id.text)); - textView.check(matches(withText("file:///storage/emulated/0/000000_nonsense-tests/./file.txt"))); - } - - @Test - public void enterFileNameWithRoot() throws IOException { - ViewInteraction radioButton = onView( - allOf(withId(R.id.radioNewFile), withText("Select new file"), - withParent(withId(R.id.radioGroup)), - isDisplayed())); - radioButton.perform(click()); - - ViewInteraction checkBox = onView( - allOf(withId(R.id.checkAllowExistingFile), - withText("Allow selection of existing (new) file"), isDisplayed())); - checkBox.perform(click()); - - onView(withId(R.id.button_fastscroll)).perform(ViewActions.scrollTo()); - - ViewInteraction button = onView( - allOf(withId(R.id.button_fastscroll), withText("Pick With Fast Scroller"), isDisplayed())); - button.perform(click()); - - ViewInteraction recyclerView = onView( - allOf(withId(android.R.id.list), isDisplayed())); - - // Refresh view (into dir, and out again) - recyclerView.perform(actionOnItemAtPosition(1, click())); - recyclerView.perform(actionOnItemAtPosition(0, click())); - - // Click on test dir - recyclerView.perform(actionOnItemAtPosition(1, click())); - - // Enter path in filename - ViewInteraction appCompatEditText = onView( - allOf(withId(R.id.nnf_text_filename), - withParent(allOf(withId(R.id.nnf_newfile_button_container), - withParent(withId(R.id.nnf_buttons_container)))), - isDisplayed())); - // new file name - appCompatEditText.perform(replaceText("/file.txt")); - - // Click ok - ViewInteraction appCompatImageButton = onView( - allOf(withId(R.id.nnf_button_ok_newfile), - withParent(allOf(withId(R.id.nnf_newfile_button_container), - withParent(withId(R.id.nnf_buttons_container)))), - isDisplayed())); - appCompatImageButton.perform(click()); - - // Should have returned - ViewInteraction textView = onView(withId(R.id.text)); - textView.check(matches(withText("file:///file.txt"))); - } -} diff --git a/sample/src/androidTest/java/com/nononsenseapps/filepicker/sample/FtpPicker.java b/sample/src/androidTest/java/com/nononsenseapps/filepicker/sample/FtpPicker.java deleted file mode 100644 index 8594b17..0000000 --- a/sample/src/androidTest/java/com/nononsenseapps/filepicker/sample/FtpPicker.java +++ /dev/null @@ -1,73 +0,0 @@ -package com.nononsenseapps.filepicker.sample; - - -import android.support.test.espresso.ViewInteraction; -import android.support.test.espresso.action.ViewActions; -import android.support.test.rule.ActivityTestRule; -import android.support.test.runner.AndroidJUnit4; -import android.test.suitebuilder.annotation.LargeTest; - -import org.junit.Before; -import org.junit.Rule; -import org.junit.Test; -import org.junit.runner.RunWith; - -import java.io.IOException; - -import static android.support.test.espresso.Espresso.onView; -import static android.support.test.espresso.action.ViewActions.click; -import static android.support.test.espresso.action.ViewActions.replaceText; -import static android.support.test.espresso.assertion.ViewAssertions.matches; -import static android.support.test.espresso.contrib.RecyclerViewActions.actionOnItemAtPosition; -import static android.support.test.espresso.matcher.ViewMatchers.isDisplayed; -import static android.support.test.espresso.matcher.ViewMatchers.withId; -import static android.support.test.espresso.matcher.ViewMatchers.withParent; -import static android.support.test.espresso.matcher.ViewMatchers.withText; -import static com.nononsenseapps.filepicker.sample.PermissionGranter.allowPermissionsIfNeeded; -import static org.hamcrest.Matchers.allOf; - -@LargeTest -@RunWith(AndroidJUnit4.class) -public class FtpPicker { - - @Rule - public ActivityTestRule mActivityTestRule = - new ActivityTestRule<>(NoNonsenseFilePickerTest.class); - - @Before - public void allowPermissions() { - allowPermissionsIfNeeded(mActivityTestRule.getActivity()); - } - - @Test - public void selectDir() throws IOException { - ViewInteraction radioButton = onView( - allOf(withId(R.id.radioDir), withText("Select directory"), - withParent(withId(R.id.radioGroup)), - isDisplayed())); - radioButton.perform(click()); - - onView(withId(R.id.button_ftp)).perform(ViewActions.scrollTo()); - - ViewInteraction button = onView( - allOf(withId(R.id.button_ftp), isDisplayed())); - button.perform(click()); - - ViewInteraction recyclerView = onView( - allOf(withId(android.R.id.list), isDisplayed())); - - // press pub - recyclerView.perform(actionOnItemAtPosition(1, click())); - - ViewInteraction okButton = onView( - allOf(withId(R.id.nnf_button_ok), - withParent(allOf(withId(R.id.nnf_button_container), - withParent(withId(R.id.nnf_buttons_container)))), - isDisplayed())); - // Click ok - okButton.perform(click()); - - ViewInteraction textView = onView(withId(R.id.text)); - textView.check(matches(withText("ftp://anonymous:anonymous@debian.simnet.is:21/pub"))); - } -} diff --git a/sample/src/androidTest/java/com/nononsenseapps/filepicker/sample/PermissionGranter.java b/sample/src/androidTest/java/com/nononsenseapps/filepicker/sample/PermissionGranter.java deleted file mode 100644 index ef634ec..0000000 --- a/sample/src/androidTest/java/com/nononsenseapps/filepicker/sample/PermissionGranter.java +++ /dev/null @@ -1,51 +0,0 @@ -package com.nononsenseapps.filepicker.sample; - -import android.Manifest; -import android.app.Activity; -import android.content.pm.PackageManager; -import android.os.Build; -import android.support.test.uiautomator.UiDevice; -import android.support.test.uiautomator.UiObject; -import android.support.test.uiautomator.UiObjectNotFoundException; -import android.support.test.uiautomator.UiSelector; -import android.support.v4.content.ContextCompat; - -import static android.support.test.InstrumentationRegistry.getInstrumentation; - -public class PermissionGranter { - - private static final int PERMISSIONS_DIALOG_DELAY = 3000; - private static final int GRANT_BUTTON_INDEX = 1; - - public static void allowPermissionsIfNeeded(Activity activity) { - allowPermissionsIfNeeded(activity, Manifest.permission.WRITE_EXTERNAL_STORAGE); - } - - public static void allowPermissionsIfNeeded(Activity activity, String permissionNeeded) { - try { - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M && !hasNeededPermission(activity, permissionNeeded)) { - sleep(PERMISSIONS_DIALOG_DELAY); - UiDevice device = UiDevice.getInstance(getInstrumentation()); - UiObject allowPermissions = device.findObject(new UiSelector().clickable(true).index(GRANT_BUTTON_INDEX)); - if (allowPermissions.exists()) { - allowPermissions.click(); - } - } - } catch (UiObjectNotFoundException e) { - System.out.println("There is no permissions dialog to interact with"); - } - } - - private static boolean hasNeededPermission(Activity activity, String permissionNeeded) { - int permissionStatus = ContextCompat.checkSelfPermission(activity, permissionNeeded); - return permissionStatus == PackageManager.PERMISSION_GRANTED; - } - - private static void sleep(long millis) { - try { - Thread.sleep(millis); - } catch (InterruptedException e) { - throw new RuntimeException("Cannot execute Thread.sleep()"); - } - } -} \ No newline at end of file diff --git a/sample/src/androidTest/java/com/nononsenseapps/filepicker/sample/SelectNewFile.java b/sample/src/androidTest/java/com/nononsenseapps/filepicker/sample/SelectNewFile.java deleted file mode 100644 index 5aac368..0000000 --- a/sample/src/androidTest/java/com/nononsenseapps/filepicker/sample/SelectNewFile.java +++ /dev/null @@ -1,406 +0,0 @@ -package com.nononsenseapps.filepicker.sample; - - -import android.support.test.espresso.ViewInteraction; -import android.support.test.rule.ActivityTestRule; -import android.support.test.runner.AndroidJUnit4; -import android.test.suitebuilder.annotation.LargeTest; - -import static android.support.test.espresso.Espresso.onView; -import static android.support.test.espresso.Espresso.pressBack; -import static android.support.test.espresso.contrib.RecyclerViewActions.actionOnItemAtPosition; -import static android.support.test.espresso.action.ViewActions.*; -import static android.support.test.espresso.assertion.ViewAssertions.*; -import static android.support.test.espresso.matcher.ViewMatchers.*; - -import com.nononsenseapps.filepicker.sample.R; - -import org.junit.Before; -import org.junit.Rule; -import org.junit.Test; -import org.junit.runner.RunWith; - -import java.io.IOException; - -import static com.nononsenseapps.filepicker.sample.PermissionGranter.allowPermissionsIfNeeded; -import static org.hamcrest.Matchers.allOf; -import static org.hamcrest.Matchers.is; - -@LargeTest -@RunWith(AndroidJUnit4.class) -public class SelectNewFile { - - @Rule - public ActivityTestRule mActivityTestRule = - new ActivityTestRule<>(NoNonsenseFilePickerTest.class); - - @Before - public void allowPermissions() { - allowPermissionsIfNeeded(mActivityTestRule.getActivity()); - } - - @Test - public void selectNewFile() throws IOException { - ViewInteraction radioButton = onView( - allOf(withId(R.id.radioNewFile), withText("Select new file"), - withParent(withId(R.id.radioGroup)), - isDisplayed())); - radioButton.perform(click()); - - ViewInteraction checkBox = onView( - allOf(withId(R.id.checkAllowExistingFile), withText("Allow selection of existing (new) file"), isDisplayed())); - checkBox.perform(click()); - - ViewInteraction button = onView( - allOf(withId(R.id.button_sd), withText("Pick SD-card"), isDisplayed())); - button.perform(click()); - - ViewInteraction recyclerView = onView( - allOf(withId(android.R.id.list), isDisplayed())); - - // Refresh view (into dir, and out again) - recyclerView.perform(actionOnItemAtPosition(1, click())); - recyclerView.perform(actionOnItemAtPosition(0, click())); - - // Click on test dir - recyclerView.perform(actionOnItemAtPosition(1, click())); - // sub dir - recyclerView.perform(actionOnItemAtPosition(3, click())); - - ViewInteraction appCompatEditText = onView( - allOf(withId(R.id.nnf_text_filename), - withParent(allOf(withId(R.id.nnf_newfile_button_container), - withParent(withId(R.id.nnf_buttons_container)))), - isDisplayed())); - // new file name - appCompatEditText.perform(replaceText("testfile")); - - ViewInteraction appCompatImageButton = onView( - allOf(withId(R.id.nnf_button_ok_newfile), - withParent(allOf(withId(R.id.nnf_newfile_button_container), - withParent(withId(R.id.nnf_buttons_container)))), - isDisplayed())); - // Click ok - appCompatImageButton.perform(click()); - - ViewInteraction textView = onView(withId(R.id.text)); - textView.check(matches(withText("file:///storage/emulated/0/000000_nonsense-tests/C-dir/testfile"))); - } - - @Test - public void withSingleClick() throws IOException { - ViewInteraction radioButton = onView( - allOf(withId(R.id.radioNewFile), - withParent(withId(R.id.radioGroup)), - isDisplayed())); - radioButton.perform(click()); - - ViewInteraction checkBox = onView( - allOf(withId(R.id.checkSingleClick), isDisplayed())); - checkBox.perform(click()); - - ViewInteraction button = onView( - allOf(withId(R.id.button_sd), isDisplayed())); - button.perform(click()); - - ViewInteraction recyclerView = onView( - allOf(withId(android.R.id.list), isDisplayed())); - - // Refresh view (into dir, and out again) - recyclerView.perform(actionOnItemAtPosition(1, click())); - recyclerView.perform(actionOnItemAtPosition(0, click())); - - // Navigate to file - recyclerView.perform(actionOnItemAtPosition(1, click())); - recyclerView.perform(actionOnItemAtPosition(2, click())); - // Click file - recyclerView.perform(actionOnItemAtPosition(4, click())); - - // Should have returned - ViewInteraction textView = onView(withId(R.id.text)); - textView.check(matches(withText("file:///storage/emulated/0/000000_nonsense-tests/B-dir/file-3.txt"))); - } - - @Test - public void clickTwiceShouldNotClearFilename() throws IOException { - ViewInteraction radioButton = onView( - allOf(withId(R.id.radioNewFile), withText("Select new file"), - withParent(withId(R.id.radioGroup)), - isDisplayed())); - radioButton.perform(click()); - - ViewInteraction button = onView( - allOf(withId(R.id.button_sd), withText("Pick SD-card"), isDisplayed())); - button.perform(click()); - - ViewInteraction recyclerView = onView( - allOf(withId(android.R.id.list), isDisplayed())); - - // Refresh view (into dir, and out again) - recyclerView.perform(actionOnItemAtPosition(1, click())); - recyclerView.perform(actionOnItemAtPosition(0, click())); - - // Navigate to file - recyclerView.perform(actionOnItemAtPosition(1, click())); - - recyclerView.perform(actionOnItemAtPosition(2, click())); - - // Click on file once - recyclerView.perform(actionOnItemAtPosition(4, click())); - - // Filename should be entered in field - ViewInteraction editText = onView(withId(R.id.nnf_text_filename)); - editText.check(matches(withText("file-3.txt"))); - - // Click twice - recyclerView.perform(actionOnItemAtPosition(4, click())); - - // Filename should not change - editText.check(matches(withText("file-3.txt"))); - } - - @Test - public void enterFileNameWithPathWhichExists() throws IOException { - ViewInteraction radioButton = onView( - allOf(withId(R.id.radioNewFile), withText("Select new file"), - withParent(withId(R.id.radioGroup)), - isDisplayed())); - radioButton.perform(click()); - - ViewInteraction checkBox = onView( - allOf(withId(R.id.checkAllowExistingFile), - withText("Allow selection of existing (new) file"), isDisplayed())); - checkBox.perform(click()); - - ViewInteraction button = onView( - allOf(withId(R.id.button_sd), withText("Pick SD-card"), isDisplayed())); - button.perform(click()); - - ViewInteraction recyclerView = onView( - allOf(withId(android.R.id.list), isDisplayed())); - - // Refresh view (into dir, and out again) - recyclerView.perform(actionOnItemAtPosition(1, click())); - recyclerView.perform(actionOnItemAtPosition(0, click())); - - // Click on test dir - recyclerView.perform(actionOnItemAtPosition(1, click())); - - // Enter path in filename - ViewInteraction appCompatEditText = onView( - allOf(withId(R.id.nnf_text_filename), - withParent(allOf(withId(R.id.nnf_newfile_button_container), - withParent(withId(R.id.nnf_buttons_container)))), - isDisplayed())); - // new file name - appCompatEditText.perform(replaceText("B-dir/file-3.txt")); - - // Click ok - ViewInteraction appCompatImageButton = onView( - allOf(withId(R.id.nnf_button_ok_newfile), - withParent(allOf(withId(R.id.nnf_newfile_button_container), - withParent(withId(R.id.nnf_buttons_container)))), - isDisplayed())); - appCompatImageButton.perform(click()); - - // Should have returned - ViewInteraction textView = onView(withId(R.id.text)); - textView.check(matches(withText("file:///storage/emulated/0/000000_nonsense-tests/B-dir/file-3.txt"))); - } - - @Test - public void enterFileNameWithPathWhichDoesNotExist() throws IOException { - ViewInteraction radioButton = onView( - allOf(withId(R.id.radioNewFile), withText("Select new file"), - withParent(withId(R.id.radioGroup)), - isDisplayed())); - radioButton.perform(click()); - - ViewInteraction checkBox = onView( - allOf(withId(R.id.checkAllowExistingFile), - withText("Allow selection of existing (new) file"), isDisplayed())); - checkBox.perform(click()); - - ViewInteraction button = onView( - allOf(withId(R.id.button_sd), withText("Pick SD-card"), isDisplayed())); - button.perform(click()); - - ViewInteraction recyclerView = onView( - allOf(withId(android.R.id.list), isDisplayed())); - - // Refresh view (into dir, and out again) - recyclerView.perform(actionOnItemAtPosition(1, click())); - recyclerView.perform(actionOnItemAtPosition(0, click())); - - // Click on test dir - recyclerView.perform(actionOnItemAtPosition(1, click())); - - // Enter path in filename - ViewInteraction appCompatEditText = onView( - allOf(withId(R.id.nnf_text_filename), - withParent(allOf(withId(R.id.nnf_newfile_button_container), - withParent(withId(R.id.nnf_buttons_container)))), - isDisplayed())); - // new file name - appCompatEditText.perform(replaceText("path/to/file")); - - // Click ok - ViewInteraction appCompatImageButton = onView( - allOf(withId(R.id.nnf_button_ok_newfile), - withParent(allOf(withId(R.id.nnf_newfile_button_container), - withParent(withId(R.id.nnf_buttons_container)))), - isDisplayed())); - appCompatImageButton.perform(click()); - - // Should have returned - ViewInteraction textView = onView(withId(R.id.text)); - textView.check(matches(withText("file:///storage/emulated/0/000000_nonsense-tests/path/to/file"))); - } - - @Test - public void enterFileNameWithDotDot() throws IOException { - ViewInteraction radioButton = onView( - allOf(withId(R.id.radioNewFile), withText("Select new file"), - withParent(withId(R.id.radioGroup)), - isDisplayed())); - radioButton.perform(click()); - - ViewInteraction checkBox = onView( - allOf(withId(R.id.checkAllowExistingFile), - withText("Allow selection of existing (new) file"), isDisplayed())); - checkBox.perform(click()); - - ViewInteraction button = onView( - allOf(withId(R.id.button_sd), withText("Pick SD-card"), isDisplayed())); - button.perform(click()); - - ViewInteraction recyclerView = onView( - allOf(withId(android.R.id.list), isDisplayed())); - - // Refresh view (into dir, and out again) - recyclerView.perform(actionOnItemAtPosition(1, click())); - recyclerView.perform(actionOnItemAtPosition(0, click())); - - // Click on test dir - recyclerView.perform(actionOnItemAtPosition(1, click())); - - // Enter path in filename - ViewInteraction appCompatEditText = onView( - allOf(withId(R.id.nnf_text_filename), - withParent(allOf(withId(R.id.nnf_newfile_button_container), - withParent(withId(R.id.nnf_buttons_container)))), - isDisplayed())); - // new file name - appCompatEditText.perform(replaceText("../file.txt")); - - // Click ok - ViewInteraction appCompatImageButton = onView( - allOf(withId(R.id.nnf_button_ok_newfile), - withParent(allOf(withId(R.id.nnf_newfile_button_container), - withParent(withId(R.id.nnf_buttons_container)))), - isDisplayed())); - appCompatImageButton.perform(click()); - - // Should have returned - ViewInteraction textView = onView(withId(R.id.text)); - textView.check(matches(withText("file:///storage/emulated/0/000000_nonsense-tests/../file.txt"))); - } - - @Test - public void enterFileNameWithDot() throws IOException { - ViewInteraction radioButton = onView( - allOf(withId(R.id.radioNewFile), withText("Select new file"), - withParent(withId(R.id.radioGroup)), - isDisplayed())); - radioButton.perform(click()); - - ViewInteraction checkBox = onView( - allOf(withId(R.id.checkAllowExistingFile), - withText("Allow selection of existing (new) file"), isDisplayed())); - checkBox.perform(click()); - - ViewInteraction button = onView( - allOf(withId(R.id.button_sd), withText("Pick SD-card"), isDisplayed())); - button.perform(click()); - - ViewInteraction recyclerView = onView( - allOf(withId(android.R.id.list), isDisplayed())); - - // Refresh view (into dir, and out again) - recyclerView.perform(actionOnItemAtPosition(1, click())); - recyclerView.perform(actionOnItemAtPosition(0, click())); - - // Click on test dir - recyclerView.perform(actionOnItemAtPosition(1, click())); - - // Enter path in filename - ViewInteraction appCompatEditText = onView( - allOf(withId(R.id.nnf_text_filename), - withParent(allOf(withId(R.id.nnf_newfile_button_container), - withParent(withId(R.id.nnf_buttons_container)))), - isDisplayed())); - // new file name - appCompatEditText.perform(replaceText("./file.txt")); - - // Click ok - ViewInteraction appCompatImageButton = onView( - allOf(withId(R.id.nnf_button_ok_newfile), - withParent(allOf(withId(R.id.nnf_newfile_button_container), - withParent(withId(R.id.nnf_buttons_container)))), - isDisplayed())); - appCompatImageButton.perform(click()); - - // Should have returned - ViewInteraction textView = onView(withId(R.id.text)); - textView.check(matches(withText("file:///storage/emulated/0/000000_nonsense-tests/./file.txt"))); - } - - @Test - public void enterFileNameWithRoot() throws IOException { - ViewInteraction radioButton = onView( - allOf(withId(R.id.radioNewFile), withText("Select new file"), - withParent(withId(R.id.radioGroup)), - isDisplayed())); - radioButton.perform(click()); - - ViewInteraction checkBox = onView( - allOf(withId(R.id.checkAllowExistingFile), - withText("Allow selection of existing (new) file"), isDisplayed())); - checkBox.perform(click()); - - ViewInteraction button = onView( - allOf(withId(R.id.button_sd), withText("Pick SD-card"), isDisplayed())); - button.perform(click()); - - ViewInteraction recyclerView = onView( - allOf(withId(android.R.id.list), isDisplayed())); - - // Refresh view (into dir, and out again) - recyclerView.perform(actionOnItemAtPosition(1, click())); - recyclerView.perform(actionOnItemAtPosition(0, click())); - - // Click on test dir - recyclerView.perform(actionOnItemAtPosition(1, click())); - - // Enter path in filename - ViewInteraction appCompatEditText = onView( - allOf(withId(R.id.nnf_text_filename), - withParent(allOf(withId(R.id.nnf_newfile_button_container), - withParent(withId(R.id.nnf_buttons_container)))), - isDisplayed())); - // new file name - appCompatEditText.perform(replaceText("/file.txt")); - - // Click ok - ViewInteraction appCompatImageButton = onView( - allOf(withId(R.id.nnf_button_ok_newfile), - withParent(allOf(withId(R.id.nnf_newfile_button_container), - withParent(withId(R.id.nnf_buttons_container)))), - isDisplayed())); - appCompatImageButton.perform(click()); - - // Should have returned - ViewInteraction textView = onView(withId(R.id.text)); - textView.check(matches(withText("file:///file.txt"))); - } -} diff --git a/sample/src/androidTest/java/com/nononsenseapps/filepicker/sample/SelectNewFileStartPathIsFile.java b/sample/src/androidTest/java/com/nononsenseapps/filepicker/sample/SelectNewFileStartPathIsFile.java deleted file mode 100644 index e276af0..0000000 --- a/sample/src/androidTest/java/com/nononsenseapps/filepicker/sample/SelectNewFileStartPathIsFile.java +++ /dev/null @@ -1,90 +0,0 @@ -package com.nononsenseapps.filepicker.sample; - -import android.content.Context; -import android.content.Intent; -import android.os.Environment; -import android.support.test.InstrumentationRegistry; -import android.support.test.espresso.ViewInteraction; -import android.support.test.rule.ActivityTestRule; -import android.support.test.runner.AndroidJUnit4; -import android.test.suitebuilder.annotation.LargeTest; - -import com.nononsenseapps.filepicker.AbstractFilePickerActivity; - -import org.junit.Before; -import org.junit.Rule; -import org.junit.Test; -import org.junit.runner.RunWith; - -import java.io.File; -import java.io.IOException; - -import static android.support.test.espresso.Espresso.onView; -import static android.support.test.espresso.action.ViewActions.click; -import static android.support.test.espresso.assertion.ViewAssertions.matches; -import static android.support.test.espresso.matcher.ViewMatchers.isDisplayed; -import static android.support.test.espresso.matcher.ViewMatchers.withId; -import static android.support.test.espresso.matcher.ViewMatchers.withParent; -import static android.support.test.espresso.matcher.ViewMatchers.withText; -import static com.nononsenseapps.filepicker.sample.PermissionGranter.allowPermissionsIfNeeded; -import static org.hamcrest.Matchers.allOf; - -/** - * In this class, the activity is launched using an intent pointing to a file. - */ -@LargeTest -@RunWith(AndroidJUnit4.class) -public class SelectNewFileStartPathIsFile { - - @Rule - public ActivityTestRule mActivityTestRule = - new ActivityTestRule(NoNonsenseFilePickerTest.class) { - @Override - protected Intent getActivityIntent() { - Context targetContext = InstrumentationRegistry.getInstrumentation() - .getTargetContext(); - Intent result = new Intent(targetContext, NoNonsenseFilePickerTest.class); - String path = new File(Environment.getExternalStorageDirectory().getAbsoluteFile(), - "000000_nonsense-tests/A-dir/file-3.txt").getAbsolutePath(); - result.putExtra(AbstractFilePickerActivity.EXTRA_START_PATH, path); - return result; - } - }; - - @Before - public void allowPermissions() { - allowPermissionsIfNeeded(mActivityTestRule.getActivity()); - } - - @Test - public void selectNewFileWithStartPath() throws IOException { - ViewInteraction radioButton = onView( - allOf(withId(R.id.radioNewFile), withText("Select new file"), - withParent(withId(R.id.radioGroup)), - isDisplayed())); - radioButton.perform(click()); - - ViewInteraction button = onView( - allOf(withId(R.id.button_sd), withText("Pick SD-card"), isDisplayed())); - button.perform(click()); - - ViewInteraction appCompatEditText = onView( - allOf(withId(R.id.nnf_text_filename), - withParent(allOf(withId(R.id.nnf_newfile_button_container), - withParent(withId(R.id.nnf_buttons_container)))), - isDisplayed())); - - appCompatEditText.check(matches(withText("file-3.txt"))); - - ViewInteraction appCompatImageButton = onView( - allOf(withId(R.id.nnf_button_ok_newfile), - withParent(allOf(withId(R.id.nnf_newfile_button_container), - withParent(withId(R.id.nnf_buttons_container)))), - isDisplayed())); - // Click ok - appCompatImageButton.perform(click()); - - ViewInteraction textView = onView(withId(R.id.text)); - textView.check(matches(withText("file:///storage/emulated/0/000000_nonsense-tests/A-dir/file-3.txt"))); - } -} diff --git a/sample/src/main/AndroidManifest.xml b/sample/src/main/AndroidManifest.xml deleted file mode 100644 index 3125573..0000000 --- a/sample/src/main/AndroidManifest.xml +++ /dev/null @@ -1,156 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/sample/src/main/java/com/nononsenseapps/filepicker/sample/FilePickerActivity2.java b/sample/src/main/java/com/nononsenseapps/filepicker/sample/FilePickerActivity2.java deleted file mode 100644 index 95609b8..0000000 --- a/sample/src/main/java/com/nononsenseapps/filepicker/sample/FilePickerActivity2.java +++ /dev/null @@ -1,17 +0,0 @@ -/* - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at http://mozilla.org/MPL/2.0/. - */ - -package com.nononsenseapps.filepicker.sample; - - -import com.nononsenseapps.filepicker.FilePickerActivity; - -/** - * This is a copy of the included activity for the sole purpose - * of being to show you a second example theme - */ -public class FilePickerActivity2 extends FilePickerActivity { -} diff --git a/sample/src/main/java/com/nononsenseapps/filepicker/sample/NoNonsenseFilePicker.java b/sample/src/main/java/com/nononsenseapps/filepicker/sample/NoNonsenseFilePicker.java deleted file mode 100644 index ea60f37..0000000 --- a/sample/src/main/java/com/nononsenseapps/filepicker/sample/NoNonsenseFilePicker.java +++ /dev/null @@ -1,278 +0,0 @@ -/* - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at http://mozilla.org/MPL/2.0/. - */ - -package com.nononsenseapps.filepicker.sample; - -import android.annotation.TargetApi; -import android.app.Activity; -import android.content.ClipData; -import android.content.Intent; -import android.os.Build; -import android.os.Bundle; -import android.util.Log; -import android.view.Menu; -import android.view.MenuItem; -import android.view.View; -import android.widget.CheckBox; -import android.widget.RadioGroup; -import android.widget.TextView; -import android.widget.Toast; - -import com.dropbox.client2.DropboxAPI; -import com.dropbox.client2.android.AndroidAuthSession; -import com.nononsenseapps.filepicker.AbstractFilePickerActivity; -import com.nononsenseapps.filepicker.AbstractFilePickerFragment; -import com.nononsenseapps.filepicker.FilePickerActivity; -import com.nononsenseapps.filepicker.sample.dropbox.DropboxFilePickerActivity; -import com.nononsenseapps.filepicker.sample.dropbox.DropboxFilePickerActivity2; -import com.nononsenseapps.filepicker.sample.dropbox.DropboxSyncHelper; -import com.nononsenseapps.filepicker.sample.fastscroller.FastScrollerFilePickerActivity; -import com.nononsenseapps.filepicker.sample.fastscroller.FastScrollerFilePickerActivity2; -import com.nononsenseapps.filepicker.sample.ftp.FtpPickerActivity; -import com.nononsenseapps.filepicker.sample.ftp.FtpPickerActivity2; -import com.nononsenseapps.filepicker.sample.multimedia.MultimediaPickerActivity; -import com.nononsenseapps.filepicker.sample.multimedia.MultimediaPickerActivity2; -import com.nononsenseapps.filepicker.sample.root.SUPickerActivity; -import com.nononsenseapps.filepicker.sample.root.SUPickerActivity2; - -import java.util.ArrayList; - - -public class NoNonsenseFilePicker extends Activity { - - static final int CODE_SD = 0; - static final int CODE_DB = 1; - static final int CODE_FTP = 2; - TextView textView; - DropboxAPI mDBApi = null; - CheckBox checkAllowCreateDir; - CheckBox checkAllowMultiple; - CheckBox checkSingleClick; - CheckBox checkLightTheme; - RadioGroup radioGroup; - CheckBox checkAllowExistingFile; - - @Override - protected void onCreate(Bundle savedInstanceState) { - super.onCreate(savedInstanceState); - setContentView(R.layout.activity_no_nonsense_file_picker); - - checkAllowCreateDir = - (CheckBox) findViewById(R.id.checkAllowCreateDir); - checkAllowMultiple = - (CheckBox) findViewById(R.id.checkAllowMultiple); - checkAllowExistingFile = - (CheckBox) findViewById(R.id.checkAllowExistingFile); - checkSingleClick = - (CheckBox) findViewById(R.id.checkSingleClick); - checkLightTheme = - (CheckBox) findViewById(R.id.checkLightTheme); - radioGroup = - (RadioGroup) findViewById(R.id.radioGroup); - textView = (TextView) findViewById(R.id.text); - - findViewById(R.id.button_sd) - .setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(final View v) { - if (checkLightTheme.isChecked()) { - startActivity(CODE_SD, FilePickerActivity2.class); - } else { - startActivity(CODE_SD, FilePickerActivity.class); - } - } - }); - - findViewById(R.id.button_image) - .setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(final View v) { - if (checkLightTheme.isChecked()) { - startActivity(CODE_SD, MultimediaPickerActivity2.class); - } else { - startActivity(CODE_SD, MultimediaPickerActivity.class); - } - } - }); - - findViewById(R.id.button_ftp) - .setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(final View v) { - if (checkLightTheme.isChecked()) { - startActivity(CODE_FTP, FtpPickerActivity2.class); - } else { - startActivity(CODE_FTP, FtpPickerActivity.class); - } - } - }); - - findViewById(R.id.button_dropbox) - .setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(final View v) { - - // First we must authorize the user - if (mDBApi == null) { - mDBApi = DropboxSyncHelper - .getDBApi(NoNonsenseFilePicker.this); - } - - // If not authorized, then ask user for login/permission - if (!mDBApi.getSession().isLinked()) { - mDBApi.getSession().startOAuth2Authentication( - NoNonsenseFilePicker.this); - } else { // User is authorized, open file picker - Intent i; - if (checkLightTheme.isChecked()) { - startActivity(CODE_DB, DropboxFilePickerActivity2.class); - } else { - startActivity(CODE_DB, DropboxFilePickerActivity.class); - } - } - } - }); - - findViewById(R.id.button_root).setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - if (checkLightTheme.isChecked()) { - startActivity(CODE_SD, SUPickerActivity.class); - } else { - startActivity(CODE_SD, SUPickerActivity2.class); - } - } - }); - - findViewById(R.id.button_fastscroll).setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - if (checkLightTheme.isChecked()) { - startActivity(CODE_SD, FastScrollerFilePickerActivity.class); - } else { - startActivity(CODE_SD, FastScrollerFilePickerActivity2.class); - } - } - }); - } - - protected void startActivity(final int code, final Class klass) { - final Intent i = new Intent(this, klass); - - i.setAction(Intent.ACTION_GET_CONTENT); - - i.putExtra(SUPickerActivity.EXTRA_ALLOW_MULTIPLE, - checkAllowMultiple.isChecked()); - i.putExtra(FilePickerActivity.EXTRA_SINGLE_CLICK, - checkSingleClick.isChecked()); - i.putExtra(SUPickerActivity.EXTRA_ALLOW_CREATE_DIR, - checkAllowCreateDir.isChecked()); - i.putExtra(FilePickerActivity.EXTRA_ALLOW_EXISTING_FILE, - checkAllowExistingFile.isChecked()); - - // What mode is selected - final int mode; - switch (radioGroup.getCheckedRadioButtonId()) { - case R.id.radioDir: - mode = AbstractFilePickerFragment.MODE_DIR; - break; - case R.id.radioFilesAndDirs: - mode = AbstractFilePickerFragment.MODE_FILE_AND_DIR; - break; - case R.id.radioNewFile: - mode = AbstractFilePickerFragment.MODE_NEW_FILE; - break; - case R.id.radioFile: - default: - mode = AbstractFilePickerFragment.MODE_FILE; - break; - } - - i.putExtra(FilePickerActivity.EXTRA_MODE, mode); - - // This line is solely so that test classes can override intents given through UI - i.putExtras(getIntent()); - - startActivityForResult(i, code); - } - - /** - * This is entirely for Dropbox's benefit - */ - protected void onResume() { - super.onResume(); - - if (mDBApi != null && mDBApi.getSession().authenticationSuccessful()) { - try { - // Required to complete auth, sets the access token on the session - mDBApi.getSession().finishAuthentication(); - - String accessToken = mDBApi.getSession().getOAuth2AccessToken(); - DropboxSyncHelper.saveToken(this, accessToken); - } catch (IllegalStateException e) { - Log.i("DbAuthLog", "Error authenticating", e); - } - } - } - - @Override - public boolean onCreateOptionsMenu(Menu menu) { - - // Inflate the menu; this adds items to the action bar if it is present. - getMenuInflater().inflate(R.menu.no_nonsense_file_picker, menu); - return true; - } - - @Override - public boolean onOptionsItemSelected(MenuItem item) { - // Handle action bar item clicks here. The action bar will - // automatically handle clicks on the Home/Up button, so long - // as you specify a parent activity in AndroidManifest.xml. - int id = item.getItemId(); - return id == R.id.action_settings || super.onOptionsItemSelected(item); - } - - @TargetApi(Build.VERSION_CODES.JELLY_BEAN) - @Override - protected void onActivityResult(int requestCode, int resultCode, - Intent data) { - if ((CODE_SD == requestCode || CODE_DB == requestCode || CODE_FTP == requestCode) && - resultCode == Activity.RESULT_OK) { - if (data.getBooleanExtra(FilePickerActivity.EXTRA_ALLOW_MULTIPLE, - false)) { - - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) { - ClipData clip = data.getClipData(); - StringBuilder sb = new StringBuilder(); - - if (clip != null) { - for (int i = 0; i < clip.getItemCount(); i++) { - sb.append(clip.getItemAt(i).getUri().toString()); - sb.append("\n"); - } - } - - textView.setText(sb.toString()); - } else { - ArrayList paths = data.getStringArrayListExtra( - FilePickerActivity.EXTRA_PATHS); - StringBuilder sb = new StringBuilder(); - - if (paths != null) { - for (String path : paths) { - sb.append(path); - sb.append("\n"); - } - } - textView.setText(sb.toString()); - } - } else { - textView.setText(data.getData().toString()); - } - } - } - -} diff --git a/sample/src/main/java/com/nononsenseapps/filepicker/sample/NoNonsenseFilePickerTest.java b/sample/src/main/java/com/nononsenseapps/filepicker/sample/NoNonsenseFilePickerTest.java deleted file mode 100644 index e5883ee..0000000 --- a/sample/src/main/java/com/nononsenseapps/filepicker/sample/NoNonsenseFilePickerTest.java +++ /dev/null @@ -1,128 +0,0 @@ -/* - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at http://mozilla.org/MPL/2.0/. - */ - -package com.nononsenseapps.filepicker.sample; - -import android.Manifest; -import android.annotation.TargetApi; -import android.app.Activity; -import android.content.ClipData; -import android.content.Intent; -import android.content.pm.PackageManager; -import android.os.Build; -import android.os.Bundle; -import android.os.Environment; -import android.support.annotation.NonNull; -import android.support.v4.content.ContextCompat; -import android.util.Log; -import android.view.Menu; -import android.view.MenuItem; -import android.view.View; -import android.widget.CheckBox; -import android.widget.RadioGroup; -import android.widget.TextView; -import android.widget.Toast; - -import com.dropbox.client2.DropboxAPI; -import com.dropbox.client2.android.AndroidAuthSession; -import com.nononsenseapps.filepicker.AbstractFilePickerFragment; -import com.nononsenseapps.filepicker.FilePickerActivity; -import com.nononsenseapps.filepicker.sample.dropbox.DropboxFilePickerActivity; -import com.nononsenseapps.filepicker.sample.dropbox.DropboxFilePickerActivity2; -import com.nononsenseapps.filepicker.sample.dropbox.DropboxSyncHelper; -import com.nononsenseapps.filepicker.sample.fastscroller.FastScrollerFilePickerActivity; -import com.nononsenseapps.filepicker.sample.fastscroller.FastScrollerFilePickerActivity2; -import com.nononsenseapps.filepicker.sample.ftp.FtpPickerActivity; -import com.nononsenseapps.filepicker.sample.ftp.FtpPickerActivity2; -import com.nononsenseapps.filepicker.sample.multimedia.MultimediaPickerActivity; -import com.nononsenseapps.filepicker.sample.multimedia.MultimediaPickerActivity2; -import com.nononsenseapps.filepicker.sample.root.SUPickerActivity; -import com.nononsenseapps.filepicker.sample.root.SUPickerActivity2; - -import java.io.File; -import java.io.IOException; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.List; - -import static org.junit.Assert.assertTrue; - - -public class NoNonsenseFilePickerTest extends NoNonsenseFilePicker { - private static final int PERMISSIONS_REQUEST_WRITE_EXTERNAL_STORAGE = 0; - - @Override - protected void onResume() { - super.onResume(); - - // Request permission - if (hasPermission()) { - try { - createTestData(); - } catch (IOException e) { - throw new RuntimeException(e); - } - } else { - requestPermission(); - } - } - - void createTestData() throws IOException { - File sdRoot = Environment.getExternalStorageDirectory().getAbsoluteFile(); - - File testRoot = new File(sdRoot, "000000_nonsense-tests"); - - testRoot.mkdir(); - assertTrue("Failed to create directory", testRoot.isDirectory()); - - List subdirs = Arrays.asList(new File(testRoot, "A-dir"), - new File(testRoot, "B-dir"), - new File(testRoot, "C-dir")); - - - for (File subdir : subdirs) { - subdir.mkdir(); - assertTrue("Failed to create sub directory", subdir.isDirectory()); - - for (int sf = 0; sf < 10; sf++) { - File subfile = new File(subdir, "file-" + sf + ".txt"); - - subfile.createNewFile(); - - assertTrue("Failed to create file", subfile.isFile()); - } - } - } - - protected boolean hasPermission() { - return PackageManager.PERMISSION_GRANTED == - ContextCompat.checkSelfPermission(this, - Manifest.permission.WRITE_EXTERNAL_STORAGE); - } - - protected void requestPermission() { - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { - requestPermissions(new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE}, - PERMISSIONS_REQUEST_WRITE_EXTERNAL_STORAGE); - } - } - - @Override - public void onRequestPermissionsResult(int requestCode, - @NonNull String[] permissions, - @NonNull int[] grantResults) { - // If arrays are empty, then process was cancelled - if (permissions.length > 0) { - if (PackageManager.PERMISSION_GRANTED == grantResults[0]) { - try { - createTestData(); - } catch (IOException e) { - throw new RuntimeException(e); - } - } - } - } -} diff --git a/sample/src/main/java/com/nononsenseapps/filepicker/sample/dropbox/DropboxFilePickerActivity.java b/sample/src/main/java/com/nononsenseapps/filepicker/sample/dropbox/DropboxFilePickerActivity.java deleted file mode 100644 index ff9d8b8..0000000 --- a/sample/src/main/java/com/nononsenseapps/filepicker/sample/dropbox/DropboxFilePickerActivity.java +++ /dev/null @@ -1,53 +0,0 @@ -/* - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at http://mozilla.org/MPL/2.0/. - */ - -package com.nononsenseapps.filepicker.sample.dropbox; - -import android.os.Bundle; -import android.support.annotation.NonNull; -import android.support.annotation.Nullable; - -import com.dropbox.client2.DropboxAPI; -import com.dropbox.client2.android.AndroidAuthSession; -import com.nononsenseapps.filepicker.AbstractFilePickerActivity; -import com.nononsenseapps.filepicker.AbstractFilePickerFragment; - - -public class DropboxFilePickerActivity - extends AbstractFilePickerActivity { - - // In the class declaration section: - private DropboxAPI mDBApi; - - @Override - public void onCreate(Bundle b) { - mDBApi = DropboxSyncHelper.getDBApi(this); - if (!mDBApi.getSession().isLinked()) { - // No valid authentication - finish(); - } - - super.onCreate(b); - } - - @Override - protected AbstractFilePickerFragment getFragment( - @Nullable final String startPath, final int mode, final boolean allowMultiple, - final boolean allowCreateDir, final boolean allowExistingFile, - final boolean singleClick) { - if (mDBApi == null || !mDBApi.getSession().isLinked()) { - // No valid authentication - finish(); - return null; - } - - DropboxFilePickerFragment fragment = - new DropboxFilePickerFragment(mDBApi); - fragment.setArgs(startPath, mode, allowMultiple, allowCreateDir, - allowExistingFile, singleClick); - return fragment; - } -} diff --git a/sample/src/main/java/com/nononsenseapps/filepicker/sample/dropbox/DropboxFilePickerActivity2.java b/sample/src/main/java/com/nononsenseapps/filepicker/sample/dropbox/DropboxFilePickerActivity2.java deleted file mode 100644 index 21803df..0000000 --- a/sample/src/main/java/com/nononsenseapps/filepicker/sample/dropbox/DropboxFilePickerActivity2.java +++ /dev/null @@ -1,14 +0,0 @@ -/* - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at http://mozilla.org/MPL/2.0/. - */ - -package com.nononsenseapps.filepicker.sample.dropbox; - -/** - * This is a copy of the included activity for the sole purpose - * of being to show you a second example theme - */ -public class DropboxFilePickerActivity2 extends DropboxFilePickerActivity { -} diff --git a/sample/src/main/java/com/nononsenseapps/filepicker/sample/dropbox/DropboxFilePickerFragment.java b/sample/src/main/java/com/nononsenseapps/filepicker/sample/dropbox/DropboxFilePickerFragment.java deleted file mode 100644 index de473a7..0000000 --- a/sample/src/main/java/com/nononsenseapps/filepicker/sample/dropbox/DropboxFilePickerFragment.java +++ /dev/null @@ -1,307 +0,0 @@ -/* - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at http://mozilla.org/MPL/2.0/. - */ - -package com.nononsenseapps.filepicker.sample.dropbox; - -import android.annotation.SuppressLint; -import android.net.Uri; -import android.os.AsyncTask; -import android.os.Bundle; -import android.support.annotation.NonNull; -import android.support.annotation.Nullable; -import android.support.v4.content.AsyncTaskLoader; -import android.support.v4.content.Loader; -import android.support.v7.util.SortedList; -import android.support.v7.widget.LinearLayoutManager; -import android.support.v7.widget.RecyclerView; -import android.support.v7.widget.Toolbar; -import android.support.v7.widget.util.SortedListAdapterCallback; -import android.text.TextUtils; -import android.view.LayoutInflater; -import android.view.View; -import android.view.ViewGroup; -import android.widget.ProgressBar; -import android.widget.TextView; -import android.widget.Toast; - -import com.dropbox.client2.DropboxAPI; -import com.dropbox.client2.android.AndroidAuthSession; -import com.dropbox.client2.exception.DropboxException; -import com.nononsenseapps.filepicker.AbstractFilePickerFragment; -import com.nononsenseapps.filepicker.FileItemAdapter; -import com.nononsenseapps.filepicker.sample.R; - -import java.io.File; - -@SuppressLint("ValidFragment") -public class DropboxFilePickerFragment - extends AbstractFilePickerFragment { - - private final DropboxAPI dbApi; - private ProgressBar progressBar; - private RecyclerView recyclerView; - - @SuppressLint("ValidFragment") - public DropboxFilePickerFragment(final DropboxAPI api) { - super(); - if (api == null) { - throw new NullPointerException("FileSystem may not be null"); - } else if (!api.getSession().isLinked()) { - throw new IllegalArgumentException("Must be linked with Dropbox"); - } - - this.dbApi = api; - } - - @Override - protected View inflateRootView(LayoutInflater inflater, ViewGroup container) { - // Load the specific layout we created for dropbox/ftp - View view = inflater.inflate(R.layout.fragment_loading_filepicker, container, false); - // And bind the progress bar - progressBar = (ProgressBar) view.findViewById(R.id.progressBar); - - return view; - } - - /** - * If we are loading, then hide the list and show the progress bar instead. - * - * @param nextPath path to list files for - */ - @Override - protected void refresh(DropboxAPI.Entry nextPath) { - super.refresh(nextPath); - if (isLoading) { - progressBar.setVisibility(View.VISIBLE); - recyclerView.setVisibility(View.INVISIBLE); - } - } - - /** - * Once loading has finished, show the list and hide the progress bar. - */ - @Override - public void onLoadFinished(Loader> loader, SortedList data) { - progressBar.setVisibility(View.INVISIBLE); - recyclerView.setVisibility(View.VISIBLE); - super.onLoadFinished(loader, data); - } - - /** - * Once loading has finished, show the list and hide the progress bar. - */ - @Override - public void onLoaderReset(Loader> loader) { - progressBar.setVisibility(View.INVISIBLE); - recyclerView.setVisibility(View.VISIBLE); - super.onLoaderReset(loader); - } - - @Override - public void onNewFolder(@NonNull final String name) { - File folder = new File(mCurrentPath.path, name); - new FolderCreator().execute(folder.getPath()); - } - - @Override - public boolean isDir(@NonNull final DropboxAPI.Entry file) { - return file.isDir; - } - - @NonNull - @Override - public DropboxAPI.Entry getParent(@NonNull final DropboxAPI.Entry from) { - // Take care of a slight limitation in Dropbox code: - if (from.path.length() > 1 && from.path.endsWith("/")) { - from.path = from.path.substring(0, from.path.length() - 1); - } - String parent = from.parentPath(); - if (TextUtils.isEmpty(parent)) { - parent = "/"; - } - - return getPath(parent); - - } - - @NonNull - @Override - public DropboxAPI.Entry getPath(@NonNull final String path) { - final DropboxAPI.Entry entry = new DropboxAPI.Entry(); - entry.path = path; - entry.isDir = true; - return entry; - - } - - @NonNull - @Override - public String getFullPath(@NonNull final DropboxAPI.Entry file) { - return file.path; - } - - @NonNull - @Override - public String getName(@NonNull final DropboxAPI.Entry file) { - return file.fileName(); - } - - @NonNull - @Override - public DropboxAPI.Entry getRoot() { - return getPath("/"); - } - - @NonNull - @Override - public Uri toUri(@NonNull final DropboxAPI.Entry file) { - return new Uri.Builder().scheme("dropbox").authority("").path(file.path).build(); - } - - @NonNull - @Override - public Loader> getLoader() { - return new AsyncTaskLoader>(getActivity()) { - - @Override - public SortedList loadInBackground() { - SortedList files = new SortedList<>(DropboxAPI.Entry.class, - new SortedListAdapterCallback(null) { - @Override - public int compare(DropboxAPI.Entry lhs, DropboxAPI.Entry rhs) { - if (isDir(lhs) && !isDir(rhs)) { - return -1; - } else if (isDir(rhs) && !isDir(lhs)) { - return 1; - } else { - return lhs.fileName().toLowerCase() - .compareTo(rhs.fileName().toLowerCase()); - } - } - - @Override - public void onInserted(int position, int count) { - // Ignore (DO NOT MODIFY ADAPTER HERE!) - } - - @Override - public void onRemoved(int position, int count) { - // Ignore (DO NOT MODIFY ADAPTER HERE!) - } - - @Override - public void onMoved(int fromPosition, int toPosition) { - // Ignore (DO NOT MODIFY ADAPTER HERE!) - } - - @Override - public void onChanged(int position, int count) { - // Ignore (DO NOT MODIFY ADAPTER HERE!) - } - - @Override - public boolean areContentsTheSame(DropboxAPI.Entry lhs, DropboxAPI.Entry rhs) { - return lhs.fileName().equals(rhs.fileName()) && (lhs.isDir == rhs.isDir); - } - - @Override - public boolean areItemsTheSame(DropboxAPI.Entry lhs, DropboxAPI.Entry rhs) { - return areContentsTheSame(lhs, rhs); - } - }, 0); - - try { - - if (!dbApi.metadata(mCurrentPath.path, 1, null, false, - null).isDir) { - mCurrentPath = getRoot(); - } - - DropboxAPI.Entry dirEntry = - dbApi.metadata(mCurrentPath.path, 0, null, true, - null); - - files.beginBatchedUpdates(); - - for (DropboxAPI.Entry entry : dirEntry.contents) { - if ((mode == MODE_FILE || mode == MODE_FILE_AND_DIR) || - entry.isDir) { - files.add(entry); - } - } - - files.endBatchedUpdates(); - } catch (DropboxException ignored) { - } - - return files; - } - - /** - * Handles a request to start the Loader. - */ - @Override - protected void onStartLoading() { - super.onStartLoading(); - - if (mCurrentPath == null || !mCurrentPath.isDir) { - mCurrentPath = getRoot(); - } - - forceLoad(); - } - - /** - * Handles a request to completely reset the Loader. - */ - @Override - protected void onReset() { - super.onReset(); - } - }; - } - - /** - * Dropbox requires stuff to be done in a background thread. Refreshing has to be done on the - * UI thread however (it restarts the loader so actual work is done in the background). - */ - private class FolderCreator extends AsyncTask { - @Override - protected void onPreExecute() { - // Switch to progress bar before starting work - progressBar.setVisibility(View.VISIBLE); - recyclerView.setVisibility(View.INVISIBLE); - } - - @Override - protected DropboxAPI.Entry doInBackground(final String... paths) { - if (paths.length == 0) { - return null; - } - - String path = paths[0]; - try { - dbApi.createFolder(path); - return dbApi.metadata(path, 1, null, false, null); - } catch (DropboxException e) { - return null; - } - } - - @Override - protected void onPostExecute(@Nullable DropboxAPI.Entry path) { - if (path != null) { - goToDir(path); - } else { - progressBar.setVisibility(View.INVISIBLE); - recyclerView.setVisibility(View.VISIBLE); - Toast.makeText(getActivity(), R.string.nnf_create_folder_error, - Toast.LENGTH_SHORT).show(); - } - } - } -} diff --git a/sample/src/main/java/com/nononsenseapps/filepicker/sample/dropbox/DropboxSyncHelper.java b/sample/src/main/java/com/nononsenseapps/filepicker/sample/dropbox/DropboxSyncHelper.java deleted file mode 100644 index 3792d1b..0000000 --- a/sample/src/main/java/com/nononsenseapps/filepicker/sample/dropbox/DropboxSyncHelper.java +++ /dev/null @@ -1,63 +0,0 @@ -/* - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at http://mozilla.org/MPL/2.0/. - */ - -package com.nononsenseapps.filepicker.sample.dropbox; - -import android.content.Context; -import android.preference.PreferenceManager; - -import com.dropbox.client2.DropboxAPI; -import com.dropbox.client2.android.AndroidAuthSession; -import com.dropbox.client2.session.AppKeyPair; - -/** - * This class has some utility functions for dealing with Dropbox. You need - * to input your API keys below. - * See Dropbox for more information: - * https://www.dropbox.com/developers/core/start/android - *

    - * You also need to drop your APP_KEY in the manifest in - * com.dropbox.client2.android.AuthActivity - * See here for info: - * https://www.dropbox.com/developers/core/sdks/android - */ -public class DropboxSyncHelper { - // Change these two lines to your app's stuff - final static public String APP_KEY = "sm57t7s6lmgj745"; - final static public String APP_SECRET = "eie6mq0lvcw9t7x"; - - public static final String PREF_DROPBOX_TOKEN = "dropboxtoken"; - - public static DropboxAPI getDBApi( - final Context context) { - final DropboxAPI mDBApi; - - final AppKeyPair appKeys = new AppKeyPair(APP_KEY, APP_SECRET); - final AndroidAuthSession session; - - if (PreferenceManager.getDefaultSharedPreferences(context) - .contains(PREF_DROPBOX_TOKEN)) { - session = new AndroidAuthSession(appKeys, - PreferenceManager.getDefaultSharedPreferences(context) - .getString(PREF_DROPBOX_TOKEN, "")); - } else { - session = new AndroidAuthSession(appKeys); - } - mDBApi = new DropboxAPI(session); - return mDBApi; - } - - /** - * Save the dropbox oauth token so we can reuse the session without - * logging in again. - * @param context - * @param token - */ - public static void saveToken(final Context context, final String token) { - PreferenceManager.getDefaultSharedPreferences(context).edit() - .putString(PREF_DROPBOX_TOKEN, token).apply(); - } -} diff --git a/sample/src/main/java/com/nononsenseapps/filepicker/sample/fastscroller/FastScrollerFileItemAdapter.java b/sample/src/main/java/com/nononsenseapps/filepicker/sample/fastscroller/FastScrollerFileItemAdapter.java deleted file mode 100644 index 12dad2d..0000000 --- a/sample/src/main/java/com/nononsenseapps/filepicker/sample/fastscroller/FastScrollerFileItemAdapter.java +++ /dev/null @@ -1,29 +0,0 @@ -package com.nononsenseapps.filepicker.sample.fastscroller; - -import android.support.annotation.NonNull; - -import com.nononsenseapps.filepicker.FileItemAdapter; -import com.nononsenseapps.filepicker.LogicHandler; -import com.simplecityapps.recyclerview_fastscroll.views.FastScrollRecyclerView; - -import java.io.File; - - -public class FastScrollerFileItemAdapter extends FileItemAdapter implements - FastScrollRecyclerView.SectionedAdapter { - - public FastScrollerFileItemAdapter( - @NonNull LogicHandler logic) { - super(logic); - } - - @NonNull - @Override - public String getSectionName(int position) { - File path = getItem(position); - if (path == null) { - return ".."; - } - return mLogic.getName(path).substring(0, 1).toLowerCase(); - } -} diff --git a/sample/src/main/java/com/nononsenseapps/filepicker/sample/fastscroller/FastScrollerFilePickerActivity.java b/sample/src/main/java/com/nononsenseapps/filepicker/sample/fastscroller/FastScrollerFilePickerActivity.java deleted file mode 100644 index 9c8a254..0000000 --- a/sample/src/main/java/com/nononsenseapps/filepicker/sample/fastscroller/FastScrollerFilePickerActivity.java +++ /dev/null @@ -1,37 +0,0 @@ -/* - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at http://mozilla.org/MPL/2.0/. - */ - -package com.nononsenseapps.filepicker.sample.fastscroller; - -import android.os.Environment; -import android.support.annotation.Nullable; - -import com.nononsenseapps.filepicker.AbstractFilePickerActivity; -import com.nononsenseapps.filepicker.AbstractFilePickerFragment; - -import java.io.File; - -/** - * All this class does is return a suitable fragment. - */ -public class FastScrollerFilePickerActivity extends AbstractFilePickerActivity { - - public FastScrollerFilePickerActivity() { - super(); - } - - @Override - protected AbstractFilePickerFragment getFragment( - @Nullable final String startPath, final int mode, final boolean allowMultiple, - final boolean allowCreateDir, final boolean allowExistingFile, - final boolean singleClick) { - AbstractFilePickerFragment fragment = new FastScrollerFilePickerFragment(); - // startPath is allowed to be null. In that case, default folder should be SD-card and not "/" - fragment.setArgs(startPath != null ? startPath : Environment.getExternalStorageDirectory().getPath(), - mode, allowMultiple, allowCreateDir, allowExistingFile, singleClick); - return fragment; - } -} diff --git a/sample/src/main/java/com/nononsenseapps/filepicker/sample/fastscroller/FastScrollerFilePickerActivity2.java b/sample/src/main/java/com/nononsenseapps/filepicker/sample/fastscroller/FastScrollerFilePickerActivity2.java deleted file mode 100644 index e31a248..0000000 --- a/sample/src/main/java/com/nononsenseapps/filepicker/sample/fastscroller/FastScrollerFilePickerActivity2.java +++ /dev/null @@ -1,7 +0,0 @@ -package com.nononsenseapps.filepicker.sample.fastscroller; - -/** - * Just for theme sample purposes - */ -public class FastScrollerFilePickerActivity2 extends FastScrollerFilePickerActivity { -} diff --git a/sample/src/main/java/com/nononsenseapps/filepicker/sample/fastscroller/FastScrollerFilePickerFragment.java b/sample/src/main/java/com/nononsenseapps/filepicker/sample/fastscroller/FastScrollerFilePickerFragment.java deleted file mode 100644 index abb1501..0000000 --- a/sample/src/main/java/com/nononsenseapps/filepicker/sample/fastscroller/FastScrollerFilePickerFragment.java +++ /dev/null @@ -1,15 +0,0 @@ -package com.nononsenseapps.filepicker.sample.fastscroller; - -import android.view.LayoutInflater; -import android.view.View; -import android.view.ViewGroup; - -import com.nononsenseapps.filepicker.FilePickerFragment; -import com.nononsenseapps.filepicker.sample.R; - -public class FastScrollerFilePickerFragment extends FilePickerFragment { - @Override - protected View inflateRootView(LayoutInflater inflater, ViewGroup container) { - return inflater.inflate(R.layout.fragment_fastscrollerfilepicker, container, false); - } -} diff --git a/sample/src/main/java/com/nononsenseapps/filepicker/sample/ftp/FTPPath.java b/sample/src/main/java/com/nononsenseapps/filepicker/sample/ftp/FTPPath.java deleted file mode 100644 index d0f7f43..0000000 --- a/sample/src/main/java/com/nononsenseapps/filepicker/sample/ftp/FTPPath.java +++ /dev/null @@ -1,49 +0,0 @@ -/* - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at http://mozilla.org/MPL/2.0/. - */ - -package com.nononsenseapps.filepicker.sample.ftp; - -import android.support.annotation.NonNull; - -import org.apache.commons.net.ftp.FTPFile; - -/** - * Adds path information to FtpFile objects - */ -public class FTPPath { - public final String path; - public final FTPFile file; - - public FTPPath(@NonNull String path, @NonNull FTPFile file) { - this.path = path; - this.file = file; - } - - public FTPPath(@NonNull FTPPath mCurrentPath, @NonNull FTPFile file) { - this.file = file; - if (mCurrentPath.path.endsWith("/")) { - this.path = mCurrentPath + file.getName(); - } else { - this.path = mCurrentPath.path + "/" + file.getName(); - } - } - - public boolean isDirectory() { - return file.isDirectory(); - } - - public String getName() { - return file.getName(); - } - - public String appendToDir(@NonNull String name) { - if (this.path.endsWith("/")) { - return path + name; - } else { - return path + "/" + name; - } - } -} diff --git a/sample/src/main/java/com/nononsenseapps/filepicker/sample/ftp/FtpDir.java b/sample/src/main/java/com/nononsenseapps/filepicker/sample/ftp/FtpDir.java deleted file mode 100644 index ec7d2a9..0000000 --- a/sample/src/main/java/com/nononsenseapps/filepicker/sample/ftp/FtpDir.java +++ /dev/null @@ -1,32 +0,0 @@ -/* - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at http://mozilla.org/MPL/2.0/. - */ - -package com.nononsenseapps.filepicker.sample.ftp; - -public class FtpDir extends FtpFile { - - public FtpDir(FtpFile dir, String name) { - super(dir, name); - } - - public FtpDir(String path) { - super(path); - } - - public FtpDir(String dirPath, String name) { - super(dirPath, name); - } - - @Override - public boolean isDirectory() { - return true; - } - - @Override - public boolean isFile() { - return false; - } -} diff --git a/sample/src/main/java/com/nononsenseapps/filepicker/sample/ftp/FtpFile.java b/sample/src/main/java/com/nononsenseapps/filepicker/sample/ftp/FtpFile.java deleted file mode 100644 index a481ef3..0000000 --- a/sample/src/main/java/com/nononsenseapps/filepicker/sample/ftp/FtpFile.java +++ /dev/null @@ -1,112 +0,0 @@ -/* - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at http://mozilla.org/MPL/2.0/. - */ - -package com.nononsenseapps.filepicker.sample.ftp; - -public class FtpFile { - - public static final char separatorChar = '/'; - public static final String separator = "/"; - private String path; - - public FtpFile(FtpFile dir, String name) { - this(dir == null ? null : dir.getPath(), name); - } - - public FtpFile(String path) { - this.path = fixSlashes(path); - } - - public FtpFile(String dirPath, String name) { - if (name == null) { - throw new NullPointerException("name == null"); - } - if (dirPath == null || dirPath.isEmpty()) { - this.path = fixSlashes(name); - } else if (name.isEmpty()) { - this.path = fixSlashes(dirPath); - } else { - this.path = fixSlashes(join(dirPath, name)); - } - } - - public static String fixSlashes(String origPath) { - // Remove duplicate adjacent slashes. - boolean lastWasSlash = false; - char[] newPath = origPath.toCharArray(); - int length = newPath.length; - int newLength = 0; - for (int i = 0; i < length; ++i) { - char ch = newPath[i]; - if (ch == '/') { - if (!lastWasSlash) { - newPath[newLength++] = separatorChar; - lastWasSlash = true; - } - } else { - newPath[newLength++] = ch; - lastWasSlash = false; - } - } - // Remove any trailing slash (unless this is the root of the file system). - if (lastWasSlash && newLength > 1) { - newLength--; - } - // Reuse the original string if possible. - return (newLength != length) ? new String(newPath, 0, newLength) : origPath; - } - - // Joins two path components, adding a separator only if necessary. - public static String join(String prefix, String suffix) { - int prefixLength = prefix.length(); - boolean haveSlash = (prefixLength > 0 && prefix.charAt(prefixLength - 1) == separatorChar); - if (!haveSlash) { - haveSlash = (suffix.length() > 0 && suffix.charAt(0) == separatorChar); - } - return haveSlash ? (prefix + suffix) : (prefix + separatorChar + suffix); - } - - public String getName() { - int separatorIndex = path.lastIndexOf(separator); - return (separatorIndex < 0) ? path : path.substring(separatorIndex + 1, path.length()); - } - - public String getParent() { - int length = path.length(), firstInPath = 0; - int index = path.lastIndexOf(separatorChar); - if (index == -1 || path.charAt(length - 1) == separatorChar) { - return null; - } - if (path.indexOf(separatorChar) == index - && path.charAt(firstInPath) == separatorChar) { - return path.substring(0, index + 1); - } - return path.substring(0, index); - } - - public FtpFile getParentFile() { - String tempParent = getParent(); - if (tempParent == null) { - return null; - } - return new FtpFile(tempParent); - } - - /** - * Returns the path of this file. - */ - public String getPath() { - return path; - } - - public boolean isDirectory() { - return false; - } - - public boolean isFile() { - return true; - } -} diff --git a/sample/src/main/java/com/nononsenseapps/filepicker/sample/ftp/FtpPickerActivity.java b/sample/src/main/java/com/nononsenseapps/filepicker/sample/ftp/FtpPickerActivity.java deleted file mode 100644 index 62ccb98..0000000 --- a/sample/src/main/java/com/nononsenseapps/filepicker/sample/ftp/FtpPickerActivity.java +++ /dev/null @@ -1,35 +0,0 @@ -/* - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at http://mozilla.org/MPL/2.0/. - */ - -package com.nononsenseapps.filepicker.sample.ftp; - - -import android.support.annotation.NonNull; -import android.support.annotation.Nullable; - -import com.nononsenseapps.filepicker.AbstractFilePickerActivity; -import com.nononsenseapps.filepicker.AbstractFilePickerFragment; - -import org.apache.commons.net.ftp.FTPClient; - -/** - * An example implementation of an FTP file-picker - */ -public class FtpPickerActivity extends AbstractFilePickerActivity { - @Override - protected AbstractFilePickerFragment getFragment(@Nullable String startPath, int mode, - boolean allowMultiple, - boolean allowCreateDir, - boolean allowExistingFile, - boolean singleClick) { - return FtpPickerFragment.newInstance(startPath, mode, allowMultiple, allowCreateDir, - allowExistingFile, singleClick, - "debian.simnet.is", - FTPClient.DEFAULT_PORT, - null, - null, "/"); - } -} diff --git a/sample/src/main/java/com/nononsenseapps/filepicker/sample/ftp/FtpPickerActivity2.java b/sample/src/main/java/com/nononsenseapps/filepicker/sample/ftp/FtpPickerActivity2.java deleted file mode 100644 index b7d1b76..0000000 --- a/sample/src/main/java/com/nononsenseapps/filepicker/sample/ftp/FtpPickerActivity2.java +++ /dev/null @@ -1,15 +0,0 @@ -/* - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at http://mozilla.org/MPL/2.0/. - */ - -package com.nononsenseapps.filepicker.sample.ftp; - - -/** - * This is a copy of the included activity for the sole purpose - * of being to show you a second example theme - */ -public class FtpPickerActivity2 extends FtpPickerActivity { -} diff --git a/sample/src/main/java/com/nononsenseapps/filepicker/sample/ftp/FtpPickerFragment.java b/sample/src/main/java/com/nononsenseapps/filepicker/sample/ftp/FtpPickerFragment.java deleted file mode 100644 index cbe7289..0000000 --- a/sample/src/main/java/com/nononsenseapps/filepicker/sample/ftp/FtpPickerFragment.java +++ /dev/null @@ -1,389 +0,0 @@ -/* - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at http://mozilla.org/MPL/2.0/. - */ - -package com.nononsenseapps.filepicker.sample.ftp; - -import android.net.Uri; -import android.os.AsyncTask; -import android.os.Bundle; -import android.support.annotation.NonNull; -import android.support.v4.content.AsyncTaskLoader; -import android.support.v4.content.Loader; -import android.support.v7.util.SortedList; -import android.support.v7.widget.util.SortedListAdapterCallback; -import android.util.Log; -import android.view.LayoutInflater; -import android.view.View; -import android.view.ViewGroup; -import android.widget.ProgressBar; -import android.widget.Toast; - -import com.nononsenseapps.filepicker.AbstractFilePickerFragment; -import com.nononsenseapps.filepicker.sample.R; - -import org.apache.commons.net.ftp.FTP; -import org.apache.commons.net.ftp.FTPClient; -import org.apache.commons.net.ftp.FTPFile; - -import java.io.IOException; - -/** - * This example allows you to browse the files on an FTP-server - */ -public class FtpPickerFragment extends AbstractFilePickerFragment { - - private static final String KEY_FTP_SERVER = "KEY_FTP_SERVER"; - private static final String KEY_FTP_PORT = "KEY_FTP_PORT"; - private static final String KEY_FTP_USERNAME = "KEY_FTP_USERNAME"; - private static final String KEY_FTP_PASSWORD = "KEY_FTP_PASSWORD"; - private static final String KEY_FTP_ROOTDIR = "KEY_FTP_ROOTDIR"; - private static final String TAG = "NoNonsenseFtp"; - private final FTPClient ftp; - private String server; - private int port; - private String username; - private String password; - private boolean loggedIn = false; - private String rootDir = "/"; - private ProgressBar progressBar; - - public FtpPickerFragment() { - super(); - ftp = new FTPClient(); - } - - public static AbstractFilePickerFragment newInstance(String startPath, int mode, - boolean allowMultiple, - boolean allowCreateDir, - boolean allowExistingFile, - boolean singleClick, - String server, int port, - String username, - String password, - String rootDir) { - FtpPickerFragment fragment = new FtpPickerFragment(); - // Add arguments - fragment.setArgs(startPath, mode, allowMultiple, allowCreateDir, - allowExistingFile, singleClick); - Bundle args = fragment.getArguments(); - - // Add ftp related stuff - args.putString(KEY_FTP_ROOTDIR, rootDir); - args.putString(KEY_FTP_SERVER, server); - args.putInt(KEY_FTP_PORT, port); - if (username != null && password != null) { - args.putString(KEY_FTP_USERNAME, username); - args.putString(KEY_FTP_PASSWORD, password); - } - - return fragment; - } - - @Override - public void onCreate(Bundle b) { - super.onCreate(b); - - Bundle args = getArguments(); - this.server = args.getString(KEY_FTP_SERVER); - this.port = args.getInt(KEY_FTP_PORT); - this.username = args.getString(KEY_FTP_USERNAME) != null ? args.getString(KEY_FTP_USERNAME) : "anonymous"; - this.password = args.getString(KEY_FTP_PASSWORD) != null ? args.getString(KEY_FTP_PASSWORD) : "anonymous"; - this.rootDir = args.getString(KEY_FTP_ROOTDIR) != null ? args.getString(KEY_FTP_ROOTDIR) : "/"; - } - - @Override - protected View inflateRootView(LayoutInflater inflater, ViewGroup container) { - // Load the specific layout we created for dropbox/ftp - View view = inflater.inflate(R.layout.fragment_loading_filepicker, container, false); - // And bind the progress bar - progressBar = (ProgressBar) view.findViewById(R.id.progressBar); - - return view; - } - - /** - * Return true if the path is a directory and not a file. - */ - @Override - public boolean isDir(@NonNull FtpFile path) { - return path.isDirectory(); - } - - /** - * @return filename of path - */ - @NonNull - @Override - public String getName(@NonNull FtpFile path) { - return path.getName(); - } - - /** - * Convert the path to a URI for the return intent - * - * @return a Uri - */ - @NonNull - @Override - public Uri toUri(@NonNull FtpFile path) { - String user = ""; - if (!username.isEmpty()) { - user = username; - if (!password.isEmpty()) { - user += ":" + password; - } - user += "@"; - } - return Uri.parse("ftp://" + user + server + ":" + port + path.getPath()); - - } - - /** - * Return the path to the parent directory. Should return the root if - * from is root. - */ - @NonNull - @Override - public FtpFile getParent(@NonNull FtpFile from) { - if (from.getPath().equals(getRoot().getPath())) { - // Already at root, we can't go higher - return from; - } else if (from.getParentFile() != null) { - return from.getParentFile(); - } else { - return from; - } - } - - /** - * @return the full path to the file - */ - @NonNull - @Override - public String getFullPath(@NonNull FtpFile path) { - return path.getPath(); - } - - /** - * Convert the path to the type used. - */ - @NonNull - @Override - public FtpFile getPath(@NonNull String path) { - return new FtpFile(path); - } - - /** - * Get the root path (lowest allowed). - */ - @NonNull - @Override - public FtpFile getRoot() { - return new FtpDir(rootDir); - } - - @Override - public void onDestroy() { - if (ftp.isConnected()) { - try { - ftp.disconnect(); - } catch (IOException ignored) { - } - } - super.onDestroy(); - } - - /** - * Get a loader that lists the files in the current path, - * and monitors changes. - */ - @NonNull - @Override - public Loader> getLoader() { - return new AsyncTaskLoader>(getContext()) { - @Override - public SortedList loadInBackground() { - SortedList sortedList = new SortedList<>(FtpFile.class, new SortedListAdapterCallback(getDummyAdapter()) { - @Override - public int compare(FtpFile lhs, FtpFile rhs) { - if (lhs.isDirectory() && !rhs.isDirectory()) { - return -1; - } else if (rhs.isDirectory() && !lhs.isDirectory()) { - return 1; - } else { - return lhs.getName().compareToIgnoreCase(rhs.getName()); - } - } - - @Override - public boolean areContentsTheSame(FtpFile oldItem, FtpFile newItem) { - return oldItem.getName().equals(newItem.getName()); - } - - @Override - public boolean areItemsTheSame(FtpFile item1, FtpFile item2) { - return item1.getName().equals(item2.getName()); - } - }); - - - if (!ftp.isConnected()) { - // Connect - try { - ftp.connect(server, port); - - ftp.setFileType(FTP.ASCII_FILE_TYPE); - ftp.enterLocalPassiveMode(); - ftp.setUseEPSVwithIPv4(false); - - if (!(loggedIn = ftp.login(username, password))) { - ftp.logout(); - Log.e(TAG, "Login failed"); - } - } catch (IOException e) { - if (ftp.isConnected()) { - try { - ftp.disconnect(); - } catch (IOException ignored) { - } - } - Log.e(TAG, "Could not connect to server."); - } - } - - if (loggedIn) { - try { - // handle if directory does not exist. Fall back to root. - if (mCurrentPath == null || !mCurrentPath.isDirectory()) { - mCurrentPath = getRoot(); - } - - sortedList.beginBatchedUpdates(); - for (FTPFile f : ftp.listFiles(mCurrentPath.getPath())) { - FtpFile file; - if (f.isDirectory()) { - file = new FtpDir(mCurrentPath, f.getName()); - } else { - file = new FtpFile(mCurrentPath, f.getName()); - } - if (isItemVisible(file)) { - sortedList.add(file); - } - } - sortedList.endBatchedUpdates(); - } catch (IOException e) { - Log.e(TAG, "IOException: " + e.getMessage()); - } - } - - return sortedList; - } - - /** - * Handles a request to start the Loader. - */ - @Override - protected void onStartLoading() { - super.onStartLoading(); - - // handle if directory does not exist. Fall back to root. - if (mCurrentPath == null || !mCurrentPath.isDirectory()) { - mCurrentPath = getRoot(); - } - - forceLoad(); - } - }; - } - - /** - * Used by the list to determine whether a file should be displayed or not. - * Default behavior is to always display folders. If files can be selected, - * then files are also displayed. Override this method to enable other - * filtering behaviour, like only displaying files with specific extensions (.zip, .txt, etc). - * - * @param file to maybe add. Can be either a directory or file. - * @return True if item should be added to the list, false otherwise - */ - protected boolean isItemVisible(final FtpFile file) { - return file.isDirectory() || (mode == MODE_FILE || mode == MODE_FILE_AND_DIR); - } - - /** - * Name is validated to be non-null, non-empty and not containing any - * slashes. - * - * @param name The name of the folder the user wishes to create. - */ - @Override - public void onNewFolder(@NonNull String name) { - AsyncTask task = new AsyncTask() { - - @Override - protected FtpFile doInBackground(String... names) { - FtpFile result = null; - if (names.length > 0) { - result = onNewFolderAsync(names[0]); - } - return result; - } - - @Override - protected void onPostExecute(FtpFile folder) { - if (folder != null) { - refresh(folder); - } else { - Toast.makeText(getContext(), R.string.nnf_create_folder_error, Toast.LENGTH_SHORT).show(); - } - } - }; - task.execute(name); - } - - /** - * If we are loading, then hide the list and show the progress bar instead. - * - * @param nextPath path to list files for - */ - @Override - protected void refresh(@NonNull FtpFile nextPath) { - super.refresh(nextPath); - if (isLoading) { - progressBar.setVisibility(View.VISIBLE); - recyclerView.setVisibility(View.INVISIBLE); - } - } - - @Override - public void onLoadFinished(Loader> loader, SortedList data) { - progressBar.setVisibility(View.INVISIBLE); - recyclerView.setVisibility(View.VISIBLE); - super.onLoadFinished(loader, data); - } - - @Override - public void onLoaderReset(Loader> loader) { - progressBar.setVisibility(View.INVISIBLE); - recyclerView.setVisibility(View.VISIBLE); - super.onLoaderReset(loader); - } - - /** - * @param name The name of the folder the user wishes to create. - */ - public FtpFile onNewFolderAsync(String name) { - FtpDir folder = new FtpDir(mCurrentPath, name); - try { - if (ftp.makeDirectory(folder.getPath())) { - // Success, return result - return folder; - } - } catch (IOException e) { - Log.e(TAG, "IO Exception: " + folder.getPath()); - } - return null; - } -} diff --git a/sample/src/main/java/com/nononsenseapps/filepicker/sample/multimedia/MultimediaPickerActivity.java b/sample/src/main/java/com/nononsenseapps/filepicker/sample/multimedia/MultimediaPickerActivity.java deleted file mode 100644 index 3cb896a..0000000 --- a/sample/src/main/java/com/nononsenseapps/filepicker/sample/multimedia/MultimediaPickerActivity.java +++ /dev/null @@ -1,37 +0,0 @@ -/* - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at http://mozilla.org/MPL/2.0/. - */ - -package com.nononsenseapps.filepicker.sample.multimedia; - -import android.os.Environment; -import android.support.annotation.Nullable; - -import com.nononsenseapps.filepicker.AbstractFilePickerActivity; -import com.nononsenseapps.filepicker.AbstractFilePickerFragment; - -import java.io.File; - -/** - * All this class does is return a suitable fragment. - */ -public class MultimediaPickerActivity extends AbstractFilePickerActivity { - - public MultimediaPickerActivity() { - super(); - } - - @Override - protected AbstractFilePickerFragment getFragment( - @Nullable final String startPath, final int mode, final boolean allowMultiple, - final boolean allowCreateDir, final boolean allowExistingFile, - final boolean singleClick) { - AbstractFilePickerFragment fragment = new MultimediaPickerFragment(); - // startPath is allowed to be null. In that case, default folder should be SD-card and not "/" - fragment.setArgs(startPath != null ? startPath : Environment.getExternalStorageDirectory().getPath(), - mode, allowMultiple, allowCreateDir, allowExistingFile, singleClick); - return fragment; - } -} diff --git a/sample/src/main/java/com/nononsenseapps/filepicker/sample/multimedia/MultimediaPickerActivity2.java b/sample/src/main/java/com/nononsenseapps/filepicker/sample/multimedia/MultimediaPickerActivity2.java deleted file mode 100644 index 6f6606e..0000000 --- a/sample/src/main/java/com/nononsenseapps/filepicker/sample/multimedia/MultimediaPickerActivity2.java +++ /dev/null @@ -1,13 +0,0 @@ -/* - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at http://mozilla.org/MPL/2.0/. - */ - -package com.nononsenseapps.filepicker.sample.multimedia; - -/** - * Duplicate to allow second theme to be used. - */ -public class MultimediaPickerActivity2 extends MultimediaPickerActivity { -} diff --git a/sample/src/main/java/com/nononsenseapps/filepicker/sample/multimedia/MultimediaPickerFragment.java b/sample/src/main/java/com/nononsenseapps/filepicker/sample/multimedia/MultimediaPickerFragment.java deleted file mode 100644 index dd4b4c6..0000000 --- a/sample/src/main/java/com/nononsenseapps/filepicker/sample/multimedia/MultimediaPickerFragment.java +++ /dev/null @@ -1,136 +0,0 @@ -/* - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at http://mozilla.org/MPL/2.0/. - */ - -package com.nononsenseapps.filepicker.sample.multimedia; - -import android.support.annotation.NonNull; -import android.support.v7.widget.RecyclerView; -import android.view.LayoutInflater; -import android.view.View; -import android.view.ViewGroup; -import android.widget.ImageView; - -import com.bumptech.glide.Glide; -import com.nononsenseapps.filepicker.FilePickerFragment; -import com.nononsenseapps.filepicker.sample.R; - -import java.io.File; - -/** - * A sample which demonstrates how appropriate methods - * can be overwritten in order to enable enhanced - * capabilities, in this case showing thumbnails of images. - *

    - * I am still listing all files, so I extend from the ready made - * SD-card browser classes. This allows this class to focus - * entirely on the image side of things. - *

    - * To load the image I am using the super great Glide library - * which only requires a single line of code in this file. - */ -public class MultimediaPickerFragment extends FilePickerFragment { - - // Make sure these do not collide with LogicHandler.VIEWTYPE codes. - // They are 1-2, so 11 leaves a lot of free space in between. - private static final int VIEWTYPE_IMAGE_CHECKABLE = 11; - private static final int VIEWTYPE_IMAGE = 12; - - private static final String[] MULTIMEDIA_EXTENSIONS = - new String[]{".png", ".jpg", ".gif", ".mp4"}; - - /** - * An extremely simple method for identifying multimedia. This - * could be improved, but it's good enough for this example. - * - * @param file which could be an image or a video - * @return true if the file can be previewed, false otherwise - */ - protected boolean isMultimedia(File file) { - //noinspection SimplifiableIfStatement - if (isDir(file)) { - return false; - } - - String path = file.getPath().toLowerCase(); - for (String ext : MULTIMEDIA_EXTENSIONS) { - if (path.endsWith(ext)) { - return true; - } - } - - return false; - } - - /** - * Here we check if the file is an image, and if thus if we should create views corresponding - * to our image layouts. - * - * @param position 0 - n, where the header has been subtracted - * @param file to check type of - * @return the viewtype of the item - */ - @Override - public int getItemViewType(int position, @NonNull File file) { - if (isMultimedia(file)) { - if (isCheckable(file)) { - return VIEWTYPE_IMAGE_CHECKABLE; - } else { - return VIEWTYPE_IMAGE; - } - } else { - return super.getItemViewType(position, file); - } - } - - /** - * We override this method and provide some special views for images. - * This is necessary to work around a bug on older Android versions (4.0.3 for example) - * where setting a "tint" would just make the entire image a square of solid color. - *

    - * So the special layouts used here are merely "untinted" copies from the library. - * - * @param parent Containing view - * @param viewType which the ViewHolder will contain - * @return a DirViewHolder (or subclass thereof) - */ - @NonNull - @Override - public RecyclerView.ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - switch (viewType) { - case VIEWTYPE_IMAGE_CHECKABLE: - return new CheckableViewHolder(LayoutInflater.from(getActivity()) - .inflate(R.layout.listitem_image_checkable, parent, false)); - case VIEWTYPE_IMAGE: - return new DirViewHolder(LayoutInflater.from(getActivity()) - .inflate(R.layout.listitem_image, parent, false)); - default: - return super.onCreateViewHolder(parent, viewType); - } - } - - /** - * Overriding this method allows us to inject a preview image - * in the layout - * - * @param vh to bind data from either a file or directory - * @param position 0 - n, where the header has been subtracted - * @param file to show info about - */ - @Override - public void onBindViewHolder(@NonNull DirViewHolder vh, int position, @NonNull File file) { - // Let the super method do its thing with checkboxes and text - super.onBindViewHolder(vh, position, file); - - // Here we load the preview image if it is an image file - final int viewType = getItemViewType(position, file); - if (viewType == VIEWTYPE_IMAGE_CHECKABLE || viewType == VIEWTYPE_IMAGE) { - // Need to set it to visible because the base code will set it to invisible by default - vh.icon.setVisibility(View.VISIBLE); - // Just load the image - Glide.with(this).load(file).into((ImageView) vh.icon); - } - } -} diff --git a/sample/src/main/java/com/nononsenseapps/filepicker/sample/root/SUErrorFragment.java b/sample/src/main/java/com/nononsenseapps/filepicker/sample/root/SUErrorFragment.java deleted file mode 100644 index 207a688..0000000 --- a/sample/src/main/java/com/nononsenseapps/filepicker/sample/root/SUErrorFragment.java +++ /dev/null @@ -1,36 +0,0 @@ -package com.nononsenseapps.filepicker.sample.root; - -import android.app.Dialog; -import android.content.DialogInterface; -import android.os.Bundle; -import android.support.annotation.NonNull; -import android.support.v4.app.DialogFragment; -import android.support.v4.app.FragmentManager; -import android.support.v7.app.AlertDialog; - -/** - * A dialog which tells the user that no SU binary is available - */ -public class SUErrorFragment extends DialogFragment { - - private static final String TAG = "SUErrorFragment"; - - public static void showDialog(@NonNull final FragmentManager fm) { - SUErrorFragment d = new SUErrorFragment(); - d.show(fm, TAG); - } - - @NonNull - @Override - public Dialog onCreateDialog(Bundle savedInstanceState) { - AlertDialog.Builder builder = new AlertDialog.Builder(getActivity()); - builder.setMessage("No read permisson, root unavailable") - .setPositiveButton(android.R.string.ok, new DialogInterface.OnClickListener() { - @Override - public void onClick(DialogInterface dialog, int which) { - dialog.dismiss(); - } - }); - return builder.create(); - } -} diff --git a/sample/src/main/java/com/nononsenseapps/filepicker/sample/root/SUPickerActivity.java b/sample/src/main/java/com/nononsenseapps/filepicker/sample/root/SUPickerActivity.java deleted file mode 100644 index e220ceb..0000000 --- a/sample/src/main/java/com/nononsenseapps/filepicker/sample/root/SUPickerActivity.java +++ /dev/null @@ -1,32 +0,0 @@ -package com.nononsenseapps.filepicker.sample.root; - -import android.os.Environment; -import android.support.annotation.Nullable; - -import com.nononsenseapps.filepicker.AbstractFilePickerActivity; -import com.nononsenseapps.filepicker.AbstractFilePickerFragment; - -import java.io.File; - -public class SUPickerActivity extends AbstractFilePickerActivity { - - public SUPickerActivity() { - super(); - } - - @Override - protected AbstractFilePickerFragment getFragment(@Nullable String startPath, - int mode, - boolean allowMultiple, - boolean allowCreateDir, - boolean allowExistingFile, - boolean singleClick) { - AbstractFilePickerFragment fragment = new SUPickerFragment(); - // startPath is allowed to be null. In that case, default folder should be SD-card and - // not "/" - fragment.setArgs( - startPath != null ? startPath : Environment.getExternalStorageDirectory().getPath(), - mode, allowMultiple, allowCreateDir, allowExistingFile, singleClick); - return fragment; - } -} diff --git a/sample/src/main/java/com/nononsenseapps/filepicker/sample/root/SUPickerActivity2.java b/sample/src/main/java/com/nononsenseapps/filepicker/sample/root/SUPickerActivity2.java deleted file mode 100644 index a349951..0000000 --- a/sample/src/main/java/com/nononsenseapps/filepicker/sample/root/SUPickerActivity2.java +++ /dev/null @@ -1,7 +0,0 @@ -package com.nononsenseapps.filepicker.sample.root; - -/** - * Just for second theme - */ -public class SUPickerActivity2 extends SUPickerActivity { -} diff --git a/sample/src/main/java/com/nononsenseapps/filepicker/sample/root/SUPickerFragment.java b/sample/src/main/java/com/nononsenseapps/filepicker/sample/root/SUPickerFragment.java deleted file mode 100644 index 2e4049d..0000000 --- a/sample/src/main/java/com/nononsenseapps/filepicker/sample/root/SUPickerFragment.java +++ /dev/null @@ -1,71 +0,0 @@ -package com.nononsenseapps.filepicker.sample.root; - -import android.support.annotation.NonNull; -import android.util.Log; - -import com.nononsenseapps.filepicker.FilePickerFragment; - -import java.io.File; -import java.util.List; - -import eu.chainfire.libsuperuser.Shell; - -/** - * An example picker which calls out to LibSU to get Root-permissions to view otherwise hidden files. - */ -public class SUPickerFragment extends FilePickerFragment { - - @Override - protected boolean hasPermission(@NonNull File path) { - // Return the combination of normal file permissions and SU permissions - return super.hasPermission(path) & (!needSUPermission(path) | hasSUPermission()); - } - - @Override - protected void handlePermission(@NonNull File path) { - // Only call super if we don't have normal file permissions - if (!super.hasPermission(path)) { - super.handlePermission(path); - } - // Only if we need SU permissions - if (needSUPermission(path) && !hasSUPermission()) { - handleSUPermission(); - } - } - - private boolean haveReadPermission(@NonNull File file) { - List result = - Shell.SH.run("test -r " + file.getAbsolutePath() + " && echo \"rootsuccess\""); - return result != null && !result.isEmpty() && "rootsuccess".equals(result.get(0)); - } - - private boolean needSUPermission(@NonNull File path) { - return !haveReadPermission(path); - } - - private boolean isSUAvailable() { - return Shell.SU.available(); - } - - private boolean hasSUPermission() { - if (isSUAvailable()) { - List result = Shell.SU.run("ls -l /"); - if (result != null && !result.isEmpty()) { - return true; - } - } - return false; - } - - private void handleSUPermission() { - if (isSUAvailable()) { - // request - String suVersion = Shell.SU.version(false); - String suVersionInternal = Shell.SU.version(true); - Log.d("libsuperuser: ", "suVersion:"+suVersion+" suVersionInternal:"+suVersionInternal); - } else { - // Notify that no root access available - SUErrorFragment.showDialog(getFragmentManager()); - } - } -} diff --git a/sample/src/main/res/drawable-hdpi/ic_launcher.png b/sample/src/main/res/drawable-hdpi/ic_launcher.png deleted file mode 100644 index 96a442e5b8e9394ccf50bab9988cb2316026245d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 9397 zcmV;mBud+fP)L`9r|n3#ts(U@pVoQ)(ZPc(6i z8k}N`MvWQ78F(rhG(?6FnFXYo>28{yZ}%O}TvdDT_5P?j=iW=V`8=UNc_}`JbG!ST zs@lK(TWkH+P**sB$A`cEY%Y53cQ}1&6`x-M$Cz&{o9bLU^M-%^mY?+vedlvt$RT-^ zu|w7}IaWaljBq#|I%Mpo!Wc2bbZF3KF9|D%wZe{YFM=hJAv$>j>nhx`=Wis#KG!cJA5x!4)f) zezMz1?Vn$GnZNjbFXH(pK83nn!^3=+^*kTTs5rV9Dq^XS(IKO!mKt5!dSmb3IVCxZ z8TTk5IE)F1V29$G7v#j9d-hy&_pdg8?kT4)zqr>?`}I%W>(?GO%*C&}?Fp|bI*~2&KZ$%^B6R&1~2kA{`CWy+>F-x=z-f{_&vyu_3yp{jtw(*syi% zu3t2|4{c~LJXRt2m>rMg2V_kLltCZ<`m>qcI?BPP?6hf``|e!rZEFszeYQ3f-*nAS zZ+h1$mFwy+7156lkB(k6)!1fUbJCxgIBK38$jj5cC$r&YXN)nr#PY=tJaLc?C_o?j+8H3Q>891JJ9&$l-r+-SG#q)*;r52% z@nlKflb65o%s*Jt)!pw1k{vIoQIvoJ0Y&Msiw0X!qJ)_47G*?aJ6bJFLh_4b$5&1k5wN>du*>6#i7R9T8; z7>EHOV=ue7mo77SJPwER4(A+s?n0JjYK)b}Om6n>ke?0JR=jTI+RFBg_iwb7k%n*2 zR_M0DJ9x+0zxba4(B1y^JQ_Nj6dlP5PGXvSq8fF#mxrFYj3d9(V#jJwt+IqU9+8+D z6C6Us1OI$d8OF!3+Hm1 zW5in zXV^%U35HooOpSmeqlG6e0kUMYNonKp1vr|My9}4-WO+uOxe_c-o&}%voNYHkqtle% z5yQ_^oozSUUNu30EQSAl!Q%(%3G1NXENSMjCL*Vx-Td2~rk(}d z8pT!HZe>1r5EGuz`pgsg@^yQEi=BIa#meLq0!?{TZ}q#}=7UC9_l=w|wv+pP!g4#! zRys6EN$Jv}#U47$k&)pDzvks}LGfPku6P9p!56Py)~1)W(11n7n}`Wx!=;_JTiu#d zpCqx=hEk@t4sp?!j{W}wP@V-=Pd=T^>6IKBy;#mLA7hCe{V7B3@I7Ipa}L`MbF|YQ z)$BNWsiEnoNHrtJli|n8cOnn4NyF=8MbVxgof0>Uv%wM_j94a;8(LMjlL~E(99gJ*2%JtNtAkD@j;^ za~Y~&j6uY{=Rv5S4joH*RW_m9N{ZSN0HhAwFyJNok zS9kx$>wMf%tUi&Eb`6u0lWJ|k?A-42(lp2UmS(PrAc(24wexRiHUieMwf$o%m6$xs zp#-SdBUu2D5`v;(9-sm&kN2M74c&AvKe_v@tQ|dzJ2qSgQHpnUP(iQ?J%Il;Jdyp# z7}cpq6Kdm+FS~zS4Eo;fuO=DFP*UlpO|_CNt5&NUqBvQWxmg7#ARvMf=%#H@p%RZ` zjK$hMbNb+vVP3UlkfIt&ptJ<00Ic{Ka+lF+&w;OEs1O2#V8~O|R*Gq9TIgM&UqM&bZOXBwnbC? zDr))NR&g>lwVgcmnx`K1$)PTTw3m}-T11^ZkY{}jQ@lGD$XzJIcVFkYBBW=o_}TUU zt@yd{Jz;@~72x#!RG(#ira6}v-*J#<{@@^OI-Q2T^}=IKLubsa&V-%WwlF1s7fz~u zMdQTV7SnRet#^`VO0V7H(?59X{uy+S`(sorO@2-+qioUdo9+6r4#|jb=?t50oh42R z{}I>Krut|YKkOc|O|M>y#(3YA;I(i+MiHSfwbJA$jIUr$Y2i|u)*>@2eUYk`j4C5r z>61dKu!AqM_E7#DoDzbd-bfT%AYXUUB{SS|{b{`5^?wz1{PVQgTlvyqOX8(#GTz(U zNPhnj>$lC`xaD56`TjW&uW8p~qikP*F8kHFM0frzdk%UNGjb1O$%uLK`0-)2UsZ3L z#+j+CI_8k4VslL%$aVR@joX>M-@odbX!os$xY$HDIOCokY?{Q0v2kQErf|ZlN>D9w zC+2}E&?rDdi#%))$p%P4C_xGXu=@U~_<|V4L|{>TP$XBp$5pCPXLzK3!;gP>7=QNi zkNOur`>xY=@VSpB#LsN9JKpOz({ANcdv>?K+D_*_HZ<;9>kplj^Ph5!e&&a#?(3vK z_Q@}D_M5kGcx^AuaI~qKYUnb1Mj-n;MURXa)+x7~e2gbMW|gw?5Rg zTOMlo>6zIJ$VNVgn(@kTSL0eP)nR35IHpoHM2W#h6cNmTm@-9`dFJ$;k(S`7Lg@RY zp!hNmb9un!O4Wt05ANDGirv(B14gW| zwjP}C9bK{J`qZ_S2o)b`RonR-b8~y8)$H0`+gg6>#^wu8eCp9xA9B>>8(KRizI?+^ zAJ#i>*({qM-c4gBB~5dzg(wj!HA`hkh!aDl5>u&J;>2K#Ax2)2wt|L!9X;(=*jy!`r4_FhCBoRxNjXNv(~jGQ|%<}%K6RimaBJcP0v}oCgRN3B;oiM)opj? zXm;;tv3q-yy}NqMOr^~3&1lW$w3}UK_IT2sCrkYx5$&6e2A%g;QZUX~A&L!2rFd0p z5%men@^zN_Xw2|v%*c2|wQfkN4r6u&k;LxYY+w3{KY#cie)!iz>(yAgt=&-+Sy2V& z9BJxI+VMKQ%dvY~x>gmEijj3ss_*NAT(8d1@DQ6e&#Ln&6Qk>wHrh>;V2nvomC`8& z(w?`?*_^3u-TJrMzv2~7dH(XLJvUOXk4U8oW6Ol)YsawhIB{GdvIzu1hzMTrE)cvB z%2GxMpaF89<9uF(?cfN(BNR?wwWvCZ6e62+G_{$+;`yjgLj{(^z*zzwd;K3RElb*%=??P zm+lLY0@Y}^kVdMYX5M)YJ~8h=i(S{q#NfU0xPTao4WPDQL=Y_;vg=p%iay1_`<0Ga zMG&<(pOU+bI2u9_g8IJBTqGX*3@G$Zc`pj0f@)vd2?Aj`ms>DHg>;w~p}HXV(*VJX zphd;fht9qL3E)D8h$$A;SGl22Ygv>`iU=A)z=1ZYN$|2`*$`R)?KD>$tw_e9h_x~eX_udS~Q%yz?48i*aIa+_wx|j{B zsG7mwZ)6M3dmvgMC3K-66;ML(9o2xU!F8+qF)>v{1;ip)6v_I)6law|rd_Dx2oV|n z(Qm_PUnTTuKFG)w%s|)lS!w~Lm$k|Al=0djocyHU;>1H=!N}0E0lSV^b2^6~^lUco zyoH+|_!li3#euHd4TJS8=CLaHG9H8g&h3Xm z#>BkpUBAmae(#)qO3)ZMG3irM=5IzA^s+)w86=tIMT{&?Awux<(k2>U#n`c&@Z?u= z%=#BoO-9Nc^?)hz*YW~~tU8rLR-MZBJsY_7fp2r~mY>q-O;L%5Fp?}V6CK=F(18U3 znxB8ZR0TT{)T64RDt!+yFgp!JXGP0|It0Hz2Em#YfRv>O>8A?J=Sz!nq<|{&mW=?~ zDQT{S6PH0|jwy37t+0Ob6izz)JdRlNEUbyk>-K?}FOT=Dj9SuS_0nTFd+A^D?Bo83 zTkicXcW=IuZoZd(Dl;&#`LI;_s?e;OH9quf?*XuV0O$Qh0j~HWKpA|PXV4&b2zs z@W5<)dtovIRZ@gvsi$^s;v05(XwF3$lJ;wzYfE`46fnT7>!qt|hWHRE>yQP)i8= zVbC|O{Ud6%kwGcch>>|pE-=?cW;TDR0lE5Nw7l66lr-zIYT3bj^ujCn$b0{ZO;gwK z#}}W(*T3~in$6ZCpbB98pftPTo;!K>U;H*7_}t4m;;4i9#^2t`pS<=jsnx198);d3 z-M6Mx{7-c0A-jhJQ`5mBy8TBnfbr2~sER5E5oz}=so34cg)GYarRWi8w#W$%G{?Z*4xDb#LX1B1 zg!4G{m~*)H_J8J^SNt`XU-fxjea`>p_$Qyn*Dn18*WdPCp8oWw^XU)%kfRQHMgfQh z1j_ua@O4G%QK;&YH3Y9(q!hkgOUCkcVH5N0Ug(EPX%H6qCfPqg))qrd#ec^47dBu- z=sRkmjGS>3K(tfRTo;zCXO-74hV;y1!vCN}v|w?AWR$YpYXs@Dr?iNLKD9s|2)0aHY!TKTYhwMI z7b#54h!H6rUU9+xnL$g6h?t?Li5guXPY1g)$bI$~rHWP%QkYJ6Y-U^0C(@*$ruN2*zn0QRBOeVpgMFbT%k!Dn1*u#%J^y)enX1K;0~ z%3Q zP(b%}P!Loj6M{v96(Qa~K!bq-V-P89U_K)0zHC_F#L==3IPh2hHG6&?rxvQ%|EljR zfGIDyu=rIrl1dyjuMfwuh?pXZmARwNZ?GbW;5BH5D#nN|WbGm+UGAh7_AcG>4&|{0 zrg?k@h8zm!0A|5Zo%X%g|2tBPKHHB6`~4h?I@bepDe6?^f8w zBnzfOf|j{kR5m6BLRr0$!RZ$PHSk*)tyjkws*DpyHIiiL*8o(Smx(OKT7@D&Y3OI^ zEUMtKa2*SLjt(eJsZsLsrgV`A+xL(~JN#JU6+L)gCe%VuSNbCzTr09w>eZ#779SKV z)m)@#TNVy|q3Tz_U`^7MY`l}`GU~OlQi|*cprX?tm@tIV+8kOGkaa=9Y<{N|RZ)ns zHlgnz2S%qwK9wXjest~Ux$YNNA{0?6Xpv{_mqYt8D`g&7Yb~>lX+HP&AK<=+Zl_kO z6a2g`^4=9W92GQ3e9Mk6?DlzlkIM`iOzwk*5L81TcuyYkI-<3^@49_+^XC7&N}SL1 zh$kIBxb`9+v}acfV?FQ zN#04eHe0*j{pz=zOj3#EHLrT3e)O;3xqpCWrl$e)PcD9jQ4P-8_zyZg^M7i|*kOuj znsvlwNUsy5+01^P_sqMOjXjxKwHn4)$87t-MWZZ*5Dbit4|D9vL+spsJ0JPd?{Ms) zFW^<@yqjZ=IvG%$ck_Cu9|b8CvoV%5P5IZWzs>i4`~`N+-p`7a6RbLHJ;nxtSB#Mb z`1I552=9DrYWFNZ{-=Mt;SVo5@3cmv`IZT@@>#~zCe-=qENxsn+uHfL`e?SbT3IQ_ zt~e)Lcirs_S5^X#?hDYmgV%8QQDe+?>*1&0e^BnaeZz(&D~3<)#QuUL8h*NlXgtr| z&a{_Z)o9FK_U5<0!E3N|yY1P2g%J9s*?!zF78+NSb%!ix)tbQ09oO&|U$~Bwk35^- zec9VN^xz{043e^xD}WEmzh8d^-~Pd8**bEfd+I?HuO~n4SksoN8LRPUy={E<@BjRMUh?X71Xaey>t^$&Eq2B7)u_r$ z|IQwpG52G!F$J5fRo1LqLB7iKz_!bI@27skX~+Eze|Y}IBuRp?hR7z|eA~7B<99#7 zrX4r2a_tCDUb_}Cg)g!OEVeJ5AEVRyb!9~f4OL68qhZZRP0l*>MdkxvxXeGWx$T>+ zI^X!wnYQDnwK9?i)j)eLXJU2Cw>~>R?72@MecvT7;h~2gATow_cbc)$Ws+xNSB{++ zo^tTp^y*(-Y-XF=$XyoBJnMN9+p!Qrep1)%ym_v7zZH{;u~L>T=4XP!f^?uC4ULUR zdl`>x+DVkHVd;|9#N*oubBFQEyRT#UK^0c7T}l)eEEFS)qvZl%f>#I;iCwAWb=kW0 z(e#lm51o?d>D|kgtTscVQCNDAXMAjxSX&{_Qf)T((wMHWWLbz6WpPXP0(3_SBWwI19Vx?$i6WUqP$4O|wjNbYzst$z{58`cBhm z&F(N-KeXFzo#aC|6BbC($As#B8X=}ggpDyQUp|Q>9cG$47#>TQn%T(eHA`5se7KnZ zF_dj_6NN0xS-oZ%Nj%PTpK=MC zw*4IMGls_v)mokI)Dph*pD<)7prEF|j6I$2=XF=Ua3z;BN^yt&H@G%7& zWnL7*e0S9svjSP>kuc;VCbZXUN3G7D8`G@!Qnjt=p=7yC?QH0tsa@RsuPMLj@wf-c z|LV)H$Auga+MTAU#>)eeuh_L`!qC=Ls|{m}Cy)|w6#aP}w6_-ya~9LF z{dQAPa-|&ME858gIK=}lVK7MLT~Oye&UM9y?0X=8Qmvb*)=X}iv%Me)Gqav+FWdGT zuk&#ak~?2Kzf}w)xZuKGx%+`1?Ecoq?*H@EjFm%C6OT577vWKoJB z$A^sIasm!5TGOFFGmHkKNTE7KW3nveUq1bt4Uj)!1_6BJ zU6=EoPrjVdk+pQX+j-GTpQS&&^43tT43kuRlvE8fGdYc!1|m)3WCuwlqB>NeQc0** zYE&wTj*QpuPLfJ)j2$(`sI@k@oR!^9d(3&Kd6r3*<)pooPNzq=)1%#NQ;nAsF*5VR zOYXQC;B^4*Sik--jy?J`uDj-! zSep}9YT4*SOrT2I6MF4H+EZFRPh+}^b4@i8OYk9Y&86o*Y4(`Ax1W4#tX^5m6LjZPb61LF2?qBy?B_?1YE!nej)R5c8qG`2s_uF`Cu+ z`X_$#2Ur#!Pw0WVd60fYG8A#y55LDyJ!Yt$5G6Efb<6Nr%-BTC_|llMB?%*A5%rOX z`fyBbD5g@4Ns^)P;F7zjv{t6u?k1J0kR*v#Dhair3iXjH^^qz=!xd`vm`W`oN-Wj_ zNML7~t!rRbc|9I0mUjpEgOJ9XGg2;vjDZ;b~V638P!uVuejytg~ci-I(n9#M6AR=mQG0YjoLKGPgFp(jS4Pn7UJR)Et z-8ZsqWsRLXri#f_BSeWIat3P+Q3Td1#ws={2CLGpDdvrgP#KD7 z&SnaR^#_Bsq;Xt;kyI^}iX~1WYzdHamc$tH1#Mz6f<2(WuH^s%^yXK78Gyg}{;LNA zoW%$)#R!a0wv&q%qj%+~i3^k&1jY!ljfi82Vr$~W5G6u&$Wp0VqR3*bDIWLE4Y64K ze08)CmeFrq2>QGFSDAk%Rhs}$r*rJVNuoO(~AJ!PG{T~d_i(dQ;OsQc+q&twwlJV|`Bv$N}R$K=uxCPyc!RBBXfRjRcZi5yAQk|YKj*>d`|Xw~ckP!!SW%^gsH z4oDR1AJt?S?}B;<&e0TPFsNAMQwxCt69o{uA>=K^qd1+MST3tptj8GHnN(upgb*ji zq`i%b+{{=o7ByB78@8!x_Gs&uqLOKv_6{gO2b4jbc8YT@EEzqBp!v_c?XXFx9Dq zb{!I|Nu<;4kZbyl3*LDg#$f7`nKwT9p9|2|t&fmAe64Of^c3TKI%Q?_^+uxaj|?xL zw5U4G#YlpQDngbfM)q85qt=DJt|y5nG){VqE;V8I&WBCAH+|pe@QT+};^BWB8(lGB zqe!DD7GqI`0pj%h;hm z;n?F&(5YS1X4{T?Hf24&;~ic?rDC*Zgk;*ga9b~Je`?R%gBQy3U5$!cEi-#s>T+d# zWH}Mbv|6p1R<`wiiPB32Gn*u}EQxC^LGJIR?H}~g*|#s5IQY`pJzcYP=0El5RWIen z8*k;5(^qldFJ}(enhxl1pnB_vPi5uu!@1|-9|Owd=%J>WPwQ>dkLW|!5WV<$<73Xb z{0CRJT1OpP567)vYea*J7*!3_M-nC`C)l*@dKzsw^5El5v)K$c-nf?sZ)?i>Gc=yt zg{xL=urnv{!j}h=hh{KFAjIS@=h9C!xJWW@nmR0Ns^Wrk)72_X;&VM@qLNZyn;-h1m-)j4PH{!#b7fObo=TF+Xw z)_t{JRqgNW{e9m)=MZ*rJl6A%IHK!gcqM)U)>TjF8ytMTRLpN39jns9J?@oOe47l4 z1dw7d06;*nuu_+V$6Qs4K>#PCRHVFExV^duw#+4>?(j) z*AHP%*L5@qEpM#j?*@5nOq@HlBR^5M@^_J9)U!&MV7N?QAAfFbdJaGWPgRws)6~+R z-NrZmx0V*7Od$!{dkY1w*wll3j_1b``)C%NHS6N>yBU998+?y%)4SU2YA} zA%$NKSGVi)4!sVH=l1lla~XcBLKrfnO2~CXCa>$GlX_p?dYsM`3%)hidhs()bzlDL zr7zEG>kK#SwpW`1YyR;!pa1&-`0t?)V)3FnK7V~pCo%hYIQUj+f?7Oh#@-(|a?XKA zr;?n->{Mx?{fOYn3n4;UD5a5kBx9Z>DQ1SETOzUjjZ`HF0&e`i-6T<17qM|ec7?fBc z;0k&%hz+o?+KMG>1)PSqUSqTR@!luCa_YiGo3TkPUp^w8T}r$YFf$gPyy|ZYU`={9 z3c4MNG|FgE6ETxVuw_~St-lefEMgF+NTdzZD8wWJ0s<69@frs3IxH*_A4`(dIZhJT z)TwApTxD36oOSS>-?;UKV^n{)k!mFpfWRL3*Rxl@V_bS?f`4@I!*C2lX%(H}L=`CT z0BxGtLQ@`yX#0U)3`bO@9NHBjM^*Gw64K=(1QdKEK*p+u<&qTSoUzKhfO`4Wz>@z)uK^Aw6m!k{QPq@f~bd?t)6?} z1bJ=k7!E&fDxUmP-(QVQ?F@i8a-dv4%Gg64haX`yNv^E%Ea<=YJ4SdqH4e{1~Sk?qbu|M;*f zbqpYh(szvQ9ev=Amrj8q0@9+|SbxTQw)=Lr&Hm@e_hY2mXXchai5dBmusvCYf%>!X zK>#8PKtTjx&+y*EIR|SkT*`=|2>VPq0kb=fM~F#u|GG<9sj?zc-#-8BqmC*-%N5t% z3v1um65bJjO9}`JV*qzjs9O-*vCma1qq%z0=Thg*sPtm8u4CiyU5H^JCTU0mH2?_M zGn{jci{Y)p`kvomV&MR6*th{{opqpyh3Ux4m)!GykUSWKMk@t>>SyNTwj2L%XZ{Nn z>Xv_j0zm+HA-wSFCJ4n;tqux{Z<*M!+ghP`mh}};q{({$d;y{&M#518E{~{H2e(KJ+~I! z(QA0${wLzt8F#!r1DoX%bYVIIT!6Y1 zJctN_2;>9AahjEz5Cm@p&;a2*ykj`$0UrSH$QJ^n3By@S!UCJh5jS2|HIuruyXF34 zRDv0v?9yEOYVFWR0jftU~yzAQIFKu_~N!vxLSpD zIxEmBpAwnRC3gEyg%Yon(xeEA2t*11fhfB~8i^HvMIcQOp5dF9V>l7DZ+tS31TC`?6B2!P-{Ai`NS%8sfWFCh_# z2!sJ<26G0;dxnUBNT3Wrj-j+52u(2zc*4ieoxAxfi_hFMD8$Dt*t4hHU+Z6a>y4`) z-dgRJ&wT2GICjQeJ24|X4P=?_kA+q7QY|L{F) z>E#!CslTU!sFuPzhBSJAZ4?NAGFdr600O~tQ;`JDd9Vkv#1X>KptUV8Q)hHgp)4=n zf7k1aF8a|v_e`5zKCDz~Nuz3ARYohScS~Kpws!0=fL0XBO0`T-YycqYn}yY@ZV?g2 zlnDnM86|@t(hM=mC6W&G)j}8N_Fwtr#>s`2R4qD9xuZ_o&BU=o5&`up5LX5DnnxN7 z(!|510_PdtJ9u$`Fq8(A0!#>KLogu_1c1^6@0sdRitRngzWe^er2PiAMIqpkE7Xj4 zqSD0i@PNn2cHaUJ;)tnGEM^?Y2OX%5fOPNhi#0IY;la!zy_Gm@B#Lw#(Mo_^%= znu44{7-|HeMy{k$Y%?&%Kq&>KG_*4CK85oRio&-@sE4y2Y3h;2*%j9ragC&24JaC` z`!uzlS%RjYWaMg=C2{s!Ax`QU03w3c0Yn(2{;azYNJdU3mn!CrxI&4*JCC^T#}y}2 zA`QzFa=EsmQ0RGvftbU zQ>{c90A|-98)Xj4nT0b0yyJf8t%xIraRd)QQ&z*I6o?d@PmrXe$eT_q-0f@}wCCAq zEl$Ss8*j&&jkjWZGSHg|Kx;aNPWFa9~0$jGSbWOU>XjH6xDc0w(iTEtcE6dO3#5TC{ScvW=I(b=Nv*)M5VtC-7j0@OiMO};u|K_aA+ua&Wy|G z0O?p6>sL7#>4bE^@$`cedW&;pHYGbq)cE=gVUygN~?!_hF|0teV`9}~ml+s!M!x_o7(s*;* zCVc-VU&If8em*{M)JJgGyiZ}QGSUDFC<*}~u!v@1)yzPXBMKoDa!^zNBmjHLN~pCo z86Fi-BjwE?n=_NmIA?K7liV3M;v_;xTNl23?ow=ga}EA*-%{NFA9)Ej6(HYiJs85m`CL9ANNz_7Wfw>}W{H&o zhy)^>0cdZXg2B-WvL1};5P}FJQvqpeDFK{}*W_F4Q?l}yJ$-+C<-Fxs|HfnZ?SC!9 z1CQT|j+S@fx%Cg={YRgO&z2Z>i~diz*O?*BnAkIbU{QcAP}Z33z=$xNR5+KgfMs35xDG&i*Vb0Kg44zZ^zZ& zc>uXE4-p1))`B-&1MC}R(r5-n0MAaC)!S!3D{E#4D+*c5&ME_7bO-`vnhuJ0%rG^y z*MSI{U{o_J!WqGvFVAW?BdzlmMhBQRZ2?B+Z$U21!?_gN1W=^F4PGQ^jHW1{`Cb9o zLx~8DXBkZ|AhymqMH-oHxQxU~>&7f9WD8o#QYOvxW(yKUdVH3~XXbxdwyFjxt+lAv zZaWSag=@ z=8P$&K}1lbY?iX@ee4?s0wKUBJ964=H$0STaA3T?n~R$9CTTo$W*+}*eEXdRL>ghx z0ulvhz0Z>9A)>e;5?WE{3wn~(Mxl@k5Z8vY60)g)Z7AM`NMj7L0~nqG?*MV$0cj#* zg?t%+Zb&IZs~iSLH{&P2T8vGbH$W*3fW~XQxiirODk4xy!&-;m-f<)T^zbbx6J$2bI!+g&Q(Tb>mTpfw(MhPbbX*24YD+xC~pjzlg4B?I0>ZG1eo;$GZ-@3q)Ayc(TT%9uB8CcO9K>t$rJ4+!Ga!{2blb3*{mJ?rAx;e_@g zW=}sb8SURhsg02gkr06Qo;))H{@ois2J0*E-a_ku;$#FwS}J2z^z{y5!Tf{u-m?$! zW7XmPw~xK}Y|U*DV-zVxM2Z?xn6(ROnxdy?JIXW%Qzy=WHv^~-wPRiPJ(xPPjP?m_ zU@!3AH)Mt2y@NuFGk%)cvT4gxH~;vV!~gKarE2vv&(f8P@Ag++xft8kE4o&xvN3^V zhgKTPzIFc&iMV*lvDmVC6ReMr3kzh>qKs;xT2uwI^KCQwiCuxGcI>;nX1mYH6|D_I zV?e$kJ`M5;L7M=zY84}cF$$#|Dx-Bwp4xT+U;&*D<@0j8tMo%x5%Tg?~5R?T=3cv%@lt|5rbf!U~$$KWHR3?Xk zu&I|c5%P}XIIb@4XrJ=aC`y!W*}^Y88R7A}hVa+MJ05U+?`P+M8rvjM6j3edroqA2 zxm4Kuj7oLnm$`fxbar$}K3^bGfWT*$Wd5R*hEfJ52%w-LATTp*YNZ}ksTNg7J=bnd z-Pkqa!RO=D(kYB&|Wjqg0rvF8kum{NfucTYqrP z`5U%u**G!G6{S=zQMp`3K3_yWUyzoz^2Q(tmC>3+s5Oq`4(BY=)S@2MFgiNo;u?&k zg`0}`37-~9P0%vHiA@+H2!cEy8o#>wuOImB)G_Pj7yce!TXGVt#ORn z(=jFB*q2Zp6$}lGp?}+$um^#4QjKaSEI75c$z6AAYL348>#uKEccl>fFbuUZ0R$d} zZ~}6sT!$|qC`YPurgrtQ76=RC$YS~T-}$t1r_YJ6x+vSq`|xwOl@gGLU>BhcFBv~FMie-ahi$Rz-LINpu0Hu~Za`}LYEdk2y0hQVU6k7}mB|~9e!x(}I6ii4k;VvE0 z?|KG+Oj%0Bi3m(dlp;$c5Cu`1CM@ypLV(%bX9 zr_WVSKiJ10x1!vdPr`gLXF?@f1r%~#N8UkH?XgO1p%e>?-DLnfb z=86?7j~f~sKElT8lSw^&-{|PJ_Z)D@o-cw6^yvN1aY@hS38meM!r|M7s_XW%93Aak za$IUh=gpcu=jzR`4$^18^F8_11#h4-#Jd^}{s&{CB`(>qac=+s03~!qSaf7zbY(hY za%Ew3WdJfTF)=MLIW00WR4_R@Gcr0eGA%GSIxsM(l48sN001R)MObuXVRU6WZEs|0 vW_bWIFflPLFgYzTHdHV-Ix;spGd3+SH##sdcWUue00000NkvXXu0mjfB?gph diff --git a/sample/src/main/res/drawable-xhdpi/ic_launcher.png b/sample/src/main/res/drawable-xhdpi/ic_launcher.png deleted file mode 100644 index 71c6d760f05183ef8a47c614d8d13380c8528499..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 14383 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 diff --git a/sample/src/main/res/drawable-xxhdpi/ic_launcher.png b/sample/src/main/res/drawable-xxhdpi/ic_launcher.png deleted file mode 100644 index 4df18946442ed763bd52cf3adca31617848656fa..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 19388 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 diff --git a/sample/src/main/res/layout/activity_no_nonsense_file_picker.xml b/sample/src/main/res/layout/activity_no_nonsense_file_picker.xml deleted file mode 100644 index 83cb96b..0000000 --- a/sample/src/main/res/layout/activity_no_nonsense_file_picker.xml +++ /dev/null @@ -1,215 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -