WeatherRadar is an Android project for showing cities weather info using OpenWeather API (https://openweathermap.org/api). Project is written in Kotlin and applies principles of Clean Architecture.
- Showing weather info according to current user's location (city).
- Showing weather info for the upcoming 7-days of the same city.
- Searching for other cities weather info.
- Ability to add to cities favorite list.
- Screen to view cities favorite list.
- Configure between fahrenheit and celsius units.
Project implements MVI Architecture
For applying single responsiblity and seperation of concerns principles, the project consists of three main modules;
- presentation module (app module); contains Android specific components, UI(activities, fragments), viewmodels and contracts(for intents and viewstates)
- data module; contains repositories and data sources implementations (database definition and its DAOs / network APIs definitions), mappers(for remote and item models)
- domain module; contains the definitions of the business logic of the app and the data model,
Project is multi-modular, with a single source for dependencies management (buildSrc->Dependencies)
Koin framework (https://github.com/InsertKoinIO/koin) is used for Dependency Injection. Koin modules are defined under presentation->base->di
Coroutines (https://kotlinlang.org/docs/coroutines-guide.html) is used for asynchronous programming.
Retrofit (https://square.github.io/retrofit/) and OkHttp (https://square.github.io/okhttp/) are used for networks requests/intercept.
Room DB (https://developer.android.com/jetpack/androidx/releases/room) is used for caching/saving user's favorites.
Leak Canary (https://github.com/square/leakcanary) is used for detecting memory leaks.
Project consists of two different enviroments dev and production.
- Using Workmanager to periodically sync application data with the server and send timely notifications.