Skip to content
CAI
Software that uses CAICheck a score

GreyLabsDev/PexWalls

43.7

Weak · 21 September 2026

3.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

PexWalls is an Android application designed for browsing, downloading, and managing photos sourced from the Pexels API. It provides users with the ability to search and view curated images, save favorites locally, and download high-resolution photos that can optionally be set as the device wallpaper. The system utilizes a modern Android architecture with local caching, dependency injection, and a unified paging system for efficient media display.

Features

Application initialization and dependency injection setup

The app now initializes its dependency injection container using Koin within the PexWallsApp class. This setup registers core modules for data access (database, network, preferences, repositories), domain tools, and presentation modules for various screens including home, search, categories, curated photos, favorites, and individual photo views, enabling the application to manage its architectural layers.

app/src/main/java/com/greylabsdev/pexwalls/app · high confidence

Introduction of domain entities and mappers for photo data and favorites

This change introduces the core domain model classes (PhotoEntity, PhotoSrcEntity, and PhotoFavoriteEntity) and the DomainMapper object to structure photo data and support the new favorites feature. Users benefit from a more robust data layer that maps API responses and database records into distinct domain objects, enabling the application to store and retrieve favorite photos with specific resolution URLs (including a by-screen-resolution variant) and manage photo metadata more effectively.

app/src/main/java/com/greylabsdev/pexwalls/domain/entity · high confidence

New domain tools and use cases for photo resolution, downloading, and favorites

This change introduces new domain-layer components to support higher-quality photo display, background downloading, and user favorites. A new PhotoUrlGenerator and ResolutionManager work together to generate photo URLs cropped to the device's screen resolution, ensuring images fit the display optimally. The PhotoDownloadingUseCase now handles photo downloads via the system DownloadManager, providing progress updates through a Flow and optionally setting the downloaded image as the system wallpaper upon completion. Additionally, the PhotoFavoritesUseCase enables users to add, remove, and view their favorite photos, with the logic fully migrated to coroutines for asynchronous execution.

app/src/main/java/com/greylabsdev/pexwalls/domain/usecase · high confidence

Removals

Removal of legacy MainActivity entry point

The standard Android activity entry point (MainActivity) has been removed from the application. This change eliminates the default screen launched when the app starts, indicating a shift in the app's navigation structure or a move towards a different entry mechanism.

app/src/main/java/com/greylabsdev/pexwalls · high confidence

Architecture

Data layer restructured with local/remote separation and Room persistence

The data layer has been reorganized to separate local and remote concerns: a new Room database (pixwall\_db) with a PhotoDbEntity and DAO handles local storage, while a RemoteDataSource communicates with the Pexels API via Retrofit. A unified Repository now delegates photo retrieval to the remote source and favorite management to the local source, with Koin modules wiring these components together.

app/src/main/java/com/greylabsdev/pexwalls/data · high confidence

Introduction of a unified domain repository interface

A new \IRepository\ interface has been added to the domain layer, defining the contract for data access operations. This interface consolidates methods for retrieving curated and search results, as well as managing user favorites (adding, removing, checking, and listing). This change establishes a cleaner separation of concerns by allowing use cases to interact with a single repository abstraction rather than multiple data sources directly.

app/src/main/java/com/greylabsdev/pexwalls/domain/repository · high confidence

Behavioural changes

New presentation architecture with unified paging and base components

The presentation layer has been restructured with new base classes (BaseActivity, BaseFragment, BaseViewModel) that standardize edge-to-edge display, system bar handling, and a unified ProgressState flow for loading, error, and empty states. A custom paging system (PagingAdapter, PagingDataSource, PhotoPagingUpdater) now powers photo grids and lists, supporting headers, footers, and staggered layouts, while new ViewHolders and ItemDecorations provide rounded corners and consistent spacing for photo items.

app/src/main/java/com/greylabsdev/pexwalls/presentation · high confidence

Test coverage

Added unit tests for LinkGenerator and updated instrumentation test setup

Added a new unit test class, LinkGeneratorTest, to verify that the PhotoUrlGenerator correctly constructs download URLs with the expected resolution parameters. Removed the default ExampleUnitTest placeholder. Updated the ExampleInstrumentedTest to use the AndroidJUnit4 runner from androidx.test.runner and adjusted comments to reflect the app context.

app/src/test · high confidence

Dependencies

Gradle wrapper upgraded to version 9.5.0

The Gradle wrapper has been updated from version 5.4.1 to 9.5.0. This change ensures that the build environment uses the newer Gradle distribution, which may bring performance improvements, bug fixes, and compatibility updates for the project's build scripts.

gradle · high confidence

Migrated to Gradle Kotlin DSL and modernized Android build configuration

The project has replaced the legacy Groovy-based build scripts (app/build.gradle, build.gradle, settings.gradle) with Kotlin DSL equivalents (app/build.gradle.kts, build.gradle.kts, settings.gradle.kts) and introduced a version catalog (gradle/libs.versions.toml) for centralized dependency management. This migration updates the Android Gradle Plugin to 9.3.1, raises the compile SDK to 37 and target SDK to 36, and upgrades core libraries including AppCompat to 1.8.0, Core KTX to 1.19.0, Room to 2.8.4, Retrofit to 3.0.0, OkHttp to 5.5.0, Koin to 4.2.2, and Coroutines to 1.11.0. The configuration also adds KSP support, Ktlint for code style checking, and configures Java 17 compatibility.

(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 51 → 44 (-7.5)
  • Rubric changed (rubric-2026.08.18 → rubric-2026.09.15) — scores are not directly comparable.

Lenses

  • Code Health 99 → 99 (+0.4)
  • Architecture 100 → 93 (-6.7)
  • Maturity 50 → 55 (+4.9)
  • Readiness 24 → 12 (-12.2)
  • Security 92 → 95 (+2.5)
  • Domain Modelling 100 → 74 (-25.6)

Resolved (12)

  • Coverage not included — suite not readable by the collector
  • Dependency hygiene not measured — dependency manifest found but not parsed for hygiene
  • Dormant codebase
  • Duplicated block (12 lines × 2) (app/src/main/java/com/greylabsdev/pexwalls/presentation/screen/host/HostActivity.kt)
  • Duplicated block (13 lines × 2) (app/src/main/java/com/greylabsdev/pexwalls/presentation/screen/photo/PhotoFragment.kt)
  • Duplicated block (15 lines × 2) (app/src/main/java/com/greylabsdev/pexwalls/presentation/view/ViewAnimator.kt)
  • Duplicated block (17 lines × 2) (app/src/main/java/com/greylabsdev/pexwalls/presentation/screen/categoryphotos/CategoryPhotosFragment.kt)
  • Medium: security finding (details withheld)
  • No exposed public API
  • Test reliability not included
  • There is a task list for restoring project tasks, but the issues referenced (e.g. Fix image download crash) are not linked anywhere in the README. (README.md)
  • single-maintainer — knowledge-concentration (bus factor) risk

New (11)

  • 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 (15 lines × 2) (app/src/main/java/com/greylabsdev/pexwalls/presentation/screen/photo/PhotoFragment.kt)
  • Duplicated block (16 lines × 2) (app/src/main/java/com/greylabsdev/pexwalls/presentation/screen/categoryphotos/CategoryPhotosFragment.kt)
  • Duplicated block (23 lines × 2) (app/src/main/java/com/greylabsdev/pexwalls/presentation/view/ViewAnimator.kt)
  • Duplicated block (6 lines × 3) (app/src/main/java/com/greylabsdev/pexwalls/presentation/screen/categoryphotos/CategoryPhotosFragment.kt)
  • Leaked secret: high-entropy-secret (app/src/main/java/com/greylabsdev/pexwalls/data/network/NetworkModule.kt)
  • No ADRs found
  • TodoComment (app/src/main/java/com/greylabsdev/pexwalls/presentation/screen/photo/PhotoFragment.kt)

Changes since last survey

  • 11 commits — 9 feature/other, 2 fixes

By area

  • app/src — 5 commits
  • (root) — 4 commits
  • (repo) — 2 commits

Notable commits

  • fix: [update] - AGP-Kotlin-Gradle upgraded, min-target-compile sdk upgraded, migrated to KTS and version catalog, minor bug fixes for navigation and ui
  • fix: [update] - liveData to Flow migration, fixed paging and PhotoGrid bugs
  • change: Add project upgrade tasks for 2026
  • change: Merge pull request #12 from sabahmax-dev/webbrain/readme-improvement
  • change: Merge remote-tracking branch 'origin/master'
  • change: Update README with completed tasks
  • change: Update README.md
  • change: [update] - migrations file added
  • change: [update] - updated all core deps
  • change: [update] - upgraded Koin, removed old Rx artifacts
  • change: docs: improve README

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

Survey your own repository

GreyLabsDev/PexWalls 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 8a7ea8efd61cce223526f73ced28696c2afa9285 — 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.