Skip to content
CAI
Software that uses CAICheck a score

shalenMathew/MovieFlix_App

54.0

Adequate · 22 September 2026

10.3k

lines of production code

Kotlin

primary language

7

measurements over time

CAI band scale
CAI trend line
CAI lens gauges

What this system is

This system is an Android application for discovering and managing movie and TV show content, featuring a modernized architecture that supports TV series tracking, custom user lists, and detailed actor information. It integrates remote data fetching with local persistence to maintain user libraries, favorites, and watchlists, while offering background synchronization and data backup capabilities. The app also provides scheduled notifications for media updates and deep linking to external streaming services.

How it got here

2024 — Architecture modernization and cleanup

17 changes.

The project underwent a significant architectural overhaul, removing legacy components such as the Room database, Dagger Hilt dependency injection, and obsolete UI fragments to streamline the codebase. This refactoring was accompanied by a major upgrade to the Android toolchain, including Kotlin 2.2.21 and AGP 9.3.1, while introducing comprehensive instrumentation and unit tests to ensure stability.

2025–2026 — TV tracking and app rebranding

13 changes.

This period focused on expanding the application to support TV series tracking with season and episode management, alongside the introduction of custom user lists and detailed actor profiles. The work included a comprehensive rebranding of the package and UI, restructuring the data layer to support these new features, and adding background synchronization, scheduled notifications, and data backup capabilities.

Features

Add scheduled movie notifications with WorkManager

The app now supports scheduling notifications for movies and TV shows. A new notification system uses Android WorkManager to trigger alerts at a specified time, displaying the movie title and poster image when available. The implementation includes a scheduler to queue the work, a worker that handles the notification display and subsequent database cleanup, and a helper to manage notification channels and permissions.

app/src/main/java/com/shalenmathew/movieflix/core/notifications · high confidence

Added background backup and restore functionality for user library data

The app now includes core components to export and import user data, including favorites, watchlists, scheduled movies, series tracking, and custom lists. A new BackupData model defines the structure of the exported JSON, while BackupWorker handles the asynchronous export of this data to a specified URI, and RestoreWorker handles the import by clearing existing data and inserting the backed-up items in a transaction. Users can now save their library state to a file and restore it later, with status notifications indicating success or failure.

app/src/main/java/com/shalenmathew/movieflix/core/backup · high confidence

Added release build metadata configuration

The release build output now includes an \output-metadata.json\ file that defines the APK artifact details, including the application ID, version code/name, and output filename. It also specifies baseline profile configurations for different Android API levels and sets the minimum SDK version for dexing.

app/release · high confidence

Added remote data source for movie and TV content

Introduced the RemoteDataSource class to centralize API calls for fetching movie and TV data. This component provides methods to retrieve upcoming, popular, trending, top-rated, and now-playing movies, as well as shows from Netflix and Amazon Prime. It also adds support for fetching anime, movie and TV trailers, recommendations, watch providers, search results, cast details, and actor/TV credits, acting as the primary interface for the app's remote data layer.

app/src/main/java/com/shalenmathew/movieflix/data/remote · high confidence

Expanded data models for actor details, TV series, and streaming providers

The app now supports richer data retrieval for actors and TV content. New model classes have been added to parse actor biographies, images, and movie/TV credits, as well as detailed TV series information including seasons and episodes. Additionally, the 'Where to Watch' feature has been enhanced to display specific streaming providers (flatrate, buy, rent) with their logos and names, rather than just a generic link. Existing movie result models have also been updated to include media type and name fields to support mixed media feeds.

app/src/main/java/com/shalenmathew/movieflix/data/model · high confidence

Expanded domain models for TV tracking, custom lists, and cast details

The app now supports tracking TV series with season and episode-level detail, allows users to create and manage custom movie lists, and displays detailed actor information including social media links. New domain models in the \domain.model\ package include \TrackedSeries\, \TrackedSeason\, and \TrackedEpisode\ to support series tracking features, \UserCustomList\ and \CustomListMovie\ for user-curated lists, and \ActorDetail\ and \CastMember\ for enhanced cast profiles. Existing models like \MovieResult\ and \WatchProviders\ have been updated to support broader media types and detailed provider information.

app/src/main/java/com/shalenmathew/movieflix/domain/model · high confidence

New adapters for tracking, lists, and media details, plus package rename

This update introduces a suite of new RecyclerView adapters to support new app features: TrackingAdapter, TrackingSeasonAdapter, and TrackingEpisodeAdapter enable TV show tracking with season/episode expansion and progress indicators; CustomListAdapter and ChooseCustomListAdapter support user-created custom lists; ActorMoviesAdapter, CastAdapter, and CrewAdapter display media cast and crew details; EpisodeAdapter and SeasonSelectorAdapter handle TV episode and season selection; FavAdapters manages favorites with scheduling status; LanguageAdapter and WatchProviderAdapter support settings and streaming provider selection; and BannerChoiceAdapter allows banner customization. Additionally, existing adapters (BannerAdapter, HomeAdapter) have been moved to the new package com.shalenmathew.movieflix.core.adapters, and HomeAdapter now supports infinite scroll loading via onLoadMore.

app/src/main/java/com/shalenmathew/movieflix/core/adapters · high confidence

New domain repository interfaces and package rename

The app introduces new domain-layer repository interfaces to support features such as actor details, custom movie lists, favorites, scheduled movies, and series tracking, while also expanding the MovieInfoRepository with methods for trailers, recommendations, cast/crew, and watch providers. Additionally, the package name has been updated from com.example.movieflix to com.shalenmathew.movieflix, and the WatchListRepository's insert method now accepts an IdAndMovieResult type instead of the previous entity.

app/src/main/java/com/shalenmathew/movieflix/domain/repository · high confidence

New presentation layer with TV tracking, custom lists, and actor details

The app now includes a new presentation package containing a main activity with edge-to-edge display and notification handling, a library section with tabs for watchlist, favorites, custom lists (with creation and image sharing), and a new TV show tracking tab that supports season/episode expansion, watch status management, and navigation to episode details. Additionally, new activities and fragments have been added for viewing actor details and episode-specific information, along with a base fragment for network connectivity observation.

app/src/main/java/com/shalenmathew/movieflix/presentation · high confidence

Repository layer restructured with new tracking, list, and actor capabilities

The data repository layer has been significantly expanded and reorganized. New repository implementations have been added to support actor details and filmography (ActorRepositoryImpl), user-created custom movie lists (CustomListRepositoryImpl), and TV series tracking with background synchronization (SeriesTrackingRepositoryImpl). Existing functionality has been refactored: the home feed now aggregates multiple content types (upcoming, trending, popular, top-rated, streaming service shows, and anime) into a single cached response (MovieDetailsRepositoryImpl), and favorites/watchlists now use a unified IdAndMovieResult model (FavMovieRepositoryImpl, WatchListRepositoryImpl). Additionally, the package name has been updated from com.example.movieflix to com.shalenmathew.movieflix across all repository files, and error messages have been standardized to use string resources instead of hardcoded text.

app/src/main/java/com/shalenmathew/movieflix/data/repository · high confidence

Updated application package name and initialized core domain use cases

The app's package name has been updated from \com.example.movieflix\ to \com.shalenmathew.movieflix\, affecting the main application class and existing domain use cases like Search and WatchList. Additionally, new domain use cases have been introduced to support core features: \MovieFlixApp\ initializes the Hilt dependency injection and notification channels, while \FavMovie\, \ScheduledMovies\, \GetActorInfo\, and \GetMovieInfo\ provide the necessary logic for managing favorites, scheduled reminders, actor details, and comprehensive movie/TV information retrieval.

app/src/main/java/com/shalenmathew/movieflix, app/src/main/java/com/shalenmathew/movieflix/domain/usecases · high confidence

Removals

Removal of Movie Details and Watch List fragments

The MovieDetailsFragment and WatchListFragment classes have been deleted from the codebase. This removes the standalone UI screens for viewing individual movie details (including trailers and recommendations) and for displaying the user's watch list. Users will no longer be able to access these specific views through these fragments.

app/src/main/java/com/example/movieflix/presentation/watchlist · high confidence

Removal of MovieResponseVideoResultList data model

The MovieResponseVideoResultList data class has been removed from the application's data model layer. This class previously served as a response wrapper for video results, containing an ID and a list of video items, and included a conversion method to map to the domain model MovieVideoResultList. Its deletion suggests a refactoring of how video result data is handled or consumed within the app.

app/src/main/java/com/example/movieflix/data/model · high confidence

Removal of core utility functions

The \ViewUtils.kt\ file has been deleted, removing a collection of helper functions previously used across the app. This includes utilities for converting genre IDs to names, checking network availability, managing view visibility, opening network settings, showing toast messages, formatting dates, sharing movie details, and generating random characters. Users may experience changes in how these generic interactions are handled if the functionality was not migrated to other parts of the codebase.

app/src/main/java/com/example/movieflix/core/utils · high confidence

Removal of legacy MainActivity entry point

The legacy MainActivity class, which previously served as the application's entry point using a NavHostFragment for navigation, has been removed from the codebase. This change eliminates the old activity-based navigation structure in favor of the current architecture.

app/src/main/java/com/example/movieflix/presentation · high confidence

Removal of legacy SplashFragment implementation

The SplashFragment class has been removed from the application. This deletion eliminates the previous logic that handled navigation from the splash screen to either the home or intro fragments based on DataStore state, as well as the associated memory-leak prevention code in onDestroy. Users will no longer interact with this specific fragment implementation, implying the splash flow has been replaced or refactored elsewhere in the app.

app/src/main/java/com/example/movieflix/presentation/splash · high confidence

Removal of local Room database implementation

The local data persistence layer using Room has been removed from the application. The \MovieDao\ interface, which previously handled CRUD operations for home feed and watch list data, and the \MovieDatabase\ abstract class defining the database schema and entities, have been deleted. This change eliminates the app's ability to store movie data locally on the device.

app/src/main/java/com/example/movieflix/data/local · high confidence

Removal of movie info and recommendation domain components

The domain layer has removed several components related to movie information and recommendations, including the \MovieVideoResultList\ model, the \MovieInfoRepository\ and \RecommendationRepository\ interfaces, and the \GetMovieInfo\ and \RandomRecommendation\ use cases. This deletion eliminates the underlying domain logic for fetching home feed data, movie trailers, recommendations, and watch providers, as well as the ability to search for movies via recommendation queries.

app/src/main/java/com/example/movieflix/domain · high confidence

Removed Random Recommendation Fragment

The RandomRecommendationFragment, which previously allowed users to discover random movies via a 'roll again' feature, has been removed from the application.

app/src/main/java/com/example/movieflix/presentation/randomRecomm · high confidence

Removed obsolete repository implementations

The \MovieInfoRepositoryImpl\ and \RecommendationRepositoryImpl\ classes have been deleted from the data layer. This removes the local implementations for fetching home feed data, movie trailers, recommendations, and watch providers, as well as the movie search functionality, indicating these features are no longer supported or have been replaced by other components.

app/src/main/java/com/example/movieflix/data/repository · high confidence

Behavioural changes

The app has been rebranded from 'example.movieflix' to 'shalenmathew.movieflix', including the removal of the 'Bollywood' category and the renaming of 'Trending Movies' to 'Whats Trending ?'. A new streaming provider utility now allows users to open content directly in installed apps (such as Netflix, Prime Video, and Disney+) with a browser fallback. Additionally, the app now persists the user's last selected library tab and preferred language, automatically applying the language setting to all API requests.

app/src/main/java/com/shalenmathew/movieflix/core/utils · high confidence

Expanded API client with TV, actor, and network-specific endpoints

The network layer has been significantly expanded to support TV series and actor details, adding dedicated endpoints for TV details, images, seasons, cast, and watch providers, alongside actor-specific calls for details, movie/TV credits, and images. The package name was updated from com.example.movieflix to com.shalenmathew.movieflix, and the trending media type default changed from 'movie' to 'all'. Additionally, the Bollywood movies endpoint was replaced with an Anime discovery endpoint, and the Netflix/Amazon Prime show endpoints were corrected to properly separate the network ID and page query parameters.

app/src/main/java/com/shalenmathew/movieflix/data/network · high confidence

Local data layer restructured with new tracking and custom list capabilities

The local storage module has been reorganized under the new package name com.shalenmathew.movieflix.data.local\_storage, reflecting a package name fix. This update introduces a new Room database schema (version 14) that adds support for series tracking (including series, seasons, episodes, and progress) and custom user lists, alongside existing features like watchlists, favorites, and scheduled movies. New Data Access Objects (DAOs) and entity classes have been added to manage these new data structures, and the LocalDataSource has been expanded to expose methods for inserting, retrieving, and managing favorites with personal notes and scheduled items.

_app/src/main/java/com/shalenmathew/movieflix/data/local\storage · high confidence

Removal of Application and Database DI Module

The app entry point (MovieFlixApp) and the core dependency injection module for the local database (DatabaseModule) have been removed. This eliminates the Dagger Hilt setup that previously provided the Room database instance, DAO, and repository implementations (MovieInfoRepository, WatchListRepository) to the rest of the application.

app/src/main/java/com/example/movieflix/core/di · high confidence

Removal of legacy BaseFragment and specific ViewModel implementations

The \BaseFragment\ class, which previously handled network connectivity callbacks (available, lost, unavailable) for fragments, has been removed from the codebase. Additionally, the \HomeInfoViewModel\ and \RandomRecommendationViewModel\ classes have been deleted. This indicates a refactoring of the presentation layer where network state management and specific home/random recommendation data fetching logic are no longer handled by these original components.

app/src/main/java/com/example/movieflix/presentation/viewmodels · high confidence

Removal of legacy RemoteDataSource class

The \RemoteDataSource\ class, which previously served as the central remote data source for fetching movie and TV show information (including upcoming, popular, trending, and search results) via the \ApiClient\, has been removed from the application. This change indicates a refactoring of the data layer, likely migrating to a new architecture or data source implementation that replaces this specific wrapper.

app/src/main/java/com/example/movieflix/data/remote · high confidence

Test coverage

Added instrumentation tests for local storage and scheduled notifications; Added unit tests for API client and repository logic.

Dependencies

Gradle build tool upgraded to version 9.5.0

The project's Gradle wrapper has been updated to use Gradle 9.5.0 (previously 8.4). Additionally, a new \gradle-daemon-jvm.properties\ file has been added to configure the Java toolchain, specifying Java 21 as the target version and providing download URLs for various operating systems and architectures via the Foojay Disco API.

gradle · high confidence

Upgrade to Android Gradle Plugin 9.3.1, Kotlin 2.2.21, and major library updates

The project has been upgraded to Android Gradle Plugin 9.3.1 and Kotlin 2.2.21, with the Java/Kotlin toolchain set to version 17. Key dependencies have been updated, including AndroidX Core (1.17.0), AppCompat (1.7.1), Material (1.13.0), ConstraintLayout (2.2.1), Navigation Components (2.9.5), Glide (5.0.5, switching from kapt to KSP), Lifecycle components (2.9.4), Lottie (6.6.10), DataStore (1.1.7), and Retrofit/OkHttp (3.0.0/5.2.1). The application namespace and ID were changed to com.shalenmathew.movieflix, and the package name was updated. Build configuration now uses environment variables for API keys, enables ViewBinding alongside DataBinding, and includes KSP plugin support. Gradle properties were updated to enable configuration cache and parallel sync.

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

Lenses

  • Code Health 91 → 95 (+4.0)
  • Architecture 98 → 79 (-18.8)
  • Maturity 57 → 57 (-0.1)
  • Readiness 41 → 50 (+8.2)
  • Security 24 → 47 (+22.4)
  • Domain Modelling 100 → 82 (-17.9)

Resolved (36)

  • Change coupling: FavFragment.kt ↔ WatchListFragment.kt (app/src/main/java/com/shalenmathew/movieflix/presentation/favorites/FavFragment.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) (app/src/main/java/com/shalenmathew/movieflix/presentation/favorites/FavFragment.kt)
  • Duplicated block (11 lines × 2) (app/src/main/java/com/shalenmathew/movieflix/data/repository/MovieDetailsRepositoryImpl.kt)
  • Duplicated block (11 lines × 2) (app/src/main/java/com/shalenmathew/movieflix/data/repository/MovieDetailsRepositoryImpl.kt)
  • Duplicated block (12 lines × 2) (app/src/main/java/com/shalenmathew/movieflix/core/adapters/FavAdapters.kt)
  • Duplicated block (12 lines × 2) (app/src/main/java/com/shalenmathew/movieflix/data/repository/MovieDetailsRepositoryImpl.kt)
  • Duplicated block (13 lines × 2) (app/src/main/java/com/shalenmathew/movieflix/data/repository/MovieDetailsRepositoryImpl.kt)
  • Duplicated block (13 lines × 3) (app/src/main/java/com/shalenmathew/movieflix/data/repository/MovieDetailsRepositoryImpl.kt)
  • Further sole-owners (lower concentration)
  • 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 16 more

New (50)

  • ClassTooLong: MovieDetailsFragment (app/src/main/java/com/shalenmathew/movieflix/presentation/movie_details/MovieDetailsFragment.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 × 6) (app/src/main/java/com/shalenmathew/movieflix/data/repository/MovieDetailsRepositoryImpl.kt)
  • Duplicated block (11 lines × 3) (app/src/main/java/com/shalenmathew/movieflix/presentation/favorites/FavFragment.kt)
  • Duplicated block (11–16 lines × 7) (app/src/main/java/com/shalenmathew/movieflix/data/repository/MovieDetailsRepositoryImpl.kt)
  • Duplicated block (12–13 lines × 2) (app/src/main/java/com/shalenmathew/movieflix/presentation/library/TrackingFragment.kt)
  • Duplicated block (13 lines × 2) (app/src/main/java/com/shalenmathew/movieflix/data/repository/MovieDetailsRepositoryImpl.kt)
  • Duplicated block (13 lines × 2) (app/src/main/java/com/shalenmathew/movieflix/presentation/favorites/FavFragment.kt)
  • Duplicated block (18 lines × 2) (app/src/main/java/com/shalenmathew/movieflix/core/adapters/FavAdapters.kt)
  • Duplicated block (22 lines × 2) (app/src/main/java/com/shalenmathew/movieflix/data/repository/MovieDetailsRepositoryImpl.kt)
  • Duplicated block (25 lines × 2) (app/src/main/java/com/shalenmathew/movieflix/data/repository/MovieDetailsRepositoryImpl.kt)
  • Duplicated block (6 lines × 2) (app/src/main/java/com/shalenmathew/movieflix/core/adapters/TrackingAdapter.kt)
  • Duplicated block (7 lines × 2) (app/src/main/java/com/shalenmathew/movieflix/presentation/favorites/FavFragment.kt)
  • Duplicated block (8 lines × 2) (app/src/main/java/com/shalenmathew/movieflix/core/adapters/TrackingAdapter.kt)
  • Duplicated block (9 lines × 2) (app/src/main/java/com/shalenmathew/movieflix/presentation/settings/BackupFragment.kt)
  • High: security finding (details withheld)
  • High: security finding (details withheld)
  • High: security finding (details withheld)
  • …and 30 more

Changes since last survey

  • 35 commits — 25 feature/other, 10 fixes

By area

  • app/src — 22 commits
  • (root) — 9 commits
  • app/build.gradle.kts — 2 commits
  • .artifacts/0a4d0967-ac9c-47a5-9538-347577c2ea11 — 1 commit
  • fastlane/metadata — 1 commit

Notable commits

  • fix: feat/Tracking : UI fixes
  • fix: feat/Tracking: UI fixes
  • fix: feat/Tracking: banner bug fix
  • fix: fix/Search: improved search
  • fix: fix/mascot : added mascot in home network ly
  • fix: fix/mascot : added mascot to library
  • fix: fix/mascot : fixed UI
  • fix: fixes
  • fix: fixes
  • fix: readme fix
  • change: 1.5 : version bump
  • change: 2.0 version bump
  • change: 2.1 version bump
  • change: Add additional images to README
  • change: Update README to remove duplicate image
  • change: Update README with new image and content
  • change: Update README.md
  • change: Update README.md
  • change: Update README.md
  • change: feat/List : added list
  • …and 15 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

shalenMathew/MovieFlix_App 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 6de7e5d84f1b29814d9e92197cc3e5c55162ece6 — 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.