Skip to content

ifMaxi/Unplashy

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

38 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Unplashy

Photo and wallpaper application. 📸

Description

Search, discover and download hundreds of photos and wallpapers thanks to the Unsplash API. The app is written in Kotlin and Compose, it also uses some third-party libraries like Retrofit and Mockk. It also uses several Unsplash APIs.

It has temporary offline support through OkHttp caching, it decides not to place a database for better offline support due to the large amount of data being handled. It also allows downloading the image to the cell phone's internal storage, as well as the use of Intents to share the image or view it directly in the browser. It also contains a basic search engine, which can obtain the desired images through a query.

Features

  • Search.
  • Download images.
  • Manual light/dark mode switching and dynamic color support for Android 12+.

Important

In order to access the content of the app, you will need an API_KEY which you can obtain by creating an account on Unsplash.

Once you get the key, you will need to place it in the LOCAL.PROPERTIES file under the name "clientId". Then you will rebuild the project and you should be ready to go.

TechStack

  • Kotlin
  • Serialization
  • Coroutines
  • Kps
  • Compose
  • Hilt
  • ViewModel
  • Navigation
  • Paging 3
  • Data Store
  • Splash Screen
  • Retrofit
  • OkHttp
  • Coil
  • Lottie
  • MockK

Architecture

The pattern used for this project is MVVM (Model-View-ViewModel) which is a widely used architectural pattern in Android development that promotes separation of concerns, testability, and maintainability. It divides an application into three interconnected parts:

  1. Model: Represents the data and business logic of the application. It's responsible for fetching, storing, and manipulating data. This might include data classes, repositories, and data sources like databases or network APIs.
  2. View: In Compose, the View is represented by composable functions. These functions describe the UI declaratively, defining how it should look based on the current state. Instead of directly manipulating UI elements, composable functions recompose when the underlying data changes.
  3. ViewModel: Acts as an intermediary between the Model and the View. It exposes data from the Model in a way that's easily consumable by the View. It also handles user interactions from the View and updates the Model accordingly. The ViewModel is lifecycle-aware, meaning it survives configuration changes like screen rotations.

Mvvm arch

Navigation

Navigation graph describing the flow of the app.

NavigationGraph

Screenshots

Light Mode

Home - Topbar Home - Bottombar Detail
Topics Topics - Content Search - Results

Dark Mode

Home - Topbar Home - Bottombar Detail
Topics Topics - Content Search - Results

Pinch/Zoom image

Pinch - Zoom

About

Photo and wallpaper application. 📸

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages