An application to view and search GIFs from Giphy API. The first screen displays a random GIF every 10 seconds with title, URL, and a rating badge. Clicking on the search box above the screen enables you to search for your desired GIFs and selecting one from that screen takes you to the GIF details with its title, URL, and rating badge.
- MVI
- Dependency Injection
- Repository Pattern
- Clean Code
- SOLID
- Basic test and AppCompat libraries such as: JUnit, Espresso, Google Material, ConstraintLayout, SwipeRefreshLayout, Lifecycle (LiveData, ViewModels, and SavedState), Coroutines, etc.
- Retrofit with OkHttp (Coroutines friendly, up to date, and simple REST API call management)
- Koin for DI (Kotlin friendly, lightweight, and less boilerplate)
- Glide (Handles both GIFs and image loading, caching, focused on smooth scrolling)
The application is written in pure Kotlin and using MVI architecture with unidirectional data flows, since it fits the scale of the application, improves testability due to separation of concerns, and performs better in lifecycle changes and maintaining the app state. It also helps to better understand the clear and consistent flow of data through the application.
I've included some unit tests as well as UI tests making sure the view states and timer working as they should and the items appear on the screen with correct data.
The project is built upon AGP 8.1.1. I'm using Kotlin 1.9.10 and Gradle 8.3 via wrapper. A pre-built APK is placed in the root of the project for your convenience.
If there's anything you'd like to discuss, feel free to contact me at [email protected].
Cheers🍻