An Android application for browsing recipes given ingredients.
Features:
- Search recipes by ingredients
- Save recipes for later
- Search recipes by meal
- Watch recipe preparation videos
Architecture that is meticulously planned is paramount for an application's scalability, and all architectural designs share a universal aim - to handle the complexity of your application. This might not be a concern for smaller-scale apps, but it can be incredibly advantageous when working on apps with an extended development timeline and a bigger team.
Robert C. Martin introduced the concept of Clean Architecture in 2012 via the Clean Code Blog, and it abides by the SOLID principle.
This app uses MVVM (Model-View-ViewModel) architecture design.
This project uses many of the popular libraries, plugins and tools of the android ecosystem.
- Material Design 3 - Build Jetpack Compose UIs with ready to use Material Design Components.
- Foundation - Write Jetpack Compose applications with ready to use building blocks and extend foundation to build your own design system pieces.
- UI - Fundamental components of compose UI needed to interact with the device, including layout, drawing, and input.
- Lifecycle-ViewModel - Perform actions in response to a change in the lifecycle status of another component, such as activities and fragments.
- HiltViewModel - Hilt provides a standard way to incorporate Dagger dependency injection into an Android application.
- Lottie - Lottie is a mobile library for Android and iOS that parses Adobe After Effects animations exported as json with Bodymovin and renders them natively on mobile!
- SwipeRefresh - A library which provides a layout which provides the swipe-to-refresh UX pattern, similar to Android's SwipeRefreshLayout.
- Navigation - A library which provides Compose Material support for Jetpack Navigation Compose. This features composable bottom sheet destinations.
- DataStore - Jetpack DataStore is a data storage solution that allows you to store key-value pairs or typed objects with protocol buffers.
- Android KTX - Provide concise, idiomatic Kotlin to Jetpack and Android platform APIs.
- AndroidX - Major improvement to the original Android Support Library, which is no longer maintained.
- Lifecycle - Perform actions in response to a change in the lifecycle status of another component, such as activities and fragments.
- ViewModel - Designed to store and manage UI-related data in a lifecycle conscious way. The ViewModel class allows data to survive configuration changes such as screen rotations.
- Room - Provides an abstraction layer over SQLite used for offline data caching.
- Dagger Hilt - Dependency Injection library.
- Retrofit - Type-safe http client and supports coroutines out of the box.
- OkHttp-Logging-Interceptor - Logs HTTP request and response data.
- Coroutines - Library Support for coroutines.
- Flow - Flows are built on top of coroutines and can provide multiple values. A flow is conceptually a stream of data that can be computed asynchronously.
- Timber - A logger with a small, extensible API which provides utility on top of Android's normal Log class.
- JUnit4 - JUnit is a simple framework to write repeatable tests.
- Mockk - A modern Mockk library for UnitTest.
- Turbine - Small testing library for kotlinx.coroutines Flow
- Coroutine-Test - Provides testing utilities for effectively testing coroutines.
- GradleVersionCatalog - Gradle's support for declaring and using dependencies.
- KSP - Kotlin Symbol Processing (KSP) is an API that you can use to develop lightweight compiler plugins.