In this application consisting of multiple screens, you can review popular and recently added photos and set the wallpaper for your phone's background on the detail screen. In the detail screen, you can view the high resolution image by swiping or zooming the relevant photo, you can download it to your phone if you want, and you can share the photo with your friends. On the Collections screen, you can review the photos in the collections created by users on the unsplash site and save the photo you like. If you don't want to be content with these, search and review the photo you want on the search screen.
- You must create a developer account at https://unsplash.com/developers
- You have to create your application and get the access key
- You have to add the access key in
local.properties
DEBUG_API_KEY=""
This project uses many of the popular libraries, plugins and tools of the android ecosystem.
- Clean Architecture - Clean architecture is a method of software development in which you should be able to identify what a program performs merely by looking at its source code.
- Hilt - Dependency Injection library.
- KSP - KSP (Kotlin Symbol Processing) is a Kotlin-first alternative to kapt. KSP analyzes Kotlin code directly, which is up to 2x faster.
- Retrofit - Type-safe http client and supports coroutines out of the box.
- Ktlint - This plugin creates convenient tasks in your Gradle project that run ktlint checks or do code auto format.
- Ktor - Ktor includes a multiplatform asynchronous HTTP client, which allows you to make requests and handle responses, extend its functionality with plugins, such as authentication, JSON serialization, and more.
- Coroutines - Library Support for coroutines.
- Flow - A cold asynchronous data stream that sequentially emits values and completes normally or with an exception.
- StateFlow - StateFlow is a state-holder observable flow that emits the current and new state updates to its collectors.
- Android Architecture Components - Collection of libraries that help you design robust, testable, and maintainable apps.
- Material Design - Build awesome beautiful UIs.
- Motion Layout - MotionLayout is a layout type that helps you manage motion and widget animation in your app.
- Navigation - Android Jetpack's Navigation component helps you implement navigation, from simple button clicks to more complex patterns, such as app bars and the navigation drawer.
- Viewpager - Swipe views let you navigate between sibling screens, such as tabs, with a horizontal finger gesture (swipe). This navigation pattern is also referred to as horizontal paging.
- Firebase Auth - Firebase Authentication provides backend services, easy-to-use SDKs, and ready-made UI libraries to authenticate users to your app. It supports authentication using passwords, phone numbers, popular federated identity providers like Google, Facebook and Twitter, and more.
- Firebase Firestore - Cloud Firestore is a flexible, scalable database for mobile, web, and server development from Firebase and Google Cloud.
- Datastore - Jetpack DataStore is a data storage solution that allows you to store key-value pairs or typed objects with protocol buffers. DataStore uses Kotlin coroutines and Flow to store data asynchronously, consistently, and transactionally.
- Pagination - The Paging library helps you load and display pages of data from a larger dataset from local storage or over network.
- Room - The room persistence library it is an abstraction layer over SQLite.
- Coil - Image loading for Android backed by Kotlin Coroutines.
- Balloon - Modernized and sophisticated tooltips, fully customizable with an arrow and animations on Android.
- PowerMenu - PowerMenu is a modernized and fully customizable popup menu, which can be displayed on top of layouts.
A well planned architecture is extremely important for an app to scale and all architectures have one common goal- to manage complexity of your app. This isn't something to be worried about in smaller apps however it may prove very useful when working on apps with longer development lifecycle and a bigger team.
Clean architecture was proposed by Robert C. Martin in 2012 in the Clean Code Blog and it follow the SOLID principle.
The circles represent different layers of your app. Note that:
-
The center circle is the most abstract, and the outer circle is the most concrete. This is called the Abstraction Principle. The Abstraction Principle specifies that inner circles should contain business logic, and outer circles should contain implementation details.
-
Another principle of Clean Architecture is the Dependency Inversion. This rule specifies that each circle can depend only on the nearest inward circle ie. low-level modules do not depend on high-level modules but the other way around.
- Jetpack Compose Migration
- Unit Tests
- More Spesific Screens