├── android-studio-project ├── Root-Script-Runner │ ├── proguard-rules.txt │ ├── src │ │ └── main │ │ │ ├── res │ │ │ ├── drawable │ │ │ │ ├── ic_launcher.png │ │ │ │ └── ic_open_filepicker.xml │ │ │ ├── values │ │ │ │ ├── dimens.xml │ │ │ │ ├── strings.xml │ │ │ │ ├── colors.xml │ │ │ │ └── styles.xml │ │ │ ├── values-zh │ │ │ │ └── strings.xml │ │ │ ├── values-ko │ │ │ │ └── strings.xml │ │ │ ├── values-ja │ │ │ │ └── strings.xml │ │ │ ├── values-zh-rTW │ │ │ │ └── strings.xml │ │ │ ├── values-cy │ │ │ │ └── strings.xml │ │ │ ├── values-ur │ │ │ │ └── strings.xml │ │ │ ├── values-et │ │ │ │ └── strings.xml │ │ │ ├── values-ms │ │ │ │ └── strings.xml │ │ │ ├── values-nb │ │ │ │ └── strings.xml │ │ │ ├── values-ne │ │ │ │ └── strings.xml │ │ │ ├── values-da │ │ │ │ └── strings.xml │ │ │ ├── values-de │ │ │ │ └── strings.xml │ │ │ ├── values-hi │ │ │ │ └── strings.xml │ │ │ ├── values-hr │ │ │ │ └── strings.xml │ │ │ ├── values-id │ │ │ │ └── strings.xml │ │ │ ├── values-mt │ │ │ │ └── strings.xml │ │ │ ├── values-nl │ │ │ │ └── strings.xml │ │ │ ├── values-sv │ │ │ │ └── strings.xml │ │ │ ├── values-th │ │ │ │ └── strings.xml │ │ │ ├── values-pt │ │ │ │ └── strings.xml │ │ │ ├── values-ro │ │ │ │ └── strings.xml │ │ │ ├── values-si │ │ │ │ └── strings.xml │ │ │ ├── values-sr │ │ │ │ └── strings.xml │ │ │ ├── values-vi │ │ │ │ └── strings.xml │ │ │ ├── values-ar │ │ │ │ └── strings.xml │ │ │ ├── values-bs │ │ │ │ └── strings.xml │ │ │ ├── values-el │ │ │ │ └── strings.xml │ │ │ ├── values-it │ │ │ │ └── strings.xml │ │ │ ├── values-sl │ │ │ │ └── strings.xml │ │ │ ├── values-cnr │ │ │ │ └── strings.xml │ │ │ ├── values-cs │ │ │ │ └── strings.xml │ │ │ ├── values-fi │ │ │ │ └── strings.xml │ │ │ ├── values-fr │ │ │ │ └── strings.xml │ │ │ ├── values-he │ │ │ │ └── strings.xml │ │ │ ├── values-lv │ │ │ │ └── strings.xml │ │ │ ├── values-ta │ │ │ │ └── strings.xml │ │ │ ├── values-tr │ │ │ │ └── strings.xml │ │ │ ├── values-es │ │ │ │ └── strings.xml │ │ │ ├── values-hu │ │ │ │ └── strings.xml │ │ │ ├── values-uk │ │ │ │ └── strings.xml │ │ │ ├── values-bn │ │ │ │ └── strings.xml │ │ │ ├── values-ga │ │ │ │ └── strings.xml │ │ │ ├── values-gu │ │ │ │ └── strings.xml │ │ │ ├── values-sk │ │ │ │ └── strings.xml │ │ │ ├── values-te │ │ │ │ └── strings.xml │ │ │ ├── values-fr-rCA │ │ │ │ └── strings.xml │ │ │ ├── values-pl │ │ │ │ └── strings.xml │ │ │ ├── values-ru │ │ │ │ └── strings.xml │ │ │ ├── values-bg │ │ │ │ └── strings.xml │ │ │ ├── values-lt │ │ │ │ └── strings.xml │ │ │ ├── values-ml │ │ │ │ └── strings.xml │ │ │ ├── menu │ │ │ │ └── activity_main.xml │ │ │ └── layout │ │ │ │ └── activity_main.xml │ │ │ ├── AndroidManifest.xml │ │ │ └── java │ │ │ └── com │ │ │ └── github │ │ │ └── warren_bank │ │ │ └── root_script_runner │ │ │ ├── MainActivity.java │ │ │ └── helpers │ │ │ └── Shell.java │ └── build.gradle ├── libs │ └── MaterialFilePicker-library │ │ ├── src │ │ └── main │ │ │ ├── res │ │ │ ├── values │ │ │ │ ├── attr.xml │ │ │ │ ├── colors.xml │ │ │ │ ├── styles.xml │ │ │ │ └── strings.xml │ │ │ ├── drawable-hdpi │ │ │ │ ├── ic_apk_box.png │ │ │ │ ├── ic_pdf_box.png │ │ │ │ ├── ic_word_box.png │ │ │ │ ├── ic_zip_box.png │ │ │ │ ├── ic_excel_box.png │ │ │ │ ├── ic_image_box.png │ │ │ │ ├── ic_music_box.png │ │ │ │ ├── ic_video_box.png │ │ │ │ ├── ic_document_box.png │ │ │ │ ├── ic_drawing_box.png │ │ │ │ ├── ic_folder_48dp.png │ │ │ │ ├── ic_certificate_box.png │ │ │ │ ├── ic_file_gray_116dp.png │ │ │ │ ├── ic_powerpoint_box.png │ │ │ │ └── ic_close_white_24dp.png │ │ │ ├── drawable-mdpi │ │ │ │ ├── ic_apk_box.png │ │ │ │ ├── ic_pdf_box.png │ │ │ │ ├── ic_word_box.png │ │ │ │ ├── ic_zip_box.png │ │ │ │ ├── ic_excel_box.png │ │ │ │ ├── ic_image_box.png │ │ │ │ ├── ic_music_box.png │ │ │ │ ├── ic_video_box.png │ │ │ │ ├── ic_document_box.png │ │ │ │ ├── ic_drawing_box.png │ │ │ │ ├── ic_folder_48dp.png │ │ │ │ ├── ic_certificate_box.png │ │ │ │ ├── ic_file_gray_116dp.png │ │ │ │ ├── ic_powerpoint_box.png │ │ │ │ └── ic_close_white_24dp.png │ │ │ ├── drawable-xhdpi │ │ │ │ ├── ic_apk_box.png │ │ │ │ ├── ic_pdf_box.png │ │ │ │ ├── ic_zip_box.png │ │ │ │ ├── ic_excel_box.png │ │ │ │ ├── ic_image_box.png │ │ │ │ ├── ic_music_box.png │ │ │ │ ├── ic_video_box.png │ │ │ │ ├── ic_word_box.png │ │ │ │ ├── ic_document_box.png │ │ │ │ ├── ic_drawing_box.png │ │ │ │ ├── ic_folder_48dp.png │ │ │ │ ├── ic_powerpoint_box.png │ │ │ │ ├── ic_certificate_box.png │ │ │ │ ├── ic_close_white_24dp.png │ │ │ │ └── ic_file_gray_116dp.png │ │ │ ├── drawable-xxhdpi │ │ │ │ ├── ic_apk_box.png │ │ │ │ ├── ic_pdf_box.png │ │ │ │ ├── ic_word_box.png │ │ │ │ ├── ic_zip_box.png │ │ │ │ ├── ic_drawing_box.png │ │ │ │ ├── ic_excel_box.png │ │ │ │ ├── ic_folder_48dp.png │ │ │ │ ├── ic_image_box.png │ │ │ │ ├── ic_music_box.png │ │ │ │ ├── ic_video_box.png │ │ │ │ ├── ic_document_box.png │ │ │ │ ├── ic_certificate_box.png │ │ │ │ ├── ic_close_white_24dp.png │ │ │ │ ├── ic_file_gray_116dp.png │ │ │ │ └── ic_powerpoint_box.png │ │ │ ├── drawable-xxxhdpi │ │ │ │ ├── ic_apk_box.png │ │ │ │ ├── ic_pdf_box.png │ │ │ │ ├── ic_zip_box.png │ │ │ │ ├── ic_excel_box.png │ │ │ │ ├── ic_image_box.png │ │ │ │ ├── ic_music_box.png │ │ │ │ ├── ic_video_box.png │ │ │ │ ├── ic_word_box.png │ │ │ │ ├── ic_document_box.png │ │ │ │ ├── ic_drawing_box.png │ │ │ │ ├── ic_folder_48dp.png │ │ │ │ ├── ic_certificate_box.png │ │ │ │ ├── ic_powerpoint_box.png │ │ │ │ └── ic_close_white_24dp.png │ │ │ ├── drawable-night-hdpi │ │ │ │ ├── ic_apk_box.png │ │ │ │ ├── ic_pdf_box.png │ │ │ │ ├── ic_zip_box.png │ │ │ │ ├── ic_excel_box.png │ │ │ │ ├── ic_image_box.png │ │ │ │ ├── ic_music_box.png │ │ │ │ ├── ic_video_box.png │ │ │ │ ├── ic_word_box.png │ │ │ │ ├── ic_document_box.png │ │ │ │ ├── ic_drawing_box.png │ │ │ │ ├── ic_folder_48dp.png │ │ │ │ ├── ic_powerpoint_box.png │ │ │ │ └── ic_certificate_box.png │ │ │ ├── drawable-night-mdpi │ │ │ │ ├── ic_apk_box.png │ │ │ │ ├── ic_pdf_box.png │ │ │ │ ├── ic_zip_box.png │ │ │ │ ├── ic_excel_box.png │ │ │ │ ├── ic_image_box.png │ │ │ │ ├── ic_music_box.png │ │ │ │ ├── ic_video_box.png │ │ │ │ ├── ic_word_box.png │ │ │ │ ├── ic_document_box.png │ │ │ │ ├── ic_drawing_box.png │ │ │ │ ├── ic_folder_48dp.png │ │ │ │ ├── ic_powerpoint_box.png │ │ │ │ └── ic_certificate_box.png │ │ │ ├── drawable-night-xhdpi │ │ │ │ ├── ic_apk_box.png │ │ │ │ ├── ic_pdf_box.png │ │ │ │ ├── ic_word_box.png │ │ │ │ ├── ic_zip_box.png │ │ │ │ ├── ic_drawing_box.png │ │ │ │ ├── ic_excel_box.png │ │ │ │ ├── ic_folder_48dp.png │ │ │ │ ├── ic_image_box.png │ │ │ │ ├── ic_music_box.png │ │ │ │ ├── ic_video_box.png │ │ │ │ ├── ic_document_box.png │ │ │ │ ├── ic_certificate_box.png │ │ │ │ └── ic_powerpoint_box.png │ │ │ ├── drawable-night-xxhdpi │ │ │ │ ├── ic_apk_box.png │ │ │ │ ├── ic_pdf_box.png │ │ │ │ ├── ic_zip_box.png │ │ │ │ ├── ic_excel_box.png │ │ │ │ ├── ic_image_box.png │ │ │ │ ├── ic_music_box.png │ │ │ │ ├── ic_video_box.png │ │ │ │ ├── ic_word_box.png │ │ │ │ ├── ic_document_box.png │ │ │ │ ├── ic_drawing_box.png │ │ │ │ ├── ic_folder_48dp.png │ │ │ │ ├── ic_certificate_box.png │ │ │ │ └── ic_powerpoint_box.png │ │ │ ├── drawable-night-xxxhdpi │ │ │ │ ├── ic_apk_box.png │ │ │ │ ├── ic_excel_box.png │ │ │ │ ├── ic_image_box.png │ │ │ │ ├── ic_music_box.png │ │ │ │ ├── ic_pdf_box.png │ │ │ │ ├── ic_video_box.png │ │ │ │ ├── ic_word_box.png │ │ │ │ ├── ic_zip_box.png │ │ │ │ ├── ic_drawing_box.png │ │ │ │ ├── ic_folder_48dp.png │ │ │ │ ├── ic_document_box.png │ │ │ │ ├── ic_powerpoint_box.png │ │ │ │ └── ic_certificate_box.png │ │ │ ├── drawable-v21 │ │ │ │ └── bg_clickable.xml │ │ │ ├── menu │ │ │ │ └── menu.xml │ │ │ ├── drawable │ │ │ │ └── bg_clickable.xml │ │ │ ├── values-zh │ │ │ │ └── strings.xml │ │ │ ├── values-ru │ │ │ │ └── strings.xml │ │ │ ├── values-cs │ │ │ │ └── strings.xml │ │ │ ├── values-es │ │ │ │ └── strings.xml │ │ │ ├── values-sk │ │ │ │ └── strings.xml │ │ │ ├── values-de │ │ │ │ └── strings.xml │ │ │ └── layout │ │ │ │ ├── activity_file_picker.xml │ │ │ │ ├── fragment_directory.xml │ │ │ │ └── item_file.xml │ │ │ ├── AndroidManifest.xml │ │ │ └── java │ │ │ └── com │ │ │ └── nbsp │ │ │ └── materialfilepicker │ │ │ ├── filter │ │ │ ├── HiddenFilter.java │ │ │ ├── CompositeFilter.java │ │ │ └── PatternFilter.java │ │ │ ├── utils │ │ │ ├── FileComparator.java │ │ │ ├── FileUtils.java │ │ │ └── FileTypeUtils.java │ │ │ ├── widget │ │ │ └── EmptyRecyclerView.java │ │ │ ├── ui │ │ │ ├── DirectoryAdapter.java │ │ │ ├── DirectoryFragment.java │ │ │ └── FilePickerActivity.java │ │ │ └── MaterialFilePicker.java │ │ └── build.gradle ├── gradle │ └── wrapper │ │ ├── gradle-wrapper.jar │ │ └── gradle-wrapper.properties ├── settings.gradle ├── constants.gradle ├── build.gradle ├── gradlew.bat └── gradlew ├── .etc └── test-scripts │ ├── 2-change-directory.sh │ ├── 1-local-variable.sh │ └── 3-update-file.sh ├── .gitignore ├── package.json ├── README.md └── LICENSE.txt /android-studio-project/Root-Script-Runner/proguard-rules.txt: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /.etc/test-scripts/2-change-directory.sh: -------------------------------------------------------------------------------- 1 | cd /sdcard 2 | ls -la . 3 | -------------------------------------------------------------------------------- /.etc/test-scripts/1-local-variable.sh: -------------------------------------------------------------------------------- 1 | foo='bar' 2 | echo "hello ${foo}" 3 | -------------------------------------------------------------------------------- /.etc/test-scripts/3-update-file.sh: -------------------------------------------------------------------------------- 1 | filepath='/sdcard/Download/timestamp.txt' 2 | now=$(date +"%T") 3 | 4 | echo "Current time : ${now}" >"$filepath" 5 | -------------------------------------------------------------------------------- /android-studio-project/libs/MaterialFilePicker-library/src/main/res/values/attr.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | -------------------------------------------------------------------------------- /android-studio-project/gradle/wrapper/gradle-wrapper.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/warren-bank/Android-Root-Script-Runner/HEAD/android-studio-project/gradle/wrapper/gradle-wrapper.jar -------------------------------------------------------------------------------- /android-studio-project/settings.gradle: -------------------------------------------------------------------------------- 1 | include ':Root-Script-Runner' 2 | include ':MaterialFilePicker' 3 | 4 | project(':MaterialFilePicker').projectDir = new File(rootDir, 'libs/MaterialFilePicker-library') 5 | -------------------------------------------------------------------------------- /android-studio-project/Root-Script-Runner/src/main/res/drawable/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/warren-bank/Android-Root-Script-Runner/HEAD/android-studio-project/Root-Script-Runner/src/main/res/drawable/ic_launcher.png -------------------------------------------------------------------------------- /android-studio-project/libs/MaterialFilePicker-library/src/main/res/drawable-hdpi/ic_apk_box.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/warren-bank/Android-Root-Script-Runner/HEAD/android-studio-project/libs/MaterialFilePicker-library/src/main/res/drawable-hdpi/ic_apk_box.png -------------------------------------------------------------------------------- /android-studio-project/libs/MaterialFilePicker-library/src/main/res/drawable-hdpi/ic_pdf_box.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/warren-bank/Android-Root-Script-Runner/HEAD/android-studio-project/libs/MaterialFilePicker-library/src/main/res/drawable-hdpi/ic_pdf_box.png -------------------------------------------------------------------------------- /android-studio-project/libs/MaterialFilePicker-library/src/main/res/drawable-hdpi/ic_word_box.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/warren-bank/Android-Root-Script-Runner/HEAD/android-studio-project/libs/MaterialFilePicker-library/src/main/res/drawable-hdpi/ic_word_box.png -------------------------------------------------------------------------------- /android-studio-project/libs/MaterialFilePicker-library/src/main/res/drawable-hdpi/ic_zip_box.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/warren-bank/Android-Root-Script-Runner/HEAD/android-studio-project/libs/MaterialFilePicker-library/src/main/res/drawable-hdpi/ic_zip_box.png -------------------------------------------------------------------------------- /android-studio-project/libs/MaterialFilePicker-library/src/main/res/drawable-mdpi/ic_apk_box.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/warren-bank/Android-Root-Script-Runner/HEAD/android-studio-project/libs/MaterialFilePicker-library/src/main/res/drawable-mdpi/ic_apk_box.png -------------------------------------------------------------------------------- /android-studio-project/libs/MaterialFilePicker-library/src/main/res/drawable-mdpi/ic_pdf_box.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/warren-bank/Android-Root-Script-Runner/HEAD/android-studio-project/libs/MaterialFilePicker-library/src/main/res/drawable-mdpi/ic_pdf_box.png -------------------------------------------------------------------------------- /android-studio-project/libs/MaterialFilePicker-library/src/main/res/drawable-mdpi/ic_word_box.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/warren-bank/Android-Root-Script-Runner/HEAD/android-studio-project/libs/MaterialFilePicker-library/src/main/res/drawable-mdpi/ic_word_box.png -------------------------------------------------------------------------------- /android-studio-project/libs/MaterialFilePicker-library/src/main/res/drawable-mdpi/ic_zip_box.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/warren-bank/Android-Root-Script-Runner/HEAD/android-studio-project/libs/MaterialFilePicker-library/src/main/res/drawable-mdpi/ic_zip_box.png -------------------------------------------------------------------------------- /android-studio-project/libs/MaterialFilePicker-library/src/main/res/drawable-xhdpi/ic_apk_box.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/warren-bank/Android-Root-Script-Runner/HEAD/android-studio-project/libs/MaterialFilePicker-library/src/main/res/drawable-xhdpi/ic_apk_box.png -------------------------------------------------------------------------------- /android-studio-project/libs/MaterialFilePicker-library/src/main/res/drawable-xhdpi/ic_pdf_box.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/warren-bank/Android-Root-Script-Runner/HEAD/android-studio-project/libs/MaterialFilePicker-library/src/main/res/drawable-xhdpi/ic_pdf_box.png -------------------------------------------------------------------------------- /android-studio-project/libs/MaterialFilePicker-library/src/main/res/drawable-xhdpi/ic_zip_box.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/warren-bank/Android-Root-Script-Runner/HEAD/android-studio-project/libs/MaterialFilePicker-library/src/main/res/drawable-xhdpi/ic_zip_box.png -------------------------------------------------------------------------------- /android-studio-project/libs/MaterialFilePicker-library/src/main/res/drawable-hdpi/ic_excel_box.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/warren-bank/Android-Root-Script-Runner/HEAD/android-studio-project/libs/MaterialFilePicker-library/src/main/res/drawable-hdpi/ic_excel_box.png -------------------------------------------------------------------------------- /android-studio-project/libs/MaterialFilePicker-library/src/main/res/drawable-hdpi/ic_image_box.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/warren-bank/Android-Root-Script-Runner/HEAD/android-studio-project/libs/MaterialFilePicker-library/src/main/res/drawable-hdpi/ic_image_box.png -------------------------------------------------------------------------------- /android-studio-project/libs/MaterialFilePicker-library/src/main/res/drawable-hdpi/ic_music_box.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/warren-bank/Android-Root-Script-Runner/HEAD/android-studio-project/libs/MaterialFilePicker-library/src/main/res/drawable-hdpi/ic_music_box.png -------------------------------------------------------------------------------- /android-studio-project/libs/MaterialFilePicker-library/src/main/res/drawable-hdpi/ic_video_box.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/warren-bank/Android-Root-Script-Runner/HEAD/android-studio-project/libs/MaterialFilePicker-library/src/main/res/drawable-hdpi/ic_video_box.png -------------------------------------------------------------------------------- /android-studio-project/libs/MaterialFilePicker-library/src/main/res/drawable-mdpi/ic_excel_box.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/warren-bank/Android-Root-Script-Runner/HEAD/android-studio-project/libs/MaterialFilePicker-library/src/main/res/drawable-mdpi/ic_excel_box.png -------------------------------------------------------------------------------- /android-studio-project/libs/MaterialFilePicker-library/src/main/res/drawable-mdpi/ic_image_box.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/warren-bank/Android-Root-Script-Runner/HEAD/android-studio-project/libs/MaterialFilePicker-library/src/main/res/drawable-mdpi/ic_image_box.png -------------------------------------------------------------------------------- /android-studio-project/libs/MaterialFilePicker-library/src/main/res/drawable-mdpi/ic_music_box.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/warren-bank/Android-Root-Script-Runner/HEAD/android-studio-project/libs/MaterialFilePicker-library/src/main/res/drawable-mdpi/ic_music_box.png -------------------------------------------------------------------------------- /android-studio-project/libs/MaterialFilePicker-library/src/main/res/drawable-mdpi/ic_video_box.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/warren-bank/Android-Root-Script-Runner/HEAD/android-studio-project/libs/MaterialFilePicker-library/src/main/res/drawable-mdpi/ic_video_box.png -------------------------------------------------------------------------------- /android-studio-project/libs/MaterialFilePicker-library/src/main/res/drawable-xhdpi/ic_excel_box.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/warren-bank/Android-Root-Script-Runner/HEAD/android-studio-project/libs/MaterialFilePicker-library/src/main/res/drawable-xhdpi/ic_excel_box.png -------------------------------------------------------------------------------- /android-studio-project/libs/MaterialFilePicker-library/src/main/res/drawable-xhdpi/ic_image_box.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/warren-bank/Android-Root-Script-Runner/HEAD/android-studio-project/libs/MaterialFilePicker-library/src/main/res/drawable-xhdpi/ic_image_box.png -------------------------------------------------------------------------------- /android-studio-project/libs/MaterialFilePicker-library/src/main/res/drawable-xhdpi/ic_music_box.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/warren-bank/Android-Root-Script-Runner/HEAD/android-studio-project/libs/MaterialFilePicker-library/src/main/res/drawable-xhdpi/ic_music_box.png -------------------------------------------------------------------------------- /android-studio-project/libs/MaterialFilePicker-library/src/main/res/drawable-xhdpi/ic_video_box.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/warren-bank/Android-Root-Script-Runner/HEAD/android-studio-project/libs/MaterialFilePicker-library/src/main/res/drawable-xhdpi/ic_video_box.png -------------------------------------------------------------------------------- /android-studio-project/libs/MaterialFilePicker-library/src/main/res/drawable-xhdpi/ic_word_box.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/warren-bank/Android-Root-Script-Runner/HEAD/android-studio-project/libs/MaterialFilePicker-library/src/main/res/drawable-xhdpi/ic_word_box.png -------------------------------------------------------------------------------- /android-studio-project/libs/MaterialFilePicker-library/src/main/res/drawable-xxhdpi/ic_apk_box.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/warren-bank/Android-Root-Script-Runner/HEAD/android-studio-project/libs/MaterialFilePicker-library/src/main/res/drawable-xxhdpi/ic_apk_box.png -------------------------------------------------------------------------------- /android-studio-project/libs/MaterialFilePicker-library/src/main/res/drawable-xxhdpi/ic_pdf_box.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/warren-bank/Android-Root-Script-Runner/HEAD/android-studio-project/libs/MaterialFilePicker-library/src/main/res/drawable-xxhdpi/ic_pdf_box.png -------------------------------------------------------------------------------- /android-studio-project/libs/MaterialFilePicker-library/src/main/res/drawable-xxhdpi/ic_word_box.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/warren-bank/Android-Root-Script-Runner/HEAD/android-studio-project/libs/MaterialFilePicker-library/src/main/res/drawable-xxhdpi/ic_word_box.png -------------------------------------------------------------------------------- /android-studio-project/libs/MaterialFilePicker-library/src/main/res/drawable-xxhdpi/ic_zip_box.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/warren-bank/Android-Root-Script-Runner/HEAD/android-studio-project/libs/MaterialFilePicker-library/src/main/res/drawable-xxhdpi/ic_zip_box.png -------------------------------------------------------------------------------- /android-studio-project/libs/MaterialFilePicker-library/src/main/res/drawable-xxxhdpi/ic_apk_box.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/warren-bank/Android-Root-Script-Runner/HEAD/android-studio-project/libs/MaterialFilePicker-library/src/main/res/drawable-xxxhdpi/ic_apk_box.png -------------------------------------------------------------------------------- /android-studio-project/libs/MaterialFilePicker-library/src/main/res/drawable-xxxhdpi/ic_pdf_box.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/warren-bank/Android-Root-Script-Runner/HEAD/android-studio-project/libs/MaterialFilePicker-library/src/main/res/drawable-xxxhdpi/ic_pdf_box.png -------------------------------------------------------------------------------- /android-studio-project/libs/MaterialFilePicker-library/src/main/res/drawable-xxxhdpi/ic_zip_box.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/warren-bank/Android-Root-Script-Runner/HEAD/android-studio-project/libs/MaterialFilePicker-library/src/main/res/drawable-xxxhdpi/ic_zip_box.png -------------------------------------------------------------------------------- /android-studio-project/libs/MaterialFilePicker-library/src/main/res/drawable-hdpi/ic_document_box.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/warren-bank/Android-Root-Script-Runner/HEAD/android-studio-project/libs/MaterialFilePicker-library/src/main/res/drawable-hdpi/ic_document_box.png -------------------------------------------------------------------------------- /android-studio-project/libs/MaterialFilePicker-library/src/main/res/drawable-hdpi/ic_drawing_box.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/warren-bank/Android-Root-Script-Runner/HEAD/android-studio-project/libs/MaterialFilePicker-library/src/main/res/drawable-hdpi/ic_drawing_box.png -------------------------------------------------------------------------------- /android-studio-project/libs/MaterialFilePicker-library/src/main/res/drawable-hdpi/ic_folder_48dp.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/warren-bank/Android-Root-Script-Runner/HEAD/android-studio-project/libs/MaterialFilePicker-library/src/main/res/drawable-hdpi/ic_folder_48dp.png -------------------------------------------------------------------------------- /android-studio-project/libs/MaterialFilePicker-library/src/main/res/drawable-mdpi/ic_document_box.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/warren-bank/Android-Root-Script-Runner/HEAD/android-studio-project/libs/MaterialFilePicker-library/src/main/res/drawable-mdpi/ic_document_box.png -------------------------------------------------------------------------------- /android-studio-project/libs/MaterialFilePicker-library/src/main/res/drawable-mdpi/ic_drawing_box.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/warren-bank/Android-Root-Script-Runner/HEAD/android-studio-project/libs/MaterialFilePicker-library/src/main/res/drawable-mdpi/ic_drawing_box.png -------------------------------------------------------------------------------- /android-studio-project/libs/MaterialFilePicker-library/src/main/res/drawable-mdpi/ic_folder_48dp.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/warren-bank/Android-Root-Script-Runner/HEAD/android-studio-project/libs/MaterialFilePicker-library/src/main/res/drawable-mdpi/ic_folder_48dp.png -------------------------------------------------------------------------------- /android-studio-project/libs/MaterialFilePicker-library/src/main/res/drawable-night-hdpi/ic_apk_box.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/warren-bank/Android-Root-Script-Runner/HEAD/android-studio-project/libs/MaterialFilePicker-library/src/main/res/drawable-night-hdpi/ic_apk_box.png -------------------------------------------------------------------------------- /android-studio-project/libs/MaterialFilePicker-library/src/main/res/drawable-night-hdpi/ic_pdf_box.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/warren-bank/Android-Root-Script-Runner/HEAD/android-studio-project/libs/MaterialFilePicker-library/src/main/res/drawable-night-hdpi/ic_pdf_box.png -------------------------------------------------------------------------------- /android-studio-project/libs/MaterialFilePicker-library/src/main/res/drawable-night-hdpi/ic_zip_box.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/warren-bank/Android-Root-Script-Runner/HEAD/android-studio-project/libs/MaterialFilePicker-library/src/main/res/drawable-night-hdpi/ic_zip_box.png -------------------------------------------------------------------------------- /android-studio-project/libs/MaterialFilePicker-library/src/main/res/drawable-night-mdpi/ic_apk_box.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/warren-bank/Android-Root-Script-Runner/HEAD/android-studio-project/libs/MaterialFilePicker-library/src/main/res/drawable-night-mdpi/ic_apk_box.png -------------------------------------------------------------------------------- /android-studio-project/libs/MaterialFilePicker-library/src/main/res/drawable-night-mdpi/ic_pdf_box.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/warren-bank/Android-Root-Script-Runner/HEAD/android-studio-project/libs/MaterialFilePicker-library/src/main/res/drawable-night-mdpi/ic_pdf_box.png -------------------------------------------------------------------------------- /android-studio-project/libs/MaterialFilePicker-library/src/main/res/drawable-night-mdpi/ic_zip_box.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/warren-bank/Android-Root-Script-Runner/HEAD/android-studio-project/libs/MaterialFilePicker-library/src/main/res/drawable-night-mdpi/ic_zip_box.png -------------------------------------------------------------------------------- /android-studio-project/libs/MaterialFilePicker-library/src/main/res/drawable-xhdpi/ic_document_box.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/warren-bank/Android-Root-Script-Runner/HEAD/android-studio-project/libs/MaterialFilePicker-library/src/main/res/drawable-xhdpi/ic_document_box.png -------------------------------------------------------------------------------- /android-studio-project/libs/MaterialFilePicker-library/src/main/res/drawable-xhdpi/ic_drawing_box.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/warren-bank/Android-Root-Script-Runner/HEAD/android-studio-project/libs/MaterialFilePicker-library/src/main/res/drawable-xhdpi/ic_drawing_box.png -------------------------------------------------------------------------------- /android-studio-project/libs/MaterialFilePicker-library/src/main/res/drawable-xhdpi/ic_folder_48dp.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/warren-bank/Android-Root-Script-Runner/HEAD/android-studio-project/libs/MaterialFilePicker-library/src/main/res/drawable-xhdpi/ic_folder_48dp.png -------------------------------------------------------------------------------- /android-studio-project/libs/MaterialFilePicker-library/src/main/res/drawable-xxhdpi/ic_drawing_box.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/warren-bank/Android-Root-Script-Runner/HEAD/android-studio-project/libs/MaterialFilePicker-library/src/main/res/drawable-xxhdpi/ic_drawing_box.png -------------------------------------------------------------------------------- /android-studio-project/libs/MaterialFilePicker-library/src/main/res/drawable-xxhdpi/ic_excel_box.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/warren-bank/Android-Root-Script-Runner/HEAD/android-studio-project/libs/MaterialFilePicker-library/src/main/res/drawable-xxhdpi/ic_excel_box.png -------------------------------------------------------------------------------- /android-studio-project/libs/MaterialFilePicker-library/src/main/res/drawable-xxhdpi/ic_folder_48dp.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/warren-bank/Android-Root-Script-Runner/HEAD/android-studio-project/libs/MaterialFilePicker-library/src/main/res/drawable-xxhdpi/ic_folder_48dp.png -------------------------------------------------------------------------------- /android-studio-project/libs/MaterialFilePicker-library/src/main/res/drawable-xxhdpi/ic_image_box.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/warren-bank/Android-Root-Script-Runner/HEAD/android-studio-project/libs/MaterialFilePicker-library/src/main/res/drawable-xxhdpi/ic_image_box.png -------------------------------------------------------------------------------- /android-studio-project/libs/MaterialFilePicker-library/src/main/res/drawable-xxhdpi/ic_music_box.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/warren-bank/Android-Root-Script-Runner/HEAD/android-studio-project/libs/MaterialFilePicker-library/src/main/res/drawable-xxhdpi/ic_music_box.png -------------------------------------------------------------------------------- /android-studio-project/libs/MaterialFilePicker-library/src/main/res/drawable-xxhdpi/ic_video_box.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/warren-bank/Android-Root-Script-Runner/HEAD/android-studio-project/libs/MaterialFilePicker-library/src/main/res/drawable-xxhdpi/ic_video_box.png -------------------------------------------------------------------------------- /android-studio-project/libs/MaterialFilePicker-library/src/main/res/drawable-xxxhdpi/ic_excel_box.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/warren-bank/Android-Root-Script-Runner/HEAD/android-studio-project/libs/MaterialFilePicker-library/src/main/res/drawable-xxxhdpi/ic_excel_box.png -------------------------------------------------------------------------------- /android-studio-project/libs/MaterialFilePicker-library/src/main/res/drawable-xxxhdpi/ic_image_box.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/warren-bank/Android-Root-Script-Runner/HEAD/android-studio-project/libs/MaterialFilePicker-library/src/main/res/drawable-xxxhdpi/ic_image_box.png -------------------------------------------------------------------------------- /android-studio-project/libs/MaterialFilePicker-library/src/main/res/drawable-xxxhdpi/ic_music_box.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/warren-bank/Android-Root-Script-Runner/HEAD/android-studio-project/libs/MaterialFilePicker-library/src/main/res/drawable-xxxhdpi/ic_music_box.png -------------------------------------------------------------------------------- /android-studio-project/libs/MaterialFilePicker-library/src/main/res/drawable-xxxhdpi/ic_video_box.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/warren-bank/Android-Root-Script-Runner/HEAD/android-studio-project/libs/MaterialFilePicker-library/src/main/res/drawable-xxxhdpi/ic_video_box.png -------------------------------------------------------------------------------- /android-studio-project/libs/MaterialFilePicker-library/src/main/res/drawable-xxxhdpi/ic_word_box.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/warren-bank/Android-Root-Script-Runner/HEAD/android-studio-project/libs/MaterialFilePicker-library/src/main/res/drawable-xxxhdpi/ic_word_box.png -------------------------------------------------------------------------------- /android-studio-project/libs/MaterialFilePicker-library/src/main/res/drawable-hdpi/ic_certificate_box.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/warren-bank/Android-Root-Script-Runner/HEAD/android-studio-project/libs/MaterialFilePicker-library/src/main/res/drawable-hdpi/ic_certificate_box.png -------------------------------------------------------------------------------- /android-studio-project/libs/MaterialFilePicker-library/src/main/res/drawable-hdpi/ic_file_gray_116dp.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/warren-bank/Android-Root-Script-Runner/HEAD/android-studio-project/libs/MaterialFilePicker-library/src/main/res/drawable-hdpi/ic_file_gray_116dp.png -------------------------------------------------------------------------------- /android-studio-project/libs/MaterialFilePicker-library/src/main/res/drawable-hdpi/ic_powerpoint_box.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/warren-bank/Android-Root-Script-Runner/HEAD/android-studio-project/libs/MaterialFilePicker-library/src/main/res/drawable-hdpi/ic_powerpoint_box.png -------------------------------------------------------------------------------- /android-studio-project/libs/MaterialFilePicker-library/src/main/res/drawable-mdpi/ic_certificate_box.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/warren-bank/Android-Root-Script-Runner/HEAD/android-studio-project/libs/MaterialFilePicker-library/src/main/res/drawable-mdpi/ic_certificate_box.png -------------------------------------------------------------------------------- /android-studio-project/libs/MaterialFilePicker-library/src/main/res/drawable-mdpi/ic_file_gray_116dp.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/warren-bank/Android-Root-Script-Runner/HEAD/android-studio-project/libs/MaterialFilePicker-library/src/main/res/drawable-mdpi/ic_file_gray_116dp.png -------------------------------------------------------------------------------- /android-studio-project/libs/MaterialFilePicker-library/src/main/res/drawable-mdpi/ic_powerpoint_box.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/warren-bank/Android-Root-Script-Runner/HEAD/android-studio-project/libs/MaterialFilePicker-library/src/main/res/drawable-mdpi/ic_powerpoint_box.png -------------------------------------------------------------------------------- /android-studio-project/libs/MaterialFilePicker-library/src/main/res/drawable-night-hdpi/ic_excel_box.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/warren-bank/Android-Root-Script-Runner/HEAD/android-studio-project/libs/MaterialFilePicker-library/src/main/res/drawable-night-hdpi/ic_excel_box.png -------------------------------------------------------------------------------- /android-studio-project/libs/MaterialFilePicker-library/src/main/res/drawable-night-hdpi/ic_image_box.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/warren-bank/Android-Root-Script-Runner/HEAD/android-studio-project/libs/MaterialFilePicker-library/src/main/res/drawable-night-hdpi/ic_image_box.png -------------------------------------------------------------------------------- /android-studio-project/libs/MaterialFilePicker-library/src/main/res/drawable-night-hdpi/ic_music_box.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/warren-bank/Android-Root-Script-Runner/HEAD/android-studio-project/libs/MaterialFilePicker-library/src/main/res/drawable-night-hdpi/ic_music_box.png -------------------------------------------------------------------------------- /android-studio-project/libs/MaterialFilePicker-library/src/main/res/drawable-night-hdpi/ic_video_box.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/warren-bank/Android-Root-Script-Runner/HEAD/android-studio-project/libs/MaterialFilePicker-library/src/main/res/drawable-night-hdpi/ic_video_box.png -------------------------------------------------------------------------------- /android-studio-project/libs/MaterialFilePicker-library/src/main/res/drawable-night-hdpi/ic_word_box.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/warren-bank/Android-Root-Script-Runner/HEAD/android-studio-project/libs/MaterialFilePicker-library/src/main/res/drawable-night-hdpi/ic_word_box.png -------------------------------------------------------------------------------- /android-studio-project/libs/MaterialFilePicker-library/src/main/res/drawable-night-mdpi/ic_excel_box.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/warren-bank/Android-Root-Script-Runner/HEAD/android-studio-project/libs/MaterialFilePicker-library/src/main/res/drawable-night-mdpi/ic_excel_box.png -------------------------------------------------------------------------------- /android-studio-project/libs/MaterialFilePicker-library/src/main/res/drawable-night-mdpi/ic_image_box.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/warren-bank/Android-Root-Script-Runner/HEAD/android-studio-project/libs/MaterialFilePicker-library/src/main/res/drawable-night-mdpi/ic_image_box.png -------------------------------------------------------------------------------- /android-studio-project/libs/MaterialFilePicker-library/src/main/res/drawable-night-mdpi/ic_music_box.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/warren-bank/Android-Root-Script-Runner/HEAD/android-studio-project/libs/MaterialFilePicker-library/src/main/res/drawable-night-mdpi/ic_music_box.png -------------------------------------------------------------------------------- /android-studio-project/libs/MaterialFilePicker-library/src/main/res/drawable-night-mdpi/ic_video_box.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/warren-bank/Android-Root-Script-Runner/HEAD/android-studio-project/libs/MaterialFilePicker-library/src/main/res/drawable-night-mdpi/ic_video_box.png -------------------------------------------------------------------------------- /android-studio-project/libs/MaterialFilePicker-library/src/main/res/drawable-night-mdpi/ic_word_box.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/warren-bank/Android-Root-Script-Runner/HEAD/android-studio-project/libs/MaterialFilePicker-library/src/main/res/drawable-night-mdpi/ic_word_box.png -------------------------------------------------------------------------------- /android-studio-project/libs/MaterialFilePicker-library/src/main/res/drawable-night-xhdpi/ic_apk_box.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/warren-bank/Android-Root-Script-Runner/HEAD/android-studio-project/libs/MaterialFilePicker-library/src/main/res/drawable-night-xhdpi/ic_apk_box.png -------------------------------------------------------------------------------- /android-studio-project/libs/MaterialFilePicker-library/src/main/res/drawable-night-xhdpi/ic_pdf_box.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/warren-bank/Android-Root-Script-Runner/HEAD/android-studio-project/libs/MaterialFilePicker-library/src/main/res/drawable-night-xhdpi/ic_pdf_box.png -------------------------------------------------------------------------------- /android-studio-project/libs/MaterialFilePicker-library/src/main/res/drawable-night-xhdpi/ic_word_box.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/warren-bank/Android-Root-Script-Runner/HEAD/android-studio-project/libs/MaterialFilePicker-library/src/main/res/drawable-night-xhdpi/ic_word_box.png -------------------------------------------------------------------------------- /android-studio-project/libs/MaterialFilePicker-library/src/main/res/drawable-night-xhdpi/ic_zip_box.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/warren-bank/Android-Root-Script-Runner/HEAD/android-studio-project/libs/MaterialFilePicker-library/src/main/res/drawable-night-xhdpi/ic_zip_box.png -------------------------------------------------------------------------------- /android-studio-project/libs/MaterialFilePicker-library/src/main/res/drawable-night-xxhdpi/ic_apk_box.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/warren-bank/Android-Root-Script-Runner/HEAD/android-studio-project/libs/MaterialFilePicker-library/src/main/res/drawable-night-xxhdpi/ic_apk_box.png -------------------------------------------------------------------------------- /android-studio-project/libs/MaterialFilePicker-library/src/main/res/drawable-night-xxhdpi/ic_pdf_box.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/warren-bank/Android-Root-Script-Runner/HEAD/android-studio-project/libs/MaterialFilePicker-library/src/main/res/drawable-night-xxhdpi/ic_pdf_box.png -------------------------------------------------------------------------------- /android-studio-project/libs/MaterialFilePicker-library/src/main/res/drawable-night-xxhdpi/ic_zip_box.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/warren-bank/Android-Root-Script-Runner/HEAD/android-studio-project/libs/MaterialFilePicker-library/src/main/res/drawable-night-xxhdpi/ic_zip_box.png -------------------------------------------------------------------------------- /android-studio-project/libs/MaterialFilePicker-library/src/main/res/drawable-xhdpi/ic_powerpoint_box.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/warren-bank/Android-Root-Script-Runner/HEAD/android-studio-project/libs/MaterialFilePicker-library/src/main/res/drawable-xhdpi/ic_powerpoint_box.png -------------------------------------------------------------------------------- /android-studio-project/libs/MaterialFilePicker-library/src/main/res/drawable-xxhdpi/ic_document_box.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/warren-bank/Android-Root-Script-Runner/HEAD/android-studio-project/libs/MaterialFilePicker-library/src/main/res/drawable-xxhdpi/ic_document_box.png -------------------------------------------------------------------------------- /android-studio-project/libs/MaterialFilePicker-library/src/main/res/drawable-xxxhdpi/ic_document_box.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/warren-bank/Android-Root-Script-Runner/HEAD/android-studio-project/libs/MaterialFilePicker-library/src/main/res/drawable-xxxhdpi/ic_document_box.png -------------------------------------------------------------------------------- /android-studio-project/libs/MaterialFilePicker-library/src/main/res/drawable-xxxhdpi/ic_drawing_box.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/warren-bank/Android-Root-Script-Runner/HEAD/android-studio-project/libs/MaterialFilePicker-library/src/main/res/drawable-xxxhdpi/ic_drawing_box.png -------------------------------------------------------------------------------- /android-studio-project/libs/MaterialFilePicker-library/src/main/res/drawable-xxxhdpi/ic_folder_48dp.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/warren-bank/Android-Root-Script-Runner/HEAD/android-studio-project/libs/MaterialFilePicker-library/src/main/res/drawable-xxxhdpi/ic_folder_48dp.png -------------------------------------------------------------------------------- /android-studio-project/gradle/wrapper/gradle-wrapper.properties: -------------------------------------------------------------------------------- 1 | distributionBase=GRADLE_USER_HOME 2 | distributionPath=wrapper/dists 3 | zipStoreBase=GRADLE_USER_HOME 4 | zipStorePath=wrapper/dists 5 | distributionUrl=https\://services.gradle.org/distributions/gradle-4.10.1-all.zip 6 | -------------------------------------------------------------------------------- /android-studio-project/libs/MaterialFilePicker-library/src/main/res/drawable-hdpi/ic_close_white_24dp.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/warren-bank/Android-Root-Script-Runner/HEAD/android-studio-project/libs/MaterialFilePicker-library/src/main/res/drawable-hdpi/ic_close_white_24dp.png -------------------------------------------------------------------------------- /android-studio-project/libs/MaterialFilePicker-library/src/main/res/drawable-mdpi/ic_close_white_24dp.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/warren-bank/Android-Root-Script-Runner/HEAD/android-studio-project/libs/MaterialFilePicker-library/src/main/res/drawable-mdpi/ic_close_white_24dp.png -------------------------------------------------------------------------------- /android-studio-project/libs/MaterialFilePicker-library/src/main/res/drawable-night-hdpi/ic_document_box.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/warren-bank/Android-Root-Script-Runner/HEAD/android-studio-project/libs/MaterialFilePicker-library/src/main/res/drawable-night-hdpi/ic_document_box.png -------------------------------------------------------------------------------- /android-studio-project/libs/MaterialFilePicker-library/src/main/res/drawable-night-hdpi/ic_drawing_box.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/warren-bank/Android-Root-Script-Runner/HEAD/android-studio-project/libs/MaterialFilePicker-library/src/main/res/drawable-night-hdpi/ic_drawing_box.png -------------------------------------------------------------------------------- /android-studio-project/libs/MaterialFilePicker-library/src/main/res/drawable-night-hdpi/ic_folder_48dp.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/warren-bank/Android-Root-Script-Runner/HEAD/android-studio-project/libs/MaterialFilePicker-library/src/main/res/drawable-night-hdpi/ic_folder_48dp.png -------------------------------------------------------------------------------- /android-studio-project/libs/MaterialFilePicker-library/src/main/res/drawable-night-mdpi/ic_document_box.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/warren-bank/Android-Root-Script-Runner/HEAD/android-studio-project/libs/MaterialFilePicker-library/src/main/res/drawable-night-mdpi/ic_document_box.png -------------------------------------------------------------------------------- /android-studio-project/libs/MaterialFilePicker-library/src/main/res/drawable-night-mdpi/ic_drawing_box.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/warren-bank/Android-Root-Script-Runner/HEAD/android-studio-project/libs/MaterialFilePicker-library/src/main/res/drawable-night-mdpi/ic_drawing_box.png -------------------------------------------------------------------------------- /android-studio-project/libs/MaterialFilePicker-library/src/main/res/drawable-night-mdpi/ic_folder_48dp.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/warren-bank/Android-Root-Script-Runner/HEAD/android-studio-project/libs/MaterialFilePicker-library/src/main/res/drawable-night-mdpi/ic_folder_48dp.png -------------------------------------------------------------------------------- /android-studio-project/libs/MaterialFilePicker-library/src/main/res/drawable-night-xhdpi/ic_drawing_box.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/warren-bank/Android-Root-Script-Runner/HEAD/android-studio-project/libs/MaterialFilePicker-library/src/main/res/drawable-night-xhdpi/ic_drawing_box.png -------------------------------------------------------------------------------- /android-studio-project/libs/MaterialFilePicker-library/src/main/res/drawable-night-xhdpi/ic_excel_box.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/warren-bank/Android-Root-Script-Runner/HEAD/android-studio-project/libs/MaterialFilePicker-library/src/main/res/drawable-night-xhdpi/ic_excel_box.png -------------------------------------------------------------------------------- /android-studio-project/libs/MaterialFilePicker-library/src/main/res/drawable-night-xhdpi/ic_folder_48dp.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/warren-bank/Android-Root-Script-Runner/HEAD/android-studio-project/libs/MaterialFilePicker-library/src/main/res/drawable-night-xhdpi/ic_folder_48dp.png -------------------------------------------------------------------------------- /android-studio-project/libs/MaterialFilePicker-library/src/main/res/drawable-night-xhdpi/ic_image_box.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/warren-bank/Android-Root-Script-Runner/HEAD/android-studio-project/libs/MaterialFilePicker-library/src/main/res/drawable-night-xhdpi/ic_image_box.png -------------------------------------------------------------------------------- /android-studio-project/libs/MaterialFilePicker-library/src/main/res/drawable-night-xhdpi/ic_music_box.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/warren-bank/Android-Root-Script-Runner/HEAD/android-studio-project/libs/MaterialFilePicker-library/src/main/res/drawable-night-xhdpi/ic_music_box.png -------------------------------------------------------------------------------- /android-studio-project/libs/MaterialFilePicker-library/src/main/res/drawable-night-xhdpi/ic_video_box.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/warren-bank/Android-Root-Script-Runner/HEAD/android-studio-project/libs/MaterialFilePicker-library/src/main/res/drawable-night-xhdpi/ic_video_box.png -------------------------------------------------------------------------------- /android-studio-project/libs/MaterialFilePicker-library/src/main/res/drawable-night-xxhdpi/ic_excel_box.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/warren-bank/Android-Root-Script-Runner/HEAD/android-studio-project/libs/MaterialFilePicker-library/src/main/res/drawable-night-xxhdpi/ic_excel_box.png -------------------------------------------------------------------------------- /android-studio-project/libs/MaterialFilePicker-library/src/main/res/drawable-night-xxhdpi/ic_image_box.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/warren-bank/Android-Root-Script-Runner/HEAD/android-studio-project/libs/MaterialFilePicker-library/src/main/res/drawable-night-xxhdpi/ic_image_box.png -------------------------------------------------------------------------------- /android-studio-project/libs/MaterialFilePicker-library/src/main/res/drawable-night-xxhdpi/ic_music_box.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/warren-bank/Android-Root-Script-Runner/HEAD/android-studio-project/libs/MaterialFilePicker-library/src/main/res/drawable-night-xxhdpi/ic_music_box.png -------------------------------------------------------------------------------- /android-studio-project/libs/MaterialFilePicker-library/src/main/res/drawable-night-xxhdpi/ic_video_box.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/warren-bank/Android-Root-Script-Runner/HEAD/android-studio-project/libs/MaterialFilePicker-library/src/main/res/drawable-night-xxhdpi/ic_video_box.png -------------------------------------------------------------------------------- /android-studio-project/libs/MaterialFilePicker-library/src/main/res/drawable-night-xxhdpi/ic_word_box.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/warren-bank/Android-Root-Script-Runner/HEAD/android-studio-project/libs/MaterialFilePicker-library/src/main/res/drawable-night-xxhdpi/ic_word_box.png -------------------------------------------------------------------------------- /android-studio-project/libs/MaterialFilePicker-library/src/main/res/drawable-night-xxxhdpi/ic_apk_box.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/warren-bank/Android-Root-Script-Runner/HEAD/android-studio-project/libs/MaterialFilePicker-library/src/main/res/drawable-night-xxxhdpi/ic_apk_box.png -------------------------------------------------------------------------------- /android-studio-project/libs/MaterialFilePicker-library/src/main/res/drawable-night-xxxhdpi/ic_excel_box.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/warren-bank/Android-Root-Script-Runner/HEAD/android-studio-project/libs/MaterialFilePicker-library/src/main/res/drawable-night-xxxhdpi/ic_excel_box.png -------------------------------------------------------------------------------- /android-studio-project/libs/MaterialFilePicker-library/src/main/res/drawable-night-xxxhdpi/ic_image_box.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/warren-bank/Android-Root-Script-Runner/HEAD/android-studio-project/libs/MaterialFilePicker-library/src/main/res/drawable-night-xxxhdpi/ic_image_box.png -------------------------------------------------------------------------------- /android-studio-project/libs/MaterialFilePicker-library/src/main/res/drawable-night-xxxhdpi/ic_music_box.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/warren-bank/Android-Root-Script-Runner/HEAD/android-studio-project/libs/MaterialFilePicker-library/src/main/res/drawable-night-xxxhdpi/ic_music_box.png -------------------------------------------------------------------------------- /android-studio-project/libs/MaterialFilePicker-library/src/main/res/drawable-night-xxxhdpi/ic_pdf_box.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/warren-bank/Android-Root-Script-Runner/HEAD/android-studio-project/libs/MaterialFilePicker-library/src/main/res/drawable-night-xxxhdpi/ic_pdf_box.png -------------------------------------------------------------------------------- /android-studio-project/libs/MaterialFilePicker-library/src/main/res/drawable-night-xxxhdpi/ic_video_box.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/warren-bank/Android-Root-Script-Runner/HEAD/android-studio-project/libs/MaterialFilePicker-library/src/main/res/drawable-night-xxxhdpi/ic_video_box.png -------------------------------------------------------------------------------- /android-studio-project/libs/MaterialFilePicker-library/src/main/res/drawable-night-xxxhdpi/ic_word_box.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/warren-bank/Android-Root-Script-Runner/HEAD/android-studio-project/libs/MaterialFilePicker-library/src/main/res/drawable-night-xxxhdpi/ic_word_box.png -------------------------------------------------------------------------------- /android-studio-project/libs/MaterialFilePicker-library/src/main/res/drawable-night-xxxhdpi/ic_zip_box.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/warren-bank/Android-Root-Script-Runner/HEAD/android-studio-project/libs/MaterialFilePicker-library/src/main/res/drawable-night-xxxhdpi/ic_zip_box.png -------------------------------------------------------------------------------- /android-studio-project/libs/MaterialFilePicker-library/src/main/res/drawable-xhdpi/ic_certificate_box.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/warren-bank/Android-Root-Script-Runner/HEAD/android-studio-project/libs/MaterialFilePicker-library/src/main/res/drawable-xhdpi/ic_certificate_box.png -------------------------------------------------------------------------------- /android-studio-project/libs/MaterialFilePicker-library/src/main/res/drawable-xhdpi/ic_close_white_24dp.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/warren-bank/Android-Root-Script-Runner/HEAD/android-studio-project/libs/MaterialFilePicker-library/src/main/res/drawable-xhdpi/ic_close_white_24dp.png -------------------------------------------------------------------------------- /android-studio-project/libs/MaterialFilePicker-library/src/main/res/drawable-xhdpi/ic_file_gray_116dp.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/warren-bank/Android-Root-Script-Runner/HEAD/android-studio-project/libs/MaterialFilePicker-library/src/main/res/drawable-xhdpi/ic_file_gray_116dp.png -------------------------------------------------------------------------------- /android-studio-project/libs/MaterialFilePicker-library/src/main/res/drawable-xxhdpi/ic_certificate_box.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/warren-bank/Android-Root-Script-Runner/HEAD/android-studio-project/libs/MaterialFilePicker-library/src/main/res/drawable-xxhdpi/ic_certificate_box.png -------------------------------------------------------------------------------- /android-studio-project/libs/MaterialFilePicker-library/src/main/res/drawable-xxhdpi/ic_close_white_24dp.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/warren-bank/Android-Root-Script-Runner/HEAD/android-studio-project/libs/MaterialFilePicker-library/src/main/res/drawable-xxhdpi/ic_close_white_24dp.png -------------------------------------------------------------------------------- /android-studio-project/libs/MaterialFilePicker-library/src/main/res/drawable-xxhdpi/ic_file_gray_116dp.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/warren-bank/Android-Root-Script-Runner/HEAD/android-studio-project/libs/MaterialFilePicker-library/src/main/res/drawable-xxhdpi/ic_file_gray_116dp.png -------------------------------------------------------------------------------- /android-studio-project/libs/MaterialFilePicker-library/src/main/res/drawable-xxhdpi/ic_powerpoint_box.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/warren-bank/Android-Root-Script-Runner/HEAD/android-studio-project/libs/MaterialFilePicker-library/src/main/res/drawable-xxhdpi/ic_powerpoint_box.png -------------------------------------------------------------------------------- /android-studio-project/libs/MaterialFilePicker-library/src/main/res/drawable-xxxhdpi/ic_certificate_box.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/warren-bank/Android-Root-Script-Runner/HEAD/android-studio-project/libs/MaterialFilePicker-library/src/main/res/drawable-xxxhdpi/ic_certificate_box.png -------------------------------------------------------------------------------- /android-studio-project/libs/MaterialFilePicker-library/src/main/res/drawable-xxxhdpi/ic_powerpoint_box.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/warren-bank/Android-Root-Script-Runner/HEAD/android-studio-project/libs/MaterialFilePicker-library/src/main/res/drawable-xxxhdpi/ic_powerpoint_box.png -------------------------------------------------------------------------------- /android-studio-project/libs/MaterialFilePicker-library/src/main/res/drawable-night-hdpi/ic_powerpoint_box.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/warren-bank/Android-Root-Script-Runner/HEAD/android-studio-project/libs/MaterialFilePicker-library/src/main/res/drawable-night-hdpi/ic_powerpoint_box.png -------------------------------------------------------------------------------- /android-studio-project/libs/MaterialFilePicker-library/src/main/res/drawable-night-mdpi/ic_powerpoint_box.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/warren-bank/Android-Root-Script-Runner/HEAD/android-studio-project/libs/MaterialFilePicker-library/src/main/res/drawable-night-mdpi/ic_powerpoint_box.png -------------------------------------------------------------------------------- /android-studio-project/libs/MaterialFilePicker-library/src/main/res/drawable-night-xhdpi/ic_document_box.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/warren-bank/Android-Root-Script-Runner/HEAD/android-studio-project/libs/MaterialFilePicker-library/src/main/res/drawable-night-xhdpi/ic_document_box.png -------------------------------------------------------------------------------- /android-studio-project/libs/MaterialFilePicker-library/src/main/res/drawable-night-xxhdpi/ic_document_box.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/warren-bank/Android-Root-Script-Runner/HEAD/android-studio-project/libs/MaterialFilePicker-library/src/main/res/drawable-night-xxhdpi/ic_document_box.png -------------------------------------------------------------------------------- /android-studio-project/libs/MaterialFilePicker-library/src/main/res/drawable-night-xxhdpi/ic_drawing_box.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/warren-bank/Android-Root-Script-Runner/HEAD/android-studio-project/libs/MaterialFilePicker-library/src/main/res/drawable-night-xxhdpi/ic_drawing_box.png -------------------------------------------------------------------------------- /android-studio-project/libs/MaterialFilePicker-library/src/main/res/drawable-night-xxhdpi/ic_folder_48dp.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/warren-bank/Android-Root-Script-Runner/HEAD/android-studio-project/libs/MaterialFilePicker-library/src/main/res/drawable-night-xxhdpi/ic_folder_48dp.png -------------------------------------------------------------------------------- /android-studio-project/libs/MaterialFilePicker-library/src/main/res/drawable-night-xxxhdpi/ic_drawing_box.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/warren-bank/Android-Root-Script-Runner/HEAD/android-studio-project/libs/MaterialFilePicker-library/src/main/res/drawable-night-xxxhdpi/ic_drawing_box.png -------------------------------------------------------------------------------- /android-studio-project/libs/MaterialFilePicker-library/src/main/res/drawable-night-xxxhdpi/ic_folder_48dp.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/warren-bank/Android-Root-Script-Runner/HEAD/android-studio-project/libs/MaterialFilePicker-library/src/main/res/drawable-night-xxxhdpi/ic_folder_48dp.png -------------------------------------------------------------------------------- /android-studio-project/libs/MaterialFilePicker-library/src/main/res/drawable-xxxhdpi/ic_close_white_24dp.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/warren-bank/Android-Root-Script-Runner/HEAD/android-studio-project/libs/MaterialFilePicker-library/src/main/res/drawable-xxxhdpi/ic_close_white_24dp.png -------------------------------------------------------------------------------- /android-studio-project/libs/MaterialFilePicker-library/src/main/res/drawable-night-hdpi/ic_certificate_box.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/warren-bank/Android-Root-Script-Runner/HEAD/android-studio-project/libs/MaterialFilePicker-library/src/main/res/drawable-night-hdpi/ic_certificate_box.png -------------------------------------------------------------------------------- /android-studio-project/libs/MaterialFilePicker-library/src/main/res/drawable-night-mdpi/ic_certificate_box.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/warren-bank/Android-Root-Script-Runner/HEAD/android-studio-project/libs/MaterialFilePicker-library/src/main/res/drawable-night-mdpi/ic_certificate_box.png -------------------------------------------------------------------------------- /android-studio-project/libs/MaterialFilePicker-library/src/main/res/drawable-night-xhdpi/ic_certificate_box.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/warren-bank/Android-Root-Script-Runner/HEAD/android-studio-project/libs/MaterialFilePicker-library/src/main/res/drawable-night-xhdpi/ic_certificate_box.png -------------------------------------------------------------------------------- /android-studio-project/libs/MaterialFilePicker-library/src/main/res/drawable-night-xhdpi/ic_powerpoint_box.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/warren-bank/Android-Root-Script-Runner/HEAD/android-studio-project/libs/MaterialFilePicker-library/src/main/res/drawable-night-xhdpi/ic_powerpoint_box.png -------------------------------------------------------------------------------- /android-studio-project/libs/MaterialFilePicker-library/src/main/res/drawable-night-xxhdpi/ic_certificate_box.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/warren-bank/Android-Root-Script-Runner/HEAD/android-studio-project/libs/MaterialFilePicker-library/src/main/res/drawable-night-xxhdpi/ic_certificate_box.png -------------------------------------------------------------------------------- /android-studio-project/libs/MaterialFilePicker-library/src/main/res/drawable-night-xxhdpi/ic_powerpoint_box.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/warren-bank/Android-Root-Script-Runner/HEAD/android-studio-project/libs/MaterialFilePicker-library/src/main/res/drawable-night-xxhdpi/ic_powerpoint_box.png -------------------------------------------------------------------------------- /android-studio-project/libs/MaterialFilePicker-library/src/main/res/drawable-night-xxxhdpi/ic_document_box.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/warren-bank/Android-Root-Script-Runner/HEAD/android-studio-project/libs/MaterialFilePicker-library/src/main/res/drawable-night-xxxhdpi/ic_document_box.png -------------------------------------------------------------------------------- /android-studio-project/libs/MaterialFilePicker-library/src/main/res/drawable-night-xxxhdpi/ic_powerpoint_box.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/warren-bank/Android-Root-Script-Runner/HEAD/android-studio-project/libs/MaterialFilePicker-library/src/main/res/drawable-night-xxxhdpi/ic_powerpoint_box.png -------------------------------------------------------------------------------- /android-studio-project/libs/MaterialFilePicker-library/src/main/res/drawable-night-xxxhdpi/ic_certificate_box.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/warren-bank/Android-Root-Script-Runner/HEAD/android-studio-project/libs/MaterialFilePicker-library/src/main/res/drawable-night-xxxhdpi/ic_certificate_box.png -------------------------------------------------------------------------------- /android-studio-project/Root-Script-Runner/src/main/res/values/dimens.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 10dp 4 | 20dp 5 | 4dp 6 | 7 | -------------------------------------------------------------------------------- /android-studio-project/libs/MaterialFilePicker-library/src/main/res/drawable-v21/bg_clickable.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 5 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # Node.js dev-dependencies 2 | node_modules/ 3 | 4 | # Android generated 5 | bin 6 | gen 7 | obj 8 | lint.xml 9 | 10 | # IntelliJ IDEA 11 | .idea 12 | *.iml 13 | *.ipr 14 | *.iws 15 | classes 16 | gen-external-apklibs 17 | 18 | # Gradle 19 | .gradle 20 | build 21 | buildout 22 | out 23 | 24 | # Other 25 | .DS_Store 26 | local.properties 27 | -------------------------------------------------------------------------------- /android-studio-project/Root-Script-Runner/src/main/res/values-zh/strings.xml: -------------------------------------------------------------------------------- 1 | 2 | 根脚本运行器 3 | Shell 脚本: 4 | 标准输出: 5 | 标准错误: 6 | 退出状态: 7 | 选择 Shell 脚本 8 | -------------------------------------------------------------------------------- /android-studio-project/Root-Script-Runner/src/main/res/values-ko/strings.xml: -------------------------------------------------------------------------------- 1 | 2 | 루트 스크립트 실행자 3 | 쉘 스크립트: 4 | 표준 출력: 5 | 표준 오류: 6 | 종료 상태: 7 | 쉘 스크립트 선택 8 | -------------------------------------------------------------------------------- /android-studio-project/Root-Script-Runner/src/main/res/values-ja/strings.xml: -------------------------------------------------------------------------------- 1 | 2 | ルートスクリプトランナー 3 | シェル・スクリプト: 4 | 標準出力: 5 | 標準誤差: 6 | 終了ステータス: 7 | シェルスクリプトの選択 8 | -------------------------------------------------------------------------------- /android-studio-project/Root-Script-Runner/src/main/res/values-zh-rTW/strings.xml: -------------------------------------------------------------------------------- 1 | 2 | 根 Script 執行程式 3 | Shell Script: 4 | 標準輸出: 5 | 標準錯誤: 6 | 結束狀態: 7 | 選擇 Shell Script 8 | -------------------------------------------------------------------------------- /android-studio-project/Root-Script-Runner/src/main/res/values-cy/strings.xml: -------------------------------------------------------------------------------- 1 | 2 | Name 3 | Sgript: 4 | Allbwn Safonol: 5 | Gwall Safonol: 6 | Cyflwr Gadael: 7 | Dewis Sgript Shell 8 | -------------------------------------------------------------------------------- /android-studio-project/Root-Script-Runner/src/main/res/values-ur/strings.xml: -------------------------------------------------------------------------------- 1 | 2 | روٹ سکرپٹ رنر 3 | شیل لپی: 4 | معیاری آؤٹ: 5 | معیاری غلطي: 6 | ایگزٹ سٹیٹس: 7 | شیل سکرپٹ کا انتخاب 8 | -------------------------------------------------------------------------------- /android-studio-project/Root-Script-Runner/src/main/res/values-et/strings.xml: -------------------------------------------------------------------------------- 1 | 2 | Juurskriptijooksja 3 | Shell-: 4 | Standardväljund: 5 | Standardviga: 6 | Väljumise staatus: 7 | Shelli skript 8 | -------------------------------------------------------------------------------- /android-studio-project/Root-Script-Runner/src/main/res/values-ms/strings.xml: -------------------------------------------------------------------------------- 1 | 2 | Pelari Skrip Root 3 | Skrip Shell: 4 | Output Piawai: 5 | Ralat Piawai: 6 | Keluar Status: 7 | Pilih Skrip Shell 8 | -------------------------------------------------------------------------------- /android-studio-project/Root-Script-Runner/src/main/res/values-nb/strings.xml: -------------------------------------------------------------------------------- 1 | 2 | Rot Script Runner 3 | Skallskript: 4 | Standard utdata: 5 | Standard feil: 6 | Avslutt status: 7 | Velg Shell Script 8 | -------------------------------------------------------------------------------- /android-studio-project/Root-Script-Runner/src/main/res/values-ne/strings.xml: -------------------------------------------------------------------------------- 1 | 2 | रूट स्क्रिप्ट रनर 3 | शेल स्क्रिप्ट: 4 | मानक निर्गत: 5 | मानक त्रुटि: 6 | वस्तुस्थिति: 7 | शेल स्क्रिप्ट रोज्नुहोस् 8 | -------------------------------------------------------------------------------- /android-studio-project/constants.gradle: -------------------------------------------------------------------------------- 1 | project.ext { 2 | releaseVersionCode = Integer.parseInt("001000114", 10) //Integer.MAX_VALUE == 2147483647 3 | releaseVersion = '001.00.01-14API' 4 | javaVersion = JavaVersion.VERSION_1_8 5 | minSdkVersion = 14 6 | targetSdkVersion = 28 7 | compileSdkVersion = 28 8 | buildToolsVersion = '28.0.3' 9 | 10 | jetpackVersion = '1.0.0' 11 | } 12 | -------------------------------------------------------------------------------- /android-studio-project/Root-Script-Runner/src/main/res/values-da/strings.xml: -------------------------------------------------------------------------------- 1 | 2 | Rodscript-runner 3 | Shell-script: 4 | Standard-output: 5 | Standardfejl: 6 | Afslutningsstatus: 7 | Vælg shell-script 8 | -------------------------------------------------------------------------------- /android-studio-project/Root-Script-Runner/src/main/res/values-de/strings.xml: -------------------------------------------------------------------------------- 1 | 2 | Root-Script-Runner 3 | Shell-Script: 4 | Standardausgabe: 5 | Standardfehler: 6 | Exitstatus: 7 | Shell-Script auswählen 8 | -------------------------------------------------------------------------------- /android-studio-project/Root-Script-Runner/src/main/res/values-hi/strings.xml: -------------------------------------------------------------------------------- 1 | 2 | रूट स्क्रिप्ट धावक 3 | शेल स्क्रिप्ट: 4 | मानक आउटपुट: 5 | मानक त्रुटि: 6 | स्थिति बाहर निकलें: 7 | शैल स्क्रिप्ट चुनें 8 | -------------------------------------------------------------------------------- /android-studio-project/Root-Script-Runner/src/main/res/values-hr/strings.xml: -------------------------------------------------------------------------------- 1 | 2 | Trkač Skripta 3 | Shell skripta: 4 | Standardni izlaz: 5 | Standardna greška: 6 | Status izlaza: 7 | Izbor ljuske skripte 8 | -------------------------------------------------------------------------------- /android-studio-project/Root-Script-Runner/src/main/res/values-id/strings.xml: -------------------------------------------------------------------------------- 1 | 2 | Pelari Skrip Root 3 | Skrip Shell: 4 | Keluaran Standar: 5 | Galat Standar: 6 | Status Keluar: 7 | Pilih Script Shell 8 | -------------------------------------------------------------------------------- /android-studio-project/Root-Script-Runner/src/main/res/values-mt/strings.xml: -------------------------------------------------------------------------------- 1 | 2 | Riscript Runner 3 | Kitba ta \': 4 | Output Standard: 5 | Żball Standard: 6 | Status tal-ħruġ: 7 | Agħżel Shell Skrittura 8 | -------------------------------------------------------------------------------- /android-studio-project/Root-Script-Runner/src/main/res/values-nl/strings.xml: -------------------------------------------------------------------------------- 1 | 2 | Hoofdscript-runner 3 | Shellscript: 4 | Standaarduitvoer: 5 | Standaardfout: 6 | Afsluitstatus: 7 | Shell-script kiezen 8 | -------------------------------------------------------------------------------- /android-studio-project/Root-Script-Runner/src/main/res/values-sv/strings.xml: -------------------------------------------------------------------------------- 1 | 2 | Rotskriptkörningsprogram 3 | Shell-skript: 4 | Standardutdata: 5 | Standardfel: 6 | Exit-status: 7 | Välj Shell-skript 8 | -------------------------------------------------------------------------------- /android-studio-project/Root-Script-Runner/src/main/res/values-th/strings.xml: -------------------------------------------------------------------------------- 1 | 2 | รันเน่อร์สคริปต์ราก 3 | เชลล์สคริปต์: 4 | ผลลัพธ์มาตรฐาน: 5 | ข้อผิดพลาดมาตรฐาน: 6 | สถานะการออก: 7 | เลือกเชลล์สคริปต์ 8 | -------------------------------------------------------------------------------- /android-studio-project/Root-Script-Runner/src/main/res/values-pt/strings.xml: -------------------------------------------------------------------------------- 1 | 2 | Runner de Script Raiz 3 | Script de Shell: 4 | Saída Padrão: 5 | Erro Padrão: 6 | Status de Saída: 7 | Escolha Shell Script 8 | -------------------------------------------------------------------------------- /android-studio-project/Root-Script-Runner/src/main/res/values-ro/strings.xml: -------------------------------------------------------------------------------- 1 | 2 | Rădăcină script root 3 | Script shell: 4 | Ieşire standard: 5 | Eroare standard: 6 | Stare ieşire: 7 | Alegere script Shell 8 | -------------------------------------------------------------------------------- /android-studio-project/Root-Script-Runner/src/main/res/values-si/strings.xml: -------------------------------------------------------------------------------- 1 | 2 | රූට් ස්ක්රිප්ට් රනර් 3 | ෂෙල් ස්ක්රිප්ට්: 4 | සම්මත ප්රථිධාන: 5 | සම්මත දෝෂය: 6 | \@ info: status: 7 | Shell ස්ක්රිප්ට තෝරන්න 8 | -------------------------------------------------------------------------------- /android-studio-project/Root-Script-Runner/src/main/res/values-sr/strings.xml: -------------------------------------------------------------------------------- 1 | 2 | Root скрипт тркач 3 | Скрипта шкољке: 4 | Стандардни излаз: 5 | Стандардна грешка: 6 | Излазни статус: 7 | Одаберите Шкољку 8 | -------------------------------------------------------------------------------- /android-studio-project/Root-Script-Runner/src/main/res/values-vi/strings.xml: -------------------------------------------------------------------------------- 1 | 2 | Tên chạy tập lệnh gốc 3 | Shell Script: 4 | Kết xuất chuẩn: 5 | Lỗi chuẩn: 6 | Trạng thái thoát: 7 | Chọn tập lệnh Shell 8 | -------------------------------------------------------------------------------- /android-studio-project/Root-Script-Runner/src/main/res/values-ar/strings.xml: -------------------------------------------------------------------------------- 1 | 2 | تشغيل البرنامج النصي الرئيسي 3 | نص غلاف Shell: 4 | المخرجات القياسية: 5 | خطأ قياسي: 6 | حالة الخروج: 7 | اختيار نص غلاف Shell 8 | -------------------------------------------------------------------------------- /android-studio-project/Root-Script-Runner/src/main/res/values-bs/strings.xml: -------------------------------------------------------------------------------- 1 | 2 | Root skripta Runner 3 | Shell skripta: 4 | Standardni izlaz: 5 | Standardna greška: 6 | Izlazni status: 7 | Izaberite Shell skript 8 | -------------------------------------------------------------------------------- /android-studio-project/Root-Script-Runner/src/main/res/values-el/strings.xml: -------------------------------------------------------------------------------- 1 | 2 | Δρομέας σεναρίου Root 3 | Σενάριο Shell: 4 | Τυπική έξοδος: 5 | Τυπικό σφάλμα: 6 | Κατάσταση εξόδου:: 7 | Επιλογή σεναρίου Shell 8 | -------------------------------------------------------------------------------- /android-studio-project/Root-Script-Runner/src/main/res/values-it/strings.xml: -------------------------------------------------------------------------------- 1 | 2 | Runner script di root 3 | Script di shell: 4 | Output standard: 5 | Errore standard: 6 | Stato di uscita: 7 | Scegli Script Shell 8 | -------------------------------------------------------------------------------- /android-studio-project/Root-Script-Runner/src/main/res/values-sl/strings.xml: -------------------------------------------------------------------------------- 1 | 2 | Korenski Skript Skripta 3 | Skript lupine: 4 | Standardni izhod: 5 | Standardna napaka: 6 | Status izhoda: 7 | Izberi skript lupine 8 | -------------------------------------------------------------------------------- /android-studio-project/libs/MaterialFilePicker-library/src/main/res/menu/menu.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 9 | -------------------------------------------------------------------------------- /android-studio-project/Root-Script-Runner/src/main/res/values-cnr/strings.xml: -------------------------------------------------------------------------------- 1 | 2 | Ishodišni kurir 3 | Jedan scenario.: 4 | Standardni izlaz.: 5 | Standardna greška.: 6 | Jedan izlaz.: 7 | Izaberite \"Shell Script\" 8 | -------------------------------------------------------------------------------- /android-studio-project/Root-Script-Runner/src/main/res/values-cs/strings.xml: -------------------------------------------------------------------------------- 1 | 2 | Kořenový spouštěč skriptu 3 | Skript shellu: 4 | Standardní výstup: 5 | Standardní chyba: 6 | Stav ukončení: 7 | Zvolit skript shellu 8 | -------------------------------------------------------------------------------- /android-studio-project/Root-Script-Runner/src/main/res/values-fi/strings.xml: -------------------------------------------------------------------------------- 1 | 2 | Root-komentosarjan Runner 3 | Shell-Script: 4 | Tavallinen Output: 5 | Vakiovirhe: 6 | Poistumisen tila: 7 | Valitse komentotiedosto 8 | -------------------------------------------------------------------------------- /android-studio-project/Root-Script-Runner/src/main/res/values-fr/strings.xml: -------------------------------------------------------------------------------- 1 | 2 | Runner de script racine 3 | Script de shell: 4 | Sortie standard: 5 | Erreur standard: 6 | Etat de sortie: 7 | Choix du script de shell 8 | -------------------------------------------------------------------------------- /android-studio-project/Root-Script-Runner/src/main/res/values-he/strings.xml: -------------------------------------------------------------------------------- 1 | 2 | מנהל קובץ Script של יסוד 3 | קובץ Script של מעטפת: 4 | פלט רגיל: 5 | שגיאה סטנדרטית: 6 | סטטוס יציאה: 7 | בחירת קובץ Script של מעטפת 8 | -------------------------------------------------------------------------------- /android-studio-project/Root-Script-Runner/src/main/res/values-lv/strings.xml: -------------------------------------------------------------------------------- 1 | 2 | Saknes skriptu skrējējs 3 | Čaulas Script: 4 | Standarta izvade: 5 | Standarta kļūda: 6 | Izejas statuss: 7 | Izvēlēties Shell skriptu 8 | -------------------------------------------------------------------------------- /android-studio-project/Root-Script-Runner/src/main/res/values-ta/strings.xml: -------------------------------------------------------------------------------- 1 | 2 | Root ஸ்கிரிப்ட் ரன்னர் 3 | ஷெல் சிறுநிரல்: 4 | நிலையான வெளியீடு: 5 | நிலையான பிழை: 6 | நிலையை வெளியிடு: 7 | ஷெல் சிறுநிரலை தேர்ந்தெடு 8 | -------------------------------------------------------------------------------- /android-studio-project/Root-Script-Runner/src/main/res/values-tr/strings.xml: -------------------------------------------------------------------------------- 1 | 2 | Kök Komut Dosyası Koşucusu 3 | Kabuk Komut Dosyası: 4 | Standart Çıkış: 5 | Standart Hata: 6 | Çıkış Durumu: 7 | Kabuk Komut Dosyası Seç 8 | -------------------------------------------------------------------------------- /android-studio-project/libs/MaterialFilePicker-library/src/main/res/drawable/bg_clickable.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /android-studio-project/Root-Script-Runner/src/main/res/values-es/strings.xml: -------------------------------------------------------------------------------- 1 | 2 | Ejecutor de script raíz 3 | Script de shell: 4 | Salida estándar: 5 | Error estándar: 6 | Estado de salida: 7 | Seleccione Script de shell 8 | -------------------------------------------------------------------------------- /android-studio-project/Root-Script-Runner/src/main/res/values-hu/strings.xml: -------------------------------------------------------------------------------- 1 | 2 | Root Script Runner 3 | Shell parancsfájl: 4 | Szabványos kimenet: 5 | Szabványos hiba: 6 | Kilép állapota: 7 | Shell parancsfájl kiválasztása 8 | -------------------------------------------------------------------------------- /android-studio-project/Root-Script-Runner/src/main/res/values-uk/strings.xml: -------------------------------------------------------------------------------- 1 | 2 | Інструмент запуску скриптів 3 | Скрипт оболонки: 4 | Стандартний вивід: 5 | Стандартна помилка: 6 | Стан виходу: 7 | Виберіть скрипт оболонки 8 | -------------------------------------------------------------------------------- /android-studio-project/Root-Script-Runner/src/main/res/values/strings.xml: -------------------------------------------------------------------------------- 1 | 2 | Root Script Runner 3 | 4 | Shell Script: 5 | Standard Output: 6 | Standard Error: 7 | Exit Status: 8 | 9 | Choose Shell Script 10 | 11 | -------------------------------------------------------------------------------- /android-studio-project/Root-Script-Runner/src/main/res/values-bn/strings.xml: -------------------------------------------------------------------------------- 1 | 2 | রুট স্ক্রিপ্ট রানার 3 | শেল স্ক্রিপ্ট: 4 | স্ট্যান্ডার্ড আউটপুট: 5 | স্ট্যান্ডার্ড সমস্যা: 6 | অবস্থা এক্সিট করো: 7 | শেল স্ক্রিপ্ট নির্বাচন করুন 8 | -------------------------------------------------------------------------------- /android-studio-project/Root-Script-Runner/src/main/res/values-ga/strings.xml: -------------------------------------------------------------------------------- 1 | 2 | Eagarthóir Scripte Root 3 | Kell ScriptName: 4 | Aschur caighdeánach: 5 | Earráid Caighdeánach: 6 | Stádas Imeachta: 7 | Roghnaigh Script Shell 8 | -------------------------------------------------------------------------------- /android-studio-project/Root-Script-Runner/src/main/res/values-gu/strings.xml: -------------------------------------------------------------------------------- 1 | 2 | રુટ સ્ક્રિપ્ટ ચલાવનાર 3 | શેલ સ્ક્રિપ્ટ: 4 | પ્રમાણભૂત આઉટપુટ: 5 | પ્રમાણભૂત ભૂલ: 6 | પરિસ્થિતિ બહાર નીકળે છે: 7 | Shell સ્ક્રિપ્ટ ને પસંદ કરો 8 | -------------------------------------------------------------------------------- /android-studio-project/Root-Script-Runner/src/main/res/values-sk/strings.xml: -------------------------------------------------------------------------------- 1 | 2 | Spúšťací spúšťač skriptu 3 | Shell skript: 4 | Štandardný výstup: 5 | Štandardná chyba: 6 | Stav ukončenia: 7 | Vybrať skript v prostredí Shell 8 | -------------------------------------------------------------------------------- /android-studio-project/Root-Script-Runner/src/main/res/values-te/strings.xml: -------------------------------------------------------------------------------- 1 | 2 | రౌట్ స్క్రిప్ట్ రన్నర్ 3 | షెల్ స్క్రిప్ట్: 4 | ప్రామాణిక అవుట్పుట్: 5 | ప్రామాణిక దోషము: 6 | స్థితి \@ label: 7 | షేల్ స్క్రిప్ట్ను యెంచుకొనుము 8 | -------------------------------------------------------------------------------- /android-studio-project/Root-Script-Runner/src/main/res/values-fr-rCA/strings.xml: -------------------------------------------------------------------------------- 1 | 2 | Exécuteur de script racine 3 | Script de shell: 4 | Sortie standard: 5 | Erreur standard: 6 | Statut de sortie: 7 | Sélection du script de shell 8 | -------------------------------------------------------------------------------- /android-studio-project/Root-Script-Runner/src/main/res/values-pl/strings.xml: -------------------------------------------------------------------------------- 1 | 2 | Program uruchamiający skrypt główny 3 | Skrypt powłoki: 4 | Standardowe wyjście: 5 | Błąd standardowy: 6 | Status wyjścia: 7 | Wybierz skrypt powłoki 8 | -------------------------------------------------------------------------------- /android-studio-project/Root-Script-Runner/src/main/res/values-ru/strings.xml: -------------------------------------------------------------------------------- 1 | 2 | Агент корневого сценария 3 | Сценарий оболочки: 4 | Стандартный вывод: 5 | Стандартная ошибка: 6 | Состояние выхода: 7 | Выберите сценарий оболочки 8 | -------------------------------------------------------------------------------- /android-studio-project/Root-Script-Runner/src/main/res/values-bg/strings.xml: -------------------------------------------------------------------------------- 1 | 2 | Главен скрипт на скрипт 3 | Сценарий на обвивка: 4 | Стандартна продукция:: 5 | Стандартна грешка:: 6 | Състояние на изход: 7 | Изберете скрипт на Shell 8 | -------------------------------------------------------------------------------- /android-studio-project/Root-Script-Runner/src/main/res/values-lt/strings.xml: -------------------------------------------------------------------------------- 1 | 2 | Root scenarijų bėgikas 3 | Apvalkalo scenarijus: 4 | Standartinė išvestis: 5 | Standartinė klaida: 6 | Išvežimo Statusas: 7 | Pasirinkti Shell scenarijų 8 | -------------------------------------------------------------------------------- /android-studio-project/Root-Script-Runner/src/main/res/values-ml/strings.xml: -------------------------------------------------------------------------------- 1 | 2 | റൂട്ട് സ്ക്രിപ്റ്റ് റണ്ണര് 3 | ഷെല് സ്ക്രിപ്റ്റ്: 4 | സാധാരണ ഔട്ട്പുട്ട്: 5 | സാധാരണ പിശകു്: 6 | അവസ്ഥ പ്രദര്ശിപ്പിക്കുക: 7 | ഷെല് സ്ക്രിപ്റ്റ് തെരഞ്ഞെടുക്കുക 8 | -------------------------------------------------------------------------------- /android-studio-project/Root-Script-Runner/src/main/res/menu/activity_main.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 10 | 11 | -------------------------------------------------------------------------------- /android-studio-project/libs/MaterialFilePicker-library/src/main/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 3 | 4 | 5 | 6 | 7 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "@warren-bank/Android-Root-Script-Runner", 3 | "private": true, 4 | "license": "GPL-2.0", 5 | "devDependencies": { 6 | "@warren-bank/translate-android-strings": "^1.7.3" 7 | }, 8 | "scripts": { 9 | "translate": "node_modules/.bin/translate-android-strings -i \"en\" -f \"android-studio-project/Root-Script-Runner/src/main/res/values/strings.xml\" -d \"android-studio-project/Root-Script-Runner/src/main/res\" -m --na --nc --nw" 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /android-studio-project/libs/MaterialFilePicker-library/src/main/java/com/nbsp/materialfilepicker/filter/HiddenFilter.java: -------------------------------------------------------------------------------- 1 | package com.nbsp.materialfilepicker.filter; 2 | 3 | import java.io.File; 4 | import java.io.FileFilter; 5 | import java.io.Serializable; 6 | 7 | /** 8 | * Created by Dimorinny on 31.05.16. 9 | */ 10 | public class HiddenFilter implements FileFilter, Serializable { 11 | 12 | @Override 13 | public boolean accept(File f) { 14 | return !f.isHidden(); 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /android-studio-project/libs/MaterialFilePicker-library/src/main/res/values/colors.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | ?colorPrimary 4 | ?colorPrimaryDark 5 | ?colorAccent 6 | 7 | #c7c7c7 8 | 9 | #1a000000 10 | #48000000 11 | #00000000 12 | 13 | -------------------------------------------------------------------------------- /android-studio-project/Root-Script-Runner/src/main/res/values/colors.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | #FAFAFA 4 | #222222 5 | 6 | #607D8B 7 | #FFFFFF 8 | 9 | #ECEFF1 10 | #222222 11 | 12 | #222222 13 | #ECEFF1 14 | 15 | -------------------------------------------------------------------------------- /android-studio-project/Root-Script-Runner/src/main/res/drawable/ic_open_filepicker.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | -------------------------------------------------------------------------------- /android-studio-project/build.gradle: -------------------------------------------------------------------------------- 1 | buildscript { 2 | repositories { 3 | google() 4 | mavenCentral() 5 | jcenter() 6 | } 7 | 8 | dependencies { 9 | classpath 'com.android.tools.build:gradle:3.3.0' // https://mvnrepository.com/artifact/com.android.tools.build/gradle?repo=google 10 | classpath 'com.google.android.gms:strict-version-matcher-plugin:1.1.0' // https://mvnrepository.com/artifact/com.google.android.gms/strict-version-matcher-plugin 11 | } 12 | } 13 | 14 | allprojects { 15 | repositories { 16 | google() 17 | mavenCentral() 18 | jcenter() 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /android-studio-project/libs/MaterialFilePicker-library/src/main/res/values/styles.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 9 | 10 | 14 | 15 | 16 | -------------------------------------------------------------------------------- /android-studio-project/libs/MaterialFilePicker-library/src/main/res/values-zh/strings.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 无可选文件 4 | 5 | 压缩包 6 | 证书 7 | 目录 8 | 文件 9 | 图片 10 | EXCEL 11 | 照片 12 | 音乐 13 | PDF 14 | PPT 15 | WORD 16 | APK 17 | -------------------------------------------------------------------------------- /android-studio-project/libs/MaterialFilePicker-library/src/main/java/com/nbsp/materialfilepicker/filter/CompositeFilter.java: -------------------------------------------------------------------------------- 1 | package com.nbsp.materialfilepicker.filter; 2 | 3 | import java.io.File; 4 | import java.io.FileFilter; 5 | import java.io.Serializable; 6 | import java.util.ArrayList; 7 | 8 | /** 9 | * Created by Dimorinny on 31.05.16. 10 | */ 11 | public class CompositeFilter implements FileFilter, Serializable { 12 | 13 | private ArrayList mFilters; 14 | 15 | public CompositeFilter(ArrayList filters) { 16 | mFilters = filters; 17 | } 18 | 19 | @Override 20 | public boolean accept(File f) { 21 | for (FileFilter filter : mFilters) { 22 | if (!filter.accept(f)) { 23 | return false; 24 | } 25 | } 26 | 27 | return true; 28 | } 29 | } 30 | -------------------------------------------------------------------------------- /android-studio-project/libs/MaterialFilePicker-library/src/main/java/com/nbsp/materialfilepicker/filter/PatternFilter.java: -------------------------------------------------------------------------------- 1 | package com.nbsp.materialfilepicker.filter; 2 | 3 | import java.io.File; 4 | import java.io.FileFilter; 5 | import java.io.Serializable; 6 | import java.util.regex.Pattern; 7 | 8 | /** 9 | * Created by Dimorinny on 31.05.16. 10 | */ 11 | public class PatternFilter implements FileFilter, Serializable { 12 | 13 | private Pattern mPattern; 14 | private boolean mDirectoriesFilter; 15 | 16 | public PatternFilter(Pattern pattern, boolean directoriesFilter) { 17 | mPattern = pattern; 18 | mDirectoriesFilter = directoriesFilter; 19 | } 20 | 21 | @Override 22 | public boolean accept(File f) { 23 | return f.isDirectory() && !mDirectoriesFilter || mPattern.matcher(f.getName()).matches(); 24 | } 25 | } 26 | -------------------------------------------------------------------------------- /android-studio-project/libs/MaterialFilePicker-library/src/main/java/com/nbsp/materialfilepicker/utils/FileComparator.java: -------------------------------------------------------------------------------- 1 | package com.nbsp.materialfilepicker.utils; 2 | 3 | import java.io.File; 4 | import java.util.Comparator; 5 | 6 | /** 7 | * Created by Dimorinny on 24.10.15. 8 | */ 9 | public class FileComparator implements Comparator { 10 | @Override 11 | public int compare(File f1, File f2) { 12 | if (f1 == f2) { 13 | return 0; 14 | } 15 | if (f1.isDirectory() && f2.isFile()) { 16 | // Show directories above files 17 | return -1; 18 | } 19 | if (f1.isFile() && f2.isDirectory()) { 20 | // Show files below directories 21 | return 1; 22 | } 23 | // Sort the directories alphabetically 24 | return f1.getName().compareToIgnoreCase(f2.getName()); 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /android-studio-project/libs/MaterialFilePicker-library/src/main/res/values-ru/strings.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | Файлов нет 4 | Закрыть 5 | Каталог 6 | Файл 7 | Сертификат 8 | Рисунок 9 | Таблица 10 | Картинка 11 | Аудиофайл 12 | Видео 13 | Документ PDF 14 | Презентация 15 | Документ 16 | Архив 17 | 18 | -------------------------------------------------------------------------------- /android-studio-project/libs/MaterialFilePicker-library/src/main/res/values-cs/strings.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | Prázdná složka 4 | Zavřít 5 | Archiv 6 | Certifikát 7 | Složka 8 | Soubor 9 | Kresba 10 | Tabulka 11 | Obrázek 12 | Skladba 13 | Video 14 | PDF dokument 15 | Prezentace 16 | Dokument 17 | APK 18 | -------------------------------------------------------------------------------- /android-studio-project/libs/MaterialFilePicker-library/src/main/res/values-es/strings.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | Certificado 4 | Cerrar 5 | Archivo 6 | APK 7 | Carpeta vacía 8 | Carpeta 9 | Archivo 10 | Foto 11 | Excel 12 | Imagen 13 | Música 14 | Documento PDF 15 | Powerpoint 16 | Vídeo 17 | Documento Word 18 | -------------------------------------------------------------------------------- /android-studio-project/libs/MaterialFilePicker-library/src/main/res/values-sk/strings.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | Prázdny priečinok 4 | Zavrieť 5 | Archív 6 | Certifikát 7 | Priečinok 8 | Súbor 9 | Kresba 10 | Tabuľka 11 | Obrázok 12 | Skladba 13 | Video 14 | PDF dokument 15 | Prezentácia 16 | Dokument 17 | APK 18 | -------------------------------------------------------------------------------- /android-studio-project/libs/MaterialFilePicker-library/src/main/res/values-de/strings.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | Leeres Verzeichnis 4 | Schließen 5 | Archiv 6 | Zertifikat 7 | Verzeichnis 8 | Dokument 9 | Bild 10 | Excel Tabelle 11 | Bild 12 | Musik 13 | Video 14 | PDF Dokument 15 | Presentation 16 | Dokument 17 | APK 18 | 19 | -------------------------------------------------------------------------------- /android-studio-project/libs/MaterialFilePicker-library/src/main/res/values/strings.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | MaterialFilePicker 4 | Close 5 | Empty directory 6 | Archive 7 | Certificate 8 | Directory 9 | File 10 | Picture 11 | Spreadsheet 12 | Image 13 | Music 14 | Video 15 | PDF document 16 | Presentation 17 | Document 18 | APK 19 | -------------------------------------------------------------------------------- /android-studio-project/libs/MaterialFilePicker-library/src/main/res/layout/activity_file_picker.xml: -------------------------------------------------------------------------------- 1 | 2 | 8 | 9 | 14 | 15 | 21 | 22 | 23 | 24 | 29 | 30 | 31 | -------------------------------------------------------------------------------- /android-studio-project/Root-Script-Runner/src/main/res/values/styles.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 10 | 11 | 15 | 16 | 23 | 24 | 28 | 29 | 30 | -------------------------------------------------------------------------------- /android-studio-project/libs/MaterialFilePicker-library/src/main/res/layout/fragment_directory.xml: -------------------------------------------------------------------------------- 1 | 2 | 7 | 8 | 14 | 15 | 23 | 24 | 30 | 31 | 40 | 41 | 42 | 43 | -------------------------------------------------------------------------------- /android-studio-project/libs/MaterialFilePicker-library/src/main/res/layout/item_file.xml: -------------------------------------------------------------------------------- 1 | 2 | 9 | 10 | 17 | 18 | 26 | 27 | 35 | 36 | 41 | 42 | 43 | 44 | -------------------------------------------------------------------------------- /android-studio-project/libs/MaterialFilePicker-library/src/main/java/com/nbsp/materialfilepicker/utils/FileUtils.java: -------------------------------------------------------------------------------- 1 | package com.nbsp.materialfilepicker.utils; 2 | 3 | import java.io.File; 4 | import java.io.FileFilter; 5 | import java.text.DecimalFormat; 6 | import java.util.ArrayList; 7 | import java.util.Arrays; 8 | import java.util.Collections; 9 | import java.util.List; 10 | 11 | /** 12 | * Created by Dimorinny on 24.10.15. 13 | */ 14 | public class FileUtils { 15 | public static List getFileListByDirPath(String path, FileFilter filter) { 16 | File directory = new File(path); 17 | File[] files = directory.listFiles(filter); 18 | 19 | if (files == null) { 20 | return new ArrayList<>(); 21 | } 22 | 23 | List result = Arrays.asList(files); 24 | Collections.sort(result, new FileComparator()); 25 | return result; 26 | } 27 | 28 | public static String cutLastSegmentOfPath(String path) { 29 | if (path.length() - path.replace("/", "").length() <= 1) 30 | return "/"; 31 | String newPath = path.substring(0, path.lastIndexOf("/")); 32 | // We don't need to list the content of /storage/emulated 33 | if (newPath.equals("/storage/emulated")) 34 | newPath = "/storage"; 35 | return newPath; 36 | } 37 | 38 | public static String getReadableFileSize(long size) { 39 | if (size <= 0) return "0"; 40 | final String[] units = new String[]{"B", "KB", "MB", "GB", "TB"}; 41 | int digitGroups = (int) (Math.log10(size) / Math.log10(1024)); 42 | return new DecimalFormat("#").format(size / Math.pow(1024, digitGroups)) + " " + units[digitGroups]; 43 | } 44 | } 45 | -------------------------------------------------------------------------------- /android-studio-project/Root-Script-Runner/build.gradle: -------------------------------------------------------------------------------- 1 | apply from: '../constants.gradle' 2 | apply plugin: 'com.android.application' 3 | 4 | android { 5 | compileSdkVersion project.ext.compileSdkVersion 6 | buildToolsVersion project.ext.buildToolsVersion 7 | 8 | compileOptions { 9 | sourceCompatibility project.ext.javaVersion 10 | targetCompatibility project.ext.javaVersion 11 | } 12 | 13 | defaultConfig { 14 | minSdkVersion project.ext.minSdkVersion 15 | targetSdkVersion project.ext.targetSdkVersion 16 | 17 | applicationId "com.github.warren_bank.root_script_runner" 18 | versionName project.ext.releaseVersion 19 | versionCode project.ext.releaseVersionCode 20 | } 21 | 22 | lintOptions { 23 | disable 'MissingTranslation' 24 | abortOnError true 25 | } 26 | 27 | buildTypes { 28 | release { 29 | shrinkResources true 30 | minifyEnabled true 31 | proguardFiles = [ 32 | "proguard-rules.txt", 33 | getDefaultProguardFile('proguard-android.txt') 34 | ] 35 | } 36 | debug { 37 | jniDebuggable = true 38 | } 39 | } 40 | } 41 | 42 | dependencies { 43 | implementation project(':MaterialFilePicker') 44 | 45 | implementation 'androidx.appcompat:appcompat:' + project.ext.jetpackVersion // (1.0 MB) https://mvnrepository.com/artifact/androidx.appcompat/appcompat?repo=google 46 | implementation 'com.google.android.material:material:' + project.ext.jetpackVersion // (566 KB) https://mvnrepository.com/artifact/com.google.android.material/material?repo=google 47 | } 48 | 49 | apply plugin: 'com.google.android.gms.strict-version-matcher-plugin' 50 | -------------------------------------------------------------------------------- /android-studio-project/libs/MaterialFilePicker-library/build.gradle: -------------------------------------------------------------------------------- 1 | apply from: '../../constants.gradle' 2 | apply plugin: 'com.android.library' 3 | 4 | android { 5 | compileSdkVersion project.ext.compileSdkVersion 6 | buildToolsVersion project.ext.buildToolsVersion 7 | 8 | compileOptions { 9 | sourceCompatibility project.ext.javaVersion 10 | targetCompatibility project.ext.javaVersion 11 | } 12 | 13 | defaultConfig { 14 | minSdkVersion project.ext.minSdkVersion 15 | targetSdkVersion project.ext.targetSdkVersion 16 | } 17 | 18 | lintOptions { 19 | disable 'MissingTranslation' 20 | abortOnError true 21 | } 22 | } 23 | 24 | dependencies { 25 | implementation 'androidx.appcompat:appcompat:' + project.ext.jetpackVersion // (1.0 MB) https://mvnrepository.com/artifact/androidx.appcompat/appcompat?repo=google 26 | implementation 'androidx.fragment:fragment:' + project.ext.jetpackVersion // (152 KB) https://mvnrepository.com/artifact/androidx.fragment/fragment?repo=google 27 | implementation 'androidx.recyclerview:recyclerview:' + project.ext.jetpackVersion // (344 KB) https://mvnrepository.com/artifact/androidx.recyclerview/recyclerview?repo=google 28 | implementation 'com.google.android.material:material:' + project.ext.jetpackVersion // (566 KB) https://mvnrepository.com/artifact/com.google.android.material/material?repo=google 29 | 30 | compileOnly 'androidx.annotation:annotation:' + project.ext.jetpackVersion // ( 22 KB) https://mvnrepository.com/artifact/com.android.support/support-annotations?repo=google 31 | annotationProcessor 'androidx.annotation:annotation:' + project.ext.jetpackVersion 32 | } 33 | 34 | apply plugin: 'com.google.android.gms.strict-version-matcher-plugin' 35 | -------------------------------------------------------------------------------- /android-studio-project/libs/MaterialFilePicker-library/src/main/java/com/nbsp/materialfilepicker/widget/EmptyRecyclerView.java: -------------------------------------------------------------------------------- 1 | package com.nbsp.materialfilepicker.widget; 2 | 3 | import android.content.Context; 4 | import android.util.AttributeSet; 5 | import android.view.View; 6 | import androidx.annotation.NonNull; 7 | import androidx.annotation.Nullable; 8 | import androidx.recyclerview.widget.RecyclerView; 9 | 10 | public class EmptyRecyclerView extends RecyclerView { 11 | @Nullable 12 | View mEmptyView; 13 | 14 | public EmptyRecyclerView(Context context) { 15 | super(context); 16 | } 17 | 18 | public EmptyRecyclerView(Context context, AttributeSet attrs) { 19 | super(context, attrs); 20 | } 21 | 22 | public EmptyRecyclerView(Context context, AttributeSet attrs, int defStyle) { 23 | super(context, attrs, defStyle); 24 | } 25 | 26 | void checkIfEmpty() { 27 | if (mEmptyView != null) { 28 | mEmptyView.setVisibility(getAdapter().getItemCount() > 0 ? GONE : VISIBLE); 29 | } 30 | } 31 | 32 | final 33 | @NonNull 34 | AdapterDataObserver observer = new AdapterDataObserver() { 35 | @Override 36 | public void onChanged() { 37 | super.onChanged(); 38 | checkIfEmpty(); 39 | } 40 | }; 41 | 42 | @Override 43 | public void setAdapter(@Nullable Adapter adapter) { 44 | final Adapter oldAdapter = getAdapter(); 45 | if (oldAdapter != null) { 46 | oldAdapter.unregisterAdapterDataObserver(observer); 47 | } 48 | super.setAdapter(adapter); 49 | if (adapter != null) { 50 | adapter.registerAdapterDataObserver(observer); 51 | } 52 | } 53 | 54 | public void setEmptyView(@Nullable View mEmptyView) { 55 | this.mEmptyView = mEmptyView; 56 | checkIfEmpty(); 57 | } 58 | } 59 | -------------------------------------------------------------------------------- /android-studio-project/Root-Script-Runner/src/main/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 2 | 7 | 8 | 9 | 10 | 16 | 17 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 39 | 40 | 41 | 42 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | #### [Root Script Runner](https://github.com/warren-bank/Android-Root-Script-Runner) 2 | 3 | Android app that runs shell scripts as the _root_ user on a __rooted__ Android device. 4 | 5 | #### Use Cases: 6 | 7 | 1. interactive 8 | * uses a file picker to allow the user to select a shell script from the file system 9 | * executes the chosen script as the _root_ user 10 | 2. _Intent_ driven 11 | * reads the file path to a shell script in the __data URI__ of an _Intent_ 12 | * executes the chosen script as the _root_ user 13 | * exits 14 | 15 | #### Example: 16 | 17 | * configuration to execute a specific shell script from a homescreen shortcut using [AnyCut](https://github.com/warren-bank/Android-libraries/tree/nujham/AnyCut): 18 | * _Make your own shortcut:_ 19 | * __Action:__
`com.github.warren_bank.root_script_runner.ACTION_WIDGET` 20 | * __Data:__
`file:/sdcard/path/to/script/file.sh` 21 | * __Type:__
_[empty]_ 22 | 23 | #### Notes: 24 | 25 | * minimum supported version of Android: 26 | * Android 4.0 Ice Cream Sandwich (API 14) 27 | 28 | #### Credits: 29 | 30 | * [launcher icon](https://github.com/odb/official-bash-logo/raw/61eff022f2dad3c7468f5deb4f06652d15f2c143/assets/Logos/Icons/PNG/256x256.png) 31 | * copied from the [Official GNU Bash Logo](https://github.com/odb/official-bash-logo) project repo 32 | * released under the [MIT License](https://github.com/odb/official-bash-logo/blob/61eff022f2dad3c7468f5deb4f06652d15f2c143/LICENSE) 33 | * [MaterialFilePicker](https://github.com/nbsp-team/MaterialFilePicker) 34 | * great little library to browse the file system and select a file 35 | * used as a starting point, but [heavily modified](https://github.com/warren-bank/Android-libraries/tree/fork/nbsp-team/MaterialFilePicker/02_androidx) 36 | * [Shell.java](https://gist.github.com/ricardojlrufino/61dbc1e9a8120862791e71287b17fef8/raw/adfbf58830886eceb79fb7dd93747f7c07e542b2/Shell.java) 37 | * authored by [Ricardo JL Rufino](https://github.com/ricardojlrufino) 38 | * a utility class containing static methods for running commands as root user 39 | * used as a starting point, but [heavily modified](https://github.com/warren-bank/Android-libraries/tree/ricardojlrufino/Shell) 40 | 41 | #### Related Reading: 42 | 43 | * "How To" article on XDA: [Execute Root Commands and Read Output](https://forum.xda-developers.com/showthread.php?t=2226664) 44 | * authored by [pedja1](https://forum.xda-developers.com/member.php?u=4303594) 45 | 46 | #### Legal: 47 | 48 | * copyright: [Warren Bank](https://github.com/warren-bank) 49 | * license: [GPL-2.0](https://www.gnu.org/licenses/old-licenses/gpl-2.0.txt) 50 | -------------------------------------------------------------------------------- /android-studio-project/gradlew.bat: -------------------------------------------------------------------------------- 1 | @if "%DEBUG%" == "" @echo off 2 | @rem ########################################################################## 3 | @rem 4 | @rem Gradle startup script for Windows 5 | @rem 6 | @rem ########################################################################## 7 | 8 | @rem Set local scope for the variables with windows NT shell 9 | if "%OS%"=="Windows_NT" setlocal 10 | 11 | @rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. 12 | set DEFAULT_JVM_OPTS= 13 | 14 | set DIRNAME=%~dp0 15 | if "%DIRNAME%" == "" set DIRNAME=. 16 | set APP_BASE_NAME=%~n0 17 | set APP_HOME=%DIRNAME% 18 | 19 | @rem Find java.exe 20 | if defined JAVA_HOME goto findJavaFromJavaHome 21 | 22 | set JAVA_EXE=java.exe 23 | %JAVA_EXE% -version >NUL 2>&1 24 | if "%ERRORLEVEL%" == "0" goto init 25 | 26 | echo. 27 | echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. 28 | echo. 29 | echo Please set the JAVA_HOME variable in your environment to match the 30 | echo location of your Java installation. 31 | 32 | goto fail 33 | 34 | :findJavaFromJavaHome 35 | set JAVA_HOME=%JAVA_HOME:"=% 36 | set JAVA_EXE=%JAVA_HOME%/bin/java.exe 37 | 38 | if exist "%JAVA_EXE%" goto init 39 | 40 | echo. 41 | echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% 42 | echo. 43 | echo Please set the JAVA_HOME variable in your environment to match the 44 | echo location of your Java installation. 45 | 46 | goto fail 47 | 48 | :init 49 | @rem Get command-line arguments, handling Windowz variants 50 | 51 | if not "%OS%" == "Windows_NT" goto win9xME_args 52 | if "%@eval[2+2]" == "4" goto 4NT_args 53 | 54 | :win9xME_args 55 | @rem Slurp the command line arguments. 56 | set CMD_LINE_ARGS= 57 | set _SKIP=2 58 | 59 | :win9xME_args_slurp 60 | if "x%~1" == "x" goto execute 61 | 62 | set CMD_LINE_ARGS=%* 63 | goto execute 64 | 65 | :4NT_args 66 | @rem Get arguments from the 4NT Shell from JP Software 67 | set CMD_LINE_ARGS=%$ 68 | 69 | :execute 70 | @rem Setup the command line 71 | 72 | set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar 73 | 74 | @rem Execute Gradle 75 | "%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %CMD_LINE_ARGS% 76 | 77 | :end 78 | @rem End local scope for the variables with windows NT shell 79 | if "%ERRORLEVEL%"=="0" goto mainEnd 80 | 81 | :fail 82 | rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of 83 | rem the _cmd.exe /c_ return code! 84 | if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1 85 | exit /b 1 86 | 87 | :mainEnd 88 | if "%OS%"=="Windows_NT" endlocal 89 | 90 | :omega 91 | -------------------------------------------------------------------------------- /android-studio-project/libs/MaterialFilePicker-library/src/main/java/com/nbsp/materialfilepicker/ui/DirectoryAdapter.java: -------------------------------------------------------------------------------- 1 | package com.nbsp.materialfilepicker.ui; 2 | 3 | import android.content.Context; 4 | import android.view.LayoutInflater; 5 | import android.view.View; 6 | import android.view.ViewGroup; 7 | import android.widget.ImageView; 8 | import android.widget.TextView; 9 | import androidx.recyclerview.widget.RecyclerView; 10 | 11 | import com.nbsp.materialfilepicker.R; 12 | import com.nbsp.materialfilepicker.utils.FileTypeUtils; 13 | 14 | import java.io.File; 15 | import java.util.List; 16 | 17 | /** 18 | * Created by Dimorinny on 24.10.15. 19 | */ 20 | 21 | public class DirectoryAdapter extends RecyclerView.Adapter { 22 | public interface OnItemClickListener { 23 | void onItemClick(View view, int position); 24 | } 25 | 26 | public class DirectoryViewHolder extends RecyclerView.ViewHolder { 27 | private ImageView mFileImage; 28 | private TextView mFileTitle; 29 | private TextView mFileSubtitle; 30 | 31 | public DirectoryViewHolder(View itemView, final OnItemClickListener clickListener) { 32 | super(itemView); 33 | 34 | itemView.setOnClickListener(new View.OnClickListener() { 35 | @Override 36 | public void onClick(View v) { 37 | clickListener.onItemClick(v, getAdapterPosition()); 38 | } 39 | }); 40 | 41 | mFileImage = (ImageView) itemView.findViewById(R.id.item_file_image); 42 | mFileTitle = (TextView) itemView.findViewById(R.id.item_file_title); 43 | mFileSubtitle = (TextView) itemView.findViewById(R.id.item_file_subtitle); 44 | } 45 | } 46 | 47 | private List mFiles; 48 | private Context mContext; 49 | private OnItemClickListener mOnItemClickListener; 50 | 51 | public DirectoryAdapter(Context context, List files) { 52 | mContext = context; 53 | mFiles = files; 54 | } 55 | 56 | public void setOnItemClickListener(OnItemClickListener listener) { 57 | mOnItemClickListener = listener; 58 | } 59 | 60 | @Override 61 | public DirectoryViewHolder onCreateViewHolder(ViewGroup parent, 62 | int viewType) { 63 | View view = LayoutInflater.from(parent.getContext()) 64 | .inflate(R.layout.item_file, parent, false); 65 | 66 | return new DirectoryViewHolder(view, mOnItemClickListener); 67 | } 68 | 69 | @Override 70 | public void onBindViewHolder(DirectoryViewHolder holder, int position) { 71 | File currentFile = mFiles.get(position); 72 | 73 | FileTypeUtils.FileType fileType = FileTypeUtils.getFileType(currentFile); 74 | holder.mFileImage.setImageResource(fileType.getIcon()); 75 | holder.mFileSubtitle.setText(fileType.getDescription()); 76 | holder.mFileTitle.setText(currentFile.getName()); 77 | } 78 | 79 | @Override 80 | public int getItemCount() { 81 | return mFiles.size(); 82 | } 83 | 84 | public File getModel(int index) { 85 | return mFiles.get(index); 86 | } 87 | } -------------------------------------------------------------------------------- /android-studio-project/libs/MaterialFilePicker-library/src/main/java/com/nbsp/materialfilepicker/utils/FileTypeUtils.java: -------------------------------------------------------------------------------- 1 | package com.nbsp.materialfilepicker.utils; 2 | 3 | import android.webkit.MimeTypeMap; 4 | 5 | import com.nbsp.materialfilepicker.R; 6 | 7 | import java.io.File; 8 | import java.io.UnsupportedEncodingException; 9 | import java.net.URLEncoder; 10 | import java.util.HashMap; 11 | import java.util.Map; 12 | 13 | /** 14 | * Created by nickolay on 25.10.15. 15 | */ 16 | 17 | public class FileTypeUtils { 18 | public enum FileType { 19 | DIRECTORY(R.drawable.ic_folder_48dp, R.string.type_directory), 20 | DOCUMENT(R.drawable.ic_document_box, R.string.type_document), 21 | CERTIFICATE(R.drawable.ic_certificate_box, R.string.type_certificate, "cer", "der", "pfx", "p12", "arm", "pem"), 22 | DRAWING(R.drawable.ic_drawing_box, R.string.type_drawing, "ai", "cdr", "dfx", "eps", "svg", "stl", "wmf", "emf", "art", "xar"), 23 | EXCEL(R.drawable.ic_excel_box, R.string.type_excel, "xls", "xlk", "xlsb", "xlsm", "xlsx", "xlr", "xltm", "xlw", "numbers", "ods", "ots"), 24 | IMAGE(R.drawable.ic_image_box, R.string.type_image, "bmp", "gif", "ico", "jpeg", "jpg", "pcx", "png", "psd", "tga", "tiff", "tif", "xcf"), 25 | MUSIC(R.drawable.ic_music_box, R.string.type_music, "aiff", "aif", "wav", "flac", "m4a", "wma", "amr", "mp2", "mp3", "wma", "aac", "mid", "m3u"), 26 | VIDEO(R.drawable.ic_video_box, R.string.type_video, "avi", "mov", "wmv", "mkv", "3gp", "f4v", "flv", "mp4", "mpeg", "webm"), 27 | PDF(R.drawable.ic_pdf_box, R.string.type_pdf, "pdf"), 28 | POWER_POINT(R.drawable.ic_powerpoint_box, R.string.type_power_point, "pptx", "keynote", "ppt", "pps", "pot", "odp", "otp"), 29 | WORD(R.drawable.ic_word_box, R.string.type_word, "doc", "docm", "docx", "dot", "mcw", "rtf", "pages", "odt", "ott"), 30 | ARCHIVE(R.drawable.ic_zip_box, R.string.type_archive, "cab", "7z", "alz", "arj", "bzip2", "bz2", "dmg", "gzip", "gz", "jar", "lz", "lzip", "lzma", "zip", "rar", "tar", "tgz"), 31 | APK(R.drawable.ic_apk_box, R.string.type_apk, "apk"); 32 | 33 | private int icon; 34 | private int description; 35 | private String[] extensions; 36 | 37 | FileType(int icon, int description, String... extensions) { 38 | this.icon = icon; 39 | this.description = description; 40 | this.extensions = extensions; 41 | } 42 | 43 | public String[] getExtensions() { 44 | return extensions; 45 | } 46 | 47 | public int getIcon() { 48 | return icon; 49 | } 50 | 51 | public int getDescription() { 52 | return description; 53 | } 54 | } 55 | 56 | private static Map fileTypeExtensions = new HashMap<>(); 57 | 58 | static { 59 | for (FileType fileType : FileType.values()) { 60 | for (String extension : fileType.getExtensions()) { 61 | fileTypeExtensions.put(extension, fileType); 62 | } 63 | } 64 | } 65 | 66 | public static FileType getFileType(File file) { 67 | if (file.isDirectory()) { 68 | return FileType.DIRECTORY; 69 | } 70 | 71 | FileType fileType = fileTypeExtensions.get(getExtension(file.getName())); 72 | if (fileType != null) { 73 | return fileType; 74 | } 75 | 76 | return FileType.DOCUMENT; 77 | } 78 | 79 | public static String getExtension(String fileName) { 80 | String encoded; 81 | try { 82 | encoded = URLEncoder.encode(fileName, "UTF-8").replace("+", "%20"); 83 | } catch (UnsupportedEncodingException e) { 84 | encoded = fileName; 85 | } 86 | return MimeTypeMap.getFileExtensionFromUrl(encoded).toLowerCase(); 87 | } 88 | } 89 | -------------------------------------------------------------------------------- /android-studio-project/libs/MaterialFilePicker-library/src/main/java/com/nbsp/materialfilepicker/ui/DirectoryFragment.java: -------------------------------------------------------------------------------- 1 | package com.nbsp.materialfilepicker.ui; 2 | 3 | import android.app.Activity; 4 | import android.app.Fragment; 5 | import android.os.Bundle; 6 | import android.view.LayoutInflater; 7 | import android.view.View; 8 | import android.view.ViewGroup; 9 | import androidx.annotation.Nullable; 10 | import androidx.recyclerview.widget.LinearLayoutManager; 11 | 12 | import com.nbsp.materialfilepicker.R; 13 | import com.nbsp.materialfilepicker.filter.CompositeFilter; 14 | import com.nbsp.materialfilepicker.utils.FileUtils; 15 | import com.nbsp.materialfilepicker.widget.EmptyRecyclerView; 16 | 17 | import java.io.File; 18 | 19 | /** 20 | * Created by Dimorinny on 24.10.15. 21 | */ 22 | public class DirectoryFragment extends Fragment { 23 | interface FileClickListener { 24 | void onFileClicked(File clickedFile); 25 | } 26 | 27 | private static final String ARG_FILE_PATH = "arg_file_path"; 28 | private static final String ARG_FILTER = "arg_filter"; 29 | 30 | private View mEmptyView; 31 | private String mPath; 32 | 33 | private CompositeFilter mFilter; 34 | 35 | private EmptyRecyclerView mDirectoryRecyclerView; 36 | private DirectoryAdapter mDirectoryAdapter; 37 | private FileClickListener mFileClickListener; 38 | 39 | @SuppressWarnings("deprecation") 40 | @Override 41 | public void onAttach(Activity activity) { 42 | super.onAttach(activity); 43 | mFileClickListener = (FileClickListener) activity; 44 | } 45 | 46 | @Override 47 | public void onDetach() { 48 | super.onDetach(); 49 | mFileClickListener = null; 50 | } 51 | 52 | public static DirectoryFragment getInstance( 53 | String path, CompositeFilter filter) { 54 | DirectoryFragment instance = new DirectoryFragment(); 55 | 56 | Bundle args = new Bundle(); 57 | args.putString(ARG_FILE_PATH, path); 58 | args.putSerializable(ARG_FILTER, filter); 59 | instance.setArguments(args); 60 | 61 | return instance; 62 | } 63 | 64 | @Nullable 65 | @Override 66 | public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 67 | View view = inflater.inflate(R.layout.fragment_directory, container, false); 68 | mDirectoryRecyclerView = (EmptyRecyclerView) view.findViewById(R.id.directory_recycler_view); 69 | mEmptyView = view.findViewById(R.id.directory_empty_view); 70 | return view; 71 | } 72 | 73 | @Override 74 | public void onViewCreated(View view, Bundle savedInstanceState) { 75 | super.onViewCreated(view, savedInstanceState); 76 | initArgs(); 77 | initFilesList(); 78 | } 79 | 80 | private void initFilesList() { 81 | mDirectoryAdapter = new DirectoryAdapter(getActivity(), 82 | FileUtils.getFileListByDirPath(mPath, mFilter)); 83 | 84 | mDirectoryAdapter.setOnItemClickListener(new DirectoryAdapter.OnItemClickListener() { 85 | @Override 86 | public void onItemClick(View view, int position) { 87 | if (mFileClickListener != null) { 88 | mFileClickListener.onFileClicked(mDirectoryAdapter.getModel(position)); 89 | } 90 | } 91 | }); 92 | 93 | mDirectoryRecyclerView.setLayoutManager(new LinearLayoutManager(getActivity())); 94 | mDirectoryRecyclerView.setAdapter(mDirectoryAdapter); 95 | mDirectoryRecyclerView.setEmptyView(mEmptyView); 96 | } 97 | 98 | @SuppressWarnings("unchecked") 99 | private void initArgs() { 100 | if (getArguments().getString(ARG_FILE_PATH) != null) { 101 | mPath = getArguments().getString(ARG_FILE_PATH); 102 | } 103 | 104 | mFilter = (CompositeFilter) getArguments().getSerializable(ARG_FILTER); 105 | } 106 | } 107 | -------------------------------------------------------------------------------- /android-studio-project/Root-Script-Runner/src/main/java/com/github/warren_bank/root_script_runner/MainActivity.java: -------------------------------------------------------------------------------- 1 | package com.github.warren_bank.root_script_runner; 2 | 3 | import com.github.warren_bank.root_script_runner.helpers.Shell; 4 | import com.github.warren_bank.root_script_runner.helpers.Shell.Result; 5 | 6 | import android.content.Intent; 7 | import android.net.Uri; 8 | import android.os.Bundle; 9 | import android.view.Menu; 10 | import android.view.MenuItem; 11 | import android.widget.TextView; 12 | import androidx.appcompat.app.AppCompatActivity; 13 | import androidx.appcompat.widget.Toolbar; 14 | 15 | import com.nbsp.materialfilepicker.MaterialFilePicker; 16 | import com.nbsp.materialfilepicker.ui.FilePickerActivity; 17 | 18 | import java.io.File; 19 | import java.util.regex.Pattern; 20 | 21 | public class MainActivity extends AppCompatActivity { 22 | 23 | private static final String ACTION_WIDGET = "com.github.warren_bank.root_script_runner.ACTION_WIDGET"; 24 | private static final Pattern SHELL_SCRIPT_PATTERN = Pattern.compile(".*\\.sh$", Pattern.CASE_INSENSITIVE); 25 | private static final int FILE_PICKER_REQUEST_CODE = 1; 26 | 27 | private String currentPath; 28 | 29 | private TextView script; 30 | private TextView stdout; 31 | private TextView stderr; 32 | private TextView status; 33 | 34 | @Override 35 | protected void onCreate(Bundle savedInstanceState) { 36 | super.onCreate(savedInstanceState); 37 | 38 | Intent intent = getIntent(); 39 | if ((intent != null) && intent.getAction().equals(ACTION_WIDGET)) { 40 | Uri data = intent.getData(); 41 | if (data != null) { 42 | try { 43 | String path = data.getPath(); 44 | Shell.execScript(path); 45 | } 46 | catch(Exception e) { 47 | } 48 | finally { 49 | finish(); 50 | return; 51 | } 52 | } 53 | } 54 | 55 | setContentView(R.layout.activity_main); 56 | 57 | Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); 58 | setSupportActionBar(toolbar); 59 | getSupportActionBar().setTitle(""); 60 | toolbar.setNavigationIcon(null); 61 | 62 | currentPath = "/storage"; 63 | 64 | script = (TextView) findViewById(R.id.script); 65 | stdout = (TextView) findViewById(R.id.stdout); 66 | stderr = (TextView) findViewById(R.id.stderr); 67 | status = (TextView) findViewById(R.id.status); 68 | 69 | openFilePicker(); 70 | } 71 | 72 | @Override 73 | public boolean onCreateOptionsMenu(Menu menu) { 74 | getMenuInflater().inflate(R.menu.activity_main, menu); 75 | return true; 76 | } 77 | 78 | @Override 79 | public boolean onOptionsItemSelected(MenuItem menuItem) { 80 | switch(menuItem.getItemId()) { 81 | case R.id.action_open_filepicker: 82 | openFilePicker(); 83 | return true; 84 | default: 85 | return super.onOptionsItemSelected(menuItem); 86 | } 87 | } 88 | 89 | private void openFilePicker() { 90 | script.setText(""); 91 | stdout.setText(""); 92 | stderr.setText(""); 93 | status.setText(""); 94 | 95 | new MaterialFilePicker() 96 | .withActivity(MainActivity.this) 97 | .withRequestCode(FILE_PICKER_REQUEST_CODE) 98 | .withRootPath("/") 99 | .withPath(currentPath) 100 | .withHiddenFiles(true) 101 | .withFilter(SHELL_SCRIPT_PATTERN) 102 | .withFilterDirectories(false) 103 | .start(); 104 | } 105 | 106 | @Override 107 | protected void onActivityResult(int requestCode, int resultCode, Intent data) { 108 | super.onActivityResult(requestCode, resultCode, data); 109 | 110 | if (requestCode == FILE_PICKER_REQUEST_CODE && resultCode == RESULT_OK) { 111 | String path = data.getStringExtra(FilePickerActivity.RESULT_FILE_PATH); 112 | if (path == null) return; 113 | 114 | File file = new File(path); 115 | if (!file.exists()) return; 116 | 117 | currentPath = file.getParent(); 118 | if (currentPath == null) currentPath = "/"; 119 | 120 | script.setText(path); 121 | try { 122 | Result result = Shell.execScriptForResult(file); 123 | 124 | stdout.setText(result.stdout); 125 | stderr.setText(result.stderr); 126 | status.setText(Integer.toString(result.status)); 127 | } 128 | catch(Exception e) { 129 | stderr.setText(e.getMessage()); 130 | } 131 | } 132 | } 133 | } 134 | -------------------------------------------------------------------------------- /android-studio-project/Root-Script-Runner/src/main/res/layout/activity_main.xml: -------------------------------------------------------------------------------- 1 | 2 | 10 | 11 | 15 | 16 | 21 | 22 | 23 | 27 | 28 | 32 | 33 | 43 | 51 | 52 | 62 | 70 | 71 | 81 | 89 | 90 | 100 | 108 | 109 | 110 | 111 | 112 | -------------------------------------------------------------------------------- /android-studio-project/gradlew: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | ############################################################################## 4 | ## 5 | ## Gradle start up script for UN*X 6 | ## 7 | ############################################################################## 8 | 9 | # Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. 10 | DEFAULT_JVM_OPTS="" 11 | 12 | APP_NAME="Gradle" 13 | APP_BASE_NAME=`basename "$0"` 14 | 15 | # Use the maximum available, or set MAX_FD != -1 to use that value. 16 | MAX_FD="maximum" 17 | 18 | warn ( ) { 19 | echo "$*" 20 | } 21 | 22 | die ( ) { 23 | echo 24 | echo "$*" 25 | echo 26 | exit 1 27 | } 28 | 29 | # OS specific support (must be 'true' or 'false'). 30 | cygwin=false 31 | msys=false 32 | darwin=false 33 | case "`uname`" in 34 | CYGWIN* ) 35 | cygwin=true 36 | ;; 37 | Darwin* ) 38 | darwin=true 39 | ;; 40 | MINGW* ) 41 | msys=true 42 | ;; 43 | esac 44 | 45 | # Attempt to set APP_HOME 46 | # Resolve links: $0 may be a link 47 | PRG="$0" 48 | # Need this for relative symlinks. 49 | while [ -h "$PRG" ] ; do 50 | ls=`ls -ld "$PRG"` 51 | link=`expr "$ls" : '.*-> \(.*\)$'` 52 | if expr "$link" : '/.*' > /dev/null; then 53 | PRG="$link" 54 | else 55 | PRG=`dirname "$PRG"`"/$link" 56 | fi 57 | done 58 | SAVED="`pwd`" 59 | cd "`dirname \"$PRG\"`/" >/dev/null 60 | APP_HOME="`pwd -P`" 61 | cd "$SAVED" >/dev/null 62 | 63 | CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar 64 | 65 | # Determine the Java command to use to start the JVM. 66 | if [ -n "$JAVA_HOME" ] ; then 67 | if [ -x "$JAVA_HOME/jre/sh/java" ] ; then 68 | # IBM's JDK on AIX uses strange locations for the executables 69 | JAVACMD="$JAVA_HOME/jre/sh/java" 70 | else 71 | JAVACMD="$JAVA_HOME/bin/java" 72 | fi 73 | if [ ! -x "$JAVACMD" ] ; then 74 | die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME 75 | 76 | Please set the JAVA_HOME variable in your environment to match the 77 | location of your Java installation." 78 | fi 79 | else 80 | JAVACMD="java" 81 | which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. 82 | 83 | Please set the JAVA_HOME variable in your environment to match the 84 | location of your Java installation." 85 | fi 86 | 87 | # Increase the maximum file descriptors if we can. 88 | if [ "$cygwin" = "false" -a "$darwin" = "false" ] ; then 89 | MAX_FD_LIMIT=`ulimit -H -n` 90 | if [ $? -eq 0 ] ; then 91 | if [ "$MAX_FD" = "maximum" -o "$MAX_FD" = "max" ] ; then 92 | MAX_FD="$MAX_FD_LIMIT" 93 | fi 94 | ulimit -n $MAX_FD 95 | if [ $? -ne 0 ] ; then 96 | warn "Could not set maximum file descriptor limit: $MAX_FD" 97 | fi 98 | else 99 | warn "Could not query maximum file descriptor limit: $MAX_FD_LIMIT" 100 | fi 101 | fi 102 | 103 | # For Darwin, add options to specify how the application appears in the dock 104 | if $darwin; then 105 | GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\"" 106 | fi 107 | 108 | # For Cygwin, switch paths to Windows format before running java 109 | if $cygwin ; then 110 | APP_HOME=`cygpath --path --mixed "$APP_HOME"` 111 | CLASSPATH=`cygpath --path --mixed "$CLASSPATH"` 112 | JAVACMD=`cygpath --unix "$JAVACMD"` 113 | 114 | # We build the pattern for arguments to be converted via cygpath 115 | ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null` 116 | SEP="" 117 | for dir in $ROOTDIRSRAW ; do 118 | ROOTDIRS="$ROOTDIRS$SEP$dir" 119 | SEP="|" 120 | done 121 | OURCYGPATTERN="(^($ROOTDIRS))" 122 | # Add a user-defined pattern to the cygpath arguments 123 | if [ "$GRADLE_CYGPATTERN" != "" ] ; then 124 | OURCYGPATTERN="$OURCYGPATTERN|($GRADLE_CYGPATTERN)" 125 | fi 126 | # Now convert the arguments - kludge to limit ourselves to /bin/sh 127 | i=0 128 | for arg in "$@" ; do 129 | CHECK=`echo "$arg"|egrep -c "$OURCYGPATTERN" -` 130 | CHECK2=`echo "$arg"|egrep -c "^-"` ### Determine if an option 131 | 132 | if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then ### Added a condition 133 | eval `echo args$i`=`cygpath --path --ignore --mixed "$arg"` 134 | else 135 | eval `echo args$i`="\"$arg\"" 136 | fi 137 | i=$((i+1)) 138 | done 139 | case $i in 140 | (0) set -- ;; 141 | (1) set -- "$args0" ;; 142 | (2) set -- "$args0" "$args1" ;; 143 | (3) set -- "$args0" "$args1" "$args2" ;; 144 | (4) set -- "$args0" "$args1" "$args2" "$args3" ;; 145 | (5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;; 146 | (6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;; 147 | (7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;; 148 | (8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;; 149 | (9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;; 150 | esac 151 | fi 152 | 153 | # Split up the JVM_OPTS And GRADLE_OPTS values into an array, following the shell quoting and substitution rules 154 | function splitJvmOpts() { 155 | JVM_OPTS=("$@") 156 | } 157 | eval splitJvmOpts $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS 158 | JVM_OPTS[${#JVM_OPTS[*]}]="-Dorg.gradle.appname=$APP_BASE_NAME" 159 | 160 | exec "$JAVACMD" "${JVM_OPTS[@]}" -classpath "$CLASSPATH" org.gradle.wrapper.GradleWrapperMain "$@" 161 | -------------------------------------------------------------------------------- /android-studio-project/libs/MaterialFilePicker-library/src/main/java/com/nbsp/materialfilepicker/MaterialFilePicker.java: -------------------------------------------------------------------------------- 1 | package com.nbsp.materialfilepicker; 2 | 3 | import android.app.Activity; 4 | import android.app.Fragment; 5 | import android.content.Intent; 6 | 7 | import com.nbsp.materialfilepicker.filter.CompositeFilter; 8 | import com.nbsp.materialfilepicker.filter.HiddenFilter; 9 | import com.nbsp.materialfilepicker.filter.PatternFilter; 10 | import com.nbsp.materialfilepicker.ui.FilePickerActivity; 11 | 12 | import java.io.FileFilter; 13 | import java.util.ArrayList; 14 | import java.util.regex.Pattern; 15 | 16 | 17 | /** 18 | * Material File Picker builder 19 | */ 20 | public class MaterialFilePicker { 21 | private Activity mActivity; 22 | private Fragment mFragment; 23 | private androidx.fragment.app.Fragment mSupportFragment; 24 | 25 | private Class mFilePickerClass = FilePickerActivity.class; 26 | 27 | private Integer mRequestCode; 28 | private Pattern mFileFilter; 29 | private Boolean mDirectoriesFilter = false; 30 | private String mRootPath; 31 | private String mCurrentPath; 32 | private Boolean mShowHidden = false; 33 | private Boolean mCloseable = true; 34 | private CharSequence mTitle; 35 | 36 | public MaterialFilePicker() { 37 | } 38 | 39 | 40 | /** 41 | * Specifies activity, which will be used to 42 | * start file picker 43 | */ 44 | public MaterialFilePicker withActivity(Activity activity) { 45 | if (mSupportFragment != null || mFragment != null) { 46 | throw new RuntimeException("You must pass either Activity, Fragment or SupportFragment"); 47 | } 48 | 49 | mActivity = activity; 50 | return this; 51 | } 52 | 53 | /** 54 | * Specifies fragment, which will be used to 55 | * start file picker 56 | */ 57 | public MaterialFilePicker withFragment(Fragment fragment) { 58 | if (mSupportFragment != null || mActivity != null) { 59 | throw new RuntimeException("You must pass either Activity, Fragment or SupportFragment"); 60 | } 61 | 62 | mFragment = fragment; 63 | return this; 64 | } 65 | 66 | /** 67 | * Specifies support fragment which will be used to 68 | * start file picker 69 | */ 70 | public MaterialFilePicker withSupportFragment(androidx.fragment.app.Fragment fragment) { 71 | if (mActivity != null || mFragment != null) { 72 | throw new RuntimeException("You must pass either Activity, Fragment or SupportFragment"); 73 | } 74 | 75 | mSupportFragment = fragment; 76 | return this; 77 | } 78 | 79 | /** 80 | * Specifies request code that used in activity result 81 | * 82 | * @see Getting a Result from an Activity 83 | */ 84 | public MaterialFilePicker withRequestCode(int requestCode) { 85 | mRequestCode = requestCode; 86 | return this; 87 | } 88 | 89 | 90 | /** 91 | * Hides files that matched by specified regular expression. 92 | * Use {@link MaterialFilePicker#withFilterDirectories withFilterDirectories} method 93 | * to enable directories filtering 94 | */ 95 | public MaterialFilePicker withFilter(Pattern pattern) { 96 | mFileFilter = pattern; 97 | return this; 98 | } 99 | 100 | /** 101 | * If directoriesFilter is true directories will also be affected by filter, 102 | * the default value of directories filter is false 103 | * 104 | * @see MaterialFilePicker#withFilter 105 | */ 106 | public MaterialFilePicker withFilterDirectories(boolean directoriesFilter) { 107 | mDirectoriesFilter = directoriesFilter; 108 | return this; 109 | } 110 | 111 | /** 112 | * Specifies root directory for picker, 113 | * user can't go upper that specified path 114 | */ 115 | public MaterialFilePicker withRootPath(String rootPath) { 116 | mRootPath = rootPath; 117 | return this; 118 | } 119 | 120 | /** 121 | * Specifies start directory for picker, 122 | * which will be shown to user at the beginning 123 | */ 124 | public MaterialFilePicker withPath(String path) { 125 | mCurrentPath = path; 126 | return this; 127 | } 128 | 129 | /** 130 | * Show or hide hidden files in picker 131 | */ 132 | public MaterialFilePicker withHiddenFiles(boolean show) { 133 | mShowHidden = show; 134 | return this; 135 | } 136 | 137 | /** 138 | * Show or hide close menu in picker 139 | */ 140 | public MaterialFilePicker withCloseMenu(boolean closeable) { 141 | mCloseable = closeable; 142 | return this; 143 | } 144 | 145 | /** 146 | * Set title of picker 147 | */ 148 | public MaterialFilePicker withTitle(CharSequence title) { 149 | mTitle = title; 150 | return this; 151 | } 152 | 153 | public MaterialFilePicker withCustomActivity(Class customActivityClass) { 154 | mFilePickerClass = customActivityClass; 155 | return this; 156 | } 157 | 158 | public CompositeFilter getFilter() { 159 | ArrayList filters = new ArrayList<>(); 160 | 161 | if (!mShowHidden) { 162 | filters.add(new HiddenFilter()); 163 | } 164 | 165 | if (mFileFilter != null) { 166 | filters.add(new PatternFilter(mFileFilter, mDirectoriesFilter)); 167 | } 168 | 169 | return new CompositeFilter(filters); 170 | } 171 | 172 | 173 | /** 174 | * @return Intent that can be used to start Material File Picker 175 | */ 176 | public Intent getIntent() { 177 | CompositeFilter filter = getFilter(); 178 | 179 | Activity activity = null; 180 | if (mActivity != null) { 181 | activity = mActivity; 182 | } else if (mFragment != null) { 183 | activity = mFragment.getActivity(); 184 | } else if (mSupportFragment != null) { 185 | activity = mSupportFragment.getActivity(); 186 | } 187 | 188 | Intent intent = new Intent(activity, mFilePickerClass); 189 | intent.putExtra(FilePickerActivity.ARG_FILTER, filter); 190 | intent.putExtra(FilePickerActivity.ARG_CLOSEABLE, mCloseable); 191 | 192 | if (mRootPath != null) { 193 | intent.putExtra(FilePickerActivity.ARG_START_PATH, mRootPath); 194 | } 195 | 196 | if (mCurrentPath != null) { 197 | intent.putExtra(FilePickerActivity.ARG_CURRENT_PATH, mCurrentPath); 198 | } 199 | 200 | if (mTitle != null) { 201 | intent.putExtra(FilePickerActivity.ARG_TITLE, mTitle); 202 | } 203 | 204 | return intent; 205 | } 206 | 207 | /** 208 | * Open Material File Picker activity. 209 | * You should set Activity or Fragment before calling this method 210 | * 211 | * @see MaterialFilePicker#withActivity(Activity) 212 | * @see MaterialFilePicker#withFragment(Fragment) 213 | * @see MaterialFilePicker#withSupportFragment(androidx.fragment.app.Fragment) 214 | */ 215 | public void start() { 216 | if (mActivity == null && mFragment == null && mSupportFragment == null) { 217 | throw new RuntimeException("You must pass Activity/Fragment by calling withActivity/withFragment/withSupportFragment method"); 218 | } 219 | 220 | if (mRequestCode == null) { 221 | throw new RuntimeException("You must pass request code by calling withRequestCode method"); 222 | } 223 | 224 | Intent intent = getIntent(); 225 | 226 | if (mActivity != null) { 227 | mActivity.startActivityForResult(intent, mRequestCode); 228 | } else if (mFragment != null) { 229 | mFragment.startActivityForResult(intent, mRequestCode); 230 | } else { 231 | mSupportFragment.startActivityForResult(intent, mRequestCode); 232 | } 233 | } 234 | } 235 | -------------------------------------------------------------------------------- /android-studio-project/Root-Script-Runner/src/main/java/com/github/warren_bank/root_script_runner/helpers/Shell.java: -------------------------------------------------------------------------------- 1 | package com.github.warren_bank.root_script_runner.helpers; 2 | 3 | import android.util.Log; 4 | 5 | import java.io.BufferedReader; 6 | import java.io.ByteArrayOutputStream; 7 | import java.io.Closeable; 8 | import java.io.DataOutputStream; 9 | import java.io.File; 10 | import java.io.FileInputStream; 11 | import java.io.IOException; 12 | import java.io.InputStream; 13 | import java.io.InputStreamReader; 14 | import java.net.DatagramSocket; 15 | import java.net.Socket; 16 | import java.util.LinkedList; 17 | import java.util.List; 18 | import java.util.regex.Matcher; 19 | import java.util.regex.Pattern; 20 | 21 | public class Shell { 22 | 23 | public static final class Result { 24 | public String stdout; 25 | public String stderr; 26 | public int status; 27 | 28 | public Result(String stdout, String stderr, int status) { 29 | this.stdout = stdout; 30 | this.stderr = stderr; 31 | this.status = status; 32 | } 33 | } 34 | 35 | private static final String TAG = "Shell"; 36 | private static final Pattern INET_IP_PATTERN = Pattern.compile("\\binet (\\d+\\.\\d+\\.\\d+\\.\\d+)\\/\\d+\\b", Pattern.DOTALL); 37 | 38 | public static Result execForResult(String...strings) { 39 | Process su = null; 40 | DataOutputStream outputStream = null; 41 | InputStream stdout = null; 42 | InputStream stderr = null; 43 | Result res = null; 44 | try{ 45 | su = Runtime.getRuntime().exec("su"); 46 | outputStream = new DataOutputStream(su.getOutputStream()); 47 | stdout = su.getInputStream(); 48 | stderr = su.getErrorStream(); 49 | 50 | for (String s : strings) { 51 | outputStream.writeBytes(s+"\n"); 52 | outputStream.flush(); 53 | } 54 | 55 | outputStream.writeBytes("exit\n"); 56 | outputStream.flush(); 57 | try { 58 | su.waitFor(); 59 | } catch (InterruptedException e) { 60 | Log.e(TAG, e.getMessage(), e); 61 | } 62 | 63 | res = new Result( 64 | readFully(stdout).trim(), 65 | readFully(stderr).trim(), 66 | su.exitValue() 67 | ); 68 | } catch (IOException e){ 69 | Log.e(TAG, e.getMessage(), e); 70 | } finally { 71 | closeSilently(outputStream, stdout, stderr); 72 | } 73 | return res; 74 | } 75 | 76 | public static void exec(String...strings) { 77 | Process su = null; 78 | DataOutputStream outputStream = null; 79 | try{ 80 | su = Runtime.getRuntime().exec("su"); 81 | outputStream = new DataOutputStream(su.getOutputStream()); 82 | 83 | for (String s : strings) { 84 | outputStream.writeBytes(s+"\n"); 85 | outputStream.flush(); 86 | } 87 | 88 | outputStream.writeBytes("exit\n"); 89 | outputStream.flush(); 90 | try { 91 | su.waitFor(); 92 | } catch (InterruptedException e) { 93 | Log.e(TAG, e.getMessage(), e); 94 | } 95 | } catch (IOException e){ 96 | Log.e(TAG, e.getMessage(), e); 97 | } finally { 98 | closeSilently(outputStream); 99 | } 100 | } 101 | 102 | public static Result execScriptForResult(String inputFilePath) throws IOException { 103 | File inputFile = new File(inputFilePath); 104 | return execScriptForResult(inputFile); 105 | } 106 | 107 | public static Result execScriptForResult(File inputFile) throws IOException { 108 | InputStream input = new FileInputStream(inputFile); 109 | return execScriptForResult(input); 110 | } 111 | 112 | public static Result execScriptForResult(InputStream input) throws IOException { 113 | String[] lines = readScript(input); 114 | return execForResult(lines); 115 | } 116 | 117 | public static void execScript(String inputFilePath) throws IOException { 118 | File inputFile = new File(inputFilePath); 119 | execScript(inputFile); 120 | } 121 | 122 | public static void execScript(File inputFile) throws IOException { 123 | InputStream input = new FileInputStream(inputFile); 124 | execScript(input); 125 | } 126 | 127 | public static void execScript(InputStream input) throws IOException { 128 | String[] lines = readScript(input); 129 | exec(lines); 130 | } 131 | 132 | private static String[] readScript(InputStream is) throws IOException { 133 | BufferedReader reader = new BufferedReader(new InputStreamReader(is)); 134 | List lines = new LinkedList<>(); 135 | String line; 136 | while ((line = reader.readLine()) != null) { 137 | lines.add(line); 138 | } 139 | return lines.toArray(new String[]{}); 140 | } 141 | 142 | private static String readFully(InputStream is) throws IOException { 143 | ByteArrayOutputStream baos = new ByteArrayOutputStream(); 144 | byte[] buffer = new byte[1024]; 145 | int length = 0; 146 | while ((length = is.read(buffer)) != -1) { 147 | baos.write(buffer, 0, length); 148 | } 149 | return baos.toString("UTF-8"); 150 | } 151 | 152 | private static void closeSilently(Object... xs) { 153 | // Note: on Android API levels prior to 19, Socket does not implement Closeable 154 | for (Object x : xs) { 155 | if (x != null) { 156 | try { 157 | if (x instanceof Closeable) { 158 | ((Closeable) x).close(); 159 | } else if (x instanceof Socket) { 160 | ((Socket) x).close(); 161 | } else if (x instanceof DatagramSocket) { 162 | ((DatagramSocket) x).close(); 163 | } else { 164 | throw new RuntimeException("cannot close " + x); 165 | } 166 | } catch (Throwable e) { 167 | Log.e(TAG, e.getMessage(), e); 168 | } 169 | } 170 | } 171 | } 172 | 173 | public static void startADBd(int port) throws IOException{ 174 | String cmds[] = { 175 | "setprop service.adb.tcp.port " + port, 176 | "stop adbd", 177 | "start adbd" 178 | }; 179 | 180 | // TCP not enabled (first time) 181 | int current_port = getADBdPort(); 182 | if(current_port != port) { 183 | Log.i(TAG, "Starting ADBd, current port = " + Integer.toString(current_port) + ", new port = " + Integer.toString(port)); 184 | exec(cmds); 185 | return; 186 | } 187 | 188 | // ADBd not running 189 | if(!isADBdRunning()) { 190 | Log.i(TAG, "Starting ADBd at port " + Integer.toString(port)); 191 | exec(cmds); 192 | return; 193 | } 194 | 195 | Log.i(TAG, "ADBd is running at port " + Integer.toString(port)); 196 | } 197 | 198 | public static int getADBdPort() { 199 | Result result = execForResult("getprop service.adb.tcp.port"); 200 | 201 | if ((result.status > 0) || result.stdout.isEmpty()) { 202 | return -1; 203 | } 204 | 205 | int port; 206 | try { 207 | port = Integer.parseInt(result.stdout, 10); 208 | } 209 | catch (Exception e) { 210 | return -1; 211 | } 212 | 213 | return port; 214 | } 215 | 216 | public static boolean isADBdRunning() { 217 | Result result = execForResult("getprop init.svc.adbd"); 218 | 219 | if ((result.status > 0) || result.stdout.isEmpty()) { 220 | return false; 221 | } 222 | 223 | return result.stdout.equals("running"); 224 | } 225 | 226 | public static String getWlanIpAddress() { 227 | Result result = execForResult("ip -f inet addr show wlan0"); 228 | 229 | if ((result.status > 0) || result.stdout.isEmpty()) { 230 | return null; 231 | } 232 | 233 | try { 234 | Matcher matcher = INET_IP_PATTERN.matcher(result.stdout); 235 | if (!matcher.find()) return null; 236 | 237 | String url = matcher.group(1); 238 | return url; 239 | } 240 | catch (Exception e) { 241 | return null; 242 | } 243 | } 244 | 245 | public static void stopADBd() throws IOException{ 246 | startADBd(-1); 247 | } 248 | } 249 | -------------------------------------------------------------------------------- /android-studio-project/libs/MaterialFilePicker-library/src/main/java/com/nbsp/materialfilepicker/ui/FilePickerActivity.java: -------------------------------------------------------------------------------- 1 | package com.nbsp.materialfilepicker.ui; 2 | 3 | import android.Manifest; 4 | import android.app.FragmentManager; 5 | import android.content.Intent; 6 | import android.content.pm.PackageManager; 7 | import android.os.Build; 8 | import android.os.Bundle; 9 | import android.os.Environment; 10 | import android.os.Handler; 11 | import android.text.TextUtils; 12 | import android.view.Menu; 13 | import android.view.MenuItem; 14 | import android.widget.TextView; 15 | import androidx.appcompat.app.AppCompatActivity; 16 | import androidx.appcompat.widget.Toolbar; 17 | 18 | import com.nbsp.materialfilepicker.R; 19 | import com.nbsp.materialfilepicker.filter.CompositeFilter; 20 | import com.nbsp.materialfilepicker.filter.PatternFilter; 21 | import com.nbsp.materialfilepicker.utils.FileUtils; 22 | 23 | import java.io.File; 24 | import java.io.FileFilter; 25 | import java.io.Serializable; 26 | import java.lang.reflect.Field; 27 | import java.util.ArrayList; 28 | import java.util.Collections; 29 | import java.util.regex.Pattern; 30 | 31 | /** 32 | * Created by Dimorinny on 24.10.15. 33 | */ 34 | public class FilePickerActivity extends AppCompatActivity implements DirectoryFragment.FileClickListener { 35 | public static final String ARG_START_PATH = "arg_start_path"; 36 | public static final String ARG_CURRENT_PATH = "arg_current_path"; 37 | 38 | public static final String ARG_FILTER = "arg_filter"; 39 | public static final String ARG_CLOSEABLE = "arg_closeable"; 40 | public static final String ARG_TITLE = "arg_title"; 41 | 42 | public static final String STATE_START_PATH = "state_start_path"; 43 | private static final String STATE_CURRENT_PATH = "state_current_path"; 44 | 45 | public static final String RESULT_FILE_PATH = "result_file_path"; 46 | private static final int HANDLE_CLICK_DELAY = 150; 47 | private static final int PERMISSIONS_REQUEST_CODE = 0; 48 | 49 | private Toolbar mToolbar; 50 | private String mStartPath = Environment.getExternalStorageDirectory().getAbsolutePath(); 51 | private String mCurrentPath = mStartPath; 52 | private CharSequence mTitle; 53 | 54 | private Boolean mCloseable; 55 | 56 | private CompositeFilter mFilter; 57 | 58 | @Override 59 | protected void onCreate(Bundle savedInstanceState) { 60 | super.onCreate(savedInstanceState); 61 | setContentView(R.layout.activity_file_picker); 62 | 63 | initArguments(savedInstanceState); 64 | initViews(); 65 | initToolbar(); 66 | initBackStackState(); 67 | checkPermissionsAndInitFragment(); 68 | } 69 | 70 | @SuppressWarnings("unchecked") 71 | private void initArguments(Bundle savedInstanceState) { 72 | if (getIntent().hasExtra(ARG_FILTER)) { 73 | Serializable filter = getIntent().getSerializableExtra(ARG_FILTER); 74 | 75 | if (filter instanceof Pattern) { 76 | ArrayList filters = new ArrayList<>(); 77 | filters.add(new PatternFilter((Pattern) filter, false)); 78 | mFilter = new CompositeFilter(filters); 79 | } else { 80 | mFilter = (CompositeFilter) filter; 81 | } 82 | } 83 | 84 | if (savedInstanceState != null) { 85 | mStartPath = savedInstanceState.getString(STATE_START_PATH); 86 | mCurrentPath = savedInstanceState.getString(STATE_CURRENT_PATH); 87 | updateTitle(); 88 | } else { 89 | if (getIntent().hasExtra(ARG_START_PATH)) { 90 | mStartPath = getIntent().getStringExtra(ARG_START_PATH); 91 | mCurrentPath = mStartPath; 92 | } 93 | 94 | if (getIntent().hasExtra(ARG_CURRENT_PATH)) { 95 | String currentPath = getIntent().getStringExtra(ARG_CURRENT_PATH); 96 | 97 | if (currentPath.startsWith(mStartPath)) { 98 | mCurrentPath = currentPath; 99 | } 100 | } 101 | } 102 | 103 | if (getIntent().hasExtra(ARG_TITLE)) { 104 | mTitle = getIntent().getCharSequenceExtra(ARG_TITLE); 105 | } 106 | 107 | if (getIntent().hasExtra(ARG_CLOSEABLE)) { 108 | mCloseable = getIntent().getBooleanExtra(ARG_CLOSEABLE, true); 109 | } 110 | } 111 | 112 | private void initToolbar() { 113 | setSupportActionBar(mToolbar); 114 | 115 | // Show back button 116 | if (getSupportActionBar() != null) { 117 | getSupportActionBar().setDisplayHomeAsUpEnabled(true); 118 | } 119 | 120 | // Truncate start of path 121 | try { 122 | Field f; 123 | if (TextUtils.isEmpty(mTitle)) { 124 | f = mToolbar.getClass().getDeclaredField("mTitleTextView"); 125 | } else { 126 | f = mToolbar.getClass().getDeclaredField("mSubtitleTextView"); 127 | } 128 | 129 | f.setAccessible(true); 130 | TextView textView = (TextView) f.get(mToolbar); 131 | textView.setEllipsize(TextUtils.TruncateAt.START); 132 | } catch (Exception ignored) { 133 | } 134 | 135 | if (!TextUtils.isEmpty(mTitle)) { 136 | setTitle(mTitle); 137 | } 138 | updateTitle(); 139 | } 140 | 141 | private void initViews() { 142 | mToolbar = (Toolbar) findViewById(R.id.toolbar); 143 | } 144 | 145 | private void initFragment() { 146 | getFragmentManager().beginTransaction() 147 | .replace(R.id.container, DirectoryFragment.getInstance( 148 | mCurrentPath, mFilter)) 149 | .addToBackStack(null) 150 | .commit(); 151 | } 152 | 153 | private void checkPermissionsAndInitFragment() { 154 | if (Build.VERSION.SDK_INT < 23) { 155 | initFragment(); 156 | } else { 157 | String permission = Manifest.permission.READ_EXTERNAL_STORAGE; 158 | 159 | if (checkSelfPermission(permission) != PackageManager.PERMISSION_GRANTED) { 160 | requestPermissions(new String[]{permission}, PERMISSIONS_REQUEST_CODE); 161 | } else { 162 | initFragment(); 163 | } 164 | } 165 | } 166 | 167 | @Override 168 | public void onRequestPermissionsResult(int requestCode, String permissions[], int[] grantResults) { 169 | switch (requestCode) { 170 | case PERMISSIONS_REQUEST_CODE: { 171 | if ((grantResults.length > 0) && (grantResults[0] == PackageManager.PERMISSION_GRANTED)) { 172 | initFragment(); 173 | } else { 174 | // permission denied: cancel 175 | setResult(RESULT_CANCELED); 176 | finish(); 177 | } 178 | } 179 | } 180 | } 181 | 182 | private void initBackStackState() { 183 | String pathToAdd = mCurrentPath; 184 | ArrayList separatedPaths = new ArrayList<>(); 185 | 186 | while (!pathToAdd.equals(mStartPath)) { 187 | pathToAdd = FileUtils.cutLastSegmentOfPath(pathToAdd); 188 | separatedPaths.add(pathToAdd); 189 | } 190 | 191 | Collections.reverse(separatedPaths); 192 | 193 | for (String path : separatedPaths) { 194 | addFragmentToBackStack(path); 195 | } 196 | } 197 | 198 | private void updateTitle() { 199 | if (getSupportActionBar() != null) { 200 | String titlePath = mCurrentPath.isEmpty() ? "/" : mCurrentPath; 201 | if (TextUtils.isEmpty(mTitle)) { 202 | getSupportActionBar().setTitle(titlePath); 203 | } else { 204 | getSupportActionBar().setSubtitle(titlePath); 205 | } 206 | } 207 | } 208 | 209 | private void addFragmentToBackStack(String path) { 210 | getFragmentManager().beginTransaction() 211 | .replace(R.id.container, DirectoryFragment.getInstance( 212 | path, mFilter)) 213 | .addToBackStack(null) 214 | .commit(); 215 | } 216 | 217 | @Override 218 | public boolean onCreateOptionsMenu(Menu menu) { 219 | getMenuInflater().inflate(R.menu.menu, menu); 220 | menu.findItem(R.id.action_close).setVisible(mCloseable); 221 | return true; 222 | } 223 | 224 | @Override 225 | public boolean onOptionsItemSelected(MenuItem menuItem) { 226 | if (menuItem.getItemId() == android.R.id.home) { 227 | onBackPressed(); 228 | } else if (menuItem.getItemId() == R.id.action_close) { 229 | finish(); 230 | } 231 | return super.onOptionsItemSelected(menuItem); 232 | } 233 | 234 | @Override 235 | public void onBackPressed() { 236 | FragmentManager fm = getFragmentManager(); 237 | 238 | if (!mCurrentPath.equals(mStartPath)) { 239 | fm.popBackStack(); 240 | mCurrentPath = FileUtils.cutLastSegmentOfPath(mCurrentPath); 241 | updateTitle(); 242 | } else { 243 | setResult(RESULT_CANCELED); 244 | finish(); 245 | } 246 | } 247 | 248 | @Override 249 | public void onSaveInstanceState(Bundle outState) { 250 | super.onSaveInstanceState(outState); 251 | outState.putString(STATE_CURRENT_PATH, mCurrentPath); 252 | outState.putString(STATE_START_PATH, mStartPath); 253 | } 254 | 255 | @Override 256 | public void onFileClicked(final File clickedFile) { 257 | new Handler().postDelayed(new Runnable() { 258 | @Override 259 | public void run() { 260 | handleFileClicked(clickedFile); 261 | } 262 | }, HANDLE_CLICK_DELAY); 263 | } 264 | 265 | private void handleFileClicked(final File clickedFile) { 266 | if (clickedFile.isDirectory()) { 267 | mCurrentPath = clickedFile.getPath(); 268 | // If the user wanna go to the emulated directory, he will be taken to the 269 | // corresponding user emulated folder. 270 | if (mCurrentPath.equals("/storage/emulated")) 271 | mCurrentPath = Environment.getExternalStorageDirectory().getAbsolutePath(); 272 | addFragmentToBackStack(mCurrentPath); 273 | updateTitle(); 274 | } else { 275 | setResultAndFinish(clickedFile.getPath()); 276 | } 277 | } 278 | 279 | private void setResultAndFinish(String filePath) { 280 | Intent data = new Intent(); 281 | data.putExtra(RESULT_FILE_PATH, filePath); 282 | setResult(RESULT_OK, data); 283 | finish(); 284 | } 285 | } 286 | -------------------------------------------------------------------------------- /LICENSE.txt: -------------------------------------------------------------------------------- 1 | GNU GENERAL PUBLIC LICENSE 2 | Version 2, June 1991 3 | 4 | Copyright (C) 1989, 1991 Free Software Foundation, Inc., 5 | 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA 6 | Everyone is permitted to copy and distribute verbatim copies 7 | of this license document, but changing it is not allowed. 8 | 9 | Preamble 10 | 11 | The licenses for most software are designed to take away your 12 | freedom to share and change it. By contrast, the GNU General Public 13 | License is intended to guarantee your freedom to share and change free 14 | software--to make sure the software is free for all its users. This 15 | General Public License applies to most of the Free Software 16 | Foundation's software and to any other program whose authors commit to 17 | using it. (Some other Free Software Foundation software is covered by 18 | the GNU Lesser General Public License instead.) You can apply it to 19 | your programs, too. 20 | 21 | When we speak of free software, we are referring to freedom, not 22 | price. Our General Public Licenses are designed to make sure that you 23 | have the freedom to distribute copies of free software (and charge for 24 | this service if you wish), that you receive source code or can get it 25 | if you want it, that you can change the software or use pieces of it 26 | in new free programs; and that you know you can do these things. 27 | 28 | To protect your rights, we need to make restrictions that forbid 29 | anyone to deny you these rights or to ask you to surrender the rights. 30 | These restrictions translate to certain responsibilities for you if you 31 | distribute copies of the software, or if you modify it. 32 | 33 | For example, if you distribute copies of such a program, whether 34 | gratis or for a fee, you must give the recipients all the rights that 35 | you have. You must make sure that they, too, receive or can get the 36 | source code. And you must show them these terms so they know their 37 | rights. 38 | 39 | We protect your rights with two steps: (1) copyright the software, and 40 | (2) offer you this license which gives you legal permission to copy, 41 | distribute and/or modify the software. 42 | 43 | Also, for each author's protection and ours, we want to make certain 44 | that everyone understands that there is no warranty for this free 45 | software. If the software is modified by someone else and passed on, we 46 | want its recipients to know that what they have is not the original, so 47 | that any problems introduced by others will not reflect on the original 48 | authors' reputations. 49 | 50 | Finally, any free program is threatened constantly by software 51 | patents. We wish to avoid the danger that redistributors of a free 52 | program will individually obtain patent licenses, in effect making the 53 | program proprietary. To prevent this, we have made it clear that any 54 | patent must be licensed for everyone's free use or not licensed at all. 55 | 56 | The precise terms and conditions for copying, distribution and 57 | modification follow. 58 | 59 | GNU GENERAL PUBLIC LICENSE 60 | TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION 61 | 62 | 0. This License applies to any program or other work which contains 63 | a notice placed by the copyright holder saying it may be distributed 64 | under the terms of this General Public License. The "Program", below, 65 | refers to any such program or work, and a "work based on the Program" 66 | means either the Program or any derivative work under copyright law: 67 | that is to say, a work containing the Program or a portion of it, 68 | either verbatim or with modifications and/or translated into another 69 | language. (Hereinafter, translation is included without limitation in 70 | the term "modification".) Each licensee is addressed as "you". 71 | 72 | Activities other than copying, distribution and modification are not 73 | covered by this License; they are outside its scope. The act of 74 | running the Program is not restricted, and the output from the Program 75 | is covered only if its contents constitute a work based on the 76 | Program (independent of having been made by running the Program). 77 | Whether that is true depends on what the Program does. 78 | 79 | 1. You may copy and distribute verbatim copies of the Program's 80 | source code as you receive it, in any medium, provided that you 81 | conspicuously and appropriately publish on each copy an appropriate 82 | copyright notice and disclaimer of warranty; keep intact all the 83 | notices that refer to this License and to the absence of any warranty; 84 | and give any other recipients of the Program a copy of this License 85 | along with the Program. 86 | 87 | You may charge a fee for the physical act of transferring a copy, and 88 | you may at your option offer warranty protection in exchange for a fee. 89 | 90 | 2. You may modify your copy or copies of the Program or any portion 91 | of it, thus forming a work based on the Program, and copy and 92 | distribute such modifications or work under the terms of Section 1 93 | above, provided that you also meet all of these conditions: 94 | 95 | a) You must cause the modified files to carry prominent notices 96 | stating that you changed the files and the date of any change. 97 | 98 | b) You must cause any work that you distribute or publish, that in 99 | whole or in part contains or is derived from the Program or any 100 | part thereof, to be licensed as a whole at no charge to all third 101 | parties under the terms of this License. 102 | 103 | c) If the modified program normally reads commands interactively 104 | when run, you must cause it, when started running for such 105 | interactive use in the most ordinary way, to print or display an 106 | announcement including an appropriate copyright notice and a 107 | notice that there is no warranty (or else, saying that you provide 108 | a warranty) and that users may redistribute the program under 109 | these conditions, and telling the user how to view a copy of this 110 | License. (Exception: if the Program itself is interactive but 111 | does not normally print such an announcement, your work based on 112 | the Program is not required to print an announcement.) 113 | 114 | These requirements apply to the modified work as a whole. If 115 | identifiable sections of that work are not derived from the Program, 116 | and can be reasonably considered independent and separate works in 117 | themselves, then this License, and its terms, do not apply to those 118 | sections when you distribute them as separate works. But when you 119 | distribute the same sections as part of a whole which is a work based 120 | on the Program, the distribution of the whole must be on the terms of 121 | this License, whose permissions for other licensees extend to the 122 | entire whole, and thus to each and every part regardless of who wrote it. 123 | 124 | Thus, it is not the intent of this section to claim rights or contest 125 | your rights to work written entirely by you; rather, the intent is to 126 | exercise the right to control the distribution of derivative or 127 | collective works based on the Program. 128 | 129 | In addition, mere aggregation of another work not based on the Program 130 | with the Program (or with a work based on the Program) on a volume of 131 | a storage or distribution medium does not bring the other work under 132 | the scope of this License. 133 | 134 | 3. You may copy and distribute the Program (or a work based on it, 135 | under Section 2) in object code or executable form under the terms of 136 | Sections 1 and 2 above provided that you also do one of the following: 137 | 138 | a) Accompany it with the complete corresponding machine-readable 139 | source code, which must be distributed under the terms of Sections 140 | 1 and 2 above on a medium customarily used for software interchange; or, 141 | 142 | b) Accompany it with a written offer, valid for at least three 143 | years, to give any third party, for a charge no more than your 144 | cost of physically performing source distribution, a complete 145 | machine-readable copy of the corresponding source code, to be 146 | distributed under the terms of Sections 1 and 2 above on a medium 147 | customarily used for software interchange; or, 148 | 149 | c) Accompany it with the information you received as to the offer 150 | to distribute corresponding source code. (This alternative is 151 | allowed only for noncommercial distribution and only if you 152 | received the program in object code or executable form with such 153 | an offer, in accord with Subsection b above.) 154 | 155 | The source code for a work means the preferred form of the work for 156 | making modifications to it. For an executable work, complete source 157 | code means all the source code for all modules it contains, plus any 158 | associated interface definition files, plus the scripts used to 159 | control compilation and installation of the executable. However, as a 160 | special exception, the source code distributed need not include 161 | anything that is normally distributed (in either source or binary 162 | form) with the major components (compiler, kernel, and so on) of the 163 | operating system on which the executable runs, unless that component 164 | itself accompanies the executable. 165 | 166 | If distribution of executable or object code is made by offering 167 | access to copy from a designated place, then offering equivalent 168 | access to copy the source code from the same place counts as 169 | distribution of the source code, even though third parties are not 170 | compelled to copy the source along with the object code. 171 | 172 | 4. You may not copy, modify, sublicense, or distribute the Program 173 | except as expressly provided under this License. Any attempt 174 | otherwise to copy, modify, sublicense or distribute the Program is 175 | void, and will automatically terminate your rights under this License. 176 | However, parties who have received copies, or rights, from you under 177 | this License will not have their licenses terminated so long as such 178 | parties remain in full compliance. 179 | 180 | 5. You are not required to accept this License, since you have not 181 | signed it. However, nothing else grants you permission to modify or 182 | distribute the Program or its derivative works. These actions are 183 | prohibited by law if you do not accept this License. Therefore, by 184 | modifying or distributing the Program (or any work based on the 185 | Program), you indicate your acceptance of this License to do so, and 186 | all its terms and conditions for copying, distributing or modifying 187 | the Program or works based on it. 188 | 189 | 6. Each time you redistribute the Program (or any work based on the 190 | Program), the recipient automatically receives a license from the 191 | original licensor to copy, distribute or modify the Program subject to 192 | these terms and conditions. You may not impose any further 193 | restrictions on the recipients' exercise of the rights granted herein. 194 | You are not responsible for enforcing compliance by third parties to 195 | this License. 196 | 197 | 7. If, as a consequence of a court judgment or allegation of patent 198 | infringement or for any other reason (not limited to patent issues), 199 | conditions are imposed on you (whether by court order, agreement or 200 | otherwise) that contradict the conditions of this License, they do not 201 | excuse you from the conditions of this License. If you cannot 202 | distribute so as to satisfy simultaneously your obligations under this 203 | License and any other pertinent obligations, then as a consequence you 204 | may not distribute the Program at all. For example, if a patent 205 | license would not permit royalty-free redistribution of the Program by 206 | all those who receive copies directly or indirectly through you, then 207 | the only way you could satisfy both it and this License would be to 208 | refrain entirely from distribution of the Program. 209 | 210 | If any portion of this section is held invalid or unenforceable under 211 | any particular circumstance, the balance of the section is intended to 212 | apply and the section as a whole is intended to apply in other 213 | circumstances. 214 | 215 | It is not the purpose of this section to induce you to infringe any 216 | patents or other property right claims or to contest validity of any 217 | such claims; this section has the sole purpose of protecting the 218 | integrity of the free software distribution system, which is 219 | implemented by public license practices. Many people have made 220 | generous contributions to the wide range of software distributed 221 | through that system in reliance on consistent application of that 222 | system; it is up to the author/donor to decide if he or she is willing 223 | to distribute software through any other system and a licensee cannot 224 | impose that choice. 225 | 226 | This section is intended to make thoroughly clear what is believed to 227 | be a consequence of the rest of this License. 228 | 229 | 8. If the distribution and/or use of the Program is restricted in 230 | certain countries either by patents or by copyrighted interfaces, the 231 | original copyright holder who places the Program under this License 232 | may add an explicit geographical distribution limitation excluding 233 | those countries, so that distribution is permitted only in or among 234 | countries not thus excluded. In such case, this License incorporates 235 | the limitation as if written in the body of this License. 236 | 237 | 9. The Free Software Foundation may publish revised and/or new versions 238 | of the General Public License from time to time. Such new versions will 239 | be similar in spirit to the present version, but may differ in detail to 240 | address new problems or concerns. 241 | 242 | Each version is given a distinguishing version number. If the Program 243 | specifies a version number of this License which applies to it and "any 244 | later version", you have the option of following the terms and conditions 245 | either of that version or of any later version published by the Free 246 | Software Foundation. If the Program does not specify a version number of 247 | this License, you may choose any version ever published by the Free Software 248 | Foundation. 249 | 250 | 10. If you wish to incorporate parts of the Program into other free 251 | programs whose distribution conditions are different, write to the author 252 | to ask for permission. For software which is copyrighted by the Free 253 | Software Foundation, write to the Free Software Foundation; we sometimes 254 | make exceptions for this. Our decision will be guided by the two goals 255 | of preserving the free status of all derivatives of our free software and 256 | of promoting the sharing and reuse of software generally. 257 | 258 | NO WARRANTY 259 | 260 | 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY 261 | FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN 262 | OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES 263 | PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED 264 | OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF 265 | MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS 266 | TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE 267 | PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, 268 | REPAIR OR CORRECTION. 269 | 270 | 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING 271 | WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR 272 | REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, 273 | INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING 274 | OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED 275 | TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY 276 | YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER 277 | PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE 278 | POSSIBILITY OF SUCH DAMAGES. 279 | 280 | END OF TERMS AND CONDITIONS 281 | 282 | How to Apply These Terms to Your New Programs 283 | 284 | If you develop a new program, and you want it to be of the greatest 285 | possible use to the public, the best way to achieve this is to make it 286 | free software which everyone can redistribute and change under these terms. 287 | 288 | To do so, attach the following notices to the program. It is safest 289 | to attach them to the start of each source file to most effectively 290 | convey the exclusion of warranty; and each file should have at least 291 | the "copyright" line and a pointer to where the full notice is found. 292 | 293 | 294 | Copyright (C) 295 | 296 | This program is free software; you can redistribute it and/or modify 297 | it under the terms of the GNU General Public License as published by 298 | the Free Software Foundation; either version 2 of the License, or 299 | (at your option) any later version. 300 | 301 | This program is distributed in the hope that it will be useful, 302 | but WITHOUT ANY WARRANTY; without even the implied warranty of 303 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 304 | GNU General Public License for more details. 305 | 306 | You should have received a copy of the GNU General Public License along 307 | with this program; if not, write to the Free Software Foundation, Inc., 308 | 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. 309 | 310 | Also add information on how to contact you by electronic and paper mail. 311 | 312 | If the program is interactive, make it output a short notice like this 313 | when it starts in an interactive mode: 314 | 315 | Gnomovision version 69, Copyright (C) year name of author 316 | Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. 317 | This is free software, and you are welcome to redistribute it 318 | under certain conditions; type `show c' for details. 319 | 320 | The hypothetical commands `show w' and `show c' should show the appropriate 321 | parts of the General Public License. Of course, the commands you use may 322 | be called something other than `show w' and `show c'; they could even be 323 | mouse-clicks or menu items--whatever suits your program. 324 | 325 | You should also get your employer (if you work as a programmer) or your 326 | school, if any, to sign a "copyright disclaimer" for the program, if 327 | necessary. Here is a sample; alter the names: 328 | 329 | Yoyodyne, Inc., hereby disclaims all copyright interest in the program 330 | `Gnomovision' (which makes passes at compilers) written by James Hacker. 331 | 332 | , 1 April 1989 333 | Ty Coon, President of Vice 334 | 335 | This General Public License does not permit incorporating your program into 336 | proprietary programs. If your program is a subroutine library, you may 337 | consider it more useful to permit linking proprietary applications with the 338 | library. If this is what you want to do, use the GNU Lesser General 339 | Public License instead of this License. 340 | --------------------------------------------------------------------------------