├── .idea ├── .name ├── .gitignore ├── compiler.xml ├── vcs.xml ├── copyright │ ├── profiles_settings.xml │ └── GPL_v3.xml ├── migrations.xml ├── misc.xml └── gradle.xml ├── app ├── .gitignore ├── src │ ├── main │ │ ├── res │ │ │ ├── font │ │ │ │ └── bebasneue_regular.ttf │ │ │ ├── mipmap-hdpi │ │ │ │ ├── ic_launcher.png │ │ │ │ ├── ic_launcher_background.png │ │ │ │ ├── ic_launcher_foreground.png │ │ │ │ └── ic_launcher_monochrome.png │ │ │ ├── mipmap-mdpi │ │ │ │ ├── ic_launcher.png │ │ │ │ ├── ic_launcher_background.png │ │ │ │ ├── ic_launcher_foreground.png │ │ │ │ └── ic_launcher_monochrome.png │ │ │ ├── mipmap-xhdpi │ │ │ │ ├── ic_launcher.png │ │ │ │ ├── ic_launcher_background.png │ │ │ │ ├── ic_launcher_foreground.png │ │ │ │ └── ic_launcher_monochrome.png │ │ │ ├── mipmap-xxhdpi │ │ │ │ ├── ic_launcher.png │ │ │ │ ├── ic_launcher_background.png │ │ │ │ ├── ic_launcher_foreground.png │ │ │ │ └── ic_launcher_monochrome.png │ │ │ ├── mipmap-xxxhdpi │ │ │ │ ├── ic_launcher.png │ │ │ │ ├── ic_launcher_background.png │ │ │ │ ├── ic_launcher_foreground.png │ │ │ │ └── ic_launcher_monochrome.png │ │ │ ├── drawable-hdpi │ │ │ │ └── ic_notification_icon.png │ │ │ ├── drawable-mdpi │ │ │ │ └── ic_notification_icon.png │ │ │ ├── drawable-xhdpi │ │ │ │ └── ic_notification_icon.png │ │ │ ├── drawable-xxhdpi │ │ │ │ └── ic_notification_icon.png │ │ │ ├── mipmap-anydpi-v26 │ │ │ │ └── ic_launcher.xml │ │ │ ├── drawable │ │ │ │ ├── ic_search.xml │ │ │ │ ├── ic_round_cancel.xml │ │ │ │ ├── ic_home.xml │ │ │ │ ├── ic_arrow_back.xml │ │ │ │ ├── ic_file_present.xml │ │ │ │ ├── ic_select_all.xml │ │ │ │ ├── kofi_icon.xml │ │ │ │ ├── ic_folder.xml │ │ │ │ ├── ic_archive.xml │ │ │ │ ├── paypal_icon.xml │ │ │ │ ├── ic_check_16.xml │ │ │ │ ├── home_selector.xml │ │ │ │ ├── archive_selector.xml │ │ │ │ ├── ic_home_border.xml │ │ │ │ ├── ic_archive_border.xml │ │ │ │ ├── ic_add.xml │ │ │ │ ├── ic_info.xml │ │ │ │ ├── ic_compress.xml │ │ │ │ ├── ic_close.xml │ │ │ │ ├── ic_folder_info.xml │ │ │ │ ├── ic_change.xml │ │ │ │ ├── ic_paste.xml │ │ │ │ ├── ic_unknown.xml │ │ │ │ ├── ic_settings.xml │ │ │ │ ├── ic_privacy_policy.xml │ │ │ │ ├── ic_check.xml │ │ │ │ ├── ic_liberapay.xml │ │ │ │ ├── ic_folder_2.xml │ │ │ │ ├── app_icon_m.xml │ │ │ │ └── ic_github.xml │ │ │ ├── xml │ │ │ │ ├── file_paths.xml │ │ │ │ ├── backup_rules.xml │ │ │ │ ├── data_extraction_rules.xml │ │ │ │ └── preference.xml │ │ │ ├── menu │ │ │ │ ├── menu_refresh.xml │ │ │ │ ├── menu_archive_action.xml │ │ │ │ ├── bottom_nav.xml │ │ │ │ ├── menu_action.xml │ │ │ │ └── menu_main.xml │ │ │ ├── layout │ │ │ │ ├── preference_material_switch.xml │ │ │ │ ├── custom_chip.xml │ │ │ │ ├── dialog_crash_log.xml │ │ │ │ ├── dialog_progress.xml │ │ │ │ ├── dialog_archive_type.xml │ │ │ │ ├── activity_main.xml │ │ │ │ ├── password_input_dialog.xml │ │ │ │ ├── activity_settings.xml │ │ │ │ ├── password_input_open_with.xml │ │ │ │ ├── layout_permission_request.xml │ │ │ │ ├── list_item_file.xml │ │ │ │ ├── fragment_donation.xml │ │ │ │ ├── progress_dialog_archive.xml │ │ │ │ ├── progress_dialog_extract.xml │ │ │ │ ├── shimmer_placeholder_item.xml │ │ │ │ └── fragment_about.xml │ │ │ ├── values │ │ │ │ ├── arrays.xml │ │ │ │ ├── styles.xml │ │ │ │ └── colors.xml │ │ │ ├── drawable-anydpi-v24 │ │ │ │ └── ic_notification_icon.xml │ │ │ └── values-night │ │ │ │ └── colors.xml │ │ └── java │ │ │ └── com │ │ │ └── wirelessalien │ │ │ └── zipxtract │ │ │ ├── model │ │ │ ├── FileItem.kt │ │ │ ├── DirectoryInfo.kt │ │ │ └── ArchiveItem.kt │ │ │ ├── App.kt │ │ │ ├── adapter │ │ │ ├── FileDiffCallback.kt │ │ │ └── FilePathAdapter.kt │ │ │ ├── viewmodel │ │ │ └── FileOperationViewModel.kt │ │ │ ├── constant │ │ │ ├── BroadcastConstants.kt │ │ │ └── ServiceConstants.kt │ │ │ ├── helper │ │ │ ├── FileDbHelper.kt │ │ │ ├── StorageHelper.kt │ │ │ ├── ArchiveOpenMultipartRarCallback.kt │ │ │ ├── ArchiveOpenMultipart7zCallback.kt │ │ │ └── FileOperationsDao.kt │ │ │ ├── activity │ │ │ └── SettingsActivity.kt │ │ │ └── fragment │ │ │ ├── DonationFragment.kt │ │ │ └── AboutFragment.kt │ ├── debug │ │ └── res │ │ │ └── values │ │ │ └── strings.xml │ ├── test │ │ └── java │ │ │ └── com │ │ │ └── wirelessalien │ │ │ └── zipxtract │ │ │ └── ExampleUnitTest.kt │ └── androidTest │ │ └── java │ │ └── com │ │ └── wirelessalien │ │ └── zipxtract │ │ └── ExampleInstrumentedTest.kt ├── proguard-rules.pro └── build.gradle ├── fastlane └── metadata │ └── android │ └── en-US │ ├── title.txt │ ├── changelogs │ ├── 8.txt │ ├── 2.txt │ ├── 4.txt │ ├── 3.txt │ ├── 7.txt │ ├── 9.txt │ ├── 5.txt │ ├── 16.txt │ ├── 6.txt │ ├── 17.txt │ ├── 19.txt │ ├── 12.txt │ ├── 20.txt │ ├── 11.txt │ ├── 22.txt │ └── 10.txt │ ├── short_description.txt │ ├── images │ ├── icon.png │ └── phoneScreenshots │ │ ├── 2023-11-19 11-32-20 High Res Screenshot.png │ │ ├── 2023-11-19 11-32-36 High Res Screenshot.png │ │ ├── 2023-11-19 11-32-43 High Res Screenshot.png │ │ └── 2023-11-19 11-33-57 High Res Screenshot.png │ └── full_description.txt ├── gradle └── wrapper │ ├── gradle-wrapper.jar │ └── gradle-wrapper.properties ├── .github ├── FUNDING.yml ├── workflows │ ├── gitlab_sync.yml │ ├── test_release.yml │ └── test_release2.yml └── ISSUE_TEMPLATE │ ├── feature_request.md │ └── bug_report.md ├── .gitignore ├── settings.gradle ├── gradle.properties ├── docs ├── README.ko-KR.md ├── README.ru.md ├── README.tr-TR.md ├── README.uk.md ├── README.bg.md └── README.ta-IN.md └── gradlew.bat /.idea/.name: -------------------------------------------------------------------------------- 1 | UnZip -------------------------------------------------------------------------------- /app/.gitignore: -------------------------------------------------------------------------------- 1 | /build -------------------------------------------------------------------------------- /fastlane/metadata/android/en-US/title.txt: -------------------------------------------------------------------------------- 1 | ZipXtract 2 | -------------------------------------------------------------------------------- /.idea/.gitignore: -------------------------------------------------------------------------------- 1 | # Default ignored files 2 | /shelf/ 3 | /workspace.xml 4 | -------------------------------------------------------------------------------- /fastlane/metadata/android/en-US/changelogs/8.txt: -------------------------------------------------------------------------------- 1 | Added localisation of French and Spanish 2 | -------------------------------------------------------------------------------- /fastlane/metadata/android/en-US/changelogs/2.txt: -------------------------------------------------------------------------------- 1 | Extend support to tar, bz2, gz, 7z and xz. 2 | -------------------------------------------------------------------------------- /fastlane/metadata/android/en-US/changelogs/4.txt: -------------------------------------------------------------------------------- 1 | Added ability to open file from file manager #4 #6 2 | -------------------------------------------------------------------------------- /fastlane/metadata/android/en-US/changelogs/3.txt: -------------------------------------------------------------------------------- 1 | Bug Fix: OutOfMemoryError when unpacking large 7z archives 2 | -------------------------------------------------------------------------------- /fastlane/metadata/android/en-US/changelogs/7.txt: -------------------------------------------------------------------------------- 1 | No new feature 2 | Removed a unnecessary permission 3 | Minor change 4 | -------------------------------------------------------------------------------- /fastlane/metadata/android/en-US/changelogs/9.txt: -------------------------------------------------------------------------------- 1 | Added extraction support for RAR (RAR5 supported) 2 | Dependency updated 3 | -------------------------------------------------------------------------------- /fastlane/metadata/android/en-US/short_description.txt: -------------------------------------------------------------------------------- 1 | Extract and create various archive formats like ZIP, RAR, 7z, and more 2 | -------------------------------------------------------------------------------- /gradle/wrapper/gradle-wrapper.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/WirelessAlien/ZipXtract/HEAD/gradle/wrapper/gradle-wrapper.jar -------------------------------------------------------------------------------- /app/src/main/res/font/bebasneue_regular.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/WirelessAlien/ZipXtract/HEAD/app/src/main/res/font/bebasneue_regular.ttf -------------------------------------------------------------------------------- /app/src/main/res/mipmap-hdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/WirelessAlien/ZipXtract/HEAD/app/src/main/res/mipmap-hdpi/ic_launcher.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-mdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/WirelessAlien/ZipXtract/HEAD/app/src/main/res/mipmap-mdpi/ic_launcher.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/WirelessAlien/ZipXtract/HEAD/app/src/main/res/mipmap-xhdpi/ic_launcher.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xxhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/WirelessAlien/ZipXtract/HEAD/app/src/main/res/mipmap-xxhdpi/ic_launcher.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xxxhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/WirelessAlien/ZipXtract/HEAD/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png -------------------------------------------------------------------------------- /fastlane/metadata/android/en-US/images/icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/WirelessAlien/ZipXtract/HEAD/fastlane/metadata/android/en-US/images/icon.png -------------------------------------------------------------------------------- /.github/FUNDING.yml: -------------------------------------------------------------------------------- 1 | # These are supported funding model platforms 2 | 3 | github: WirelessAlien 4 | liberapay: WirelessAlien 5 | patreon: WirelessAlien 6 | -------------------------------------------------------------------------------- /app/src/main/res/drawable-hdpi/ic_notification_icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/WirelessAlien/ZipXtract/HEAD/app/src/main/res/drawable-hdpi/ic_notification_icon.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-mdpi/ic_notification_icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/WirelessAlien/ZipXtract/HEAD/app/src/main/res/drawable-mdpi/ic_notification_icon.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/ic_notification_icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/WirelessAlien/ZipXtract/HEAD/app/src/main/res/drawable-xhdpi/ic_notification_icon.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxhdpi/ic_notification_icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/WirelessAlien/ZipXtract/HEAD/app/src/main/res/drawable-xxhdpi/ic_notification_icon.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-hdpi/ic_launcher_background.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/WirelessAlien/ZipXtract/HEAD/app/src/main/res/mipmap-hdpi/ic_launcher_background.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-hdpi/ic_launcher_foreground.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/WirelessAlien/ZipXtract/HEAD/app/src/main/res/mipmap-hdpi/ic_launcher_foreground.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-hdpi/ic_launcher_monochrome.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/WirelessAlien/ZipXtract/HEAD/app/src/main/res/mipmap-hdpi/ic_launcher_monochrome.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-mdpi/ic_launcher_background.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/WirelessAlien/ZipXtract/HEAD/app/src/main/res/mipmap-mdpi/ic_launcher_background.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-mdpi/ic_launcher_foreground.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/WirelessAlien/ZipXtract/HEAD/app/src/main/res/mipmap-mdpi/ic_launcher_foreground.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-mdpi/ic_launcher_monochrome.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/WirelessAlien/ZipXtract/HEAD/app/src/main/res/mipmap-mdpi/ic_launcher_monochrome.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xhdpi/ic_launcher_background.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/WirelessAlien/ZipXtract/HEAD/app/src/main/res/mipmap-xhdpi/ic_launcher_background.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xhdpi/ic_launcher_foreground.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/WirelessAlien/ZipXtract/HEAD/app/src/main/res/mipmap-xhdpi/ic_launcher_foreground.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xhdpi/ic_launcher_monochrome.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/WirelessAlien/ZipXtract/HEAD/app/src/main/res/mipmap-xhdpi/ic_launcher_monochrome.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xxhdpi/ic_launcher_background.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/WirelessAlien/ZipXtract/HEAD/app/src/main/res/mipmap-xxhdpi/ic_launcher_background.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xxhdpi/ic_launcher_foreground.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/WirelessAlien/ZipXtract/HEAD/app/src/main/res/mipmap-xxhdpi/ic_launcher_foreground.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xxhdpi/ic_launcher_monochrome.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/WirelessAlien/ZipXtract/HEAD/app/src/main/res/mipmap-xxhdpi/ic_launcher_monochrome.png -------------------------------------------------------------------------------- /fastlane/metadata/android/en-US/changelogs/5.txt: -------------------------------------------------------------------------------- 1 | Added ability to extract encrypted 7z & zip file 2 | Extended support to jar, z 3 | Added progress monitor for zip, 7z 4 | -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xxxhdpi/ic_launcher_background.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/WirelessAlien/ZipXtract/HEAD/app/src/main/res/mipmap-xxxhdpi/ic_launcher_background.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xxxhdpi/ic_launcher_foreground.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/WirelessAlien/ZipXtract/HEAD/app/src/main/res/mipmap-xxxhdpi/ic_launcher_foreground.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xxxhdpi/ic_launcher_monochrome.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/WirelessAlien/ZipXtract/HEAD/app/src/main/res/mipmap-xxxhdpi/ic_launcher_monochrome.png -------------------------------------------------------------------------------- /fastlane/metadata/android/en-US/changelogs/16.txt: -------------------------------------------------------------------------------- 1 | Complete rewrite of source code 2 | New UI and UX 3 | Added support for more archive format 4 | Multiple bug fix 5 | and more... 6 | -------------------------------------------------------------------------------- /fastlane/metadata/android/en-US/changelogs/6.txt: -------------------------------------------------------------------------------- 1 | Added zip creation ability (encrypted & non encrypted) #9 2 | Added a donation dialog #11 3 | Added method to clear cache #8 4 | -------------------------------------------------------------------------------- /.idea/compiler.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /.idea/vcs.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /fastlane/metadata/android/en-US/changelogs/17.txt: -------------------------------------------------------------------------------- 1 | Add complete support for zstd/zst file #55 2 | Add "Send to" support to extract archive (now it supports "Open with" and "Send to") #51 3 | Update translation 4 | -------------------------------------------------------------------------------- /.idea/copyright/profiles_settings.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /fastlane/metadata/android/en-US/images/phoneScreenshots/2023-11-19 11-32-20 High Res Screenshot.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/WirelessAlien/ZipXtract/HEAD/fastlane/metadata/android/en-US/images/phoneScreenshots/2023-11-19 11-32-20 High Res Screenshot.png -------------------------------------------------------------------------------- /fastlane/metadata/android/en-US/images/phoneScreenshots/2023-11-19 11-32-36 High Res Screenshot.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/WirelessAlien/ZipXtract/HEAD/fastlane/metadata/android/en-US/images/phoneScreenshots/2023-11-19 11-32-36 High Res Screenshot.png -------------------------------------------------------------------------------- /fastlane/metadata/android/en-US/images/phoneScreenshots/2023-11-19 11-32-43 High Res Screenshot.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/WirelessAlien/ZipXtract/HEAD/fastlane/metadata/android/en-US/images/phoneScreenshots/2023-11-19 11-32-43 High Res Screenshot.png -------------------------------------------------------------------------------- /fastlane/metadata/android/en-US/images/phoneScreenshots/2023-11-19 11-33-57 High Res Screenshot.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/WirelessAlien/ZipXtract/HEAD/fastlane/metadata/android/en-US/images/phoneScreenshots/2023-11-19 11-33-57 High Res Screenshot.png -------------------------------------------------------------------------------- /fastlane/metadata/android/en-US/changelogs/19.txt: -------------------------------------------------------------------------------- 1 | Fix RAR extraction issue 2 | Fix tar compression issue 3 | Add ability to update zip and 7z archive 4 | Prevent unexpected number of multi zip parts by @loewy78 5 | Update zip compression structure 6 | A few small fix and improvement 7 | -------------------------------------------------------------------------------- /fastlane/metadata/android/en-US/changelogs/12.txt: -------------------------------------------------------------------------------- 1 | Added option to choose Aes strength (AES128, AES256) #25 2 | Changed default encryption to AES (zip) #25 3 | Added method to share file/files to the app (Folder cannot be shared) #26 4 | Bug fix: App is not responding during tar extraction #27 5 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | *.iml 2 | .gradle 3 | /local.properties 4 | /.idea/caches 5 | /.idea/libraries 6 | /.idea/modules.xml 7 | /.idea/workspace.xml 8 | /.idea/navEditor.xml 9 | /.idea/assetWizardSettings.xml 10 | .DS_Store 11 | /build 12 | /captures 13 | .externalNativeBuild 14 | .cxx 15 | local.properties 16 | -------------------------------------------------------------------------------- /fastlane/metadata/android/en-US/changelogs/20.txt: -------------------------------------------------------------------------------- 1 | Fix RAR extraction issue 2 | Fix tar compression issue 3 | Improve archive filter 4 | Add ability to update zip and 7z archive 5 | Prevent unexpected number of multi zip parts by @loewy78 6 | Update zip compression structure 7 | A few small fix and improvement -------------------------------------------------------------------------------- /fastlane/metadata/android/en-US/changelogs/11.txt: -------------------------------------------------------------------------------- 1 | Added support for extraction of multi-volume RAR #24 2 | Added support for 7z compression 3 | Added localisation- Polish (pl), Traditional Chinese (zh-rTW) 4 | Added method to save the crash log file to selected directory so that user can share with developer. 5 | -------------------------------------------------------------------------------- /.idea/migrations.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 9 | 10 | -------------------------------------------------------------------------------- /fastlane/metadata/android/en-US/changelogs/22.txt: -------------------------------------------------------------------------------- 1 | Fix #71 (The app crashed with a `TransactionTooLargeException` when a large number of files are selected for operations like compression, extraction, or deletion.) 2 | Add #70 (Directory time stump preservation) 3 | Update localization 4 | A few small fixes and improvement 5 | Update Gradle, dependencies, sdk 6 | -------------------------------------------------------------------------------- /fastlane/metadata/android/en-US/changelogs/10.txt: -------------------------------------------------------------------------------- 1 | Now created zip preserve directory structure 2 | Now user can delete files after picking (within the app) for ZIP creation 3 | Bug fix: Directory structure not preserved for ZIP, 7z extraction 4 | Added support for four new languages: German (de), Portuguese (pt), Brazilian Portuguese (pt-rBR), and Simplified Chinese (zh-rCN) 5 | -------------------------------------------------------------------------------- /app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /.idea/misc.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 9 | -------------------------------------------------------------------------------- /settings.gradle: -------------------------------------------------------------------------------- 1 | pluginManagement { 2 | repositories { 3 | gradlePluginPortal() 4 | google() 5 | mavenCentral() 6 | maven { url 'https://jitpack.io' } 7 | } 8 | } 9 | dependencyResolutionManagement { 10 | repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS) 11 | repositories { 12 | google() 13 | mavenCentral() 14 | maven { url 'https://jitpack.io' } 15 | } 16 | } 17 | rootProject.name = "UnZip" 18 | include ':app' 19 | -------------------------------------------------------------------------------- /.github/workflows/gitlab_sync.yml: -------------------------------------------------------------------------------- 1 | name: GitlabSync 2 | 3 | on: 4 | - push 5 | - delete 6 | 7 | jobs: 8 | sync: 9 | runs-on: ubuntu-latest 10 | name: Git Repo Sync 11 | steps: 12 | - uses: actions/checkout@v4 13 | with: 14 | fetch-depth: 0 15 | - uses: wangchucheng/git-repo-sync@v0.1.0 16 | with: 17 | target-url: ${{ secrets.GITLAB_URL }} 18 | target-username: ${{ secrets.GITLAB_USERNAME }} 19 | target-token: ${{ secrets.GITLAB_TOKEN }} 20 | -------------------------------------------------------------------------------- /app/src/main/java/com/wirelessalien/zipxtract/model/FileItem.kt: -------------------------------------------------------------------------------- 1 | package com.wirelessalien.zipxtract.model 2 | 3 | import java.io.File 4 | 5 | data class FileItem( 6 | val file: File, 7 | val lastModified: Long, 8 | val size: Long, 9 | val isDirectory: Boolean 10 | ) { 11 | // Helper to create from File 12 | companion object { 13 | fun fromFile(file: File): FileItem { 14 | return FileItem( 15 | file = file, 16 | lastModified = file.lastModified(), 17 | size = file.length(), 18 | isDirectory = file.isDirectory 19 | ) 20 | } 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_search.xml: -------------------------------------------------------------------------------- 1 | 7 | 10 | 11 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/feature_request.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: Feature request 3 | about: Suggest an idea for this project 4 | title: "[FEATURE]" 5 | labels: '' 6 | assignees: '' 7 | 8 | --- 9 | 10 | **Is your feature request related to a problem? Please describe.** 11 | A clear and concise description of what the problem is. Ex. I'm always frustrated when [...] 12 | 13 | **Describe the solution you'd like** 14 | A clear and concise description of what you want to happen. 15 | 16 | **Describe alternatives you've considered** 17 | A clear and concise description of any alternative solutions or features you've considered. 18 | 19 | **Additional context** 20 | Add any other context or screenshots about the feature request here. 21 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_round_cancel.xml: -------------------------------------------------------------------------------- 1 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /.idea/gradle.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 18 | 19 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_home.xml: -------------------------------------------------------------------------------- 1 | 7 | 10 | 11 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_arrow_back.xml: -------------------------------------------------------------------------------- 1 | 8 | 11 | 12 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/bug_report.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: Bug report 3 | about: Create a report to help us improve 4 | title: "[BUG]" 5 | labels: '' 6 | assignees: '' 7 | 8 | --- 9 | 10 | **Describe the bug** 11 | A clear and concise description of what the bug is. 12 | 13 | **To Reproduce** 14 | Steps to reproduce the behaviour: 15 | 1. Go to '...' 16 | 2. Click on '....' 17 | 3. Scroll down to '....' 18 | 4. See error 19 | 20 | **Expected behaviour** 21 | A clear and concise description of what you expected to happen. 22 | 23 | **Screenshots** 24 | If applicable, add screenshots to help explain your problem. 25 | 26 | **Smartphone (please complete the following information):** 27 | - Device: [e.g. Pixel 7 pro] 28 | - Version [e.g. 13] 29 | 30 | **Additional context** 31 | Add any other context about the problem here. 32 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_file_present.xml: -------------------------------------------------------------------------------- 1 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /.idea/copyright/GPL_v3.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 6 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_select_all.xml: -------------------------------------------------------------------------------- 1 | 7 | 10 | 11 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/kofi_icon.xml: -------------------------------------------------------------------------------- 1 | 6 | 14 | 15 | -------------------------------------------------------------------------------- /app/src/main/res/xml/file_paths.xml: -------------------------------------------------------------------------------- 1 | 17 | 18 | 19 | 20 | 21 | -------------------------------------------------------------------------------- /app/src/main/java/com/wirelessalien/zipxtract/model/DirectoryInfo.kt: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (C) 2023 WirelessAlien 3 | * 4 | * This program is free software: you can redistribute it and/or modify 5 | * it under the terms of the GNU General Public License as published by 6 | * the Free Software Foundation, either version 3 of the License, or 7 | * any later version. 8 | * 9 | * This program is distributed in the hope that it will be useful, 10 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 11 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12 | * GNU General Public License for more details. 13 | * 14 | * You should have received a copy of the GNU General Public License 15 | * along with this program. If not, see . 16 | */ 17 | 18 | package com.wirelessalien.zipxtract.model 19 | 20 | data class DirectoryInfo( 21 | val path: String, 22 | val lastModified: Long 23 | ) 24 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_folder.xml: -------------------------------------------------------------------------------- 1 | 7 | 10 | 11 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_archive.xml: -------------------------------------------------------------------------------- 1 | 7 | 10 | 11 | -------------------------------------------------------------------------------- /app/src/main/java/com/wirelessalien/zipxtract/model/ArchiveItem.kt: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (C) 2023 WirelessAlien 3 | * 4 | * This program is free software: you can redistribute it and/or modify 5 | * it under the terms of the GNU General Public License as published by 6 | * the Free Software Foundation, either version 3 of the License, or 7 | * any later version. 8 | * 9 | * This program is distributed in the hope that it will be useful, 10 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 11 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12 | * GNU General Public License for more details. 13 | * 14 | * You should have received a copy of the GNU General Public License 15 | * along with this program. If not, see . 16 | */ 17 | 18 | package com.wirelessalien.zipxtract.model 19 | 20 | data class ArchiveItem( 21 | val path: String, 22 | val isDirectory: Boolean, 23 | val size: Long, 24 | val index: Int 25 | ) 26 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/paypal_icon.xml: -------------------------------------------------------------------------------- 1 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /gradle/wrapper/gradle-wrapper.properties: -------------------------------------------------------------------------------- 1 | # 2 | # Copyright (C) 2023 WirelessAlien 3 | # 4 | # This program is free software: you can redistribute it and/or modify 5 | # it under the terms of the GNU General Public License as published by 6 | # the Free Software Foundation, either version 3 of the License, or 7 | # any later version. 8 | # 9 | # This program is distributed in the hope that it will be useful, 10 | # but WITHOUT ANY WARRANTY; without even the implied warranty of 11 | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12 | # GNU General Public License for more details. 13 | # 14 | # You should have received a copy of the GNU General Public License 15 | # along with this program. If not, see . 16 | # 17 | 18 | #Mon Jun 12 09:30:43 IST 2023 19 | distributionBase=GRADLE_USER_HOME 20 | distributionUrl=https\://services.gradle.org/distributions/gradle-8.13-bin.zip 21 | distributionPath=wrapper/dists 22 | zipStorePath=wrapper/dists 23 | zipStoreBase=GRADLE_USER_HOME 24 | -------------------------------------------------------------------------------- /app/src/debug/res/values/strings.xml: -------------------------------------------------------------------------------- 1 | 17 | 18 | 19 | ZipXtract Debug 20 | Archive Debug 21 | Extract Archive 22 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_check_16.xml: -------------------------------------------------------------------------------- 1 | 7 | 10 | 11 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/home_selector.xml: -------------------------------------------------------------------------------- 1 | 17 | 18 | 19 | 20 | 21 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/archive_selector.xml: -------------------------------------------------------------------------------- 1 | 17 | 18 | 19 | 20 | 21 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_home_border.xml: -------------------------------------------------------------------------------- 1 | 7 | 10 | 11 | -------------------------------------------------------------------------------- /app/src/main/res/menu/menu_refresh.xml: -------------------------------------------------------------------------------- 1 | 17 | 18 | 20 | 21 | 25 | -------------------------------------------------------------------------------- /app/src/main/java/com/wirelessalien/zipxtract/App.kt: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (C) 2023 WirelessAlien 3 | * 4 | * This program is free software: you can redistribute it and/or modify 5 | * it under the terms of the GNU General Public License as published by 6 | * the Free Software Foundation, either version 3 of the License, or 7 | * any later version. 8 | * 9 | * This program is distributed in the hope that it will be useful, 10 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 11 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12 | * GNU General Public License for more details. 13 | * 14 | * You should have received a copy of the GNU General Public License 15 | * along with this program. If not, see . 16 | */ 17 | 18 | package com.wirelessalien.zipxtract 19 | 20 | import android.app.Application 21 | import com.google.android.material.color.DynamicColors 22 | 23 | class App : Application() { 24 | override fun onCreate() { 25 | super.onCreate() 26 | // Apply dynamic color 27 | DynamicColors.applyToActivitiesIfAvailable(this) 28 | 29 | } 30 | } -------------------------------------------------------------------------------- /app/src/main/java/com/wirelessalien/zipxtract/adapter/FileDiffCallback.kt: -------------------------------------------------------------------------------- 1 | package com.wirelessalien.zipxtract.adapter 2 | 3 | import androidx.recyclerview.widget.DiffUtil 4 | import com.wirelessalien.zipxtract.model.FileItem 5 | 6 | class FileDiffCallback( 7 | private val oldList: List, 8 | private val newList: List 9 | ) : DiffUtil.Callback() { 10 | 11 | override fun getOldListSize(): Int = oldList.size 12 | 13 | override fun getNewListSize(): Int = newList.size 14 | 15 | override fun areItemsTheSame(oldItemPosition: Int, newItemPosition: Int): Boolean { 16 | // Unique identifier is the absolute path 17 | return oldList[oldItemPosition].file.absolutePath == newList[newItemPosition].file.absolutePath 18 | } 19 | 20 | override fun areContentsTheSame(oldItemPosition: Int, newItemPosition: Int): Boolean { 21 | val oldItem = oldList[oldItemPosition] 22 | val newItem = newList[newItemPosition] 23 | 24 | // Compare cached properties 25 | return oldItem.lastModified == newItem.lastModified && 26 | oldItem.size == newItem.size && 27 | oldItem.isDirectory == newItem.isDirectory 28 | } 29 | } 30 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_archive_border.xml: -------------------------------------------------------------------------------- 1 | 7 | 10 | 11 | -------------------------------------------------------------------------------- /app/src/main/res/menu/menu_archive_action.xml: -------------------------------------------------------------------------------- 1 | 17 | 18 | 20 | 21 | 26 | 27 | 28 | -------------------------------------------------------------------------------- /app/src/main/res/layout/preference_material_switch.xml: -------------------------------------------------------------------------------- 1 | 17 | 18 | -------------------------------------------------------------------------------- /app/src/main/res/menu/bottom_nav.xml: -------------------------------------------------------------------------------- 1 | 2 | 18 | 19 | 20 | 21 | 25 | 26 | 30 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_add.xml: -------------------------------------------------------------------------------- 1 | 17 | 18 | 24 | 27 | 28 | -------------------------------------------------------------------------------- /app/src/test/java/com/wirelessalien/zipxtract/ExampleUnitTest.kt: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (C) 2023 WirelessAlien 3 | * 4 | * This program is free software: you can redistribute it and/or modify 5 | * it under the terms of the GNU General Public License as published by 6 | * the Free Software Foundation, either version 3 of the License, or 7 | * any later version. 8 | * 9 | * This program is distributed in the hope that it will be useful, 10 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 11 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12 | * GNU General Public License for more details. 13 | * 14 | * You should have received a copy of the GNU General Public License 15 | * along with this program. If not, see . 16 | */ 17 | 18 | package com.wirelessalien.zipxtract 19 | 20 | import org.junit.Test 21 | 22 | import org.junit.Assert.* 23 | 24 | /** 25 | * Example local unit test, which will execute on the development machine (host). 26 | * 27 | * See [testing documentation](http://d.android.com/tools/testing). 28 | */ 29 | class ExampleUnitTest { 30 | @Test 31 | fun addition_isCorrect() { 32 | assertEquals(4, 2 + 2) 33 | } 34 | } -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_info.xml: -------------------------------------------------------------------------------- 1 | 17 | 18 | 21 | 22 | 23 | -------------------------------------------------------------------------------- /app/src/main/res/layout/custom_chip.xml: -------------------------------------------------------------------------------- 1 | 17 | 18 | -------------------------------------------------------------------------------- /app/src/main/res/values/arrays.xml: -------------------------------------------------------------------------------- 1 | 17 | 18 | 19 | 20 | Copy mode (no compression) 21 | Fastest 22 | Fast 23 | Normal 24 | Maximum 25 | Ultra 26 | 27 | 28 | KB 29 | MB 30 | GB 31 | 32 | 33 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_compress.xml: -------------------------------------------------------------------------------- 1 | 7 | 10 | 11 | -------------------------------------------------------------------------------- /app/src/main/res/xml/backup_rules.xml: -------------------------------------------------------------------------------- 1 | 17 | 18 | 25 | 26 | 30 | -------------------------------------------------------------------------------- /app/src/main/res/layout/dialog_crash_log.xml: -------------------------------------------------------------------------------- 1 | 17 | 18 | 22 | 23 | 30 | -------------------------------------------------------------------------------- /app/src/main/res/layout/dialog_progress.xml: -------------------------------------------------------------------------------- 1 | 17 | 18 | 23 | 24 | 29 | 30 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_close.xml: -------------------------------------------------------------------------------- 1 | 17 | 18 | 24 | 25 | 28 | 29 | -------------------------------------------------------------------------------- /app/src/main/res/xml/data_extraction_rules.xml: -------------------------------------------------------------------------------- 1 | 17 | 18 | 23 | 24 | 25 | 29 | 30 | 36 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_folder_info.xml: -------------------------------------------------------------------------------- 1 | 7 | 10 | 11 | -------------------------------------------------------------------------------- /app/src/main/res/menu/menu_action.xml: -------------------------------------------------------------------------------- 1 | 3 | 4 | 8 | 9 | 13 | 14 | 18 | 19 | 24 | 25 | 30 | 31 | 35 | 36 | 40 | 41 | 45 | 46 | 47 | -------------------------------------------------------------------------------- /app/src/main/java/com/wirelessalien/zipxtract/viewmodel/FileOperationViewModel.kt: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (C) 2023 WirelessAlien 3 | * 4 | * This program is free software: you can redistribute it and/or modify 5 | * it under the terms of the GNU General Public License as published by 6 | * the Free Software Foundation, either version 3 of the License, or 7 | * any later version. 8 | * 9 | * This program is distributed in the hope that it will be useful, 10 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 11 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12 | * GNU General Public License for more details. 13 | * 14 | * You should have received a copy of the GNU General Public License 15 | * along with this program. If not, see . 16 | */ 17 | 18 | package com.wirelessalien.zipxtract.viewmodel 19 | 20 | import androidx.lifecycle.ViewModel 21 | import kotlinx.coroutines.flow.MutableStateFlow 22 | import kotlinx.coroutines.flow.StateFlow 23 | import kotlinx.coroutines.flow.asStateFlow 24 | import java.io.File 25 | 26 | class FileOperationViewModel : ViewModel() { 27 | private val _filesToCopyMove = MutableStateFlow>(emptyList()) 28 | val filesToCopyMove: StateFlow> = _filesToCopyMove.asStateFlow() 29 | 30 | var isCopyAction: Boolean = true 31 | 32 | fun setFilesToCopyMove(files: List) { 33 | _filesToCopyMove.value = files 34 | } 35 | } -------------------------------------------------------------------------------- /app/src/main/res/layout/dialog_archive_type.xml: -------------------------------------------------------------------------------- 1 | 17 | 18 | 24 | 25 | 34 | -------------------------------------------------------------------------------- /app/src/androidTest/java/com/wirelessalien/zipxtract/ExampleInstrumentedTest.kt: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (C) 2023 WirelessAlien 3 | * 4 | * This program is free software: you can redistribute it and/or modify 5 | * it under the terms of the GNU General Public License as published by 6 | * the Free Software Foundation, either version 3 of the License, or 7 | * any later version. 8 | * 9 | * This program is distributed in the hope that it will be useful, 10 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 11 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12 | * GNU General Public License for more details. 13 | * 14 | * You should have received a copy of the GNU General Public License 15 | * along with this program. If not, see . 16 | */ 17 | 18 | package com.wirelessalien.zipxtract 19 | 20 | import androidx.test.platform.app.InstrumentationRegistry 21 | import androidx.test.ext.junit.runners.AndroidJUnit4 22 | 23 | import org.junit.Test 24 | import org.junit.runner.RunWith 25 | 26 | import org.junit.Assert.* 27 | 28 | /** 29 | * Instrumented test, which will execute on an Android device. 30 | * 31 | * See [testing documentation](http://d.android.com/tools/testing). 32 | */ 33 | @RunWith(AndroidJUnit4::class) 34 | class ExampleInstrumentedTest { 35 | @Test 36 | fun useAppContext() { 37 | // Context of the app under test. 38 | val appContext = InstrumentationRegistry.getInstrumentation().targetContext 39 | assertEquals("com.wirelessalien.unzip", appContext.packageName) 40 | } 41 | } -------------------------------------------------------------------------------- /app/proguard-rules.pro: -------------------------------------------------------------------------------- 1 | # Add project specific ProGuard rules here. 2 | # You can control the set of applied configuration files using the 3 | # proguardFiles setting in build.gradle. 4 | # 5 | # For more details, see 6 | # http://developer.android.com/guide/developing/tools/proguard.html 7 | 8 | # If your project uses WebView with JS, uncomment the following 9 | # and specify the fully qualified class name to the JavaScript interface 10 | # class: 11 | #-keepclassmembers class fqcn.of.javascript.interface.for.webview { 12 | # public *; 13 | #} 14 | 15 | # Uncomment this to preserve the line number information for 16 | # debugging stack traces. 17 | #-keepattributes SourceFile,LineNumberTable 18 | 19 | # If you keep the line number information, uncomment this to 20 | # hide the original source file name. 21 | #-renamesourcefileattribute SourceFile 22 | 23 | -dontwarn org.brotli.dec.BrotliInputStream 24 | 25 | # ASM 26 | -dontwarn org.objectweb.asm.** 27 | 28 | # Commons Compress 29 | -dontwarn org.apache.commons.compress.harmony.** 30 | 31 | # Keep JNI classes and methods 32 | -keep class net.sf.sevenzipjbinding.** { *; } 33 | -keep class org.apache.commons.compress.** { *; } 34 | -keep class me.zhanghai.android.libarchive.** { *; } 35 | -keep class com.github.luben.zstd.** { *; } 36 | 37 | # Keep native method names 38 | -keepclasseswithmembernames class * { 39 | native ; 40 | } 41 | 42 | # Keep classes that are referenced by native code 43 | -keepclasseswithmembers class * { 44 | native ; 45 | } 46 | 47 | # Keep all method names for classes that have native methods 48 | -keepclasseswithmembers,includedescriptorclasses class * { 49 | native ; 50 | } -------------------------------------------------------------------------------- /app/src/main/res/layout/activity_main.xml: -------------------------------------------------------------------------------- 1 | 17 | 18 | 24 | 25 | 30 | 31 | 37 | 38 | -------------------------------------------------------------------------------- /app/src/main/res/menu/menu_main.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 5 | 6 | 12 | 13 | 16 | 17 | 20 | 23 | 26 | 29 | 30 | 31 | 32 | 35 | 36 | 39 | 42 | 43 | 44 | 45 | 50 | 51 | 52 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_change.xml: -------------------------------------------------------------------------------- 1 | 7 | 10 | 11 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_paste.xml: -------------------------------------------------------------------------------- 1 | 17 | 18 | 19 | 20 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_unknown.xml: -------------------------------------------------------------------------------- 1 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /.github/workflows/test_release.yml: -------------------------------------------------------------------------------- 1 | name: Test Release 2 | on: 3 | push: 4 | branches: 5 | - master 6 | workflow_dispatch: 7 | 8 | jobs: 9 | build: 10 | runs-on: ubuntu-latest 11 | steps: 12 | - name: Get the source 13 | uses: actions/checkout@v5 14 | 15 | - name: Set up JDK 21 16 | uses: actions/setup-java@v5 17 | with: 18 | distribution: 'temurin' 19 | java-version: '21' 20 | 21 | - name: Cache Gradle dependencies 22 | uses: actions/cache@v4 23 | with: 24 | path: | 25 | ~/.gradle/caches 26 | ~/.gradle/wrapper 27 | key: ${{ runner.os }}-gradle-${{ hashFiles('**/*.gradle*', '**/gradle-wrapper.properties') }} 28 | restore-keys: | 29 | ${{ runner.os }}-gradle- 30 | 31 | - name: Grant execute permission for gradlew 32 | run: chmod +x ./gradlew 33 | 34 | - name: Generate Release APK 35 | run: ./gradlew assemblefossRelease 36 | 37 | - name: Sign APK 38 | uses: r0adkll/sign-android-release@v1 39 | id: sign_app 40 | with: 41 | releaseDirectory: app/build/outputs/apk/foss/release 42 | signingKeyBase64: ${{ secrets.KEYSTORE_FILE }} 43 | alias: ${{ secrets.KEY_ALIAS }} 44 | keyStorePassword: ${{ secrets.KEYSTORE_PASSWORD }} 45 | keyPassword: ${{ secrets.KEY_PASSWORD }} 46 | env: 47 | BUILD_TOOLS_VERSION: "35.0.0" 48 | 49 | - name: Install curl 50 | run: sudo apt-get install -y curl 51 | 52 | - name: Upload APK to Telegram 53 | env: 54 | TELEGRAM_BOT_TOKEN: ${{ secrets.TELEGRAM_BOT_TOKEN }} 55 | TELEGRAM_CHAT_ID: ${{ secrets.TELEGRAM_CHAT_ID }} 56 | run: | 57 | curl -X POST "https://api.telegram.org/bot${{ env.TELEGRAM_BOT_TOKEN }}/sendDocument" \ 58 | -F chat_id=${{ env.TELEGRAM_CHAT_ID }} \ 59 | -F document=@${{ steps.sign_app.outputs.signedReleaseFile }} -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_settings.xml: -------------------------------------------------------------------------------- 1 | 17 | 18 | 21 | 22 | 23 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_privacy_policy.xml: -------------------------------------------------------------------------------- 1 | 17 | 18 | 19 | 20 | -------------------------------------------------------------------------------- /app/src/main/java/com/wirelessalien/zipxtract/constant/BroadcastConstants.kt: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (C) 2023 WirelessAlien 3 | * 4 | * This program is free software: you can redistribute it and/or modify 5 | * it under the terms of the GNU General Public License as published by 6 | * the Free Software Foundation, either version 3 of the License, or 7 | * any later version. 8 | * 9 | * This program is distributed in the hope that it will be useful, 10 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 11 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12 | * GNU General Public License for more details. 13 | * 14 | * You should have received a copy of the GNU General Public License 15 | * along with this program. If not, see . 16 | */ 17 | 18 | package com.wirelessalien.zipxtract.constant 19 | 20 | object BroadcastConstants { 21 | const val ACTION_ARCHIVE_COMPLETE = "ACTION_ARCHIVE_COMPLETE" 22 | const val EXTRA_DIR_PATH = "dir_path" 23 | const val ACTION_ARCHIVE_ERROR = "ACTION_ARCHIVE_ERROR" 24 | const val ACTION_EXTRACTION_COMPLETE = "ACTION_EXTRACTION_COMPLETE" 25 | const val ACTION_EXTRACTION_ERROR = "ACTION_EXTRACTION_ERROR" 26 | const val ARCHIVE_NOTIFICATION_CHANNEL_ID = "archive_notification_channel" 27 | const val EXTRACTION_NOTIFICATION_CHANNEL_ID = "extraction_notification_channel" 28 | const val DELETE_NOTIFICATION_CHANNEL_ID = "delete_notification_channel" 29 | const val COPY_MOVE_NOTIFICATION_CHANNEL_ID = "copy_move_notification_channel" 30 | const val ACTION_EXTRACTION_PROGRESS = "ACTION_EXTRACTION_PROGRESS" 31 | const val ACTION_ARCHIVE_PROGRESS = "ACTION_ARCHIVE_PROGRESS" 32 | const val EXTRA_PROGRESS = "progress" 33 | const val EXTRA_ERROR_MESSAGE = "error_message" 34 | 35 | const val PREFERENCE_EXTRACT_DIR_PATH = "key_extract_path" 36 | const val PREFERENCE_ARCHIVE_DIR_PATH = "key_archive_path" 37 | 38 | const val ACTION_CANCEL_OPERATION = "ACTION_CANCEL_OPERATION" 39 | } 40 | 41 | -------------------------------------------------------------------------------- /app/src/main/res/layout/password_input_dialog.xml: -------------------------------------------------------------------------------- 1 | 17 | 18 | 24 | 25 | 33 | 34 | 42 | 43 | -------------------------------------------------------------------------------- /app/src/main/java/com/wirelessalien/zipxtract/constant/ServiceConstants.kt: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (C) 2023 WirelessAlien 3 | * 4 | * This program is free software: you can redistribute it and/or modify 5 | * it under the terms of the GNU General Public License as published by 6 | * the Free Software Foundation, either version 3 of the License, or 7 | * any later version. 8 | * 9 | * This program is distributed in the hope that it will be useful, 10 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 11 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12 | * GNU General Public License for more details. 13 | * 14 | * You should have received a copy of the GNU General Public License 15 | * along with this program. If not, see . 16 | */ 17 | 18 | package com.wirelessalien.zipxtract.constant 19 | 20 | object ServiceConstants { 21 | const val EXTRA_JOB_ID = "com.wirelessalien.zipxtract.EXTRA_JOB_ID" 22 | const val EXTRA_ARCHIVE_NAME = "archiveName" 23 | const val EXTRA_PASSWORD = "password" 24 | const val EXTRA_COMPRESSION_METHOD = "compressionMethod" 25 | const val EXTRA_COMPRESSION_LEVEL = "compressionLevel" 26 | const val EXTRA_IS_ENCRYPTED = "isEncrypted" 27 | const val EXTRA_ENCRYPTION_METHOD = "encryptionMethod" 28 | const val EXTRA_AES_STRENGTH = "aesStrength" 29 | const val EXTRA_SPLIT_SIZE = "splitSize" 30 | const val EXTRA_SOLID = "solid" 31 | const val EXTRA_THREAD_COUNT = "threadCount" 32 | const val EXTRA_DESTINATION_PATH = "extra_destination_path" 33 | const val EXTRA_IS_COPY_ACTION = "extra_is_copy_action" 34 | const val EXTRA_USE_APP_NAME_DIR = "use_app_name_dir" 35 | const val EXTRA_COMPRESSION_FORMAT = "compression_format" 36 | const val EXTRA_ARCHIVE_PATH = "archivePath" 37 | const val EXTRA_ITEMS_TO_ADD_JOB_ID = "com.wirelessalien.zipxtract.EXTRA_ITEMS_TO_ADD_JOB_ID" 38 | const val EXTRA_ITEMS_TO_REMOVE_JOB_ID = "com.wirelessalien.zipxtract.EXTRA_ITEMS_TO_REMOVE_JOB_ID" 39 | const val EXTRA_ITEMS_TO_ADD_NAMES = "itemsToAddNames" 40 | } -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_check.xml: -------------------------------------------------------------------------------- 1 | 17 | 18 | 19 | 20 | -------------------------------------------------------------------------------- /app/src/main/res/layout/activity_settings.xml: -------------------------------------------------------------------------------- 1 | 17 | 18 | 24 | 25 | 29 | 30 | 36 | 37 | 38 | 39 | 44 | 45 | -------------------------------------------------------------------------------- /app/src/main/res/values/styles.xml: -------------------------------------------------------------------------------- 1 | 2 | 18 | 19 | 20 | 21 | 24 | 25 | 29 | 30 | 37 | 38 | 41 | 42 | 45 | -------------------------------------------------------------------------------- /app/src/main/java/com/wirelessalien/zipxtract/helper/FileDbHelper.kt: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (C) 2023 WirelessAlien 3 | * 4 | * This program is free software: you can redistribute it and/or modify 5 | * it under the terms of the GNU General Public License as published by 6 | * the Free Software Foundation, either version 3 of the License, or 7 | * any later version. 8 | * 9 | * This program is distributed in the hope that it will be useful, 10 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 11 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12 | * GNU General Public License for more details. 13 | * 14 | * You should have received a copy of the GNU General Public License 15 | * along with this program. If not, see . 16 | */ 17 | 18 | package com.wirelessalien.zipxtract.helper 19 | 20 | import android.content.Context 21 | import android.database.sqlite.SQLiteDatabase 22 | import android.database.sqlite.SQLiteOpenHelper 23 | 24 | class FileDbHelper(context: Context) : SQLiteOpenHelper(context, DATABASE_NAME, null, DATABASE_VERSION) { 25 | 26 | companion object { 27 | const val DATABASE_NAME = "FileOperations.db" 28 | const val DATABASE_VERSION = 2 29 | 30 | const val TABLE_NAME = "file_operations" 31 | const val COLUMN_ID = "_id" 32 | const val COLUMN_JOB_ID = "job_id" 33 | const val COLUMN_FILE_PATH = "file_path" 34 | const val COLUMN_ITEM_NAME = "item_name" 35 | } 36 | 37 | override fun onCreate(db: SQLiteDatabase) { 38 | val createTable = "CREATE TABLE $TABLE_NAME (" + 39 | "$COLUMN_ID INTEGER PRIMARY KEY AUTOINCREMENT," + 40 | "$COLUMN_JOB_ID TEXT NOT NULL," + 41 | "$COLUMN_FILE_PATH TEXT NOT NULL," + 42 | "$COLUMN_ITEM_NAME TEXT" + 43 | ")" 44 | db.execSQL(createTable) 45 | } 46 | 47 | override fun onUpgrade(db: SQLiteDatabase, oldVersion: Int, newVersion: Int) { 48 | if (oldVersion < 2) { 49 | db.execSQL("ALTER TABLE $TABLE_NAME ADD COLUMN $COLUMN_ITEM_NAME TEXT") 50 | } 51 | } 52 | } -------------------------------------------------------------------------------- /gradle.properties: -------------------------------------------------------------------------------- 1 | # 2 | # Copyright (C) 2023 WirelessAlien 3 | # 4 | # This program is free software: you can redistribute it and/or modify 5 | # it under the terms of the GNU General Public License as published by 6 | # the Free Software Foundation, either version 3 of the License, or 7 | # any later version. 8 | # 9 | # This program is distributed in the hope that it will be useful, 10 | # but WITHOUT ANY WARRANTY; without even the implied warranty of 11 | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12 | # GNU General Public License for more details. 13 | # 14 | # You should have received a copy of the GNU General Public License 15 | # along with this program. If not, see . 16 | # 17 | 18 | # Project-wide Gradle settings. 19 | # IDE (e.g. Android Studio) users: 20 | # Gradle settings configured through the IDE *will override* 21 | # any settings specified in this file. 22 | # For more details on how to configure your build environment visit 23 | # http://www.gradle.org/docs/current/userguide/build_environment.html 24 | # Specifies the JVM arguments used for the daemon process. 25 | # The setting is particularly useful for tweaking memory settings. 26 | org.gradle.jvmargs=-Xmx1536m -Dfile.encoding=UTF-8 27 | # When configured, Gradle will run in incubating parallel mode. 28 | # This option should only be used with decoupled projects. More details, visit 29 | # http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:decoupled_projects 30 | # org.gradle.parallel=true 31 | # AndroidX package structure to make it clearer which packages are bundled with the 32 | # Android operating system, and which are packaged with your app's APK 33 | # https://developer.android.com/topic/libraries/support-library/androidx-rn 34 | android.useAndroidX=true 35 | # Kotlin code style for this project: "official" or "obsolete": 36 | kotlin.code.style=official 37 | # Enables namespacing of each library's R class so that its R class includes only the 38 | # resources declared in the library itself and none from the library's dependencies, 39 | # thereby reducing the size of the R class for that library 40 | android.nonTransitiveRClass=true 41 | android.nonFinalResIds=false -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_liberapay.xml: -------------------------------------------------------------------------------- 1 | 17 | 18 | 24 | 27 | 28 | -------------------------------------------------------------------------------- /app/src/main/res/layout/password_input_open_with.xml: -------------------------------------------------------------------------------- 1 | 17 | 18 | 24 | 25 | 31 | 32 | 40 | 41 | 49 | 50 | -------------------------------------------------------------------------------- /app/src/main/java/com/wirelessalien/zipxtract/helper/StorageHelper.kt: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (C) 2023 WirelessAlien 3 | * 4 | * This program is free software: you can redistribute it and/or modify 5 | * it under the terms of the GNU General Public License as published by 6 | * the Free Software Foundation, either version 3 of the License, or 7 | * any later version. 8 | * 9 | * This program is distributed in the hope that it will be useful, 10 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 11 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12 | * GNU General Public License for more details. 13 | * 14 | * You should have received a copy of the GNU General Public License 15 | * along with this program. If not, see . 16 | */ 17 | 18 | package com.wirelessalien.zipxtract.helper 19 | 20 | import android.content.Context 21 | import android.os.Build 22 | import android.os.Environment 23 | import android.os.storage.StorageManager 24 | 25 | object StorageHelper { 26 | 27 | fun getSdCardPath(context: Context): String? { 28 | // Using StorageManager for Android R (API 30) and above 29 | if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) { 30 | val storageManager = context.getSystemService(Context.STORAGE_SERVICE) as StorageManager 31 | val storageVolumes = storageManager.storageVolumes 32 | for (storageVolume in storageVolumes) { 33 | if (storageVolume.isRemovable) { 34 | val path = storageVolume.directory?.absolutePath 35 | if (path != null) return path 36 | } 37 | } 38 | } 39 | 40 | // Fallback: Check external files dirs for older versions or if StorageManager failed 41 | val externalFilesDirs = context.getExternalFilesDirs(null) 42 | val primaryStorage = Environment.getExternalStorageDirectory() 43 | 44 | for (dir in externalFilesDirs) { 45 | if (dir == null) continue 46 | val path = dir.absolutePath 47 | // If path is on primary storage, skip 48 | if (path.startsWith(primaryStorage.absolutePath)) continue 49 | 50 | val match = Regex("^/storage/[^/]+").find(path) 51 | if (match != null) { 52 | return match.value 53 | } 54 | } 55 | return null 56 | } 57 | } 58 | -------------------------------------------------------------------------------- /app/src/main/res/layout/layout_permission_request.xml: -------------------------------------------------------------------------------- 1 | 17 | 18 | 24 | 25 | 33 | 34 | 43 | 44 | 55 | -------------------------------------------------------------------------------- /app/src/main/res/xml/preference.xml: -------------------------------------------------------------------------------- 1 | 17 | 18 | 19 | 20 | 26 | 27 | 33 | 34 | 42 | 43 | 49 | 50 | 51 | 52 | 56 | 57 | 61 | 62 | -------------------------------------------------------------------------------- /fastlane/metadata/android/en-US/full_description.txt: -------------------------------------------------------------------------------- 1 |

ZipXtract is a fully open-source Android application designed to handle a wide range of archive formats, including:

2 |
    3 |
  • RAR (with RAR5 and multi-volume support)
  • 4 |
  • ZIP (including password-protected and split archives)
  • 5 |
  • TAR
  • 6 |
  • BZ2
  • 7 |
  • GZ
  • 8 |
  • 7z (with password protection and multi-volume support)
  • 9 |
  • XZ
  • 10 |
  • JAR
  • 11 |
  • ...
  • 12 |
13 | 14 |

Features

15 | 16 |

Extraction:

17 |
    18 |
  • Supports various formats: RAR, ZIP, TAR, BZ2, GZ, 7z, XZ, JAR etc.
  • 19 |
  • Handles encrypted ZIP and 7z files.
  • 20 |
  • Extracts multi-volume RAR archives.
  • 21 |
  • Extracts multi-volume archives.
  • 22 |
  • Extracts split ZIP files.
  • 23 |
24 | 25 |

Creation:

26 |
    27 |
  • Create ZIP and 7z archives, with options for encryption.
  • 28 |
  • Create split ZIP archives.
  • 29 |
30 | 31 |
32 |

NOTE:
33 | The F-Droid version does not include RAR extraction and 7z compression features due to licensing restrictions. For the complete version, please use the GitHub or IzzyOnDroid releases.

34 |
35 | 36 |

Usage Tip

37 |

General tips for archive extraction and archive creation:

38 |
    39 |
  • Long-press files and folders or click file/folder icons to select them for archiving.
  • 40 |
  • Click a file to display the extraction menu for choosing extraction options.
  • 41 |
  • Files extracted using the "Open With" menu of the OS are stored in Internal Storage/ZipXtract by default. Modify this in app settings.
  • 42 |
  • The default location for archiving or extracting archives (within the app) is the parent directory of the respective file(s). This can be changed in the app settings.
  • 43 |
44 | 45 |

App Permission

46 |

Read and Write Storage Permission (Android 10 and below) and Manage External Storage Permission (Android 11 and above). The app does not have internet permission. Read more - Privacy policy

47 | 48 |

Translate

49 |

50 | Help localize the app through Weblate 51 | 52 |

53 | 54 |

License

55 |

This project is licensed under the GNU General Public License v3.0. See the LICENSE file for details.

56 | 57 |

Contact

58 |

For any inquiries or feedback, please open an issue on the GitHub repository.

59 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_folder_2.xml: -------------------------------------------------------------------------------- 1 | 17 | 18 | 19 | 20 | 21 | -------------------------------------------------------------------------------- /app/src/main/java/com/wirelessalien/zipxtract/activity/SettingsActivity.kt: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (C) 2023 WirelessAlien 3 | * 4 | * This program is free software: you can redistribute it and/or modify 5 | * it under the terms of the GNU General Public License as published by 6 | * the Free Software Foundation, either version 3 of the License, or 7 | * any later version. 8 | * 9 | * This program is distributed in the hope that it will be useful, 10 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 11 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12 | * GNU General Public License for more details. 13 | * 14 | * You should have received a copy of the GNU General Public License 15 | * along with this program. If not, see . 16 | */ 17 | 18 | package com.wirelessalien.zipxtract.activity 19 | 20 | import android.os.Bundle 21 | import android.view.MenuItem 22 | import androidx.activity.OnBackPressedCallback 23 | import androidx.appcompat.app.AppCompatActivity 24 | import com.wirelessalien.zipxtract.R 25 | import com.wirelessalien.zipxtract.databinding.ActivitySettingsBinding 26 | import com.wirelessalien.zipxtract.fragment.SettingsFragment 27 | 28 | 29 | class SettingsActivity : AppCompatActivity() { 30 | 31 | private lateinit var binding: ActivitySettingsBinding 32 | 33 | override fun onCreate(savedInstanceState: Bundle?) { 34 | super.onCreate(savedInstanceState) 35 | binding = ActivitySettingsBinding.inflate(layoutInflater) 36 | setContentView(binding.root) 37 | 38 | // Set up the toolbar 39 | binding.toolbar.title = getString(R.string.action_settings) 40 | setSupportActionBar(binding.toolbar) 41 | 42 | // Display the fragment as the main content. 43 | supportFragmentManager.beginTransaction() 44 | .replace(binding.fragmentContainer.id, SettingsFragment()) 45 | .commit() 46 | 47 | // Add back button to the activity 48 | supportActionBar?.apply { 49 | setDisplayHomeAsUpEnabled(true) 50 | setHomeButtonEnabled(true) 51 | } 52 | 53 | // Handle back button press 54 | onBackPressedDispatcher.addCallback(this, object : OnBackPressedCallback(true) { 55 | override fun handleOnBackPressed() { 56 | finishActivity() 57 | } 58 | }) 59 | } 60 | 61 | override fun onOptionsItemSelected(item: MenuItem): Boolean { 62 | if (item.itemId == android.R.id.home) { 63 | finishActivity() 64 | return true 65 | } 66 | return super.onOptionsItemSelected(item) 67 | } 68 | 69 | private fun finishActivity() { 70 | finish() 71 | } 72 | } -------------------------------------------------------------------------------- /docs/README.ko-KR.md: -------------------------------------------------------------------------------- 1 | # ZipXtract 2 | 3 | [![GitHub release](https://img.shields.io/github/v/release/WirelessAlien/ZipXtract)](https://github.com/WirelessAlien/ZipXtract/releases/latest) 4 | [![GitHub license](https://img.shields.io/github/license/WirelessAlien/ZipXtract)](https://github.com/WirelessAlien/ZipXtract/blob/master/License) 5 | [![GitHub Repo stars](https://img.shields.io/github/stars/WirelessAlien/ZipXtract)](https://img.shields.io/github/stars/WirelessAlien/ZipXtract) 6 | [![GitHub all releases](https://img.shields.io/github/downloads/WirelessAlien/ZipXtract/total)](https://img.shields.io/github/downloads/WirelessAlien/ZipXtract/total) 7 | ![IzzyOnDroid](https://img.shields.io/endpoint?url=https://apt.izzysoft.de/fdroid/api/v1/shield/com.wirelessalien.zipxtract) 8 | [![F-Droid](https://img.shields.io/f-droid/v/com.wirelessalien.zipxtract?logo=F-Droid)](https://f-droid.org/packages/com.wirelessalien.zipxtract) 9 | 10 |

ZipXtract는 아래와 같은 다양한 범주의 압축 포맷을 지원하기 위해 만들어진 완전 오픈 소스 안드로이드 앱입니다.

11 |
    12 |
  • RAR (RAR5 및 멀티 볼륨 지원)
  • 13 |
  • ZIP (비밀번호 보호 및 분할 압축 지원)
  • 14 |
  • TAR
  • 15 |
  • BZ2
  • 16 |
  • GZ
  • 17 |
  • 7z (비밀번호 보호 및 멀티 볼륨 지원)
  • 18 |
  • XZ
  • 19 |
  • JAR
  • 20 |
  • 21 |
22 | 23 |

특징

24 | 25 |

압축해제:

26 |
    27 |
  • 다양한 포맷 지원: RAR, ZIP, TAR, BZ2, GZ, 7z, XZ, JAR 등
  • 28 |
  • 암호화된 ZIP 및 7z 파일 제어.
  • 29 |
  • 멀티 볼륨 RAR 압축파일 해제.
  • 30 |
  • 멀티 볼륨 압축파일 해제.
  • 31 |
  • 분할 ZIP 파일 해제.
  • 32 |
33 | 34 |

압축:

35 |
    36 |
  • ZIP 및 7z 압축파일 암호화 옵션.
  • 37 |
  • 분할 ZIP 압축파일.
  • 38 |
39 | 40 |
41 |

알림:
42 | F-Droid 버전에는 라이센스 제한으로 인해 RAR 압축해제 및 7z 압축 기능이 포함되어 있지 않습니다. 전체 기능을 사용하려면 GitHub 또는 IzzyOnDroid 릴리즈를 사용하십시오.

43 |
44 | 45 |

사용 팁

46 |

압축파일 해제 및 압축파일 생성을 위한 일반적인 팁:

47 |
    48 |
  • 압축할 파일/폴더를 길게 누르거나 파일/폴더 아이콘을 선택합니다.
  • 49 |
  • 파일을 클릭하면 압축해제 옵션을 선택할 수 있는 메뉴가 표시됩니다.
  • 50 |
  • OS의 "연결 프로그램" 메뉴를 사용해 해제된 파일은 기본적으로 내부 저장소/ZipXtract에 저장됩니다. 앱 설정에서 변경할 수 있습니다.
  • 51 |
  • 압축 또는 (앱 내에서) 압축해제하는 기본 위치는 각 파일의 상위 경로입니다. 앱 설정에서 변경할 수 있습니다.
  • 52 |
53 | 54 |

앱 권한

55 |

저장소 읽기 및 쓰기 권한(안드로이드 10 이하), 외부 저장소 관리 권한(안드로이드 11 이상). 이 앱은 인터넷 연결 권한을 요구하지 않습니다. 더 많은 정보는 - 개인정보 정책

56 | 57 |

번역

58 |

59 | Weblate에서 앱 번역을 도와주십시오. (Weblate) 60 |

61 | 62 |

라이센스

63 |

이 프로젝트는 GNU 일반 공중 사용 허가서 v3.0.에 의해 라이선스가 부여됩니다. 자세한 사항은 라이센스 파일을 확인해 주십시오.

64 | 65 |

연락

66 |

문의사항 또는 피드백이 있으실 경우, GitHub 레포지토리에서 이슈를 개설해 주십시오.

67 | -------------------------------------------------------------------------------- /app/src/main/java/com/wirelessalien/zipxtract/helper/ArchiveOpenMultipartRarCallback.kt: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (C) 2023 WirelessAlien 3 | * 4 | * This program is free software: you can redistribute it and/or modify 5 | * it under the terms of the GNU General Public License as published by 6 | * the Free Software Foundation, either version 3 of the License, or 7 | * any later version. 8 | * 9 | * This program is distributed in the hope that it will be useful, 10 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 11 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12 | * GNU General Public License for more details. 13 | * 14 | * You should have received a copy of the GNU General Public License 15 | * along with this program. If not, see . 16 | */ 17 | 18 | package com.wirelessalien.zipxtract.helper 19 | 20 | 21 | import net.sf.sevenzipjbinding.* 22 | import net.sf.sevenzipjbinding.impl.RandomAccessFileInStream 23 | import java.io.File 24 | import java.io.FileNotFoundException 25 | import java.io.IOException 26 | import java.io.RandomAccessFile 27 | 28 | class ArchiveOpenMultipartRarCallback(private val parentDir: File) : IArchiveOpenVolumeCallback, IArchiveOpenCallback { 29 | private val openedRandomAccessFileList = HashMap() 30 | private var name: String? = null 31 | 32 | @Throws(SevenZipException::class) 33 | override fun getProperty(propID: PropID): Any? { 34 | return if (propID == PropID.NAME) name else null 35 | } 36 | 37 | @Throws(SevenZipException::class) 38 | override fun getStream(filename: String): IInStream? { 39 | try { 40 | var randomAccessFile = openedRandomAccessFileList[filename] 41 | if (randomAccessFile != null) { 42 | randomAccessFile.seek(0) 43 | name = filename 44 | return RandomAccessFileInStream(randomAccessFile) 45 | } 46 | 47 | val file = File(parentDir, filename) 48 | if (file.exists()) { 49 | randomAccessFile = RandomAccessFile(file, "r") 50 | openedRandomAccessFileList[filename] = randomAccessFile 51 | name = filename 52 | return RandomAccessFileInStream(randomAccessFile) 53 | } 54 | return null 55 | } catch (e: FileNotFoundException) { 56 | return null 57 | } catch (e: Exception) { 58 | throw SevenZipException("Error opening file", e) 59 | } 60 | } 61 | 62 | @Throws(IOException::class) 63 | fun close() { 64 | for (file in openedRandomAccessFileList.values) { 65 | file.close() 66 | } 67 | } 68 | 69 | @Throws(SevenZipException::class) 70 | override fun setCompleted(files: Long?, bytes: Long?) {} 71 | 72 | @Throws(SevenZipException::class) 73 | override fun setTotal(files: Long?, bytes: Long?) {} 74 | } -------------------------------------------------------------------------------- /gradlew.bat: -------------------------------------------------------------------------------- 1 | @rem 2 | @rem Copyright 2015 the original author or authors. 3 | @rem 4 | @rem Licensed under the Apache License, Version 2.0 (the "License"); 5 | @rem you may not use this file except in compliance with the License. 6 | @rem You may obtain a copy of the License at 7 | @rem 8 | @rem https://www.apache.org/licenses/LICENSE-2.0 9 | @rem 10 | @rem Unless required by applicable law or agreed to in writing, software 11 | @rem distributed under the License is distributed on an "AS IS" BASIS, 12 | @rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | @rem See the License for the specific language governing permissions and 14 | @rem limitations under the License. 15 | @rem 16 | 17 | @if "%DEBUG%" == "" @echo off 18 | @rem ########################################################################## 19 | @rem 20 | @rem Gradle startup script for Windows 21 | @rem 22 | @rem ########################################################################## 23 | 24 | @rem Set local scope for the variables with windows NT shell 25 | if "%OS%"=="Windows_NT" setlocal 26 | 27 | set DIRNAME=%~dp0 28 | if "%DIRNAME%" == "" set DIRNAME=. 29 | set APP_BASE_NAME=%~n0 30 | set APP_HOME=%DIRNAME% 31 | 32 | @rem Resolve any "." and ".." in APP_HOME to make it shorter. 33 | for %%i in ("%APP_HOME%") do set APP_HOME=%%~fi 34 | 35 | @rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. 36 | set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m" 37 | 38 | @rem Find java.exe 39 | if defined JAVA_HOME goto findJavaFromJavaHome 40 | 41 | set JAVA_EXE=java.exe 42 | %JAVA_EXE% -version >NUL 2>&1 43 | if "%ERRORLEVEL%" == "0" goto execute 44 | 45 | echo. 46 | echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. 47 | echo. 48 | echo Please set the JAVA_HOME variable in your environment to match the 49 | echo location of your Java installation. 50 | 51 | goto fail 52 | 53 | :findJavaFromJavaHome 54 | set JAVA_HOME=%JAVA_HOME:"=% 55 | set JAVA_EXE=%JAVA_HOME%/bin/java.exe 56 | 57 | if exist "%JAVA_EXE%" goto execute 58 | 59 | echo. 60 | echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% 61 | echo. 62 | echo Please set the JAVA_HOME variable in your environment to match the 63 | echo location of your Java installation. 64 | 65 | goto fail 66 | 67 | :execute 68 | @rem Setup the command line 69 | 70 | set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar 71 | 72 | 73 | @rem Execute Gradle 74 | "%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %* 75 | 76 | :end 77 | @rem End local scope for the variables with windows NT shell 78 | if "%ERRORLEVEL%"=="0" goto mainEnd 79 | 80 | :fail 81 | rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of 82 | rem the _cmd.exe /c_ return code! 83 | if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1 84 | exit /b 1 85 | 86 | :mainEnd 87 | if "%OS%"=="Windows_NT" endlocal 88 | 89 | :omega 90 | -------------------------------------------------------------------------------- /app/src/main/res/layout/list_item_file.xml: -------------------------------------------------------------------------------- 1 | 17 | 18 | 25 | 26 | 30 | 31 | 34 | 35 | 43 | 44 | 54 | 55 | 63 | 64 | 65 | -------------------------------------------------------------------------------- /app/src/main/java/com/wirelessalien/zipxtract/adapter/FilePathAdapter.kt: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (C) 2023 WirelessAlien 3 | * 4 | * This program is free software: you can redistribute it and/or modify 5 | * it under the terms of the GNU General Public License as published by 6 | * the Free Software Foundation, either version 3 of the License, or 7 | * any later version. 8 | * 9 | * This program is distributed in the hope that it will be useful, 10 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 11 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12 | * GNU General Public License for more details. 13 | * 14 | * You should have received a copy of the GNU General Public License 15 | * along with this program. If not, see . 16 | */ 17 | 18 | package com.wirelessalien.zipxtract.adapter 19 | 20 | import android.view.LayoutInflater 21 | import android.view.View 22 | import android.view.ViewGroup 23 | import androidx.recyclerview.widget.RecyclerView 24 | import com.wirelessalien.zipxtract.databinding.ListItemFileBinding 25 | import java.io.File 26 | 27 | class FilePathAdapter(private val filePaths: MutableList, private val onDeleteClick: (String) -> Unit) : 28 | RecyclerView.Adapter() { 29 | 30 | inner class ViewHolder(private val binding: ListItemFileBinding) : RecyclerView.ViewHolder(binding.root) { 31 | 32 | init { 33 | binding.deleteBtn.setOnClickListener { 34 | val position = bindingAdapterPosition 35 | if (position != RecyclerView.NO_POSITION) { 36 | val filePath = filePaths[position] 37 | onDeleteClick(filePath) 38 | } 39 | } 40 | } 41 | 42 | fun bind(filePath: String) { 43 | binding.textFileName.text = filePath 44 | 45 | val file = File(filePath) 46 | if (file.isDirectory) { 47 | binding.deleteBtn.visibility = View.GONE 48 | } else { 49 | binding.deleteBtn.visibility = View.VISIBLE 50 | } 51 | } 52 | } 53 | 54 | override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder { 55 | val binding = ListItemFileBinding.inflate(LayoutInflater.from(parent.context), parent, false) 56 | return ViewHolder(binding) 57 | } 58 | 59 | override fun onBindViewHolder(holder: ViewHolder, position: Int) { 60 | val filePath = filePaths[position] 61 | holder.bind(filePath) 62 | } 63 | 64 | override fun getItemCount(): Int { 65 | return filePaths.size 66 | } 67 | 68 | fun removeFilePath(filePath: String) { 69 | val position = filePaths.indexOf(filePath) 70 | if (position != -1) { 71 | filePaths.removeAt(position) 72 | notifyItemRemoved(position) 73 | notifyItemRangeChanged(position, filePaths.size) 74 | } 75 | } 76 | } -------------------------------------------------------------------------------- /app/src/main/java/com/wirelessalien/zipxtract/helper/ArchiveOpenMultipart7zCallback.kt: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (C) 2023 WirelessAlien 3 | * 4 | * This program is free software: you can redistribute it and/or modify 5 | * it under the terms of the GNU General Public License as published by 6 | * the Free Software Foundation, either version 3 of the License, or 7 | * any later version. 8 | * 9 | * This program is distributed in the hope that it will be useful, 10 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 11 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12 | * GNU General Public License for more details. 13 | * 14 | * You should have received a copy of the GNU General Public License 15 | * along with this program. If not, see . 16 | */ 17 | 18 | package com.wirelessalien.zipxtract.helper 19 | 20 | import android.util.Log 21 | import net.sf.sevenzipjbinding.IArchiveOpenVolumeCallback 22 | import net.sf.sevenzipjbinding.IInStream 23 | import net.sf.sevenzipjbinding.PropID 24 | import net.sf.sevenzipjbinding.impl.RandomAccessFileInStream 25 | import java.io.File 26 | import java.io.FileNotFoundException 27 | import java.io.IOException 28 | import java.io.RandomAccessFile 29 | 30 | class ArchiveOpenMultipart7zCallback(private val parentDir: File) : IArchiveOpenVolumeCallback { 31 | private val openedRandomAccessFileList = mutableMapOf() 32 | 33 | override fun getProperty(propID: PropID?): Any? { 34 | return null 35 | } 36 | 37 | override fun getStream(filename: String?): IInStream? { 38 | if (filename == null) return null 39 | return try { 40 | // First check if we already have this file open 41 | var randomAccessFile = openedRandomAccessFileList[filename] 42 | if (randomAccessFile != null) { 43 | randomAccessFile.seek(0) 44 | return RandomAccessFileInStream(randomAccessFile) 45 | } 46 | 47 | val volumeFile = File(parentDir, File(filename).name) 48 | 49 | if (!volumeFile.exists()) { 50 | return null 51 | } 52 | 53 | randomAccessFile = RandomAccessFile(volumeFile, "r") 54 | openedRandomAccessFileList[filename] = randomAccessFile 55 | RandomAccessFileInStream(randomAccessFile) 56 | } catch (e: FileNotFoundException) { 57 | Log.e("7zExtract", "Failed to open volume: ${e.message}", e) 58 | null 59 | } catch (e: Exception) { 60 | Log.e("7zExtract", "Error accessing volume: ${e.message}", e) 61 | throw RuntimeException(e) 62 | } 63 | } 64 | 65 | fun close() { 66 | for (file in openedRandomAccessFileList.values) { 67 | try { 68 | file.close() 69 | } catch (e: IOException) { 70 | e.printStackTrace() 71 | } 72 | } 73 | openedRandomAccessFileList.clear() 74 | } 75 | } -------------------------------------------------------------------------------- /app/src/main/res/drawable-anydpi-v24/ic_notification_icon.xml: -------------------------------------------------------------------------------- 1 | 7 | 11 | 17 | 23 | 28 | 33 | 38 | 43 | 44 | 45 | -------------------------------------------------------------------------------- /app/src/main/java/com/wirelessalien/zipxtract/fragment/DonationFragment.kt: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (C) 2023 WirelessAlien 3 | * 4 | * This program is free software: you can redistribute it and/or modify 5 | * it under the terms of the GNU General Public License as published by 6 | * the Free Software Foundation, either version 3 of the License, or 7 | * any later version. 8 | * 9 | * This program is distributed in the hope that it will be useful, 10 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 11 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12 | * GNU General Public License for more details. 13 | * 14 | * You should have received a copy of the GNU General Public License 15 | * along with this program. If not, see . 16 | */ 17 | 18 | package com.wirelessalien.zipxtract.fragment 19 | 20 | import android.app.Dialog 21 | import android.content.DialogInterface 22 | import android.content.Intent 23 | import android.content.SharedPreferences 24 | import android.net.Uri 25 | import android.os.Bundle 26 | import androidx.fragment.app.DialogFragment 27 | import androidx.preference.PreferenceManager 28 | import com.google.android.material.dialog.MaterialAlertDialogBuilder 29 | import com.wirelessalien.zipxtract.R 30 | import com.wirelessalien.zipxtract.databinding.FragmentDonationBinding 31 | 32 | class DonationFragment : DialogFragment() { 33 | 34 | private lateinit var preference: SharedPreferences 35 | override fun onCreateDialog(savedInstanceState: Bundle?): Dialog { 36 | val binding = FragmentDonationBinding.inflate(layoutInflater) 37 | val dView = binding.root 38 | 39 | preference = PreferenceManager.getDefaultSharedPreferences(requireContext()) 40 | 41 | binding.libPayBtn.setOnClickListener { 42 | val url = "https://liberapay.com/WirelessAlien/donate" 43 | val intent = Intent(Intent.ACTION_VIEW, Uri.parse(url)) 44 | startActivity(intent) 45 | } 46 | 47 | binding.githubSBtn.setOnClickListener { 48 | val url = "https://github.com/sponsors/WirelessAlien" 49 | val intent = Intent(Intent.ACTION_VIEW, Uri.parse(url)) 50 | startActivity(intent) 51 | } 52 | 53 | binding.paypalBtn.setOnClickListener { 54 | val url = "https://paypal.me/WirelessAlien" 55 | val intent = Intent(Intent.ACTION_VIEW, Uri.parse(url)) 56 | startActivity(intent) 57 | } 58 | 59 | binding.kofiBtn.setOnClickListener { 60 | val url = "https://ko-fi.com/wirelessalien" 61 | val intent = Intent(Intent.ACTION_VIEW, Uri.parse(url)) 62 | startActivity(intent) 63 | } 64 | 65 | return MaterialAlertDialogBuilder(requireContext(), R.style.MaterialDialog) 66 | .setView(dView) 67 | .create() 68 | } 69 | 70 | override fun onDismiss(dialog: DialogInterface) { 71 | super.onDismiss(dialog) 72 | preference.edit() 73 | .putInt("donation_dialog_version", 2) 74 | .apply() 75 | } 76 | } 77 | -------------------------------------------------------------------------------- /.github/workflows/test_release2.yml: -------------------------------------------------------------------------------- 1 | name: Test Release 2 2 | on: 3 | workflow_dispatch: 4 | 5 | jobs: 6 | build: 7 | runs-on: ubuntu-latest 8 | steps: 9 | - name: Get the source 10 | uses: actions/checkout@v5 11 | 12 | - name: Set up JDK 21 13 | uses: actions/setup-java@v5 14 | with: 15 | distribution: 'temurin' 16 | java-version: '21' 17 | 18 | - name: Cache Gradle dependencies 19 | uses: actions/cache@v4 20 | with: 21 | path: | 22 | ~/.gradle/caches 23 | ~/.gradle/wrapper 24 | key: ${{ runner.os }}-gradle-${{ hashFiles('**/*.gradle*', '**/gradle-wrapper.properties') }} 25 | restore-keys: | 26 | ${{ runner.os }}-gradle- 27 | 28 | - name: Grant execute permission for gradlew 29 | run: chmod +x ./gradlew 30 | 31 | - name: Generate Release AAB 32 | run: ./gradlew bundlePsRelease 33 | 34 | - name: Sign AAB with jarsigner 35 | id: sign_aab 36 | env: 37 | KEYSTORE_FILE_2: ${{ secrets.KEYSTORE_FILE_2 }} 38 | KEYSTORE_PASSWORD_2: ${{ secrets.KEYSTORE_PASSWORD_2 }} 39 | KEY_PASSWORD_2: ${{ secrets.KEY_PASSWORD_2 }} 40 | KEY_ALIAS_2: ${{ secrets.KEY_ALIAS_2 }} 41 | run: | 42 | set -e 43 | AAB_SRC="app/build/outputs/bundle/psRelease/app-ps-release.aab" 44 | AAB_DST="app/build/outputs/bundle/psRelease/app-ps-release-signed.aab" 45 | 46 | if [ ! -f "$AAB_SRC" ]; then 47 | echo "Error: AAB not found at $AAB_SRC" 48 | exit 1 49 | fi 50 | 51 | # Decode the base64 keystore secret into a file 52 | echo "$KEYSTORE_FILE_2" | base64 --decode > upload-keystore.jks 53 | chmod 600 upload-keystore.jks 54 | 55 | # Copy bundle to new file so original remains untouched 56 | cp "$AAB_SRC" "$AAB_DST" 57 | 58 | # Sign the AAB 59 | jarsigner -verbose -keystore upload-keystore.jks -storepass "$KEYSTORE_PASSWORD_2" -keypass "$KEY_PASSWORD_2" "$AAB_DST" "$KEY_ALIAS_2" 60 | 61 | # Verify signature 62 | jarsigner -verify -verbose -certs "$AAB_DST" 63 | 64 | # Clean up keystore file 65 | rm -f upload-keystore.jks 66 | 67 | echo "signed_aab=$AAB_DST" >> $GITHUB_OUTPUT 68 | 69 | - name: Install curl 70 | run: sudo apt-get update && sudo apt-get install -y curl 71 | 72 | - name: Upload signed AAB to Telegram 73 | env: 74 | TELEGRAM_BOT_TOKEN: ${{ secrets.TELEGRAM_BOT_TOKEN }} 75 | TELEGRAM_CHAT_ID: ${{ secrets.TELEGRAM_CHAT_ID }} 76 | run: | 77 | set -e 78 | SIGNED_AAB="${{ steps.sign_aab.outputs.signed_aab }}" 79 | 80 | if [ -z "$SIGNED_AAB" ] || [ ! -f "$SIGNED_AAB" ]; then 81 | echo "Signed AAB not found: $SIGNED_AAB" 82 | exit 1 83 | fi 84 | 85 | echo "Uploading signed AAB: $SIGNED_AAB" 86 | curl -s -X POST "https://api.telegram.org/bot${{ env.TELEGRAM_BOT_TOKEN }}/sendDocument" \ 87 | -F chat_id=${{ env.TELEGRAM_CHAT_ID }} \ 88 | -F document=@"$SIGNED_AAB" -------------------------------------------------------------------------------- /app/src/main/res/layout/fragment_donation.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 19 | 20 | 27 | 28 | 34 | 35 | 43 | 44 | 53 | 54 | 63 | 64 | 73 | -------------------------------------------------------------------------------- /app/src/main/res/layout/progress_dialog_archive.xml: -------------------------------------------------------------------------------- 1 | 17 | 18 | 23 | 24 | 34 | 35 | 44 | 45 | 52 | 53 | 62 | 63 | 73 | 74 | -------------------------------------------------------------------------------- /app/src/main/res/layout/progress_dialog_extract.xml: -------------------------------------------------------------------------------- 1 | 17 | 18 | 23 | 24 | 34 | 35 | 44 | 45 | 52 | 53 | 62 | 63 | 73 | 74 | -------------------------------------------------------------------------------- /app/src/main/java/com/wirelessalien/zipxtract/fragment/AboutFragment.kt: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (C) 2023 WirelessAlien 3 | * 4 | * This program is free software: you can redistribute it and/or modify 5 | * it under the terms of the GNU General Public License as published by 6 | * the Free Software Foundation, either version 3 of the License, or 7 | * any later version. 8 | * 9 | * This program is distributed in the hope that it will be useful, 10 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 11 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12 | * GNU General Public License for more details. 13 | * 14 | * You should have received a copy of the GNU General Public License 15 | * along with this program. If not, see . 16 | */ 17 | 18 | package com.wirelessalien.zipxtract.fragment 19 | 20 | import android.app.Dialog 21 | import android.content.Intent 22 | import android.net.Uri 23 | import android.os.Bundle 24 | import android.view.LayoutInflater 25 | import android.view.View 26 | import android.view.ViewGroup 27 | import android.view.Window 28 | import androidx.fragment.app.DialogFragment 29 | import com.wirelessalien.zipxtract.BuildConfig 30 | import com.wirelessalien.zipxtract.R 31 | import com.wirelessalien.zipxtract.databinding.FragmentAboutBinding 32 | 33 | 34 | class AboutFragment : DialogFragment() { 35 | private lateinit var binding: FragmentAboutBinding 36 | override fun onCreateView( 37 | inflater: LayoutInflater, container: ViewGroup?, 38 | savedInstanceState: Bundle? 39 | ): View { 40 | binding = FragmentAboutBinding.inflate(inflater, container, false) 41 | return binding.root 42 | } 43 | 44 | override fun onCreateDialog(savedInstanceState: Bundle?): Dialog { 45 | val dialog = super.onCreateDialog(savedInstanceState) 46 | dialog.requestWindowFeature(Window.FEATURE_NO_TITLE) 47 | return dialog 48 | } 49 | 50 | override fun onViewCreated(view: View, savedInstanceState: Bundle?) { 51 | super.onViewCreated(view, savedInstanceState) 52 | 53 | binding.versionNumberText.text = "Version: " + BuildConfig.VERSION_NAME 54 | 55 | binding.sourceCode.setOnClickListener { 56 | openUrl("https://github.com/WirelessAlien/ZipXtract") 57 | } 58 | 59 | binding.reportIssue.setOnClickListener { 60 | openUrl("https://github.com/WirelessAlien/ZipXtract/issues") 61 | } 62 | 63 | binding.licenseText.setOnClickListener { 64 | openUrl("https://www.gnu.org/licenses/gpl-3.0.txt") 65 | } 66 | 67 | binding.donate.setOnClickListener { 68 | val donateFragment = DonationFragment() 69 | donateFragment.show(requireActivity().supportFragmentManager, "donationFragment") 70 | } 71 | 72 | binding.shareIcon.setOnClickListener { 73 | val githubUrl = "https://github.com/WirelessAlien/ZipXtract" 74 | val shareIntent = Intent(Intent.ACTION_SEND) 75 | shareIntent.type = "text/plain" 76 | shareIntent.putExtra(Intent.EXTRA_TEXT, githubUrl) 77 | startActivity(Intent.createChooser(shareIntent, getString(R.string.share))) 78 | } 79 | 80 | binding.privacyPolicyLink.setOnClickListener { 81 | openUrl("https://sites.google.com/view/privacy-policy-zipxtract/home") 82 | } 83 | } 84 | 85 | private fun openUrl(url: String) { 86 | val intent = Intent(Intent.ACTION_VIEW, Uri.parse(url)) 87 | startActivity(intent) 88 | } 89 | } -------------------------------------------------------------------------------- /app/src/main/res/drawable/app_icon_m.xml: -------------------------------------------------------------------------------- 1 | 17 | 18 | 24 | 30 | 36 | 41 | 46 | 51 | 56 | 57 | -------------------------------------------------------------------------------- /docs/README.ru.md: -------------------------------------------------------------------------------- 1 | # ZipXtract 2 | 3 | [![GitHub release](https://img.shields.io/github/v/release/WirelessAlien/ZipXtract)](https://github.com/WirelessAlien/ZipXtract/releases/latest) 4 | [![GitHub license](https://img.shields.io/github/license/WirelessAlien/ZipXtract)](https://github.com/WirelessAlien/ZipXtract/blob/master/License) 5 | [![GitHub Repo stars](https://img.shields.io/github/stars/WirelessAlien/ZipXtract)](https://img.shields.io/github/stars/WirelessAlien/ZipXtract) 6 | [![GitHub all releases](https://img.shields.io/github/downloads/WirelessAlien/ZipXtract/total)](https://img.shields.io/github/downloads/WirelessAlien/ZipXtract/total) 7 | ![IzzyOnDroid](https://img.shields.io/endpoint?url=https://apt.izzysoft.de/fdroid/api/v1/shield/com.wirelessalien.zipxtract) 8 | [![F-Droid](https://img.shields.io/f-droid/v/com.wirelessalien.zipxtract?logo=F-Droid)](https://f-droid.org/packages/com.wirelessalien.zipxtract) 9 | 10 |

ZipXtract — это полностью открытое Android-приложение, предназначенное для работы с широким спектром архивных форматов, включая:

11 |
    12 |
  • RAR (с поддержкой RAR5 и многотомных архивов)
  • 13 |
  • ZIP (включая защищенные паролем и раздельные архивы)
  • 14 |
  • TAR
  • 15 |
  • BZ2
  • 16 |
  • GZ
  • 17 |
  • 7z (с защитой паролем и поддержкой многотомных архивов)
  • 18 |
  • XZ
  • 19 |
  • JAR
  • 20 |
  • ...
  • 21 |
22 | 23 |

Функции

24 | 25 |

Извлечение:

26 |
    27 |
  • Поддерживает различные форматы: RAR, ZIP, TAR, BZ2, GZ, 7z, XZ, JAR и др.
  • 28 |
  • Обрабатывает зашифрованные ZIP и 7z файлы.
  • 29 |
  • Извлекает многотомные RAR архивы.
  • 30 |
  • Извлекает многотомные архивы.
  • 31 |
  • Извлекает раздельные ZIP файлы.
  • 32 |
33 | 34 |

Создание:

35 |
    36 |
  • Создавайте ZIP и 7z архивы, с опциями для шифрования.
  • 37 |
  • Создавайте раздельные ZIP архивы.
  • 38 |
39 | 40 |
41 |

ПРИМЕЧАНИЕ:
42 | Версия F-Droid не включает функции извлечения RAR и сжатия 7z из-за лицензионных ограничений. Для полной версии используйте релизы с GitHub или IzzyOnDroid.

43 |
44 | 45 |

Совет по использованию

46 |

Общие советы для извлечения и создания архивов:

47 |
    48 |
  • Долгое нажатие на файлы и папки или щелчок по значкам файлов/папок для выбора их для архивации.
  • 49 |
  • Щелкните на файл, чтобы отобразить меню извлечения для выбора опций извлечения.
  • 50 |
  • Файлы, извлеченные с помощью меню "Открыть с помощью" ОС, по умолчанию сохраняются в Внутреннее накопители/ZipXtract. Измените это в настройках приложения.
  • 51 |
  • Место по умолчанию для архивации или извлечения архивов (в приложении) — родительская директория соответствующих файлов. Это можно изменить в настройках приложения.
  • 52 |
53 | 54 |

Разрешения приложения

55 |

Разрешение на чтение и запись накопителя (Android 10 и ниже) и управление разрешением на внешнее накопители (Android 11 и выше). У приложения нет разрешения на интернет. Читайте больше - Политика конфиденциальности

56 | 57 |

Перевести

58 |

59 | Помогите локализовать приложение тут Weblate 60 |

61 | 62 |

Лицензия

63 |

Этот проект лицензирован под лицензией GNU General Public License v3.0. См. файл LICENSE для получения деталей.

64 | 65 |

Контакт

66 |

Для любых вопросов или отзывов, пожалуйста, откройте проблему в репозитории GitHub.

67 | -------------------------------------------------------------------------------- /app/src/main/java/com/wirelessalien/zipxtract/helper/FileOperationsDao.kt: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (C) 2023 WirelessAlien 3 | * 4 | * This program is free software: you can redistribute it and/or modify 5 | * it under the terms of the GNU General Public License as published by 6 | * the Free Software Foundation, either version 3 of the License, or 7 | * any later version. 8 | * 9 | * This program is distributed in the hope that it will be useful, 10 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 11 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12 | * GNU General Public License for more details. 13 | * 14 | * You should have received a copy of the GNU General Public License 15 | * along with this program. If not, see . 16 | */ 17 | 18 | package com.wirelessalien.zipxtract.helper 19 | 20 | import android.content.ContentValues 21 | import android.content.Context 22 | import androidx.core.database.sqlite.transaction 23 | import com.wirelessalien.zipxtract.helper.FileDbHelper.Companion.COLUMN_FILE_PATH 24 | import com.wirelessalien.zipxtract.helper.FileDbHelper.Companion.COLUMN_ITEM_NAME 25 | import com.wirelessalien.zipxtract.helper.FileDbHelper.Companion.COLUMN_JOB_ID 26 | import com.wirelessalien.zipxtract.helper.FileDbHelper.Companion.TABLE_NAME 27 | import java.util.UUID 28 | 29 | class FileOperationsDao(context: Context) { 30 | 31 | private val dbHelper = FileDbHelper(context) 32 | 33 | fun addFilesForJob(files: List): String { 34 | val filePairs = files.map { it to null } 35 | return addFilePairsForJob(filePairs) 36 | } 37 | 38 | fun addFilePairsForJob(files: List>): String { 39 | val jobId = UUID.randomUUID().toString() 40 | val db = dbHelper.writableDatabase 41 | db.transaction { 42 | try { 43 | for ((filePath, itemName) in files) { 44 | val values = ContentValues().apply { 45 | put(COLUMN_JOB_ID, jobId) 46 | put(COLUMN_FILE_PATH, filePath) 47 | put(COLUMN_ITEM_NAME, itemName) 48 | } 49 | insert(TABLE_NAME, null, values) 50 | } 51 | } finally { 52 | } 53 | } 54 | return jobId 55 | } 56 | 57 | fun getFilesForJob(jobId: String): List { 58 | return getFilePairsForJob(jobId).map { it.first } 59 | } 60 | 61 | fun getFileForJob(jobId: String): String? { 62 | return getFilePairsForJob(jobId).firstOrNull()?.first 63 | } 64 | 65 | fun getFilePairsForJob(jobId: String): List> { 66 | val files = mutableListOf>() 67 | val db = dbHelper.readableDatabase 68 | val cursor = db.query( 69 | TABLE_NAME, 70 | arrayOf(COLUMN_FILE_PATH, COLUMN_ITEM_NAME), 71 | "$COLUMN_JOB_ID = ?", 72 | arrayOf(jobId), 73 | null, 74 | null, 75 | null 76 | ) 77 | with(cursor) { 78 | while (moveToNext()) { 79 | val filePath = getString(getColumnIndexOrThrow(COLUMN_FILE_PATH)) 80 | val itemName = getString(getColumnIndexOrThrow(COLUMN_ITEM_NAME)) 81 | files.add(filePath to itemName) 82 | } 83 | } 84 | cursor.close() 85 | return files 86 | } 87 | 88 | 89 | 90 | fun deleteFilesForJob(jobId: String) { 91 | val db = dbHelper.writableDatabase 92 | db.delete(TABLE_NAME, "$COLUMN_JOB_ID = ?", arrayOf(jobId)) 93 | } 94 | } -------------------------------------------------------------------------------- /docs/README.tr-TR.md: -------------------------------------------------------------------------------- 1 | # ZipXtract 2 | 3 | [![GitHub release](https://img.shields.io/github/v/release/WirelessAlien/ZipXtract)](https://github.com/WirelessAlien/ZipXtract/releases/latest) 4 | [![GitHub license](https://img.shields.io/github/license/WirelessAlien/ZipXtract)](https://github.com/WirelessAlien/ZipXtract/blob/master/License) 5 | [![GitHub Repo stars](https://img.shields.io/github/stars/WirelessAlien/ZipXtract)](https://img.shields.io/github/stars/WirelessAlien/ZipXtract) 6 | [![GitHub all releases](https://img.shields.io/github/downloads/WirelessAlien/ZipXtract/total)](https://img.shields.io/github/downloads/WirelessAlien/ZipXtract/total) 7 | ![IzzyOnDroid](https://img.shields.io/endpoint?url=https://apt.izzysoft.de/fdroid/api/v1/shield/com.wirelessalien.zipxtract) 8 | [![F-Droid](https://img.shields.io/f-droid/v/com.wirelessalien.zipxtract?logo=F-Droid)](https://f-droid.org/packages/com.wirelessalien.zipxtract) 9 | 10 |

ZipXtract, çok çeşitli arşiv formatlarını işleyebilen tamamen açık kaynaklı bir Android uygulamasıdır. Desteklenen formatlar şunlardır:

11 |
    12 |
  • RAR (RAR5 ve çok ciltli destek ile)
  • 13 |
  • ZIP (şifre korumalı ve bölünmüş arşivler dahil)
  • 14 |
  • TAR
  • 15 |
  • BZ2
  • 16 |
  • GZ
  • 17 |
  • 7z (şifre koruması ve çok ciltli destek ile)
  • XZ
  • 18 |
  • JAR
  • 19 |
  • ...
  • 20 |
21 | 22 |

Özellikler

23 | 24 |

Çıkarma:

25 |
    26 |
  • RAR, ZIP, TAR, BZ2, GZ, 7z, XZ, JAR vb. formatları destekler.
  • 27 |
  • Şifreli ZIP ve 7z dosyalarını işler.
  • 28 |
  • Çok ciltli RAR arşivlerini çıkarır.
  • 29 |
  • Çok ciltli arşivleri çıkarır.
  • 30 |
  • Bölünmüş ZIP dosyalarını çıkarır.
  • 31 |
32 | 33 |

Oluşturma:

34 | 35 |
    36 |
  • Şifreleme seçenekleriyle ZIP ve 7z arşivleri oluşturur.
  • 37 |
  • Bölünmüş ZIP arşivleri oluşturur.
  • 38 |
39 | 40 |
41 |

NOT:
42 | F-Droid sürümünde lisans kısıtlamaları nedeniyle RAR çıkarma ve 7z sıkıştırma özellikleri bulunmamaktadır. Tüm özelliklere sahip sürüm için GitHub veya IzzyOnDroid dağıtımlarını kullanın.

43 |
44 | 45 |

Kullanım İpucu

46 |

Arşiv çıkarma ve oluşturma için genel ipuçları:

47 |
    48 |
  • Dosya ve klasörleri arşivlemek için üzerine uzun basın veya simgelerine tıklayarak seçin.
  • 49 |
  • Bir dosyaya tıklayarak çıkarma seçeneklerini içeren menüyü görüntüleyin.
  • 50 |
  • İşletim sisteminin “Birlikte Aç” menüsüyle çıkarılan dosyalar varsayılan olarak Dahili Depolama/ZipXtract klasörüne kaydedilir. Bunu uygulama ayarlarından değiştirebilirsiniz.
  • 51 |
  • Uygulama içinden yapılan arşivleme ve çıkarma işlemlerinin varsayılan konumu, dosyanın bulunduğu üst dizindir. Bu ayar da değiştirilebilir.
  • 52 |
53 | 54 |

Uygulama İzinleri

55 |

Depolama Okuma/Yazma İzni (Android 10 ve öncesi) ve Harici Depolamayı Yönetme İzni (Android 11 ve sonrası) gerektirir. Uygulamanın internet izni yoktur. Daha fazla bilgi için: Gizlilik politikası

56 | 57 |

Çeviri

58 |

Uygulamayı yerelleştirmeye yardımcı olmak için Weblate'e katılın.

59 | 60 |

Lisans

61 |

Bu proje GNU Genel Kamu Lisansı v3.0 ile lisanslanmıştır. Detaylar için LİSANS dosyasına bakın.

62 | 63 |

İletişim

64 |

Herhangi bir soru veya geri bildirim için lütfen GitHub deposunda bir konu (issue) açın.

-------------------------------------------------------------------------------- /docs/README.uk.md: -------------------------------------------------------------------------------- 1 | # ZipXtract 2 | 3 | [![GitHub release](https://img.shields.io/github/v/release/WirelessAlien/ZipXtract)](https://github.com/WirelessAlien/ZipXtract/releases/latest) 4 | [![GitHub license](https://img.shields.io/github/license/WirelessAlien/ZipXtract)](https://github.com/WirelessAlien/ZipXtract/blob/master/License) 5 | [![GitHub Repo stars](https://img.shields.io/github/stars/WirelessAlien/ZipXtract)](https://img.shields.io/github/stars/WirelessAlien/ZipXtract) 6 | [![GitHub all releases](https://img.shields.io/github/downloads/WirelessAlien/ZipXtract/total)](https://img.shields.io/github/downloads/WirelessAlien/ZipXtract/total) 7 | ![IzzyOnDroid](https://img.shields.io/endpoint?url=https://apt.izzysoft.de/fdroid/api/v1/shield/com.wirelessalien.zipxtract) 8 | [![F-Droid](https://img.shields.io/f-droid/v/com.wirelessalien.zipxtract?logo=F-Droid)](https://f-droid.org/packages/com.wirelessalien.zipxtract) 9 | 10 | 11 |

ZipXtract — це програма Android із повністю відкритим вихідним кодом, призначена для обробки широкого діапазону форматів архівів, зокрема:

12 |
    13 |
  • RAR (з підтримкою RAR5 і багатотомного зберігання)
  • 14 |
  • ZIP (включаючи захищені паролем і розділені архіви)
  • 15 |
  • TAR
  • 16 |
  • BZ2
  • 17 |
  • GZ
  • 18 |
  • 7z (із захистом паролем і підтримкою кількох томів)
  • 19 |
  • XZ
  • 20 |
  • JAR
  • 21 |
  • ...
  • 22 |
23 | 24 |

Функції

25 | 26 |

Вилучення:

27 |
    28 |
  • Підтримує різні формати: RAR, ZIP, TAR, BZ2, GZ, 7z, XZ, JAR тощо.
  • 29 |
  • Обробляє зашифровані файли ZIP і 7z.
  • 30 |
  • Витягує багатотомні архіви RAR.
  • 31 |
  • Витягує багатотомні архіви.
  • 32 |
  • Витягує розділені файли ZIP.
  • 33 |
34 | 35 |

Створення:

36 |
    37 |
  • Створюйте архіви ZIP і 7z із параметрами шифрування.
  • 38 |
  • Створення розділених ZIP-архівів.
  • 39 |
40 | 41 |
42 |

ПРИМІТКА:
43 | Версія F-Droid не включає функції видобування RAR і стиснення 7z через ліцензійні обмеження. Щоб отримати повну версію, використовуйте випуски GitHub або IzzyOnDroid.

44 |
45 | 46 |

Порада щодо використання

47 |

Загальні поради щодо розпакування та створення архіву:

48 |
    49 |
  • Утримуйте файли та папки або клацайте піктограми файлів/папок, щоб вибрати їх для архівування.
  • 50 |
  • Натисніть файл, щоб відобразити меню видобування для вибору параметрів видобування.
  • 51 |
  • Файли, видобуті за допомогою меню «Відкрити за допомогою» ОС, за умовчанням зберігаються у Internal Storage/ZipXtract. Змініть це в налаштуваннях програми.
  • 52 |
  • Розташуванням за замовчуванням для архівування або витягування архівів (у програмі) є батьківський каталог відповідних файлів. Це можна змінити в налаштуваннях програми.
  • 53 |
54 | 55 |

Дозвіл програми

56 |

Дозвіл на читання та запис пам’яті (Android 10 і старіші версії) і дозвіл на керування зовнішньою пам’яттю (Android 11 і новіші версії). Програма не має доступу до Інтернету. Докладніше - Політика конфіденційності

57 | 58 |

Перекласти

59 |

60 | Допоможіть локалізувати програму через Weblate 61 | 62 |

63 | 64 |

Ліцензія

65 |

Цей проект ліцензовано згідно з GNU General Public License v3.0. Докладніше див. у файлі LICENSE.

66 | 67 |

Контакт

68 |

Щоб отримати будь-які запитання чи відгуки, будь ласка, відкрийте проблему в репозиторії GitHub.

69 | -------------------------------------------------------------------------------- /app/src/main/res/layout/shimmer_placeholder_item.xml: -------------------------------------------------------------------------------- 1 | 17 | 18 | 24 | 25 | 30 | 31 | 40 | 41 | 50 | 51 | 62 | 63 | 67 | 68 | 69 | 80 | 81 | 82 | -------------------------------------------------------------------------------- /docs/README.bg.md: -------------------------------------------------------------------------------- 1 | # ZipXtract 2 | 3 | [![GitHub release](https://img.shields.io/github/v/release/WirelessAlien/ZipXtract)](https://github.com/WirelessAlien/ZipXtract/releases/latest) 4 | [![GitHub license](https://img.shields.io/github/license/WirelessAlien/ZipXtract)](https://github.com/WirelessAlien/ZipXtract/blob/master/License) 5 | [![GitHub Repo stars](https://img.shields.io/github/stars/WirelessAlien/ZipXtract)](https://img.shields.io/github/stars/WirelessAlien/ZipXtract) 6 | [![GitHub all releases](https://img.shields.io/github/downloads/WirelessAlien/ZipXtract/total)](https://img.shields.io/github/downloads/WirelessAlien/ZipXtract/total) 7 | ![IzzyOnDroid](https://img.shields.io/endpoint?url=https://apt.izzysoft.de/fdroid/api/v1/shield/com.wirelessalien.zipxtract) 8 | [![F-Droid](https://img.shields.io/f-droid/v/com.wirelessalien.zipxtract?logo=F-Droid)](https://f-droid.org/packages/com.wirelessalien.zipxtract) 9 | 10 |

ZipXtract е приложение за Android с напълно отворен код, предназначено да обработва широк набор от архивни формати, включително:

11 |
    12 |
  • RAR (с RAR5 и многотомна поддръжка)
  • 13 |
  • ZIP (включително защитени с парола и разделени архиви)
  • 14 |
  • TAR
  • 15 |
  • BZ2
  • 16 |
  • GZ
  • 17 |
  • 7z (със защита с парола и многотомна поддръжка)
  • 18 |
  • XZ
  • 19 |
  • JAR
  • 20 |
  • ...
  • 21 |
22 | 23 |

Характеристики

24 | 25 |

Извличане на:

26 |
    27 |
  • Поддържа различни формати: RAR, ZIP, TAR, BZ2, GZ, 7z, XZ, JAR etc.
  • 28 |
  • Обработва криптирани ZIP и 7z файлове.
  • 29 |
  • Извлича многотомни RAR архиви.
  • 30 |
  • Извлича многотомни архиви.
  • 31 |
  • Извлича разделени ZIP файлове.
  • 32 |
33 | 34 |

Създаване:

35 |
    36 |
  • Създавайте ZIP и 7z архиви с опции за криптиране.
  • 37 |
  • Създавайте разделени ZIP архиви.
  • 38 |
39 | 40 |
41 |

ЗАБЕЛЕЖКА:
42 | Версията на F-Droid не включва функции за извличане на RAR и 7z компресия поради лицензионни ограничения. За пълната версия, моля, използвайте версиите GitHub или IzzyOnDroid.

43 |
44 | 45 |

Съвет за използване

46 |

Общи съвети за извличане на архиви и създаване на архиви:

47 |
    48 |
  • Дълго натискане на файлове и папки или щракване върху икони на файлове/папки, за да ги изберете за архивиране.
  • 49 |
  • Щракнете върху файл, за да се покаже менюто за извличане за избор на опции за извличане.
  • 50 |
  • Файловете, извлечени от менюто “Отвори с“ на операционната система, се съхраняват в Вътрешно хранилище/ZipXtract по подразбиране. Променете това в настройките на приложението.
  • 51 |
  • Местоположението по подразбиране за архивиране или извличане на архиви (в рамките на приложението) е основната директория на съответния(те) файл(ве). Това може да бъде променено в настройките на приложението.
  • 52 |
53 | 54 |

Разрешение за приложение

55 |

Разрешение за четене и запис в хранилището (Android 10 и по-ниски) и Управление на разрешението за външно хранилище (Android 11 и по-високи). Приложението няма разрешение за достъп до интернет. Прочетете повече- Политика за поверителност

56 | 57 |

Превод

58 |

59 | Помогнете за локализирането на приложението чрез Weblate 60 | 61 |

62 | 63 |

Лиценз

64 |

Този проект е лицензиран под GNU General Public License v3.0. Вижте LICENSE файл за подробности.

65 | 66 |

Контакт

67 |

За всякакви запитвания или обратна връзка, моля, отворете проблем на GitHub хранилище.

68 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_github.xml: -------------------------------------------------------------------------------- 1 | 17 | 18 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | -------------------------------------------------------------------------------- /app/src/main/res/values-night/colors.xml: -------------------------------------------------------------------------------- 1 | 20 | 21 | 22 | #1A37618E 23 | #A1CAFD 24 | #003259 25 | #1A4975 26 | #D2E4FF 27 | #A0CAFD 28 | #003258 29 | #194975 30 | #D1E4FF 31 | #97CCF8 32 | #00344F 33 | #004B71 34 | #CBE6FF 35 | #FFB4AB 36 | #690005 37 | #93000A 38 | #FFDAD6 39 | #111418 40 | #E1E2E8 41 | #111418 42 | #E1E2E8 43 | #43474E 44 | #C3C6CF 45 | #8D9199 46 | #43474E 47 | #E1E2E8 48 | #2E3135 49 | #37618E 50 | #D2E4FF 51 | #001D36 52 | #A1CAFD 53 | #1A4975 54 | #D1E4FF 55 | #001D36 56 | #A0CAFD 57 | #194975 58 | #CBE6FF 59 | #001E30 60 | #97CCF8 61 | #004B71 62 | #111418 63 | #36393E 64 | #0B0E13 65 | #191C20 66 | #1D2024 67 | #272A2F 68 | #32353A 69 | 70 | -------------------------------------------------------------------------------- /app/src/main/res/values/colors.xml: -------------------------------------------------------------------------------- 1 | 20 | 21 | 22 | 23 | #1A37618E 24 | #37618E 25 | #FFFFFF 26 | #D2E4FF 27 | #001D36 28 | #35618E 29 | #FFFFFF 30 | #D1E4FF 31 | #001D36 32 | #29638A 33 | #FFFFFF 34 | #CBE6FF 35 | #001E30 36 | #BA1A1A 37 | #FFFFFF 38 | #FFDAD6 39 | #410002 40 | #F8F9FF 41 | #191C20 42 | #F8F9FF 43 | #191C20 44 | #DFE2EB 45 | #43474E 46 | #73777F 47 | #C3C6CF 48 | #2E3135 49 | #EFF0F7 50 | #A1CAFD 51 | #D2E4FF 52 | #001D36 53 | #A1CAFD 54 | #1A4975 55 | #D1E4FF 56 | #001D36 57 | #A0CAFD 58 | #194975 59 | #CBE6FF 60 | #001E30 61 | #97CCF8 62 | #004B71 63 | #D8DAE0 64 | #F8F9FF 65 | #FFFFFF 66 | #F2F3FA 67 | #ECEEF4 68 | #E6E8EE 69 | #E1E2E8 70 | 71 | -------------------------------------------------------------------------------- /app/build.gradle: -------------------------------------------------------------------------------- 1 | plugins { 2 | id 'com.android.application' 3 | id 'org.jetbrains.kotlin.android' 4 | } 5 | 6 | android { 7 | namespace 'com.wirelessalien.zipxtract' 8 | compileSdk = 35 9 | 10 | flavorDimensions "version" 11 | productFlavors { 12 | foss { 13 | dimension "version" 14 | applicationId "com.wirelessalien.zipxtract" 15 | } 16 | ps { 17 | dimension "version" 18 | applicationId "com.wirelessalien.zipxtract.ps" 19 | versionNameSuffix "-ps" 20 | } 21 | } 22 | 23 | defaultConfig { 24 | applicationId "com.wirelessalien.zipxtract" 25 | minSdk 24 26 | targetSdk 35 27 | versionCode 23 28 | versionName "6.0.1.1" 29 | 30 | testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" 31 | } 32 | 33 | buildTypes { 34 | release { 35 | minifyEnabled true 36 | shrinkResources true 37 | proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro' 38 | debuggable = false 39 | } 40 | debug { 41 | debuggable = true 42 | applicationIdSuffix '.debug' 43 | versionNameSuffix '-debug' 44 | } 45 | } 46 | compileOptions { 47 | sourceCompatibility JavaVersion.VERSION_21 48 | targetCompatibility JavaVersion.VERSION_21 49 | } 50 | kotlinOptions { 51 | jvmTarget = '21' 52 | } 53 | buildFeatures { 54 | viewBinding true 55 | buildConfig true 56 | } 57 | dependenciesInfo { 58 | includeInApk false 59 | } 60 | 61 | packagingOptions { 62 | resources { 63 | excludes += [ 64 | 'META-INF/**', 65 | '**.txt' 66 | ] 67 | } 68 | jniLibs { 69 | useLegacyPackaging = true 70 | keepDebugSymbols += [ 71 | 'lib7-Zip-JBinding.so', 72 | 'libarchive-jni.so', 73 | 'libzstd-jni-1.5.7-2.so' 74 | ] 75 | } 76 | } 77 | } 78 | 79 | dependencies { 80 | 81 | implementation 'androidx.core:core-ktx:1.16.0' 82 | implementation 'androidx.appcompat:appcompat:1.7.0' 83 | implementation 'com.google.android.material:material:1.14.0-alpha06' 84 | implementation 'androidx.constraintlayout:constraintlayout:2.2.1' 85 | implementation 'androidx.preference:preference-ktx:1.2.1' 86 | implementation 'androidx.swiperefreshlayout:swiperefreshlayout:1.2.0-beta01' 87 | 88 | //glide 89 | implementation("com.github.bumptech.glide:glide:5.0.5") 90 | 91 | //Kotlin Coroutines 92 | implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-core:1.10.2' 93 | implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-android:1.10.2' 94 | 95 | //fragment 96 | implementation 'androidx.fragment:fragment-ktx:1.8.7' 97 | 98 | // local broadcast manager 99 | implementation 'androidx.localbroadcastmanager:localbroadcastmanager:1.1.0' 100 | 101 | //apache commons compress 102 | implementation 'org.apache.commons:commons-compress:1.28.0' 103 | implementation 'org.tukaani:xz:1.10' 104 | 105 | //zip4j 106 | implementation 'net.lingala.zip4j:zip4j:2.11.5' 107 | 108 | //7-Zip-Jbinding-4Android 109 | implementation 'com.github.omicronapps:7-Zip-JBinding-4Android:Release-16.02-2.03' 110 | 111 | //libarchive 112 | implementation 'me.zhanghai.android.libarchive:library:1.1.6' 113 | 114 | implementation "com.github.luben:zstd-jni:1.5.7-6@aar" 115 | implementation 'androidx.coordinatorlayout:coordinatorlayout:1.3.0' 116 | 117 | testImplementation 'junit:junit:4.13.2' 118 | androidTestImplementation 'androidx.test.ext:junit:1.3.0' 119 | androidTestImplementation 'androidx.test.espresso:espresso-core:3.7.0' 120 | 121 | //shimmer 122 | implementation 'com.facebook.shimmer:shimmer:0.5.0' 123 | } 124 | -------------------------------------------------------------------------------- /docs/README.ta-IN.md: -------------------------------------------------------------------------------- 1 | # ZipXtract 2 | 3 | [![GitHub release](https://img.shields.io/github/v/release/WirelessAlien/ZipXtract)](https://github.com/WirelessAlien/ZipXtract/releases/latest) 4 | [![GitHub license](https://img.shields.io/github/license/WirelessAlien/ZipXtract)](https://github.com/WirelessAlien/ZipXtract/blob/master/License) 5 | [![GitHub Repo stars](https://img.shields.io/github/stars/WirelessAlien/ZipXtract)](https://img.shields.io/github/stars/WirelessAlien/ZipXtract) 6 | [![GitHub all releases](https://img.shields.io/github/downloads/WirelessAlien/ZipXtract/total)](https://img.shields.io/github/downloads/WirelessAlien/ZipXtract/total) 7 | ![IzzyOnDroid](https://img.shields.io/endpoint?url=https://apt.izzysoft.de/fdroid/api/v1/shield/com.wirelessalien.zipxtract) 8 | [![F-Droid](https://img.shields.io/f-droid/v/com.wirelessalien.zipxtract?logo=F-Droid)](https://f-droid.org/packages/com.wirelessalien.zipxtract) 9 | 10 |

ZipXtract என்பது பரந்த அளவிலான காப்பக வடிவங்களைக் கையாள வடிவமைக்கப்பட்ட முழுமையான திறந்த மூல Android பயன்பாடாகும், இதில் அடங்கும்:

11 |
    12 |
  • ரார் (ரார்5 மற்றும் பல-தொகுதி ஆதரவுடன்)
  • 13 |
  • சுருக்கு (கடவுச்சொல் பாதுகாக்கப்பட்ட மற்றும் பிரிக்கப்பட்ட காப்பகங்கள் உட்பட)
  • 14 |
  • தார்
  • 15 |
  • பிஇசட்2
  • 16 |
  • சிஇசட்
  • 17 |
  • 7ஃ (கடவுச்சொல் பாதுகாப்பு மற்றும் பல-தொகுதி ஆதரவுடன்)
  • 18 |
  • எக்ச்இசட்
  • 19 |
  • சாடி
  • 20 |
  • ...
  • 21 |
22 | 23 |

நற்பண்புகள்

24 | 25 |

பிரித்தெடுத்தல்:

26 |
    27 |
  • பல்வேறு வடிவங்களை ஆதரிக்கிறது: RAR, ZIP, TAR, BZ2, GZ, 7z, XZ, JAR போன்றவை.
  • 28 |
  • மறைகுறியாக்கப்பட்ட ZIP மற்றும் 7z கோப்புகளைக் கையாளுகிறது.
  • 29 |
  • பல தொகுதி RAR காப்பகங்களைப் பிரித்தெடுக்கிறது.
  • 30 |
  • பல தொகுதி காப்பகங்களைப் பிரித்தெடுக்கிறது.
  • 31 |
  • பிரிக்கப்பட்ட ZIP கோப்புகளைப் பிரித்தெடுக்கிறது.
  • 32 |
33 | 34 |

படைப்பு:

35 |
    36 |
  • குறியாக்க விருப்பங்களுடன் ZIP மற்றும் 7z காப்பகங்களை உருவாக்கவும்.
  • 37 |
  • பிரிக்கப்பட்ட ZIP காப்பகங்களை உருவாக்கவும்.
  • 38 |
39 | 40 |
41 |

குறிப்பு:
42 | உரிமக் கட்டுப்பாடுகள் காரணமாக F-Droid பதிப்பில் RAR பிரித்தெடுத்தல் மற்றும் 7z சுருக்க அம்சங்கள் இல்லை. முழுமையான பதிப்பிற்கு, தயவுசெய்து GitHub அல்லது IzzyOnDroid வெளியீடுகளைப் பயன்படுத்தவும்.

43 |
44 | 45 |

பயன்பாட்டு உதவிக்குறிப்பு

46 |

காப்பகப் பிரித்தெடுத்தல் மற்றும் காப்பக உருவாக்கத்திற்கான பொதுவான குறிப்புகள்:

47 |
    48 |
  • காப்பகப்படுத்துவதற்காகக் கோப்புகள் மற்றும் கோப்புறைகளைத் தேர்ந்தெடுக்க அவற்றை நீண்ட நேரம் அழுத்தவும் அல்லது கோப்பு/கோப்புறை ஐகான்களைக் கிளிக் செய்யவும்.
  • 49 |
  • பிரித்தெடுக்கும் விருப்பங்களைத் தேர்ந்தெடுப்பதற்கான பிரித்தெடுக்கும் மெனுவைக் காட்ட ஒரு கோப்பைக் கிளிக் செய்யவும்.
  • 50 |
  • OS இன் "உடன் திற" மெனுவைப் பயன்படுத்தி பிரித்தெடுக்கப்பட்ட கோப்புகள் இயல்புநிலையாக உள் சேமிப்பிடம்/சுருக்குபிரி இல் சேமிக்கப்படும். இதைப் பயன்பாட்டு அமைப்புகளில் மாற்றவும்.
  • 51 |
  • பயன்பாட்டிற்குள் காப்பகப்படுத்த அல்லது காப்பகங்களைப் பிரித்தெடுப்பதற்கான இயல்புநிலை இடம் அந்தந்த கோப்புகளின் பெற்றோர் கோப்பகமாகும். இதைப் பயன்பாட்டு அமைப்புகளில் மாற்றலாம்.
  • 52 |
53 | 54 |

பயன்பாட்டு அனுமதி

55 |

படிக்க மற்றும் எழுதச் சேமிப்பக அனுமதி (Android 10 மற்றும் அதற்குக் கீழே) மற்றும் வெளிப்புற சேமிப்பக அனுமதியை நிர்வகித்தல் (Android 11 மற்றும் அதற்கு மேல்). பயன்பாட்டிற்கு இணைய அனுமதி இல்லை. மேலும் படிக்க - தனியுரிமைக் கொள்கை

56 | 57 |

மொழிபெயர்

58 |

59 | Weblate மூலம் பயன்பாட்டை உள்ளூர்மயமாக்க உதவுங்கள். 60 | 61 |

62 | 63 |

உரிமம்

64 |

இந்தத் திட்டம் GNU பொது பொதுமக்கள் உரிமம் v3.0 இன் கீழ் உரிமம் பெற்றது. விவரங்களுக்கு LICENSE கோப்பைப் பார்க்கவும்.

65 | 66 |

தொடர்பு

67 |

ஏதேனும் விசாரணைகள் அல்லது கருத்துகளுக்கு, தயவுசெய்து GitHub களஞ்சியத்தில் ஒரு சிக்கலைத் திறக்கவும்.

-------------------------------------------------------------------------------- /app/src/main/res/layout/fragment_about.xml: -------------------------------------------------------------------------------- 1 | 17 | 18 | 27 | 28 | 34 | 35 | 44 | 45 | 52 | 53 | 60 | 61 | 68 | 69 | 75 | 76 | 83 | 84 | 92 | 93 | 101 | 102 | 109 | 110 | 111 | --------------------------------------------------------------------------------