Skip to content
CAI
Software that uses CAICheck a score

ImnIrdst/iiCnma

54.1

Adequate · 21 September 2026

2.4k

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 is an Android movie browsing application that fetches data from a remote API and caches it locally using Room. It provides features for searching movies, viewing popular titles, and managing a user-specific favorites list. The system is structured with a clean architecture, utilizing Hilt for dependency injection and AndroidX Paging for efficient list handling.

Features

Add common UI components for transitions, fragment binding, and list load states

Added new shared UI components to the app's common module: a DetailsTransition class to handle shared element transitions with image scaling, a BaseFragment abstract class that uses a ViewLifecycleDelegate for safe view binding, and a set of classes (ListLoadStateAdapter, ListLoadStateView, PageLoadStateView) to manage and display loading, error, and retry states for paginated lists.

app/src/main/java/com/imn/iicnma/ui/common · high confidence

Add favorites list view

Users can now view their saved movies in a dedicated Favorites section. This change introduces a new FavoritesFragment, FavoritesViewModel, and FavoritesAdapter to display a paginated list of favorite movies, including loading states, empty states, and shared element transitions to the movie details screen.

app/src/main/java/com/imn/iicnma/ui/favorites · high confidence

Add local favorites storage and data access

The app introduces a new local data layer for managing user favorites. This includes a new FavoritesEntity to store movie IDs, a FavoritesDao interface defining database operations (insert, delete, and query for favored movies), and a FavoriteMovieRelation to map the relationship between movies and their favorite status. This separates the favorites logic from the general movie repository, allowing users to save and retrieve their favorite movies locally.

app/src/main/java/com/imn/iicnma/data/local/favorites · high confidence

Add search functionality to the app

Users can now search for movies using a new SearchFragment and SearchAdapter. The search feature includes a search box, a list of results with shared element transitions, and handles loading and empty states. The implementation uses a dedicated SearchViewModel and SearchRepository, integrating with the existing movie detail navigation.

app/src/main/java/com/imn/iicnma/ui/search · high confidence

Added Movie domain model

A new Movie domain model has been introduced in the app's domain layer, defining the structure for movie data including fields for title, overview, genres, rating, release date, poster URL, and popularity. This model is now available for use in the application's business logic.

app/src/main/java/com/imn/iicnma/domain/model · high confidence

Adds utility classes and extension functions for UI, navigation, and lifecycle management

The app introduces several new utility files in the utils package to support the user interface and application logic. ContextUtils provides helper functions for displaying toasts, retrieving colors, checking network availability, and detecting screen orientation. GlideUtils adds a convenience method to execute a callback when a Glide image request finishes. NavigationUtils introduces a safe navigation extension that validates destination actions before navigating. TransitionUtils provides helper functions for generating unique transition names for shared element animations. ViewLifecycleDelegate and ViewLifecycleDelegateMutable offer lifecycle-aware property delegates that automatically clear values when a Fragment's view is destroyed, preventing memory leaks. Finally, ViewUtils adds functions to show/hide the keyboard, set up key listeners for EditText, and observe Paging library load states to update the UI with loading, error, and empty states.

app/src/main/java/com/imn/iicnma/utils · high confidence

Introduce dedicated FavoritesRepository and FavoritesLocalDataSource

The app now uses a dedicated FavoritesRepository and FavoritesLocalDataSource to manage favorite movies, separating this logic from the general movie repository. Users can add or remove movies from their favorites list, and the app will now correctly retrieve and display the user's favorite movies using a new paging-based query that maps local favorite entities to movie data.

app/src/main/java/com/imn/iicnma/data/repository/favorites · high confidence

Added a new data layer for popular movies, including a repository, local and remote data sources, and a pager mediator. This separates the popular movies functionality from the general movie repository, providing a dedicated path for fetching and caching popular movie lists with improved paging support.

app/src/main/java/com/imn/iicnma/data/repository/popular · high confidence

Introduce local database schema for movies, favorites, and search history

A new Room database class (MovieDatabase) is introduced, defining the local data storage structure. It registers four entities—MovieEntity, SearchKeysEntity, FavoritesEntity, and PopularMovieKeysEntity—along with their respective Data Access Objects (MovieDao, SearchDao, FavoritesDao, and PopularMoviesDao). This establishes the foundation for persisting movie data, user favorites, and search/popular movie keys locally.

app/src/main/java/com/imn/iicnma/data/local · high confidence

Introduce local movie data layer with Room database

The app now stores movie data locally using a new Room database layer. A new \MovieEntity\ class maps remote movie data to local storage, and a \MovieDao\ interface defines database operations for inserting and retrieving movie records. This enables offline caching and faster access to movie details and lists.

app/src/main/java/com/imn/iicnma/data/local/movie · high confidence

Introduce movie data layer with local and remote data sources

The movie data layer has been restructured to separate concerns, introducing a new \MovieRemoteDataSource\ interface for network calls and a \MoviesLocalDataSource\ interface for local storage, which are then composed in the \MovieRepository\ to handle fetching and caching movie details.

app/src/main/java/com/imn/iicnma/data/repository/movies · high confidence

Introduce remote response models for movies and genres

Added new data classes to handle the remote API response structure: MovieResponse maps individual movie details (including title, overview, rating, release date, poster, popularity, and an array of genre names), while MoviePagedListResponse handles paginated lists of movies. A new GenreResponse class represents individual genre entries. These models enable the app to parse and convert remote JSON responses into local entities, supporting features like popular movie listings and genre associations.

app/src/main/java/com/imn/iicnma/data/remote/model · high confidence

Introduce unified state and error handling utilities

Added IIError and State utility classes to the domain model utils. IIError provides a sealed hierarchy for network and unknown errors with human-readable text resolution, while State introduces a generic Loading/Success/Failure pattern with a withStates helper to manage flow-based state transitions.

app/src/main/java/com/imn/iicnma/domain/model/utils · medium confidence

New Movie Detail screen with state management and shared element transitions

Users can now view detailed information about a specific movie, including title, release date, rating, genres, and overview. The screen features a loading state view to indicate data fetching, handles error states with a retry option, and supports shared element transitions for a smoother visual experience. The implementation introduces a new \MovieDetailFragment\ and \MovieDetailViewModel\ that manage the display of the \Movie\ domain model, including favorite status toggling and error handling.

app/src/main/java/com/imn/iicnma/ui/detail · high confidence

New remote data source for movie details

A new MovieService interface and configuration constants have been added to the remote data layer. This introduces a dedicated endpoint for fetching individual movie details by ID, alongside base URLs for the API and image CDN, enabling the app to retrieve specific movie data from the remote server.

app/src/main/java/com/imn/iicnma/data/remote · high confidence

The app now uses a dedicated search repository and associated data sources (SearchLocalDataSource, SearchRemoteDataSource, SearchPagerMediator) to handle movie search results. This change separates search functionality from the existing movie repository, introducing a new paging-based flow that fetches and caches search results using the AndroidX Paging 3.0.0-rc01 library.

app/src/main/java/com/imn/iicnma/data/repository/search · high confidence

Architecture

Introduce Hilt-based dependency injection for database and network layers

The app now uses Hilt for dependency injection, providing centralized configuration for the local database and remote API clients. DatabaseModule creates the Room database singleton and provides specific local data sources (PopularMovies, Search, Favorites, Movies). NetworkModule configures Retrofit with an API key interceptor and logging, providing remote data sources for movies, popular movies, and search functionality.

app/src/main/java/com/imn/iicnma/di · high confidence

Behavioural changes

App initialization, navigation, and theme updates

The app now initializes logging via Timber and enables Hilt dependency injection. The main activity hides the title bar, sets the default theme to dark mode, and updates the bottom navigation to route to Search and Favorites instead of Dashboard and Notifications. Additionally, the back button now correctly navigates up the navigation stack.

app/src/main/java/com/imn/iicnma · high confidence

The HomeFragment has been refactored to use the Android Paging library to display a list of popular movies in a responsive grid layout (2 columns on portrait, 4 on landscape). The view now supports infinite scrolling with load state indicators (footer for retry, loading states, and empty states). Clicking a movie card triggers a shared element transition to the MovieDetail screen, passing the full Movie object rather than just an ID. The HomeViewModel has been updated to expose a Flow of paged movies from the repository, and the adapter uses Glide for image loading with placeholder support.

app/src/main/java/com/imn/iicnma/ui/home · high confidence

The app now uses an inner join to calculate page keys for both popular movies and search results, which should resolve paging issues and improve local caching. New data access objects (PopularMoviesDao and SearchDao) and their corresponding key entities (PopularMovieKeysEntity and SearchKeysEntity) have been introduced to manage remote keys for pagination. This change also includes a shared interface (CommonMovieListDao) to handle movie insertion, ensuring consistent behavior across different data sources.

app/src/main/java/com/imn/iicnma/data/local/popular · medium confidence

The app now uses distinct remote data sources for retrieving popular movies and searching movies, rather than a shared or combined repository. This change introduces dedicated Retrofit service interfaces (PopularMoviesService and SearchService) that implement specific remote data source interfaces, ensuring that the popular movies endpoint and the search movies endpoint are handled by separate, specialized components.

app/src/main/java/com/imn/iicnma/data/remote/popular, app/src/main/java/com/imn/iicnma/data/remote/search · medium confidence

Upgraded Gradle wrapper to version 7.0.2

The Gradle wrapper has been upgraded from version 6.5 to 7.0.2. This update ensures that the project uses a newer, more stable version of the Gradle build tool, which may bring performance improvements, bug fixes, and compatibility with newer Java versions.

gradle · high confidence

Test coverage

Add instrumentation tests for local data access objects; Added test infrastructure and sample data for unit testing; Added unit tests for MovieDetailViewModel; Added unit tests for MovieResponseRepository.

Dependencies

Upgrade Android build tooling and update core dependencies

The project's build configuration has been updated to use Android Gradle Plugin 7.0.3 and Kotlin 1.5.31, with the repository source changed from jcenter to mavenCentral. Core AndroidX libraries have been upgraded, including core-ktx to 1.9.0, appcompat to 1.3.0, material to 1.3.0, and lifecycle components to 2.3.1. Additionally, Hilt (2.36) and Navigation (2.3.5) have been integrated, and test dependencies like JUnit and MockK have been updated.

(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 56 → 54 (-1.8)
  • Rubric changed (rubric-2026.08.19 → rubric-2026.09.15) — scores are not directly comparable.

Lenses

  • Code Health 99 → 99 (-0.3)
  • Architecture 100 → 86 (-14.2)
  • Maturity 51 → 51 (+0.0)
  • Readiness 34 → 34 (+0.0)
  • Security 92 → 92 (+0.0)
  • Domain Modelling 100 → 92 (-7.6)

Resolved (9)

  • 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) (app/src/main/java/com/imn/iicnma/data/repository/popular/PopularMoviesPagerMediator.kt)
  • Duplicated block (12 lines × 2) (app/src/main/java/com/imn/iicnma/ui/favorites/FavoritesAdapter.kt)
  • Duplicated block (15 lines × 2) (app/src/main/java/com/imn/iicnma/ui/favorites/FavoritesFragment.kt)
  • Duplicated block (7 lines × 2) (app/src/main/java/com/imn/iicnma/data/repository/popular/PopularMoviesPagerMediator.kt)
  • No exposed public API
  • Test reliability not included
  • dormant codebase — no living knowledge left to concentrate

New (12)

  • 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 (15 lines × 2) (app/src/main/java/com/imn/iicnma/ui/favorites/FavoritesAdapter.kt)
  • Duplicated block (16 lines × 2) (app/src/main/java/com/imn/iicnma/data/repository/popular/PopularMoviesPagerMediator.kt)
  • Duplicated block (23 lines × 2) (app/src/main/java/com/imn/iicnma/ui/favorites/FavoritesFragment.kt)
  • Duplicated block (8–9 lines × 2) (app/src/main/java/com/imn/iicnma/data/repository/popular/PopularMoviesPagerMediator.kt)
  • Duplicated block (9 lines × 3) (app/src/main/java/com/imn/iicnma/ui/favorites/FavoritesAdapter.kt)
  • No ADRs found
  • TodoComment (app/src/main/java/com/imn/iicnma/MainActivity.kt)
  • TodoComment (app/src/main/java/com/imn/iicnma/data/remote/model/MovieResponse.kt)
  • TodoComment (app/src/main/java/com/imn/iicnma/data/repository/favorites/FavoritesRepository.kt)

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

Survey your own repository

ImnIrdst/iiCnma 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 1312ab8205bfb4328637d7152a3ae6cecd2cf9ff — 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.