Wallsyfy is an Android application that allows users to explore and interact with a wide variety of high-quality wallpapers. Users can browse through the collection, set wallpapers, and download them with ease. The app is built using Jetpack Compose for the user interface (UI) and follows the MVVM architecture for a clean, maintainable, and testable codebase.
![Screenshot 1](https://private-user-images.githubusercontent.com/171597020/400506641-d00288ae-f08a-4ebe-83a8-6ee2d6278e71.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3Mzk0ODMzMzYsIm5iZiI6MTczOTQ4MzAzNiwicGF0aCI6Ii8xNzE1OTcwMjAvNDAwNTA2NjQxLWQwMDI4OGFlLWYwOGEtNGViZS04M2E4LTZlZTJkNjI3OGU3MS5wbmc_WC1BbXotQWxnb3JpdGhtPUFXUzQtSE1BQy1TSEEyNTYmWC1BbXotQ3JlZGVudGlhbD1BS0lBVkNPRFlMU0E1M1BRSzRaQSUyRjIwMjUwMjEzJTJGdXMtZWFzdC0xJTJGczMlMkZhd3M0X3JlcXVlc3QmWC1BbXotRGF0ZT0yMDI1MDIxM1QyMTQzNTZaJlgtQW16LUV4cGlyZXM9MzAwJlgtQW16LVNpZ25hdHVyZT02YjRlM2Q2ZjA2MTA2YTY0N2UzNzgyNWM0MWFiNTdhZWM0NTFmZDRkYmQ1NWZiNTRiMTlhMDg2ZTRhMmIyYjRmJlgtQW16LVNpZ25lZEhlYWRlcnM9aG9zdCJ9.tqIL1-CNiEPXlaeddl4GjXhwjmoIIczu66Gv7Vv69ME)
![Screenshot 2](https://private-user-images.githubusercontent.com/171597020/400506748-2d56b7f0-a937-450a-8ede-a533adaeaba1.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3Mzk0ODMzMzYsIm5iZiI6MTczOTQ4MzAzNiwicGF0aCI6Ii8xNzE1OTcwMjAvNDAwNTA2NzQ4LTJkNTZiN2YwLWE5MzctNDUwYS04ZWRlLWE1MzNhZGFlYWJhMS5wbmc_WC1BbXotQWxnb3JpdGhtPUFXUzQtSE1BQy1TSEEyNTYmWC1BbXotQ3JlZGVudGlhbD1BS0lBVkNPRFlMU0E1M1BRSzRaQSUyRjIwMjUwMjEzJTJGdXMtZWFzdC0xJTJGczMlMkZhd3M0X3JlcXVlc3QmWC1BbXotRGF0ZT0yMDI1MDIxM1QyMTQzNTZaJlgtQW16LUV4cGlyZXM9MzAwJlgtQW16LVNpZ25hdHVyZT1mMmYzMTliNWZjODU0MzFiNzJhYWZmNzQ1ZTMyNjgyMDBhODhkNWFjNjVhODM0ZDdkMzIwNTIzYWZjN2ZmM2E0JlgtQW16LVNpZ25lZEhlYWRlcnM9aG9zdCJ9.o-PTWHTq46u-l7XWNkTGz1w9PI_WXLZcw_8rMLS5Z38)
![Screenshot 3](https://private-user-images.githubusercontent.com/171597020/400506794-d8add655-bc44-432b-ba1c-e0442afd7c30.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3Mzk0ODMzMzYsIm5iZiI6MTczOTQ4MzAzNiwicGF0aCI6Ii8xNzE1OTcwMjAvNDAwNTA2Nzk0LWQ4YWRkNjU1LWJjNDQtNDMyYi1iYTFjLWUwNDQyYWZkN2MzMC5wbmc_WC1BbXotQWxnb3JpdGhtPUFXUzQtSE1BQy1TSEEyNTYmWC1BbXotQ3JlZGVudGlhbD1BS0lBVkNPRFlMU0E1M1BRSzRaQSUyRjIwMjUwMjEzJTJGdXMtZWFzdC0xJTJGczMlMkZhd3M0X3JlcXVlc3QmWC1BbXotRGF0ZT0yMDI1MDIxM1QyMTQzNTZaJlgtQW16LUV4cGlyZXM9MzAwJlgtQW16LVNpZ25hdHVyZT02Mjc4MTVhNWYzNWFlYmY2MWE5NTE4NTFkMWIzODIwMWVhZGRkY2Q5NGRjMGE0OTZkN2UwNzI0MjZlMzQwNTVlJlgtQW16LVNpZ25lZEhlYWRlcnM9aG9zdCJ9.PuabnzV9wWehaFKObGcP16vIv0qtdDWfQIxHAD0xaMg)
![Screenshot 4](https://private-user-images.githubusercontent.com/171597020/400506871-4dba5f48-8bd5-470c-8b55-2eda7c8de981.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3Mzk0ODMzMzYsIm5iZiI6MTczOTQ4MzAzNiwicGF0aCI6Ii8xNzE1OTcwMjAvNDAwNTA2ODcxLTRkYmE1ZjQ4LThiZDUtNDcwYy04YjU1LTJlZGE3YzhkZTk4MS5wbmc_WC1BbXotQWxnb3JpdGhtPUFXUzQtSE1BQy1TSEEyNTYmWC1BbXotQ3JlZGVudGlhbD1BS0lBVkNPRFlMU0E1M1BRSzRaQSUyRjIwMjUwMjEzJTJGdXMtZWFzdC0xJTJGczMlMkZhd3M0X3JlcXVlc3QmWC1BbXotRGF0ZT0yMDI1MDIxM1QyMTQzNTZaJlgtQW16LUV4cGlyZXM9MzAwJlgtQW16LVNpZ25hdHVyZT03ZDNlM2UyYTE4MDlhMDQyZDkwYmM1OTE5NWQ2OWNkZjhmMTY5MGRiNzI5ZDgzMGRiN2Y2YjY5YTA1YmE4NDU3JlgtQW16LVNpZ25lZEhlYWRlcnM9aG9zdCJ9.N8QVsO0BWvwRVJIH5FknUc7v5SgJ9p0Ipjr6AbfE8cI)
![Screenshot 5](https://private-user-images.githubusercontent.com/171597020/400506921-8df57e4a-d9b3-473a-84a3-5a3ee84d4312.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3Mzk0ODMzMzYsIm5iZiI6MTczOTQ4MzAzNiwicGF0aCI6Ii8xNzE1OTcwMjAvNDAwNTA2OTIxLThkZjU3ZTRhLWQ5YjMtNDczYS04NGEzLTVhM2VlODRkNDMxMi5wbmc_WC1BbXotQWxnb3JpdGhtPUFXUzQtSE1BQy1TSEEyNTYmWC1BbXotQ3JlZGVudGlhbD1BS0lBVkNPRFlMU0E1M1BRSzRaQSUyRjIwMjUwMjEzJTJGdXMtZWFzdC0xJTJGczMlMkZhd3M0X3JlcXVlc3QmWC1BbXotRGF0ZT0yMDI1MDIxM1QyMTQzNTZaJlgtQW16LUV4cGlyZXM9MzAwJlgtQW16LVNpZ25hdHVyZT01ZGMyMjU2MjUxODE4NjNkNjQwMzE3MDdiNjU4ZDgzOWM0OWE1ODkyMjlkYjliODIwMTQ3NzBkM2E2NDA3YzU4JlgtQW16LVNpZ25lZEhlYWRlcnM9aG9zdCJ9.vvVv2NvwAdKjz7RJkswO3OO9mcnAYZsVgqyQOatYnIE)
![Screenshot 6](https://private-user-images.githubusercontent.com/171597020/400506935-881c7f42-cec4-46ec-88fb-7b8fba6c27de.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3Mzk0ODMzMzYsIm5iZiI6MTczOTQ4MzAzNiwicGF0aCI6Ii8xNzE1OTcwMjAvNDAwNTA2OTM1LTg4MWM3ZjQyLWNlYzQtNDZlYy04OGZiLTdiOGZiYTZjMjdkZS5wbmc_WC1BbXotQWxnb3JpdGhtPUFXUzQtSE1BQy1TSEEyNTYmWC1BbXotQ3JlZGVudGlhbD1BS0lBVkNPRFlMU0E1M1BRSzRaQSUyRjIwMjUwMjEzJTJGdXMtZWFzdC0xJTJGczMlMkZhd3M0X3JlcXVlc3QmWC1BbXotRGF0ZT0yMDI1MDIxM1QyMTQzNTZaJlgtQW16LUV4cGlyZXM9MzAwJlgtQW16LVNpZ25hdHVyZT1lNWNjNzAxODAxZjJhMzFkMjBkOGVmMmQ0MzdmYjc4YTFmZWMxN2ZhMWE1ODZjYzYyOWFjMzRhOGJiMDI0ZDJjJlgtQW16LVNpZ25lZEhlYWRlcnM9aG9zdCJ9.7DYHkt7_gfh2vJEyM-nOPPmj_AQ_vup0u3Hml5kBqvo)
![Screenshot 7](https://private-user-images.githubusercontent.com/171597020/400507015-f8a76860-f438-4f5f-b2c8-e647dc6b1865.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3Mzk0ODMzMzYsIm5iZiI6MTczOTQ4MzAzNiwicGF0aCI6Ii8xNzE1OTcwMjAvNDAwNTA3MDE1LWY4YTc2ODYwLWY0MzgtNGY1Zi1iMmM4LWU2NDdkYzZiMTg2NS5wbmc_WC1BbXotQWxnb3JpdGhtPUFXUzQtSE1BQy1TSEEyNTYmWC1BbXotQ3JlZGVudGlhbD1BS0lBVkNPRFlMU0E1M1BRSzRaQSUyRjIwMjUwMjEzJTJGdXMtZWFzdC0xJTJGczMlMkZhd3M0X3JlcXVlc3QmWC1BbXotRGF0ZT0yMDI1MDIxM1QyMTQzNTZaJlgtQW16LUV4cGlyZXM9MzAwJlgtQW16LVNpZ25hdHVyZT1lZjc3N2M2MWJlNjJmZjcxOTAxNWY1ZDE3ZmE4ZDU3NDQ2YTQ1ZTViYzFkNDNkYzFjZDUyODQwMTY5ZWMyMTk5JlgtQW16LVNpZ25lZEhlYWRlcnM9aG9zdCJ9.jKpNLzhcSpQ1dmovbB9Rbxpq4Lk3gHCmLgDI-ciBEic)
![Screenshot 8](https://private-user-images.githubusercontent.com/171597020/400507027-ff4d7dc0-0a56-4a94-8457-c30469306a65.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3Mzk0ODMzMzYsIm5iZiI6MTczOTQ4MzAzNiwicGF0aCI6Ii8xNzE1OTcwMjAvNDAwNTA3MDI3LWZmNGQ3ZGMwLTBhNTYtNGE5NC04NDU3LWMzMDQ2OTMwNmE2NS5wbmc_WC1BbXotQWxnb3JpdGhtPUFXUzQtSE1BQy1TSEEyNTYmWC1BbXotQ3JlZGVudGlhbD1BS0lBVkNPRFlMU0E1M1BRSzRaQSUyRjIwMjUwMjEzJTJGdXMtZWFzdC0xJTJGczMlMkZhd3M0X3JlcXVlc3QmWC1BbXotRGF0ZT0yMDI1MDIxM1QyMTQzNTZaJlgtQW16LUV4cGlyZXM9MzAwJlgtQW16LVNpZ25hdHVyZT0yMWZmYjhhZDQ1Mjc3ZTNkZTIzYTliYzljYWZhMGYxNWY3MzdiMzdhYmEzOWI0YmUyMDdjMTJmNThhZDAwOWY3JlgtQW16LVNpZ25lZEhlYWRlcnM9aG9zdCJ9.lTXedDEC7I7kJgByuG_qL3_fytQDT_EQKHS3TSbexD4)
- Wallpaper Browsing: Explore a wide range of high-quality wallpapers.
- Set Wallpaper: Set any wallpaper directly to your device from within the app.
- Download Wallpaper: Download wallpapers to your device.
- Jetpack Compose UI: The UI is built using Jetpack Compose, a modern, declarative framework for building Android UIs.
- MVVM Architecture: The app follows the Model-View-ViewModel (MVVM) architecture for better separation of concerns and maintainability.
- Koin for Dependency Injection: Uses Koin to manage dependencies, making the code more modular, testable, and easier to maintain.
- Coroutines for Asynchronous Operations: All network operations are performed asynchronously using Coroutines.
- No User Authentication: No sign-in or account creation required, allowing for a smooth, frictionless user experience.
- Favorites (Planned): Future feature allowing users to save and manage their favorite wallpapers.
- Kotlin: The programming language used to build the app.
- Jetpack Compose: A modern UI toolkit for building native Android UIs.
- MVVM Architecture: A pattern that helps in separating concerns in the codebase.
- Koin: A lightweight dependency injection framework for Kotlin.
- Ktor: A framework used for making network calls.
- Coil: An image loading library used for efficient image loading and caching.
- Coroutines: For managing background threads and asynchronous operations.
Follow the steps below to run the project locally:
-
Clone the repository:
git clone https://github.com/remziakgoz/Wallsyfy.git
-
Open the project in Android Studio.
-
Wait for the Gradle files to sync.
-
Run the app on a physical device or emulator.
Upon opening the app, you will be greeted with a list of wallpapers. You can:
- Browse through the collection.
- Tap on any wallpaper to view it in full size.
- Set the wallpaper directly to your device by tapping the "Set Wallpaper" button.
- Download the wallpaper to your device by tapping the "Download" button.
- Favorites System: Users will be able to favorite wallpapers to easily access them later.
- Categories: Ability to filter wallpapers by categories (e.g., nature, abstract, technology).
The project includes unit and UI tests to ensure the application works as expected. The following tests are available:
- WallpaperScreenTest: Verifies that wallpapers are loaded and displayed correctly.
- WallpaperSetTest: Ensures that setting a wallpaper works as expected.
- WallpaperDownloadTest: Verifies that the wallpaper can be downloaded successfully.
- NavigationTest: Ensures smooth navigation between different screens of the app.
- WallpaperViewModelTest: Tests the business logic of handling wallpaper data.
To run the tests:
-
In Android Studio, click on Run and select Test.
-
Alternatively, you can run the tests from the terminal:
./gradlew test
If you'd like to contribute to the project, follow these steps:
- Fork the repository.
- Create a new feature branch (
git checkout -b feature/your-feature-name
). - Commit your changes (
git commit -m 'Add new feature'
). - Push to your branch (
git push origin feature/your-feature-name
). - Open a pull request with a description of what your changes do.
This project is licensed under the MIT License - see the LICENSE file for details.
- Developed by Remzi Akgöz.
- Showcases modern Android development practices using Jetpack Compose, Koin, and MVVM architecture.
- Aims to provide a simple yet powerful experience for users looking for high-quality wallpapers.
Enjoy exploring and setting beautiful wallpapers with Wallsyfy!