Food Recipes app that users can view, fav recipes, and share jokes. I work on improving app architecture.
- Minimum SDK level 21
- %100 Kotlin based
- Repository pattern is a design pattern that isolates the data layer from the rest of the app.
- Coroutines for asynchronous programming on Android.
- Room provides an abstract layer over the SQLite Database to save and perform the operations on persistent data locally.
- Flow is a type that can emit multiple values sequentially, as opposed to suspend functions that return only a single value In coroutines
- ViewModel class is a business logic or screen level state holder. It exposes state to the UI and encapsulates related business logic
- LiveData is an observable data holder class.
- Lifecycle is a class that holds the information about the lifecycle state of a component (like an activity or a fragment) and allows other objects to observe this state.
- Navigation Component refers to the interactions that allow users to navigate across, into, and back out from the different pieces of content within app
- Retrofit A type-safe HTTP client for Android and Java
- Dagger Hilt Hilt provides a standard way to incorporate Dagger dependency injection into an Android application.
- DataStore is a data storage solution that allows you to store key-value pairs or typed objects with protocol buffers.
- Jsoup is a Java library for working with real-world HTML. It provides a very convenient API for fetching URLs and extracting and manipulating data, using the best of HTML5 DOM methods and CSS selectors.
- Coil An image loading library for Android backed by Kotlin Coroutines.
- Shimmer Shimmer is an Android library that provides an easy way to add a shimmer effect to any view in your Android app.
- MotionLayout MotionLayout is a layout type that helps you manage motion and widget animation in your app.
- ViewBinding is a feature that allows you to more easily write code that interacts with views.
- Extension Functions Kotlin provides the ability to extend a class or an interface with new functionality without having to inherit from the class or use design patterns