- Android application written with kotlin programming language.
- Fetch images from server and save into Room database with Paging 3 library.
- Implement Paging 3 loading state adapter to resume the unloaded page due to any error.
- Create the object of fragments with factory method and inject to NavHostFragment using Hilt.
- Use two way data binding and binding adapters to download images.
- CI.CD pipeline for android lint ,unit test , instrumentation test and build apk.
Minimum API level supported is: 23
- Build System: [Gradle](https://gradle.org)
- To run these application you need
- Android Studio.
- These application is build using MVVM architecture to allow separation of concerns.
- [SOLID] - It is a Design principles.SOLID is a mnemonic acronym for five design principles intended to make software designs more understandable, flexible, and maintainable.
- Kotlin - Cross-platform, statically type, general purpose programming language with type inference.
- Paging 3 - Paging 3 library helps to load large data from server or local database into small chunks.
- [RemoteMediator] Paging 3 remoteMediator to check data is not present in database and get it from server and save into Room database for single source of truth principle.
- Hilt - Dependency injection library for android.
- [NavigationComponets] (https://developer.android.com/guide/navigation/navigation-getting-started)
- Retrofit - A Type-safe HTTP client for android and java used to consume REST APIs.
- Gson - Used to convert Json to java and kotlin objects.
- Glide - Image loader library for android.
- [DiffUtill Adapter] (This class finds the difference between two lists and provides the updated list as an output.)
- Room Database - Provides abstraction layer over SQLite.
- LiveData - A lifecycle-aware data holder with the observer pattern.
- ViewModel - Used to store and manage UI related data in a lifecycle concious way.
- Data Binding - Allows you to bind UI components in your layouts to data sources in your app
- Timber - Android Logger with a small and extensible API.
- Glide - Image loading framework for android that wraps media decoding, memory and disk caching.
- Flow API - In coroutines, a flow is a type that can emit multiple values sequentially, as opposed to suspend functions that return only a single value.
- MockWebServer - A mock web server is a program that mocks the behavior of an actual Retrofit API but doesn’t make calls over the internet.It is used to Test Retrofit
- [JUnit] - JUnit is a simple framework to write test the logic of program like Room database , ViewModel and Repository.
- [Espresso] - write small and reliable Android UI tests.
- [Binding Adapters] - Use to load image using Glide library in different class.