Skip to content
CAI
Software that uses CAICheck a score

esoxjem/MovieGuide

46.7

Weak · 22 September 2026

2.3k

lines of production code

Java

primary language

7

measurements over time

CAI band scale
CAI trend line
CAI lens gauges

What this system is

MovieGuide is an Android application that allows users to browse, search, and sort movies, reviews, and videos. It features a modernized architecture using MVP, Dagger 2, and RxJava 2 to manage data flow and state. The app persists user favorites in a local database and supports UI testing via Espresso.

How it got here

2015 — AndroidX migration and architecture modernization

7 changes.

The project underwent a significant modernization, renaming to MovieGuide and migrating to AndroidX, RxJava2, and Dagger 2. The codebase was refactored to use an MVP architecture for the details screen and introduced structured data models with Moshi for JSON parsing. Build infrastructure was updated with Gradle 5.4.1 and new dependencies were integrated to support enhanced listing features like sorting and search.

2016–2017 — Modernization and test coverage

7 changes.

The project underwent a significant architectural modernization, migrating the network layer to Retrofit 2, RxJava 2, and Moshi, while also replacing the favorites storage with Realm. Concurrently, extensive test coverage was added, including UI tests for the movies listing flow and unit tests for presenters and utilities.

Features

Added utility classes for UI and testing support

The app now includes new utility classes in the 'util' package to support UI interactions and testing. A SoftKeyboardUtils class was added to programmatically hide the soft keyboard, improving the user experience by managing input focus. For testing purposes, EspressoIdlingResource and SimpleCountingIdlingResource were introduced to handle asynchronous operations during automated UI tests, ensuring tests wait for background tasks to complete. Additionally, RxUtils provides a helper for managing RxJava2 disposable subscriptions, preventing memory leaks by safely disposing of them.

app/src/main/java/com/esoxjem/movieguide/util · high confidence

Introduce data models and dependency injection for movie, review, and video content

The app now includes structured data models for movies, reviews, and videos, each implementing Parcelable for Android intent/fragment passing. These models use Moshi annotations (e.g., @Json) to map JSON fields, replacing the previous GSON-based parsing. The base application class initializes Dagger 2 components (AppComponent, DetailsComponent, ListingComponent) to provide singleton Context, Resources, and Realm instances, establishing a new dependency injection layer for the app's core data structures.

app/src/main/java/com/esoxjem/movieguide · high confidence

Project renamed to MovieGuide with updated documentation and build infrastructure

The project has been renamed from 'MoviesGuide' to 'MovieGuide' in the README. The README was significantly expanded to include a 'Not Actively Maintained' notice, a build status badge, and detailed instructions for building the app, including adding a TMDB API key to local.properties. Additionally, new files were added: a Code of Conduct, an MIT License, and Gradle wrapper scripts (gradlew, gradlew.bat) to support building the Android app. The .gitignore was updated to exclude Android Studio and IDE-specific files.

(repo-wide) · high confidence

Behavioural changes

Added ProGuard rules for Butter Knife library

A new ProGuard configuration file (proguard-rules.pro) was added to the app module, containing rules to preserve Butter Knife annotations and classes during code shrinking and obfuscation. This ensures that the Butter Knife library functions correctly in release builds by preventing the removal or renaming of essential components.

app · high confidence

Favorites persistence migrated to Realm database

The app now uses Realm to store and retrieve favorite movies, replacing the previous storage mechanism. This change introduces a new data layer (FavoritesStore, FavoritesInteractor, and MovieRealmObject) to manage favorite states, ensuring that user favorites are persisted across sessions using the Realm database.

app/src/main/java/com/esoxjem/movieguide/favorites · high confidence

Introduce MVP architecture for movie details screen

The movie details screen has been refactored into an MVP (Model-View-Presenter) architecture. A new DetailsComponent and DetailsModule provide dependency injection for the MovieDetailsPresenter, which now manages the logic for displaying movie details, trailers, reviews, and favorite status. The MovieDetailsFragment acts as the View, delegating data loading and state updates to the presenter, while the interactor handles data fetching. This change improves separation of concerns and testability of the details screen.

app/src/main/java/com/esoxjem/movieguide/details · high confidence

Network layer migrated to Retrofit 2, RxJava 2, and Moshi

The app's network implementation has been rewritten to use Retrofit 2 with RxJava 2 for asynchronous request handling and Moshi for JSON parsing, replacing the previous GSON-based setup. The new NetworkModule configures an OkHttpClient with a request interceptor that automatically appends the TMDB API key to all requests, and enables HTTP body logging only in debug builds. The TmdbWebService interface defines endpoints for discovering popular, highest-rated, and newest movies, as well as fetching trailers and reviews.

app/src/main/java/com/esoxjem/movieguide/network · medium confidence

Redesigned movie listing with sorting, search, and pagination

The movie listing screen has been refactored to support sorting, search, and pagination. Users can now sort the movie list by Most Popular, Highest Rated, Newest, or Favorites. A search bar in the toolbar filters the list with a 500ms debounce delay. The listing also supports pagination, loading more movies as the user scrolls. The UI adapts to tablet layouts, displaying a two-pane view when possible.

app/src/main/java/com/esoxjem/movieguide/listing · high confidence

Test coverage

Add Android UI tests for the movies listing flow; Added unit tests for MovieDetailsPresenter; Added unit tests for MoviesListingPresenterImpl; Added unit tests for the sorting dialog presenter.

Dependencies

Initial Android project setup with AndroidX, RxJava2, and modern libraries

The project introduces a new Android application structure, configuring the build system with Gradle 3.5.1 and the Realm plugin 5.3.0. The app targets API 29 and supports Java 8, utilizing AndroidX libraries (including Material, Palette, and RecyclerView) and enabling Jetifier. Key dependencies include RxJava2 for asynchronous operations, Retrofit 2 with Moshi for networking, Dagger 2 for dependency injection, and Espresso for testing. The configuration also excludes specific META-INF files to resolve duplicate file issues.

(dependencies) · high confidence

Upgraded Gradle wrapper to version 5.4.1

The project now uses Gradle wrapper version 5.4.1, ensuring consistent build environments across all development machines and CI systems.

gradle · 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 43 → 47 (+3.3)
  • Rubric changed (rubric-2026.08.19 → rubric-2026.09.15) — scores are not directly comparable.

Lenses

  • Code Health 100 → 100 (+0.0)
  • Architecture 100 → 100 (-0.5)
  • Maturity 28 → 28 (+0.0)
  • Readiness 24 → 34 (+9.6)
  • Security 85 → 85 (+0.0)

Resolved (7)

  • Coverage not included — suite not readable by the collector
  • Dependency hygiene not measured — dependency manifest found but not parsed for hygiene
  • No exposed public API
  • Secret: generic-api-key (app/src/main/java/com/esoxjem/movieguide/constants/Api.java)
  • Secret: generic-api-key (app/src/main/java/com/esoxjem/movieguide/constants/Api.java)
  • Test reliability not included
  • dormant codebase — no living knowledge left to concentrate

New (8)

  • 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)
  • No ADRs found
  • No assertions: shouldFailSilentlyWhenNoReviews (app/src/test/java/com/esoxjem/movieguide/details/MovieDetailsPresenterImplTest.java)
  • No assertions: shouldFailSilentlyWhenNoTrailers (app/src/test/java/com/esoxjem/movieguide/details/MovieDetailsPresenterImplTest.java)
  • Secret: generic-api-key (app/src/main/java/com/esoxjem/movieguide/constants/Api.java)
  • Secret: generic-api-key (app/src/main/java/com/esoxjem/movieguide/constants/Api.java)

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

Survey your own repository

esoxjem/MovieGuide 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 dc1f20fbf42b111b0575b98210e543b781e10cc3 — 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-b84573e22831.