Slack Android Clone with Compose
Status: 🚧 In progress 🚧
TODO : Rewrite the Colors and light/dark mode compatibility!
This is a jetpack compose sample app written in Kotlin following clean architecture principles.
The purpose of this app to showcase:
- Implementation of Jetpack Android Architecture components with Dagger Android and Data Binding to minimize boilerplate code
- Creation of proper components and Subcomponents using Dagger Android and their injection into Activity, Fragment, View Models and Helper Classes
- Performing background task with Kotlin Coroutines
🏗️️ Built with ❤️ using Jetpack Compose 😁
|🎭 User Interface (Android)||Jetpack Compose|
|💉 DI (Android)||Hilt|
|🌊 Async||Coroutines + Flow|
Languages, libraries and tools used
- AndroidX libraries
- Android Architecture Components
- Android Data Binding
- Dagger 2
- Kotlin Coroutines
SlackClone follows the principles of Clean Architecture with Android Architecture Components.
Architecture’s layers & boundaries:
Presentation Layer contains UI (Activities & Fragments) that are coordinated by ViewModels which execute 1 or multiple UseCases. Presentation Layer depends on Domain Layer.
Domain Layer is the most INNER part of the circle (no dependencies with other layers) and it contains Entities, Use cases & Repository Interfaces. Use cases combine data from 1 or multiple Repository Interfaces.
Data Layer contains Repository Implementations and 1 or multiple Data Sources. Repositories are responsible to coordinate data from the different Data Sources. Data Layer depends on Domain Layer.
Notes: Mapping between response models and transformed models will happen via extension functions defined in transformed model file
Files are suffixed with be defined Class types.
- ViewModels are suffixed with VM. Ex:
- UseCases are suffixed with UseCase. Ex:
- Sources are suffixed with Source. Ex:
- Repositories are suffixed with Repo. Ex:
This project can be used as a template for new apps.
This project is continually evolving to integrate other libraries and techniques to keep it up to date.