AliAsadi/Android-Clean-Architecture
50.3
Adequate · 22 September 2026
3.2k
lines of production code
Kotlin
primary language
7
measurements over time
What this system is
This is an Android application built on Clean Architecture, utilizing Kotlin, Jetpack Compose, and Hilt for dependency injection. It provides a movie browsing experience that supports pagination, search, and favorite management, with a strong emphasis on offline-first data handling and comprehensive unit testing.
Features
Implemented movie data layer with local and remote data sources
The data module now contains the complete implementation for fetching and storing movie data. This includes the \MovieApi\ interface for remote calls, \MovieLocalDataSource\ and \MovieRemoteDataSource\ for local and remote data access, and \MovieRepositoryImpl\ to coordinate between them. A \MovieRemoteMediator\ handles pagination with the local database, and a \SearchMoviePagingSource\ supports search functionality. Additionally, a \MockMovieRemoteDataSource\ and \JsonLoader\ are provided for testing, alongside comprehensive unit tests for the data sources.
data · high confidence
Initial project setup with Android Clean Architecture
The repository is initialized with a complete Android application structure based on Clean Architecture, featuring Kotlin, Jetpack Compose, and Offline-first support. The project includes a Gradle wrapper for build management, a .gitignore file for build artifacts, and a Jekyll theme configuration. The README provides comprehensive documentation on the app's features, such as pagination, search functionality, and connectivity status, as well as details on unit test coverage using Kover and code quality checks with Detekt.
(repo-wide) · high confidence
Introduce clean architecture presentation layer with Compose UI and Hilt DI
The presentation module is established with a full Compose-based UI, including a main activity with edge-to-edge support and dark mode handling, a navigation graph for the feed, favorites, search, and movie details, and dedicated ViewModels and screens for each section. Dependency injection is configured via Hilt modules for the app, data, database, dispatchers, and network, while a base ViewModel and entity mappers bridge the domain layer to the UI.
presentation · high confidence
Introduce domain-layer abstractions for dispatchers, network monitoring, and result handling
The domain layer now includes new interfaces and utilities to support cleaner architecture: a DispatchersProvider interface for managing coroutine dispatchers, a NetworkMonitor interface with a NetworkState data class to track online status, and a generic Result sealed class with onSuccess, onError, and map operations for handling success and error states.
domain/src/main/java/com/aliasadi/domain/util · medium confidence
Movie repository introduces pagination and streaming for movie lists
The MovieRepository interface now exposes methods for retrieving paginated lists of movies, favorites, and search results as Kotlin Flows of PagingData, enabling efficient, memory-friendly list loading in the UI. Additionally, it provides synchronous methods to fetch a single movie by ID, check and update favorite status, and perform a sync operation.
domain/src/main/java/com/aliasadi/domain/repository · high confidence
New domain use cases for movie favorites and search
The domain layer now includes new use cases to manage movie favorites and search functionality. Users can now add, remove, and check the status of favorite movies, as well as retrieve a paginated list of favorite movies. Additionally, a new use case enables searching for movies with pagination support.
domain/src/main/java/com/aliasadi/domain/usecase · high confidence
New test utilities for unconfined coroutine testing
Added a new core-test module containing a BaseTest class and MainCoroutineRule to facilitate testing with unconfined coroutines. The BaseTest class provides a runUnconfinedTest helper and sets up an InstantTaskExecutorRule, while the MainCoroutineRule allows tests to replace the main dispatcher with a test dispatcher that does not delay execution.
core-test · high confidence
Behavioural changes
Added domain-level build configuration files
The domain module now includes a .gitignore file to exclude the /build directory and a proguard-rules.pro file containing default ProGuard configuration comments. These changes affect the build and obfuscation setup for the domain layer.
domain · medium confidence
Introduce MovieEntity with category and backgroundUrl fields
A new domain model, MovieEntity, has been added to represent movie data. This entity now includes fields for category and backgroundUrl, in addition to the existing id, title, description, and image properties, allowing the application to store and access these new attributes for each movie.
domain/src/main/java/com/aliasadi/domain/entities · high confidence
Dependencies
Gradle wrapper upgraded to version 9.4.1
The Gradle wrapper has been updated to version 9.4.1. This change updates the build tooling used to compile and run the project, which may introduce new features, performance improvements, or breaking changes in the build process.
gradle · high confidence
Migrated build configuration to Gradle Kotlin DSL and version catalogs
The project's build system has been modernized by converting all Gradle build scripts from Groovy to Kotlin DSL and centralizing dependency and plugin versions in a version catalog (libs.versions.toml). This change introduces new modules (core-test, domain, data, presentation) with standardized configurations, including JDK 21 toolchains, minSdk 26, and updated libraries such as Compose BOM 2026.05.01, Hilt 2.59.2, and Room 2.8.4. Additionally, static analysis with Detekt and code coverage with Kover are now applied uniformly across all modules.
(dependencies) · high 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 50 → 50 (+0.4)
- Rubric changed (rubric-2026.08.19 → rubric-2026.09.15) — scores are not directly comparable.
Lenses
- Code Health 100 → 100 (+0.1)
- Architecture 97 → 88 (-9.0)
- Maturity 76 → 77 (+1.1)
- Readiness 24 → 24 (+0.0)
- Security 100 → 100 (+0.0)
- Domain Modelling 55 → 59 (+3.6)
Resolved (7)
- Change coupling: Page.kt ↔ MovieDetailsViewModel.kt (presentation/src/main/kotlin/com/aliasadi/clean/navigation/Page.kt)
- Coverage not included — suite not readable by the collector
- Dependency hygiene not measured — dependency manifest found but not parsed for hygiene
- Duplicated block (10 lines × 2) (presentation/src/main/kotlin/com/aliasadi/clean/ui/favorites/FavoritesScreen.kt)
- No exposed public API
- Small-team knowledge concentration
- Test reliability not included
New (6)
- Change coupling: MovieRemoteDataSource.kt ↔ MovieRepositoryImpl.kt (data/src/main/kotlin/com/aliasadi/data/repository/movie/MovieRemoteDataSource.kt)
- Dependency hygiene PARTLY measured — Maven/Gradle declarations read, no dependency graph resolved
- Documentation: no installation or build instructions (README.md)
- Documentation: no usage examples (README.md)
- Duplicated block (10 lines × 2) (presentation/src/main/kotlin/com/aliasadi/clean/ui/favorites/FavoritesScreen.kt)
- No ADRs found
Written by watchdog.canine.dev from the codebase's own history, inside the signed delivery this page is composed from.
Survey your own repository
AliAsadi/Android-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 22 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 b8c59527ec3a443057c3bbf11d670ee9df264f0f — 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-821afab8930d.