A Recipe Android Apps using Koin, RxJava, Jetpack (Room, ViewModel, LiveData) based on MVVM architecture purely written in Kotlin.
There are 4 features on this apps:
- Discover popular foods and get foods by category
- See information foods selected (ingredients, etc.)
- Save food to favorite
- Search food by name
- Kotlin - built with 100% Kotlin.
- Jetpack Components
- Navigation
- Room
- ViewModel
- Material Components
- ViewBinding
- Clean Architecture - separates code into layers.
- Modularization - separating logical components of project into discrete modules.
- Dynamic Feature - separate certain features and resources from the base module and include them in app bundle.
- NetworkBoundResource - offline first strategy.
- Retrofit2 - REST APIs.
- GSON - JSON serialization.
- RxJava - reactive programming.
- Retrofit - Flowable
- Room - Flowable
- Search - Observable
- Glide - load images.
- Timber - logger.
- Shimmer - loading indicator.
- Expandable TextView - expand/collapse TextView.
- Leak Canary - memory leak detection.
- ProGuard - prevent reverse engineering.
- Mockito - unit testing.
This apps uses Clean Architecture to separate code into layers (Data - Domain - Presentation).
The foods information provided in this apps belongs to themealdb.com, so you need an API Key Production from their platform in order to display it. You can get one from this link.
Once you have it, create a apikey.properties file at the root folder with the following information:
THE_MEAL_DB="YOUR API KEY HERE"
Replace YOUR API KEY HERE with your API Key from TheMealDB.
Copyright 2022 Alva Yonara Puramandya
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.