
Card Info Finder
- 2 minsA Multi-modular Android application implemented using Clean Architecture, MVVM pattern, Koin for Dependency Injection, Kotlin Coroutines, Retrofit2, Room etc.. to identify the institution that issued a payment card. This application allows the user to provide the number either by entering a card number using the Soft Input keyboard or by Scanning the payment card number using the on-device OCR functionality.
Project Characteristics
- 100% Kotlin
- Modern architecture (Clean Architecture, Model-View-ViewModel)
- Android Jetpack
- A single-activity architecture ( using the Navigation component to manage Fragment operations.)
- CI pipeline (GitHub Actions)
- Testing (Unit, UI)
- Dependency Injection
- Material design
Architecture
Clean Architecture is the “core architecture” of this application. The main purpose of this approach is to achieve a separation of concerns which Clean architecture helps with and in making the code loosely coupled. This approach results in a more testable and flexible code. This approach divides the project in 3 modules: presentation, data and domain.
- Presentation: Layer with the Android Framework, the MVVM pattern and the DI module. Depends on domain to access the use cases and on DI, to inject dependencies. This is the layer closest to what the user sees on the screen.
- MVVM: The Model View ViewModel pattern helps with the separation of concerns, dividing the user interface with the logic behind. It combines very well with Android Architecture Components like LiveData and DataBinding.
- Domain: This is the core layer of the application with the business logic. It contains the use cases, in charge of calling the correct repository or data member.The domain layer is independent of any other layers.
- Data: Layer with the responsibility of managing the application data and exposes these data sources as repositories to the domain layer. Typical responsibilities of this layer is to retrieve data from the internet and optionally cache this data locally.
Technologies
- Kotlin + Coroutines - perform background operations
- Koin - dependency injection
- Retrofit - networking
- Jetpack
- Navigation - deal with whole in-app navigation
- LiveData - notify views about database change
- Lifecycle - perform an action when lifecycle state changes
- ViewModel - store and manage UI-related data in a lifecycle conscious way
- Data Binding - declaratively bind UI components in layouts to data sources.
- Room persistence library which provides an abstraction layer over SQLite
- Glide - image loading library
- Firebase ML Kit uses the On-Device API to recognize the numbers on the payment card
- and more…
- Tests
- Gradle
- Gradle Kotlin DSL
- Plugins (SafeArgs)
Check it out here. If you need help, just let me know by opening an issue or down below in the comments section.