├── app ├── .gitignore ├── src │ └── main │ │ ├── res │ │ ├── xml │ │ │ ├── backup_rules.xml │ │ │ ├── data_extraction_rules.xml │ │ │ ├── file_provider.xml │ │ │ └── locales_config.xml │ │ ├── values │ │ │ ├── colors.xml │ │ │ ├── themes.xml │ │ │ ├── strings.xml │ │ │ └── strings_untranslatable.xml │ │ ├── mipmap-anydpi │ │ │ └── ic_launcher.xml │ │ ├── drawable │ │ │ ├── button_dialog_transparent.xml │ │ │ └── ic_launcher_foreground.xml │ │ ├── values-night │ │ │ └── themes.xml │ │ ├── values-v29 │ │ │ └── themes.xml │ │ ├── values-zh-rCN │ │ │ └── strings.xml │ │ ├── values-zh-rHK │ │ │ └── strings.xml │ │ ├── values-zh-rTW │ │ │ └── strings.xml │ │ ├── values-ar │ │ │ └── strings.xml │ │ ├── values-th │ │ │ └── strings.xml │ │ ├── values-vi │ │ │ └── strings.xml │ │ ├── values-hi │ │ │ └── strings.xml │ │ ├── values-id │ │ │ └── strings.xml │ │ ├── values-nb │ │ │ └── strings.xml │ │ ├── values-no │ │ │ └── strings.xml │ │ ├── values-de │ │ │ └── strings.xml │ │ ├── values-es │ │ │ └── strings.xml │ │ ├── values-pt │ │ │ └── strings.xml │ │ └── layout │ │ │ ├── activity_about.xml │ │ │ └── activity_main.xml │ │ ├── AndroidManifest.xml │ │ ├── assets │ │ └── open_source_licenses.html │ │ └── java │ │ └── com │ │ └── github │ │ └── cvzi │ │ └── wallpaperexport │ │ └── main.kt ├── proguard-rules.pro └── build.gradle.kts ├── fastlane └── metadata │ └── android │ └── en-US │ ├── title.txt │ ├── changelogs │ ├── 1.txt │ ├── 2.txt │ ├── 3.txt │ ├── 4.txt │ ├── 5.txt │ ├── 6.txt │ ├── 8.txt │ ├── 9.txt │ └── 7.txt │ ├── video.txt │ ├── short_description.txt │ ├── images │ ├── icon.png │ ├── featureGraphic.png │ └── phoneScreenshots │ │ ├── 1_en-US.png │ │ └── 2_en-US.png │ └── full_description.txt ├── mykey.jks ├── docs ├── images │ └── PermissionScreen.png ├── .well-known │ └── assetlinks.json ├── privacy.html ├── updates_generic.html └── updates.html ├── gradle └── wrapper │ ├── gradle-wrapper.jar │ └── gradle-wrapper.properties ├── renovate.json ├── .idea ├── compiler.xml ├── kotlinc.xml ├── .gitignore ├── AndroidProjectSystem.xml └── misc.xml ├── .github ├── dependabot.yml └── workflows │ └── gradleCI.yml ├── settings.gradle.kts ├── CHANGELOG.md ├── libs.versions.toml ├── gradle.properties ├── .gitignore ├── README.md ├── gradlew.bat ├── gradlew └── LICENSE /app/.gitignore: -------------------------------------------------------------------------------- 1 | /build -------------------------------------------------------------------------------- /fastlane/metadata/android/en-US/title.txt: -------------------------------------------------------------------------------- 1 | WallpaperExport -------------------------------------------------------------------------------- /fastlane/metadata/android/en-US/changelogs/1.txt: -------------------------------------------------------------------------------- 1 | Initial version -------------------------------------------------------------------------------- /fastlane/metadata/android/en-US/changelogs/2.txt: -------------------------------------------------------------------------------- 1 | Initial version -------------------------------------------------------------------------------- /fastlane/metadata/android/en-US/changelogs/3.txt: -------------------------------------------------------------------------------- 1 | Minor improvements -------------------------------------------------------------------------------- /fastlane/metadata/android/en-US/changelogs/4.txt: -------------------------------------------------------------------------------- 1 | Minor improvements -------------------------------------------------------------------------------- /fastlane/metadata/android/en-US/changelogs/5.txt: -------------------------------------------------------------------------------- 1 | Bugfix: Lock-screen export -------------------------------------------------------------------------------- /mykey.jks: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cvzi/WallpaperExport/HEAD/mykey.jks -------------------------------------------------------------------------------- /fastlane/metadata/android/en-US/changelogs/6.txt: -------------------------------------------------------------------------------- 1 | Update libraries and dependencies -------------------------------------------------------------------------------- /fastlane/metadata/android/en-US/changelogs/8.txt: -------------------------------------------------------------------------------- 1 | Update libraries and dependencies -------------------------------------------------------------------------------- /fastlane/metadata/android/en-US/changelogs/9.txt: -------------------------------------------------------------------------------- 1 | Update libraries and dependencies -------------------------------------------------------------------------------- /fastlane/metadata/android/en-US/video.txt: -------------------------------------------------------------------------------- 1 | https://www.youtube.com/watch?v=9t2DvrOntRU -------------------------------------------------------------------------------- /fastlane/metadata/android/en-US/short_description.txt: -------------------------------------------------------------------------------- 1 | Export the current and the default wallpaper -------------------------------------------------------------------------------- /app/src/main/res/xml/backup_rules.xml: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /docs/images/PermissionScreen.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cvzi/WallpaperExport/HEAD/docs/images/PermissionScreen.png -------------------------------------------------------------------------------- /fastlane/metadata/android/en-US/changelogs/7.txt: -------------------------------------------------------------------------------- 1 | Now works with Android 14 (Upside Down Cake) and 15 (Vanilla Ice Cream) -------------------------------------------------------------------------------- /gradle/wrapper/gradle-wrapper.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cvzi/WallpaperExport/HEAD/gradle/wrapper/gradle-wrapper.jar -------------------------------------------------------------------------------- /fastlane/metadata/android/en-US/images/icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cvzi/WallpaperExport/HEAD/fastlane/metadata/android/en-US/images/icon.png -------------------------------------------------------------------------------- /renovate.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "https://docs.renovatebot.com/renovate-schema.json", 3 | "extends": [ 4 | "config:recommended" 5 | ] 6 | } 7 | -------------------------------------------------------------------------------- /fastlane/metadata/android/en-US/images/featureGraphic.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cvzi/WallpaperExport/HEAD/fastlane/metadata/android/en-US/images/featureGraphic.png -------------------------------------------------------------------------------- /fastlane/metadata/android/en-US/images/phoneScreenshots/1_en-US.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cvzi/WallpaperExport/HEAD/fastlane/metadata/android/en-US/images/phoneScreenshots/1_en-US.png -------------------------------------------------------------------------------- /fastlane/metadata/android/en-US/images/phoneScreenshots/2_en-US.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cvzi/WallpaperExport/HEAD/fastlane/metadata/android/en-US/images/phoneScreenshots/2_en-US.png -------------------------------------------------------------------------------- /app/src/main/res/xml/data_extraction_rules.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /.idea/compiler.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /.idea/kotlinc.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 6 | -------------------------------------------------------------------------------- /.idea/.gitignore: -------------------------------------------------------------------------------- 1 | # Default ignored files 2 | /shelf/ 3 | /workspace.xml 4 | # GitHub Copilot persisted chat sessions 5 | /copilot/chatSessions 6 | other.xml 7 | migrations.xml 8 | deploymentTargetDropDown.xml 9 | deploymentTargetSelector.xml 10 | -------------------------------------------------------------------------------- /app/src/main/res/xml/file_provider.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /.idea/AndroidProjectSystem.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 6 | -------------------------------------------------------------------------------- /app/src/main/res/values/colors.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | #FFDDF2F2 4 | #FF1C1B1F 5 | #30000000 6 | -------------------------------------------------------------------------------- /.idea/misc.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /app/src/main/res/values/themes.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 9 | -------------------------------------------------------------------------------- /app/src/main/res/mipmap-anydpi/ic_launcher.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /gradle/wrapper/gradle-wrapper.properties: -------------------------------------------------------------------------------- 1 | distributionBase=GRADLE_USER_HOME 2 | distributionPath=wrapper/dists 3 | distributionSha256Sum=16f2b95838c1ddcf7242b1c39e7bbbb43c842f1f1a1a0dc4959b6d4d68abcac3 4 | distributionUrl=https\://services.gradle.org/distributions/gradle-9.2.0-all.zip 5 | networkTimeout=10000 6 | validateDistributionUrl=true 7 | zipStoreBase=GRADLE_USER_HOME 8 | zipStorePath=wrapper/dists 9 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/button_dialog_transparent.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /app/src/main/res/values-night/themes.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 10 | -------------------------------------------------------------------------------- /app/src/main/res/values-v29/themes.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 10 | -------------------------------------------------------------------------------- /fastlane/metadata/android/en-US/full_description.txt: -------------------------------------------------------------------------------- 1 | The sole purpose of this app is to back up the current wallpaper. 2 | 3 | Up to Android 13 you need to grant the `READ_EXTERNAL_STORAGE` permission to access the wallpaper. 4 | 5 | On Android 13 “Tiramisu” it is necessary to grant the `MANAGE_EXTERNAL_STORAGE` permission. 6 | This permission also allows read and write access to all user files on the device. The app does not use the permission to access any files though. 7 | 8 | On Android 14 and higher it is necessary to grant the `MANAGE_EXTERNAL_STORAGE` permission and the `READ_MEDIA_IMAGES` permission. 9 | -------------------------------------------------------------------------------- /.github/dependabot.yml: -------------------------------------------------------------------------------- 1 | # To get started with Dependabot version updates, you'll need to specify which 2 | # package ecosystems to update and where the package manifests are located. 3 | # Please see the documentation for all configuration options: 4 | # https://docs.github.com/github/administering-a-repository/configuration-options-for-dependency-updates 5 | 6 | version: 2 7 | updates: 8 | - package-ecosystem: "gradle" 9 | directory: "/" 10 | schedule: 11 | interval: "monthly" 12 | - package-ecosystem: "github-actions" 13 | directory: "/" 14 | schedule: 15 | interval: "monthly" 16 | -------------------------------------------------------------------------------- /app/src/main/res/xml/locales_config.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | -------------------------------------------------------------------------------- /settings.gradle.kts: -------------------------------------------------------------------------------- 1 | pluginManagement { 2 | repositories { 3 | gradlePluginPortal() 4 | google { 5 | content { 6 | includeGroupByRegex("com\\.android.*") 7 | includeGroupByRegex("com\\.google.*") 8 | includeGroupByRegex("androidx.*") 9 | } 10 | } 11 | mavenCentral() 12 | } 13 | } 14 | dependencyResolutionManagement { 15 | repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS) 16 | repositories { 17 | google() 18 | mavenCentral() 19 | } 20 | versionCatalogs { 21 | create("libs") { 22 | from(files("libs.versions.toml")) 23 | } 24 | } 25 | } 26 | 27 | rootProject.name = "WallpaperExport" 28 | include("app") 29 | -------------------------------------------------------------------------------- /CHANGELOG.md: -------------------------------------------------------------------------------- 1 | # WallpaperExport Changelog 2 | 3 | ## 1.1.4 4 | * Update dependencies 5 | 6 | ## 1.1.2 7 | * Add permission [`READ_MEDIA_IMAGES`](https://developer.android.com/reference/android/Manifest.permission#READ_MEDIA_IMAGES) 8 | * Update dependencies 9 | * Modernize gradle/build infrastructure 10 | * Add Github attestations 11 | 12 | ## 1.1.1 13 | * Update dependencies 14 | 15 | ## 1.1.0 16 | * Fix exporting lock-screen wallpaper [#13](https://github.com/cvzi/WallpaperExport/issues/13) 17 | * Allow drag and drop for multi-window use 18 | * Added Translation 19 | 20 | ## 1.0.3 21 | * Refactor Kotlin code 22 | * Update gradle and dependencies 23 | * Add donate-link to about section 24 | 25 | ## 1.0.2 26 | * Revert "Save" button label if no file was selected 27 | 28 | ## 1.0.0 29 | * Initial version 30 | -------------------------------------------------------------------------------- /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 -------------------------------------------------------------------------------- /app/src/main/res/values-zh-rCN/strings.xml: -------------------------------------------------------------------------------- 1 | 4 | 壁纸导出 5 | 存储权限 6 | 需要存储权限以访问壁纸 7 | 不可用 8 | 系统壁纸 9 | 内置壁纸 10 | 锁屏壁纸 11 | 分享壁纸 12 | 分享 13 | 保存 14 | 正在打开… 15 | 壁纸已保存 16 | 无法保存壁纸 17 | 无法提取壁纸 18 | 找不到可分享图片的应用 19 | 无法保存图片文件 20 | 关于 21 | github.com/cvzi/WallpaperExport/issues 上提出问题]]> 22 | 23 | -------------------------------------------------------------------------------- /app/src/main/res/values-zh-rHK/strings.xml: -------------------------------------------------------------------------------- 1 | 4 | 壁紙匯出 5 | 儲存權限 6 | 需要儲存權限以訪問壁紙 7 | 無法使用 8 | 系統壁紙 9 | 內建壁紙 10 | 鎖定畫面壁紙 11 | 分享壁紙 12 | 分享 13 | 儲存 14 | 正在開啟… 15 | 壁紙已儲存 16 | 無法儲存壁紙 17 | 無法提取壁紙 18 | 找不到可分享圖片的應用程式 19 | 無法儲存圖片檔案 20 | 關於 21 | github.com/cvzi/WallpaperExport/issues 上提出問題]]> 22 | 23 | -------------------------------------------------------------------------------- /app/src/main/res/values-zh-rTW/strings.xml: -------------------------------------------------------------------------------- 1 | 4 | 壁紙匯出 5 | 儲存權限 6 | 需要儲存權限以訪問壁紙 7 | 無法使用 8 | 系統壁紙 9 | 內建壁紙 10 | 鎖定畫面壁紙 11 | 分享壁紙 12 | 分享 13 | 儲存 14 | 正在開啟… 15 | 壁紙已儲存 16 | 無法儲存壁紙 17 | 無法提取壁紙 18 | 找不到可分享圖片的應用程式 19 | 無法儲存圖片檔案 20 | 關於 21 | github.com/cvzi/WallpaperExport/issues 上提出問題]]> 22 | 23 | -------------------------------------------------------------------------------- /docs/.well-known/assetlinks.json: -------------------------------------------------------------------------------- 1 | [ 2 | { 3 | "relation": 4 | [ 5 | "delegate_permission/common.handle_all_urls" 6 | ], 7 | "target": 8 | { 9 | "namespace": "android_app", 10 | "package_name": "com.github.cvzi.wallpaperexport", 11 | "sha256_cert_fingerprints": 12 | [ 13 | "33:4D:32:5A:41:E8:80:9D:D2:1A:E9:C5:40:2D:6D:63:7F:A9:4A:C5:61:A8:C9:69:02:19:4F:B3:37:EB:D8:D7" 14 | ] 15 | } 16 | }, 17 | { 18 | "relation": 19 | [ 20 | "delegate_permission/common.handle_all_urls" 21 | ], 22 | "target": 23 | { 24 | "namespace": "android_app", 25 | "package_name": "com.github.cvzi.darkmodewallpaper", 26 | "sha256_cert_fingerprints": 27 | [ 28 | "48:24:53:5C:BA:4E:FB:87:46:97:F8:88:04:23:89:78:06:D8:8D:1B:D4:C6:FD:2A:EF:BE:55:AB:55:01:56:7D" 29 | ] 30 | } 31 | }, 32 | { 33 | "relation": 34 | [ 35 | "delegate_permission/common.handle_all_urls" 36 | ], 37 | "target": 38 | { 39 | "namespace": "android_app", 40 | "package_name": "com.github.cvzi.screenshottile", 41 | "sha256_cert_fingerprints": 42 | [ 43 | "C1:FC:88:6A:91:28:99:95:56:B4:CC:C9:5B:03:05:8C:EE:72:DF:A4:5F:33:D9:94:43:E5:B4:81:DD:E7:88:0D" 44 | ] 45 | } 46 | } 47 | ] -------------------------------------------------------------------------------- /libs.versions.toml: -------------------------------------------------------------------------------- 1 | [versions] 2 | compileSdk = "36" 3 | targetSdk = "36" 4 | minSdk = "28" 5 | 6 | agp = "8.13.0" 7 | kotlin = "2.2.21" 8 | licensereport = "0.9.8" 9 | appcompat = "1.7.1" 10 | kotlinx-coroutines-android = "1.10.2" 11 | androidx-core = "1.17.0" 12 | lifecycle-viewmodel = "2.9.4" 13 | material = "1.13.0" 14 | 15 | [libraries] 16 | androidx-core = { group = "androidx.core", name = "core-ktx", version.ref = "androidx-core" } 17 | androidx-lifecycle-viewmodel = { module = "androidx.lifecycle:lifecycle-viewmodel-ktx", version.ref = "lifecycle-viewmodel" } 18 | androidx-appcompat = { group = "androidx.appcompat", name = "appcompat", version.ref = "appcompat" } 19 | kotlinx-coroutines-android = { module = "org.jetbrains.kotlinx:kotlinx-coroutines-android", version.ref = "kotlinx-coroutines-android" } 20 | material = { module = "com.google.android.material:material", version.ref = "material" } 21 | 22 | [bundles] 23 | implementation-app = [ 24 | "androidx-core", 25 | "androidx-lifecycle-viewmodel", 26 | "androidx-appcompat", 27 | "kotlinx-coroutines-android", 28 | "material"] 29 | 30 | [plugins] 31 | android-application = { id = "com.android.application", version.ref = "agp" } 32 | kotlin-android = { id = "org.jetbrains.kotlin.android", version.ref = "kotlin" } 33 | license-report = { id = "com.jaredsburrows.license", version.ref = "licensereport" } 34 | -------------------------------------------------------------------------------- /app/src/main/res/values-ar/strings.xml: -------------------------------------------------------------------------------- 1 | 4 | تصدير الخلفية 5 | إذن التخزين 6 | الإذن بالتخزين مطلوب للوصول إلى الخلفية 7 | غير متوفر 8 | خلفية النظام 9 | خلفية مدمجة 10 | خلفية الشاشة القفل 11 | مشاركة الخلفية 12 | مشاركة 13 | حفظ 14 | جاري الفتح… 15 | تم حفظ الخلفية 16 | فشل في حفظ الخلفية 17 | فشل في استخراج الخلفية 18 | لم يتم العثور على تطبيق لمشاركة الصورة 19 | فشل في حفظ ملف الصورة 20 | حول التطبيق 21 | افتح طلب في github.com/cvzi/WallpaperExport/issues]]> 22 | 23 | 24 | 25 | -------------------------------------------------------------------------------- /gradle.properties: -------------------------------------------------------------------------------- 1 | # Project-wide Gradle settings. 2 | # IDE (e.g. Android Studio) users: 3 | # Gradle settings configured through the IDE *will override* 4 | # any settings specified in this file. 5 | # For more details on how to configure your build environment visit 6 | # http://www.gradle.org/docs/current/userguide/build_environment.html 7 | # Specifies the JVM arguments used for the daemon process. 8 | # The setting is particularly useful for tweaking memory settings. 9 | org.gradle.jvmargs=-Xmx2048m -Dfile.encoding=UTF-8 10 | # When configured, Gradle will run in incubating parallel mode. 11 | # This option should only be used with decoupled projects. More details, visit 12 | # http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:decoupled_projects 13 | # org.gradle.parallel=true 14 | # AndroidX package structure to make it clearer which packages are bundled with the 15 | # Android operating system, and which are packaged with your app's APK 16 | # https://developer.android.com/topic/libraries/support-library/androidx-rn 17 | android.useAndroidX=true 18 | # Kotlin code style for this project: "official" or "obsolete": 19 | kotlin.code.style=official 20 | # Enables namespacing of each library's R class so that its R class includes only the 21 | # resources declared in the library itself and none from the library's dependencies, 22 | # thereby reducing the size of the R class for that library 23 | android.nonTransitiveRClass=true 24 | org.gradle.unsafe.configuration-cache=true -------------------------------------------------------------------------------- /app/src/main/res/values-th/strings.xml: -------------------------------------------------------------------------------- 1 | 4 | ส่งออกภาพพื้นหลัง 5 | การอนุญาตเก็บข้อมูล 6 | การอนุญาตเก็บข้อมูลจำเป็นสำหรับการเข้าถึงภาพพื้นหลัง 7 | ไม่พร้อมใช้งาน 8 | ภาพพื้นหลังระบบ 9 | ภาพพื้นหลังฝังแบบ 10 | ภาพพื้นหลังหน้าจอล็อค 11 | แชร์ภาพพื้นหลัง 12 | แชร์ 13 | บันทึก 14 | กำลังเปิด… 15 | บันทึกภาพพื้นหลังแล้ว 16 | ล้มเหลวในการบันทึกภาพพื้นหลัง 17 | ล้มเหลวใการแยกภาพพื้นหลัง 18 | ไม่พบแอปเพื่อแชร์รูปภาพ 19 | ล้มเหลวในการบันทึกไฟล์รูปภาพ 20 | เกี่ยวกับ 21 | เปิดปัญหาที่ github.com/cvzi/WallpaperExport/issues]]> 22 | 23 | -------------------------------------------------------------------------------- /app/src/main/res/values/strings.xml: -------------------------------------------------------------------------------- 1 | 4 | WallpaperExport 5 | Storage Permission 6 | The storage permission is required to access the wallpaper 7 | Unavailable 8 | System wallpaper 9 | Built-in wallpaper 10 | Lock screen 11 | Sharing wallpaper 12 | Share 13 | Save 14 | Opening… 15 | Wallpaper saved 16 | Failed to save wallpaper 17 | Failed to extract wallpaper 18 | Found no app to share image to 19 | Failed to save image file 20 | About 21 | Open an issue at github.com/cvzi/WallpaperExport/issues]]> 22 | -------------------------------------------------------------------------------- /app/src/main/res/values-vi/strings.xml: -------------------------------------------------------------------------------- 1 | 4 | Xuất Hình Nền 5 | Quyền Lưu Trữ 6 | Quyền lưu trữ cần được cấp để truy cập hình nền 7 | Không khả dụng 8 | Hình nền hệ thống 9 | Hình nền tích hợp 10 | Hình nền màn hình khóa 11 | Chia sẻ hình nền 12 | Chia sẻ 13 | Lưu 14 | Đang mở… 15 | Hình nền đã được lưu 16 | Không thể lưu hình nền 17 | Không thể trích xuất hình nền 18 | Không tìm thấy ứng dụng để chia sẻ hình ảnh 19 | Không thể lưu tệp hình ảnh 20 | Về ứng dụng 21 | Mở một vấn đề tại github.com/cvzi/WallpaperExport/issues]]> 22 | -------------------------------------------------------------------------------- /app/src/main/res/values-hi/strings.xml: -------------------------------------------------------------------------------- 1 | 4 | वॉलपेपर निर्यात 5 | स्टोरेज अनुमति 6 | वॉलपेपर तक पहुँच के लिए स्टोरेज अनुमति की आवश्यकता है 7 | उपलब्ध नहीं 8 | सिस्टम वॉलपेपर 9 | बिल्ट-इन वॉलपेपर 10 | लॉक स्क्रीन 11 | वॉलपेपर साझा करें 12 | साझा करें 13 | सहेजें 14 | खुल रहा है… 15 | वॉलपेपर सहेजा गया 16 | वॉलपेपर सहेजने में विफल 17 | वॉलपेपर निकालने में विफल 18 | छवि साझा करने के लिए कोई ऐप नहीं मिला 19 | छवि फ़ाइल सहेजने में विफल 20 | बारे में 21 | github.com/cvzi/WallpaperExport/issues पर एक मुद्दा खोलें]]> 22 | 23 | 24 | -------------------------------------------------------------------------------- /app/src/main/res/values-id/strings.xml: -------------------------------------------------------------------------------- 1 | 4 | WallpaperEkspor 5 | Izin Penyimpanan 6 | Izin penyimpanan diperlukan untuk mengakses wallpaper 7 | Tidak tersedia 8 | Wallpaper Sistem 9 | Wallpaper Bawaan 10 | Wallpaper Layar Kunci 11 | Berbagi wallpaper 12 | Bagikan 13 | Simpan 14 | Membuka… 15 | Wallpaper disimpan 16 | Gagal menyimpan wallpaper 17 | Gagal mengekstrak wallpaper 18 | Tidak menemukan aplikasi untuk berbagi gambar 19 | Gagal menyimpan file gambar 20 | Tentang 21 | Buka isu di github.com/cvzi/WallpaperExport/issues]]> 22 | 23 | -------------------------------------------------------------------------------- /app/src/main/res/values-nb/strings.xml: -------------------------------------------------------------------------------- 1 | 4 | WallpaperExport 5 | Tillatelse til lagring 6 | Tillatelse til lagring er nødvendig for å få tilgang til bakgrunnen 7 | Utilgjengelig 8 | Systembakgrunn 9 | Innebygd bakgrunn 10 | Låseskjerm 11 | Del bakgrunn 12 | Del 13 | Lagre 14 | Åpner… 15 | Bakgrunn lagret 16 | Klarte ikke å lagre bakgrunnen 17 | Klarte ikke å trekke ut bakgrunnen 18 | Fant ingen app for å dele bildet 19 | Klarte ikke å lagre bildefilen 20 | Om 21 | Opprett en sak på github.com/cvzi/WallpaperExport/issues]]> 22 | 23 | -------------------------------------------------------------------------------- /app/src/main/res/values-no/strings.xml: -------------------------------------------------------------------------------- 1 | 4 | WallpaperExport 5 | Tillatelse til lagring 6 | Tillatelse til lagring er nødvendig for å få tilgang til bakgrunnen 7 | Utilgjengelig 8 | Systembakgrunn 9 | Innebygd bakgrunn 10 | Låseskjerm 11 | Del bakgrunn 12 | Del 13 | Lagre 14 | Åpner… 15 | Bakgrunn lagret 16 | Klarte ikke å lagre bakgrunnen 17 | Klarte ikke å trekke ut bakgrunnen 18 | Fant ingen app for å dele bildet 19 | Klarte ikke å lagre bildefilen 20 | Om 21 | Opprett en sak på github.com/cvzi/WallpaperExport/issues]]> 22 | 23 | -------------------------------------------------------------------------------- /app/src/main/res/values-de/strings.xml: -------------------------------------------------------------------------------- 1 | 4 | WallpaperExport 5 | Speicherberechtigung 6 | Die Speicherberechtigung wird benötigt, um auf den Hintergrund zuzugreifen 7 | Nicht verfügbar 8 | Systemhintergrund 9 | Interner Hintergrund 10 | Sperrbildschirm 11 | Hintergrund teilen 12 | Teilen 13 | Speichern 14 | Öffnet sich… 15 | Hintergrund gespeichert 16 | Fehler beim Speichern des Hintergrunds 17 | Fehler beim Extrahieren des Hintergrunds 18 | Keine App gefunden, um das Bild zu teilen 19 | Fehler beim Speichern der Bilddatei 20 | Über 21 | Öffne ein Issue github.com/cvzi/WallpaperExport/issues]]> 22 | 23 | -------------------------------------------------------------------------------- /app/src/main/res/values-es/strings.xml: -------------------------------------------------------------------------------- 1 | 4 | ExportarFondoDePantalla 5 | Permiso de almacenamiento 6 | Se necesita el permiso de almacenamiento para acceder al fondo de pantalla 7 | No disponible 8 | Fondo de pantalla del sistema 9 | Fondo de pantalla incorporado 10 | Pantalla de bloqueo 11 | Compartir fondo de pantalla 12 | Compartir 13 | Guardar 14 | Abriendo… 15 | Fondo de pantalla guardado 16 | Error al guardar el fondo de pantalla 17 | Error al extraer el fondo de pantalla 18 | No se encontró ninguna aplicación para compartir la imagen 19 | Error al guardar el archivo de imagen 20 | Acerca de 21 | Abre un problema en github.com/cvzi/WallpaperExport/issues]]> 22 | 23 | -------------------------------------------------------------------------------- /app/src/main/res/values-pt/strings.xml: -------------------------------------------------------------------------------- 1 | 4 | ExportarPapelDeParede 5 | Permissão de Armazenamento 6 | A permissão de armazenamento é necessária para acessar o papel de parede 7 | Indisponível 8 | Papel de parede do sistema 9 | Papel de parede incorporado 10 | Papel de parede da tela de bloqueio 11 | Compartilhando papel de parede 12 | Compartilhar 13 | Salvar 14 | Abrindo… 15 | Papel de parede salvo 16 | Falha ao salvar o papel de parede 17 | Falha ao extrair o papel de parede 18 | Não foi encontrada nenhuma aplicação para compartilhar a imagem 19 | Falha ao salvar o arquivo de imagem 20 | Sobre 21 | Abra um problema em github.com/cvzi/WallpaperExport/issues]]> 22 | 23 | 24 | 25 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_launcher_foreground.xml: -------------------------------------------------------------------------------- 1 | 6 | 11 | 15 | 18 | 19 | 20 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # Built application files 2 | *.apk 3 | *.aar 4 | *.ap_ 5 | *.aab 6 | 7 | # Files for the ART/Dalvik VM 8 | *.dex 9 | 10 | # Java class files 11 | *.class 12 | 13 | # Generated files 14 | bin/ 15 | gen/ 16 | out/ 17 | # Uncomment the following line in case you need and you don't have the release build type files in your app 18 | # release/ 19 | 20 | # Gradle files 21 | .gradle/ 22 | build/ 23 | 24 | # Local configuration file (sdk path, etc) 25 | local.properties 26 | 27 | # Proguard folder generated by Eclipse 28 | proguard/ 29 | 30 | # Log Files 31 | *.log 32 | 33 | # Android Studio Navigation editor temp files 34 | .navigation/ 35 | 36 | # Android Studio captures folder 37 | captures/ 38 | 39 | # IntelliJ 40 | *.iml 41 | .idea/workspace.xml 42 | .idea/tasks.xml 43 | .idea/gradle.xml 44 | .idea/assetWizardSettings.xml 45 | .idea/dictionaries 46 | .idea/libraries 47 | # Android Studio 3 in .gitignore file. 48 | .idea/caches 49 | .idea/modules.xml 50 | # Comment next line if keeping position of elements in Navigation Editor is relevant for you 51 | .idea/navEditor.xml 52 | 53 | # Keystore files 54 | # Uncomment the following lines if you do not want to check your keystore files in. 55 | #*.jks 56 | #*.keystore 57 | 58 | # External native build folder generated in Android Studio 2.2 and later 59 | .externalNativeBuild 60 | .cxx/ 61 | 62 | # Google Services (e.g. APIs or Firebase) 63 | # google-services.json 64 | 65 | # Freeline 66 | freeline.py 67 | freeline/ 68 | freeline_project_description.json 69 | 70 | # fastlane 71 | fastlane/report.xml 72 | fastlane/Preview.html 73 | fastlane/screenshots 74 | fastlane/test_output 75 | fastlane/readme.md 76 | 77 | # Version control 78 | vcs.xml 79 | 80 | # lint 81 | lint/intermediates/ 82 | lint/generated/ 83 | lint/outputs/ 84 | lint/tmp/ 85 | # lint/reports/ 86 | 87 | 88 | /.kotlin/ -------------------------------------------------------------------------------- /app/src/main/res/values/strings_untranslatable.xml: -------------------------------------------------------------------------------- 1 | 4 | 5 | com.github.cvzi.wallpaperexport.fileprovider 6 | TAG_DRAWABLES_INDEX 7 | TAG_SHARE_TYPE 8 | TAG_ORIGINAL_TEXT 9 | 10 | Copyright © 2022 cuzi

11 | cuzi-android@openmail.cc

12 | https://github.com/cvzi/WallpaperExport
13 |
14 | This program is free software: you can redistribute it and/or modify 15 | it under the terms of the GNU General Public License as published by 16 | the Free Software Foundation, either version 3 of the License, or 17 | (at your option) any later version. 18 |

19 | This program is distributed in the hope that it will be useful, 20 | but WITHOUT ANY WARRANTY; without even the implied warranty of 21 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 22 | GNU General Public License for more details.]]>
23 | Donate & Support]]> 24 | Open source licenses 25 | %1$s (%2$d) %3$s]]> 26 | 27 |
-------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Launcher icon WallpaperExport 2 | 3 | [![License: GPL v3](https://img.shields.io/badge/License-GPL%20v3%20or%20later-a32d2a?logo=GNU)](https://www.gnu.org/licenses/gpl-3.0) 4 | [![F-Droid](https://img.shields.io/f-droid/v/com.github.cvzi.wallpaperexport.svg?logo=f-droid)](https://f-droid.org/packages/com.github.cvzi.wallpaperexport/) 5 | [![Download APK file](https://img.shields.io/github/release/cvzi/WallpaperExport.svg?label=Download%20apk&logo=android&color=3d8)](https://github.com/cvzi/WallpaperExport/releases/latest) 6 | [![Gradle CI](https://img.shields.io/github/actions/workflow/status/cvzi/WallpaperExport/gradleCI.yml?branch=main&logo=github)](https://github.com/cvzi/WallpaperExport/actions/workflows/gradleCI.yml) 7 | 8 | The sole purpose of this app is to back up the current wallpaper of an Android device. 9 | 10 | [Get it on F-Droid](https://f-droid.org/packages/com.github.cvzi.wallpaperexport/) 13 | 14 | This app was created because on Android 13 “Tiramisu” it is necessary to request the `MANAGE_EXTERNAL_STORAGE` permission to read the current wallpaper. This permission allows read and write access to all user files on the device and is mostly used by file manager apps. Google's Play Store does not allow this permission for this use-case of accessing the wallpaper. [More information](https://developer.android.com/training/data-storage/manage-all-files). 15 | 16 | I did not want to include this permission in my app [DarkModeLiveWallpaper](https://github.com/cvzi/darkmodewallpaper/), instead I created this separate app that can be used by anyone who still wants to export their wallpaper. 17 | 18 | ## Screenshots 19 | 20 | | Main Activity | Permission Screen | 21 | | --- | ---- | 22 | -------------------------------------------------------------------------------- /docs/privacy.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 25 | 26 | 36 | 37 | 38 | Privacy policy 39 | 40 | 41 | 42 | 43 | 44 | 45 |

Privacy policy

46 | 47 |
48 | Personal Data is collected by this app using the following services: 49 |
50 |

GitHub Pages

51 | Parts of this app are hosted on GitHub Pages which is a service by GitHub, Inc. 52 |
53 | GitHub Pages collects personal data as specified in their pricavy policy: https://help.github.com/en/github/site-policy/github-privacy-statement 54 |
55 |
56 |

Google Beta Testing Program

57 | If you enter the Google Beta Testing Program for this app, Google LLC will collect personal information including your country, device logs and device information. 58 |
For more information, see https://support.google.com/googleplay/answer/7003180 59 |
Google Privacy Policy 60 |
Google Play Terms of Service 61 |
62 |
63 | 64 | 65 | 66 | -------------------------------------------------------------------------------- /app/build.gradle.kts: -------------------------------------------------------------------------------- 1 | plugins { 2 | alias(libs.plugins.android.application) 3 | alias(libs.plugins.kotlin.android) 4 | alias(libs.plugins.license.report) 5 | } 6 | 7 | android { 8 | namespace = "com.github.cvzi.wallpaperexport" 9 | compileSdk = libs.versions.compileSdk.get().toInt() 10 | 11 | defaultConfig { 12 | applicationId = "com.github.cvzi.wallpaperexport" 13 | versionCode = 9 14 | versionName = "1.1.4" 15 | minSdk = libs.versions.minSdk.get().toInt() 16 | targetSdk = libs.versions.targetSdk.get().toInt() 17 | } 18 | 19 | if (project.hasProperty("keystore")) { 20 | signingConfigs { 21 | create("release") { 22 | storeFile = file(project.property("keystore") as String) 23 | storePassword = project.property("keystorepassword") as String 24 | keyAlias = project.property("keystorealias") as String 25 | keyPassword = project.property("keystorekeypassword") as String 26 | enableV1Signing = true 27 | enableV2Signing = true 28 | enableV3Signing = true 29 | } 30 | } 31 | } else { 32 | signingConfigs { 33 | create("release") { 34 | storeFile = rootProject.file("mykey.jks") 35 | storePassword = "password" 36 | keyAlias = "key0" 37 | keyPassword = "password" 38 | enableV1Signing = true 39 | enableV2Signing = true 40 | enableV3Signing = true 41 | } 42 | } 43 | } 44 | 45 | buildTypes { 46 | release { 47 | isMinifyEnabled = true 48 | isShrinkResources = true 49 | proguardFiles( 50 | getDefaultProguardFile("proguard-android-optimize.txt"), 51 | "proguard-rules.pro" 52 | ) 53 | signingConfig = signingConfigs.getByName("release") 54 | } 55 | debug { 56 | isMinifyEnabled = false 57 | isDebuggable = true 58 | } 59 | } 60 | 61 | compileOptions { 62 | sourceCompatibility = JavaVersion.VERSION_17 63 | targetCompatibility = JavaVersion.VERSION_17 64 | } 65 | 66 | buildFeatures { 67 | viewBinding = true 68 | buildConfig = true 69 | } 70 | 71 | dependenciesInfo { 72 | includeInApk = false 73 | includeInBundle = false 74 | } 75 | } 76 | 77 | kotlin { 78 | compilerOptions { 79 | jvmTarget.set(org.jetbrains.kotlin.gradle.dsl.JvmTarget.JVM_17) 80 | } 81 | } 82 | 83 | dependencies { 84 | implementation(libs.bundles.implementation.app) 85 | } 86 | 87 | licenseReport { 88 | // Run via `gradlew licenseReleaseReport` 89 | generateCsvReport = false 90 | generateHtmlReport = true 91 | generateJsonReport = false 92 | copyHtmlReportToAssets = true 93 | } 94 | -------------------------------------------------------------------------------- /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 | @rem SPDX-License-Identifier: Apache-2.0 17 | @rem 18 | 19 | @if "%DEBUG%"=="" @echo off 20 | @rem ########################################################################## 21 | @rem 22 | @rem Gradle startup script for Windows 23 | @rem 24 | @rem ########################################################################## 25 | 26 | @rem Set local scope for the variables with windows NT shell 27 | if "%OS%"=="Windows_NT" setlocal 28 | 29 | set DIRNAME=%~dp0 30 | if "%DIRNAME%"=="" set DIRNAME=. 31 | @rem This is normally unused 32 | set APP_BASE_NAME=%~n0 33 | set APP_HOME=%DIRNAME% 34 | 35 | @rem Resolve any "." and ".." in APP_HOME to make it shorter. 36 | for %%i in ("%APP_HOME%") do set APP_HOME=%%~fi 37 | 38 | @rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. 39 | set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m" 40 | 41 | @rem Find java.exe 42 | if defined JAVA_HOME goto findJavaFromJavaHome 43 | 44 | set JAVA_EXE=java.exe 45 | %JAVA_EXE% -version >NUL 2>&1 46 | if %ERRORLEVEL% equ 0 goto execute 47 | 48 | echo. 1>&2 49 | echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. 1>&2 50 | echo. 1>&2 51 | echo Please set the JAVA_HOME variable in your environment to match the 1>&2 52 | echo location of your Java installation. 1>&2 53 | 54 | goto fail 55 | 56 | :findJavaFromJavaHome 57 | set JAVA_HOME=%JAVA_HOME:"=% 58 | set JAVA_EXE=%JAVA_HOME%/bin/java.exe 59 | 60 | if exist "%JAVA_EXE%" goto execute 61 | 62 | echo. 1>&2 63 | echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% 1>&2 64 | echo. 1>&2 65 | echo Please set the JAVA_HOME variable in your environment to match the 1>&2 66 | echo location of your Java installation. 1>&2 67 | 68 | goto fail 69 | 70 | :execute 71 | @rem Setup the command line 72 | 73 | 74 | 75 | @rem Execute Gradle 76 | "%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -jar "%APP_HOME%\gradle\wrapper\gradle-wrapper.jar" %* 77 | 78 | :end 79 | @rem End local scope for the variables with windows NT shell 80 | if %ERRORLEVEL% equ 0 goto mainEnd 81 | 82 | :fail 83 | rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of 84 | rem the _cmd.exe /c_ return code! 85 | set EXIT_CODE=%ERRORLEVEL% 86 | if %EXIT_CODE% equ 0 set EXIT_CODE=1 87 | if not ""=="%GRADLE_EXIT_CONSOLE%" exit %EXIT_CODE% 88 | exit /b %EXIT_CODE% 89 | 90 | :mainEnd 91 | if "%OS%"=="Windows_NT" endlocal 92 | 93 | :omega 94 | -------------------------------------------------------------------------------- /app/src/main/res/layout/activity_about.xml: -------------------------------------------------------------------------------- 1 | 20 | 25 | 26 | 29 | 30 | 31 | 36 | 37 | 42 | 43 | 46 | 47 | 53 | 54 | 57 | 58 | 64 | 65 |