Android application for getting the card details of a debit card from its first six digits. It communicates with the binlist api.
The app's architecture is MVVM and Clean architecture.
App is modularized by layers. The different modules in the app are remote, data, domain, presentation, app and core.
App uses DaggerHilt for dependency injection.
Instead of having try/catch blocks everywhere, errors are handled and propagated functionally. I used a sealed class called ResultOrError for holding either an error or result from network calls.
App uses coroutines to manage concurrency and multithreading.
The different view states are modelled as a sealed class and are propagated from the viewmodel to the views(Activity) using livedata.
App uses Google's MLKit for recognising debit card numbers.
The remote, data, domain and presentation layers have unit tests.
App uses detekt and ktlint for static code analysis.
Continuous integration is managed by CircleCI. It runs both the tests and detekt checks for each module in the app.