HolidayInfo is an offline-first Android Application that fetches and displays the various holidays observed in different Countries and different years. The App fetches the data from Nager.Date API and uses Room for offline caching. It has a Splash Screen, a Home page showing a list of Countries and a Holiday details page which is displayed when a country and year is selected. It is implemented using Multi-module, Clean Architecture, Model-View-ViewModel (MVVM) pattern and uses Modern Android Development pattern and libraries. Adequate Unit Tests were also implemented in the codebase.
This application has the following characteristics:
- 100% Kotlin
- Modern Architecture (Clean Architecture, Model-View-ViewModel)
- Android Jetpack Components
- Material Design
Minimum API level is set to 21, this means HolidayInfo can run on approximately 98% of Android devices
- Splash Screen, the standard recommended Splash Screen library for Android Applications
- Retrofit which is a type-safe REST client for Android which makes it easier to consume RESTful web services
- Moshi, a modern JSON library for Android, Java and Kotlin
- OkHttp Logging Interceptor, an OkHttp interceptor which logs HTTP request and response data
- Kotlin Coroutines used to perform asynchronous network calls to the remote server
- Room, a persistence library with an abstraction layer over SQLite for database manipulation
- Hilt, a DI library for Android that reduces the boilerplate of using manual DI
- ViewModel used to store and manage UI-related data in a lifecycle conscious way
- LiveData which is an observable data holder class used to handle data in a lifecycle-aware manner
- View Binding used to easily write code that interacts with views by referencing them directly
- Kotlin flow for emitting live updates from a network call sequentially
- Material Design which is an adaptable system that guides in maintaining principles and best practices of contemporary UI
- Timber, a utility library for logging and easy debugging
- SearchableSpinner, a dialog spinner with a search feature which allows users to search the items loaded in the spinner
- SDP/SSP which is a scalable size unit that scales with the screen size. It helps to easily design for multiple screens
- JUnit4, a testing framework used for writing unit tests
- MockWebServer, a library that makes it easy to test how Apps behave when making HTTP/HTTPS calls
- Mockito, a mocking framework for writing unit tests
Get the APK here and stay informed about holidays observed around the world 🏖️