Skip to content
CAI
Software that uses CAICheck a score

melihaksoy/Android-Kotlin-Modulerized-CleanArchitecture

46.5

Weak · 20 September 2026

1.7k

lines of production code

Kotlin

primary language

4

measurements over time

CAI band scale
CAI trend line
CAI lens gauges

What this system is

This system is an Android application designed to display a paginated list of space launches and their detailed information. It utilizes a modern single-activity architecture with Material UI components, handling data retrieval through a network layer with offline persistence fallback. The app supports browsing launches via swipe-to-refresh pagination and navigating to specific launch details, backed by a modular data layer using Room and Retrofit.

Features

Initial Fastlane setup for Android CI

Added Fastlane configuration files (Appfile and Fastfile) to streamline Android build and testing workflows. The setup defines lanes for running Detekt static analysis and executing tests across multiple project modules (app, core, launches, detail, abstractions, definitions, interactors, network, and persistence) via Gradle tasks, facilitating integration with continuous integration pipelines.

fastlane · high confidence

Introduces core abstractions and persistence layer for launch details

This change establishes the foundational architecture for the application by introducing the \abstractions\ module, which defines shared contracts such as the \ViewEntity\ interface, the \Mapper\ interface for data transformation, and a \Result\ sealed class with extension functions for handling success, failure, and loading states. It also adds the \data/persistence\ module, implementing a Room-based database (\LaunchesDatabase\) with a \LaunchesDao\ for querying and saving launch entities, along with Moshi-based converters for serializing complex data types. Finally, it adds the \features/detail\ data layer, defining the \LaunchDetailItem\ view entity and a \LaunchDetailMapper\ to convert raw launch entities into the detail view model.

abstractions, data/persistence, features/detail/src/main/kotlin/com/melih/detail/data · high confidence

Launches feature migrated to new module with Material UI and pagination

The launches feature has been moved from the 'list' module to the 'launches' module, introducing a dedicated data model (LaunchItem) and a new UI layer that replaces the previous CardView with Material components (MaterialCardView, MaterialTextView). The list now supports pagination via Paging 3, allowing users to scroll through launch items with a swipe-to-refresh mechanism, and clicking an item navigates to its detail view.

features/launches · high confidence

Removals

Removal of repository module and launch data access layer

The repository module, which provided the data access layer for launch information, has been completely removed. This deletion eliminates the \SourceManager\ and its underlying \NetworkSource\ and \PersistenceSource\ implementations, along with the associated Room database DAOs, Retrofit API interfaces, and interactor classes. Consequently, the application no longer supports fetching or caching launch data from the network or local storage.

repository · high confidence

Removal of the legacy Launches list feature

The entire Launches list feature has been removed from the application. This includes the deletion of the UI components (LaunchesActivity, LaunchesFragment, LaunchesAdapter, and LaunchesViewModel), the associated layout files, the Dagger dependency injection modules (LaunchesBinds, LaunchesProvides), the AndroidManifest entry, and the corresponding unit tests. Users will no longer have access to the list of launches that was previously displayed in this section.

features/list · high confidence

Behavioural changes

App navigation consolidated into a single activity

The application now uses a single-activity architecture, replacing the previous separate LaunchesActivity and DetailActivity with a single MainActivity that handles navigation via the Android Navigation Component. This change simplifies the app structure by managing all screens within one activity, improving navigation flow and reducing the overhead of managing multiple activity lifecycles.

app/src/main/kotlin · high confidence

Core library refactoring: new paging infrastructure, Material theme, and dependency updates

This update introduces a new paging infrastructure in the core module, adding \BasePagingDataSource\, \BasePagingFactory\, and \BasePagingViewModel\ to standardize data loading and state observation, alongside a renamed \BasePagingListAdapter\ that now extends \PagedListAdapter\. The application theme has been migrated from AppCompat to Material Components (\Theme.MaterialComponents.Light.NoActionBar\), accompanied by a complete color palette overhaul (primary/secondary colors) and updated text appearance styles. Dagger injection has been updated to use \HasAndroidInjector\ instead of the deprecated \HasSupportFragmentInjector\, and navigation has shifted from explicit Intents to \NavHostFragment\ deep links. Additionally, the \BaseFragment\ now includes a \showSnackbarWithAction\ helper for error handling, and the test infrastructure has been updated to use \TestCoroutineDispatcher\.

core · high confidence

Data layer refactoring and network timeout configuration

The data layer has been restructured into distinct modules (definitions, network, interactors, persistence) with entities moved from the repository package to data/definitions. This includes adding Moshi serialization support (@JsonClass) to entity classes and introducing a 7-second connect and read timeout for network requests in the API implementation.

data, data/definitions, data/network · high confidence

Detail feature adopts single-activity navigation and modernizes data handling

The Detail feature now uses a Fragment-based architecture within a single-activity approach, removing the standalone DetailActivity and moving navigation logic into DetailFragment via standard AndroidX navigation args. The UI layer simplifies error handling by replacing manual Snackbar construction with a helper method, and the ViewModel shifts from coroutine-based Transformations to Kotlin Flow with explicit parameter injection, improving code clarity and reducing initialization complexity.

features/detail/src/main/kotlin/com/melih/detail/ui · high confidence

Gradle wrapper upgraded to version 6.5-rc-1

The Gradle wrapper has been updated to use Gradle 6.5-rc-1 (previously 5.4.1). This change ensures that builds are executed with the newer Gradle release candidate, which may introduce behavioral changes or new features compared to the previous version.

gradle · high confidence

New data interactors and refactored base interactor for launch details

The data/interactors module now provides specific use cases for retrieving launch information: GetLaunchDetails fetches a single launch by ID, while GetLaunches retrieves a paginated list of launches with a default page size of 15. These interactors rely on a refactored BaseInteractor that now uses extension functions for the run method and emits State.Loading/Loaded wrappers around the Result, simplifying the execution flow. The underlying LaunchesSource handles network requests with offline fallback to local persistence, mapping API responses to view entities and managing image URL transformations.

data/interactors · high confidence

Refines dependency injection for the Detail feature with dedicated scopes and modules

The dependency injection setup for the Detail feature has been restructured to improve modularity and scoping. The previous \DetailBinds\ module, which contained the ViewModel binding, has been replaced by a new \DetailFragmentModule\ that not only binds the \DetailViewModel\ and \LaunchDetailMapper\ but also provides parameters for the \GetLaunchDetails\ interactor using navigation arguments. Additionally, two new scopes, \DetailScope\ and \DetailFragmentScope\, have been introduced, with the latter being applied to the \DetailFragment\ injector to ensure proper lifecycle management.

features/detail/src/main/kotlin/com/melih/detail/di · high confidence

Updated ProGuard rules to reflect package renaming

The ProGuard configuration has been updated to align with a package structure change. The rules previously keeping classes in the \com.myapp.packagename.model\ and \com.melih.repository.entities\ packages have been removed or adjusted, and the keep rule for entities now targets the \com.melih.definitions.entities\ package. This ensures that the necessary model and entity classes are preserved during the build process despite the underlying package name changes.

app · high confidence

Test coverage

Updated test infrastructure and refactored DetailViewModelTest

The test suite for the detail feature has been updated to align with modern Kotlin Coroutines practices and internal refactoring. BaseTestWithMainThread now uses @OptIn for ExperimentalCoroutinesApi instead of annotating individual methods, and the package name was corrected from com.melih.list to com.melih.detail. In DetailViewModelTest, the test setup was refactored to pass parameters directly to the ViewModel constructor rather than relying on a separate loadData flow, and imports were updated to reflect the new GetLaunchDetails generic signature and the removal of the now-deleted test case.

features/detail/src/test · high confidence

Dependencies

Upgrade to Android Gradle Plugin 4.2 and Kotlin 1.3.72

The project has upgraded the Android Gradle Plugin from 3.5.0-beta05 to 4.2.0-alpha03 and Kotlin from 1.3.40 to 1.3.72. This update requires migrating build configurations from the deprecated \dataBinding { enabled = true }\ syntax to the new \buildFeatures { dataBinding = true }\ block. Additionally, the minimum SDK version has been raised to 21, and several libraries (such as Room, Retrofit, and OkHttp) have been updated to newer versions to align with the new tooling.

(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

This is the PUBLIC form of this artifact. Findings are listed in full, but the details of SECURITY findings — which rule fired, in which file, on which line, and how to fix it — are deliberately withheld, and any secret-scanner results are excluded entirely. Where detail is absent here it was REMOVED FOR PUBLICATION; it is not missing from the analysis. The complete artifact is available from the repository owner.

Score

  • CAI 64 → 46 (-17.5)
  • Rubric changed (rubric-2026.08.17 → rubric-2026.09.15) — scores are not directly comparable.

Lenses

  • Code Health 100 → 100 (+0.0)
  • Architecture 100 → 81 (-19.5)
  • Maturity 59 → 54 (-5.5)
  • Readiness 50 → 55 (+5.1)
  • Security 84 → 72 (-11.6)
  • Domain Modelling 100 → 30 (-70.0)

Resolved (7)

  • Coverage not included — suite not readable by the collector
  • Dependency hygiene not measured — no supported dependency manifest was read
  • Medium: security finding (details withheld)
  • No exposed public API
  • Test reliability not included
  • early-stage repository — too few commits for a meaningful bus factor
  • early-stage repository — too little history to judge knowledge freshness

New (33)

  • Documentation: no contributor guidance (README.md)
  • Documentation: no installation or build instructions (README.md)
  • Documentation: no usage examples (README.md)
  • High CVE: [GHSA redacted] (Gemfile.lock)
  • High CVE: [GHSA redacted] (Gemfile.lock)
  • High: security finding (details withheld)
  • High: security finding (details withheld)
  • High: security finding (details withheld)
  • High: security finding (details withheld)
  • High: security finding (details withheld)
  • High: security finding (details withheld)
  • High: security finding (details withheld)
  • High: security finding (details withheld)
  • High: security finding (details withheld)
  • High: security finding (details withheld)
  • High: security finding (details withheld)
  • High: security finding (details withheld)
  • High: security finding (details withheld)
  • High: security finding (details withheld)
  • High: security finding (details withheld)
  • …and 13 more

Written by watchdog.canine.dev from the codebase's own history, inside the signed delivery this page is composed from.

Survey your own repository

melihaksoy/Android-Kotlin-Modulerized-CleanArchitecture 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 20 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 1bcde286ddff6d81862687cd55893042065c68cd — 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-28e75b8e3254.