Paperize is a modern fully offline dynamic wallpaper changer application built for Android using Kotlin, Jetpack Compose, and Material 3
See the codeHelp translate Paperize into your language! Currently, most translations are provided using machine translation — contributions from native speakers are greatly appreciated.
| Category | Technology |
|---|---|
| Language | Kotlin |
| UI Framework | Jetpack Compose |
| Design System | Material 3 |
| Dependency Injection | Dagger Hilt |
| Database | Room |
| Image Loading | Coil |
AlbumRepository owns library mutations. Imports, reordering, removal, covers,
and queue invalidation use Room transactions; provider scans run outside them.DocumentSource and WallpaperRenderer (domain interfaces, Android implementations in
data/source) keep use cases free of document-provider and bitmap-decoding details.WallpaperRepository owns rotation queues and current-wallpaper records.
Queue creation checks and writes in one transaction, including synchronized screens.
Static changes and the live wallpaper engine both dequeue through
ChangeWallpaperUseCase.dequeueNext.WallpaperController shares static wallpaper application between the service
and worker. Callers hold WallpaperChangeLock through application and schedule
updates. The controller recycles applied bitmaps.SettingsCoordinator persists wallpaper settings edits and applies their side effects
(schedules, queues, immediate changes) one at a time; ViewModels only hold UI state.
WallpaperChangeService helpers are the single way to start a manual change.runCatchingCancellable where they need a Result, so
coroutine cancellation always propagates. Progress belongs to UI state.| Requirement | Version |
|---|---|
| Java | 17 |
| Android Gradle Plugin | 9.3.2 |
| Gradle | 9.7.1 |
| Compile SDK | 37 (Android 17) |
| Minimum SDK | 31 (Android 12) |
| Target SDK | 36 |
Clone the repository
git clone https://github.com/Anthonyy232/Paperize.git
cd Paperize
Open in Android Studio
File > Open and navigate to the cloned repositoryBuild and Run
▶ Run to build and install on a connected device, orBuild > Generate Signed Bundle / APK to create a signed releaseSet ANDROID_HOME to your Android SDK directory, or configure sdk.dir in
local.properties. Use the checked-in Gradle wrapper:
./gradlew testDebugUnitTest lintDebug assembleDebug
./gradlew connectedDebugAndroidTest
On Windows, use gradlew.bat. Device tests require a running Android emulator or
connected device (API 31 or newer). They cover rendering, scheduling, document
provider failures, import rollback, album cleanup, and library controls.
Contributions are welcome! Feel free to:
If you find Paperize useful, consider supporting development through GitHub Sponsors (one-time or monthly). Thank you!
This project is licensed under the GNU General Public License v3.0 — see the LICENSE file for details.
Paperize is a modern fully offline dynamic wallpaper changer application built for Android using Kotlin, Jetpack Compose, and Material 3
See the codeHelp translate Paperize into your language! Currently, most translations are provided using machine translation — contributions from native speakers are greatly appreciated.
| Category | Technology |
|---|---|
| Language | Kotlin |
| UI Framework | Jetpack Compose |
| Design System | Material 3 |
| Dependency Injection | Dagger Hilt |
| Database | Room |
| Image Loading | Coil |
AlbumRepository owns library mutations. Imports, reordering, removal, covers,
and queue invalidation use Room transactions; provider scans run outside them.DocumentSource and WallpaperRenderer (domain interfaces, Android implementations in
data/source) keep use cases free of document-provider and bitmap-decoding details.WallpaperRepository owns rotation queues and current-wallpaper records.
Queue creation checks and writes in one transaction, including synchronized screens.
Static changes and the live wallpaper engine both dequeue through
ChangeWallpaperUseCase.dequeueNext.WallpaperController shares static wallpaper application between the service
and worker. Callers hold WallpaperChangeLock through application and schedule
updates. The controller recycles applied bitmaps.SettingsCoordinator persists wallpaper settings edits and applies their side effects
(schedules, queues, immediate changes) one at a time; ViewModels only hold UI state.
WallpaperChangeService helpers are the single way to start a manual change.runCatchingCancellable where they need a Result, so
coroutine cancellation always propagates. Progress belongs to UI state.| Requirement | Version |
|---|---|
| Java | 17 |
| Android Gradle Plugin | 9.3.2 |
| Gradle | 9.7.1 |
| Compile SDK | 37 (Android 17) |
| Minimum SDK | 31 (Android 12) |
| Target SDK | 36 |
Clone the repository
git clone https://github.com/Anthonyy232/Paperize.git
cd Paperize
Open in Android Studio
File > Open and navigate to the cloned repositoryBuild and Run
▶ Run to build and install on a connected device, orBuild > Generate Signed Bundle / APK to create a signed releaseSet ANDROID_HOME to your Android SDK directory, or configure sdk.dir in
local.properties. Use the checked-in Gradle wrapper:
./gradlew testDebugUnitTest lintDebug assembleDebug
./gradlew connectedDebugAndroidTest
On Windows, use gradlew.bat. Device tests require a running Android emulator or
connected device (API 31 or newer). They cover rendering, scheduling, document
provider failures, import rollback, album cleanup, and library controls.
Contributions are welcome! Feel free to:
If you find Paperize useful, consider supporting development through GitHub Sponsors (one-time or monthly). Thank you!
This project is licensed under the GNU General Public License v3.0 — see the LICENSE file for details.