Petrulak/android-kotlin-mvp-clean-architecture
58.7
Adequate · 21 September 2026
2k
lines of production code
Kotlin
primary language
4
measurements over time
What this system is
This is an Android application that manages weather data by fetching it from a remote source and storing it locally in a Room database. The system employs a reactive architecture using RxJava, with a domain layer that orchestrates use cases and a data layer that handles asynchronous save operations. It also includes a centralized build configuration for dependency management and comprehensive test coverage for both UI and data layers.
Behavioural changes
Add internet connectivity monitoring and refactor UI state management
The app now monitors internet connectivity status, triggering callbacks when the device connects or disconnects from the network. Additionally, the example2 screen now uses a sealed class-based state machine (ViewState) to manage UI transitions, and the analytics module has been refactored to support multiple trackers via a new \AnalyticsManagerImpl\ that iterates over a list of \AnalyticsManager\ instances.
app/src/main · high confidence
Added Gradle wrapper for CI compatibility
The project now includes a Gradle wrapper, ensuring that all developers and CI systems use the same Gradle version (4.1) without requiring a pre-installed Gradle. This standardizes the build environment and improves reliability in automated pipelines.
gradle · high confidence
Centralized dependency version management
The build system now manages dependency versions in a centralized Kotlin file (buildSrc/src/main/java/Dependencies.kt). This change introduces a 'Versions' object containing version numbers for libraries such as Kotlin, Gradle, Retrofit, Room, and various Android support libraries, alongside a 'Deps' object that defines the full Maven coordinates for each dependency. This allows for easier updates and consistency across the project's build configuration.
buildSrc · high confidence
Refactor local data layer to use RxJava Completable for save operations
The local data layer has been refactored to support asynchronous, non-blocking save operations. The \LocalSource\ interface now returns a \Completable\ for the \save\ method, and the \WeatherLocalSource\ implementation uses \Completable.fromCallable\ to perform database insertions without blocking the calling thread. Additionally, the \WeatherEntityMapper\ was updated to map \Weather\ to \WeatherEntity\ (previously \WeatherEntity\ to \Weather\), and the \WeatherDao\ now inherits from a new \BaseDao\ interface that groups common Room operations. These changes align the data layer with reactive programming patterns, allowing callers to observe the completion of write operations.
data/src/main · high confidence
Refactored domain layer with new use-case structure and scheduler provider
The domain layer was restructured to implement a cleaner architecture. The \SchedulerProvider\ interface was renamed from \SchedulerProviderI\ and moved to a new implementation class \SchedulerProviderImpl\. All use cases (e.g., \GetWeatherUseCase\, \GetWeatherLocallyUseCase\) were refactored to implement specific interfaces (e.g., \GetWeatherUseCase\) rather than extending base interactor classes. The \BaseInteractor\ and its subclasses (\SingleInteractor\, \FlowableInteractor\, \CompletableInteractor\) were updated to use the new \SchedulerProvider\ and added default empty lambda parameters for error handling. The \WeatherRepository\ interface was also renamed from \WeatherRepositoryI\ and updated to return a \Completable\ for the \save\ method. Additionally, the \MixpanelAnalyticsActions\ class was renamed to \MixpanelAnalyticsManager\.
domain · high confidence
Test coverage
Added Android instrumented tests for the Example2 feature; Added instrumentation tests for local weather data storage; Added unit tests for data layer mappers.
Dependencies
Centralize dependency management and upgrade Kotlin
The project now manages all third-party dependencies through a centralized \Deps\ object defined in \buildSrc\, replacing the previous scattered \compile\ and \kapt\ declarations across individual \build.gradle\ files. This change also upgrades the Kotlin version from 1.1.50 to 1.2.0, updates the Android build tools to 26.0.2, and enables multi-Dex support in the data module.
(dependencies) · medium confidence
Written by watchdog.canine.dev from the codebase's own history, inside the signed delivery this page is composed from.
How this codebase got here
Score
- CAI 64 → 59 (-4.8)
- Rubric changed (rubric-2026.08.19 → rubric-2026.09.15) — scores are not directly comparable.
Lenses
- Code Health 100 → 99 (-0.4)
- Architecture 100 → 93 (-7.1)
- Maturity 48 → 48 (+0.0)
- Readiness 52 → 52 (+0.0)
- Security 100 → 100 (+0.0)
- Domain Modelling 100 → 70 (-30.3)
Resolved (6)
- Coverage not included — suite not readable by the collector
- Dependency hygiene not measured — dependency manifest found but not parsed for hygiene
- Duplicated block (15 lines × 2) (app/src/main/java/com/petrulak/cleankotlin/platform/extensions/RxExtensions.kt)
- No exposed public API
- Test reliability not included
- single-maintainer — knowledge-concentration (bus factor) risk
New (10)
- Dependency hygiene PARTLY measured — Maven/Gradle declarations read, no dependency graph resolved
- Documentation: no contributor guidance (README.md)
- Documentation: no installation or build instructions (README.md)
- Documentation: no usage examples (README.md)
- Duplicated block (13 lines × 2) (app/src/main/java/com/petrulak/cleankotlin/platform/extensions/RxExtensions.kt)
- Duplicated block (14 lines × 2) (app/src/main/java/com/petrulak/cleankotlin/platform/extensions/RxExtensions.kt)
- Duplicated block (15 lines × 2) (app/src/main/java/com/petrulak/cleankotlin/platform/extensions/RxExtensions.kt)
- Duplicated block (6 lines × 2) (app/src/main/java/com/petrulak/cleankotlin/ui/example1/fragment/Example1Fragment.kt)
- No ADRs found
- No dependency advisory monitoring
Architecture
- Containers 0 added · 0 removed · contexts 2 added · 0 removed · edges 3 added · 0 removed
Added bounded contexts (2)
- app
- data
Added dependency edges (3)
- app → data
- app → domain (coupling)
- data → domain (coupling)
Written by watchdog.canine.dev from the codebase's own history, inside the signed delivery this page is composed from.
Survey your own repository
Petrulak/android-kotlin-mvp-clean-architecture was measured the same way every project in this corpus was: the same rubric, at a pinned commit, with the result published in full. Point a surveyor at a repository you know and see whether you agree with it.
About this page
- The score is its most recent published measurement, taken on 21 September 2026 at a pinned commit. It is not a live figure and does not change until the project is measured again.
- Measured at commit 51033f30ecdb9573000454f1b8890d20c2438002 — the exact code this score is about.
- Scored under rubric-2026.09.15 — the same rubric and the same method as every other entry in this index.
- Measured by watchdog.canine.dev using codehealth-analyzer preprod-fa71c66cabd8.