shalenMathew/MovieFlix_App
54.0
Adequate · 22 September 2026
10.3k
lines of production code
Kotlin
primary language
7
measurements over time
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
App rebrand, streaming deep links, and language persistence
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.