daavsnts/my-movies-android
45.6
Weak · 21 September 2026
3.2k
lines of production code
Kotlin
primary language
4
measurements over time
What this system is
This is an Android application for browsing and managing movie information. It integrates with The Movie Database (TMDB) API to fetch trending, popular, and upcoming movies, while also supporting search functionality. The system allows users to save favorite movies to a local database and maintain a personalized user profile with custom images. The architecture employs Hilt for dependency injection, Room for local storage, and Jetpack Compose for the user interface.
Features
Add Favorite Movies screen and ViewModel
A new Favorite Movies screen and associated ViewModel have been added to the app. The FavoriteMoviesScreen composable displays a list of favorite movies, supporting both a full list view and a search-filtered view. The FavoriteMoviesViewModel manages the state for both the full list and the searched results, utilizing Hilt for dependency injection and coroutine exception handling for error states. The screen includes logic to show an empty list warning when no favorites are found.
app/src/main/java/com/daavsnts/mymovies/ui/screens/favoriteMovies · medium confidence
Add Movie Details screen with loading, error, and success states
Users can now view detailed information about a specific movie. This change introduces the MovieDetailsScreen and its corresponding ViewModel, which manage three distinct UI states: a loading state that displays a shimmering placeholder, an error state that shows a message, and a success state that presents the movie's data. The implementation uses Hilt for dependency injection and handles background operations via coroutines.
app/src/main/java/com/daavsnts/mymovies/ui/screens/movieDetails · high confidence
Add Movies screen and ViewModel for browsing and searching movies
Users can now view trending, popular, and upcoming movies in a grid or list, and search for specific titles. This change introduces the MoviesScreen composable and the associated MoviesViewModel, which manages the state for movie lists and search results using Hilt dependency injection and coroutine-based API calls.
app/src/main/java/com/daavsnts/mymovies/ui/screens/movies · medium confidence
Add user profile screen with profile picture, background, and username editing
A new UserProfileScreen and its corresponding ViewModel are introduced, enabling users to view and edit their profile picture, background image, and username. The screen displays user analytics such as the favorite movies quantity and provides UI states for loading, success, and error conditions. Users can select new profile and background images via the gallery, with the ViewModel managing state updates and preferences storage.
app/src/main/java/com/daavsnts/mymovies/ui/screens/userProfile · high confidence
Added network layer for fetching movie data
Users can now browse trending, popular, and upcoming movies, as well as search for titles, via a new network implementation. This change introduces an ApiKeyInterceptor to append the API key to requests and a MoviesApiService that defines endpoints for retrieving movie lists and details from The Movie Database (TMDB) using Retrofit.
app/src/main/java/com/daavsnts/mymovies/data/network · high confidence
Initial app structure and Hilt integration for the main activity
The app now includes the primary entry point, MainActivity, which sets up the Compose UI using the MyMoviesTheme and MyMoviesApp components. The activity is annotated with @AndroidEntryPoint, indicating that dependency injection via Hilt has been integrated into the app's core structure.
app/src/main/java/com/daavsnts/mymovies · high confidence
Initial project setup with Gradle wrapper and Android configuration
The repository now includes the Gradle wrapper scripts (gradlew, gradlew.bat) and a .gitignore file to exclude local build artifacts and IDE settings. A local.properties file has been added to store the Android SDK path and API key, with instructions in the README for developers to configure their local environment.
(repo-wide) · high confidence
Introduce custom color palette, typography, and theme configuration
The app's UI theme is now defined by a new set of custom colors (including MyWhite, MyGreen, MyRed, MyYellow, MyBlack, MyNight, MyDarkGrey, and MyLightGray) and a dedicated Google Sans font family. These are applied via a new MyMoviesTheme composable that configures Material3 color schemes for both light and dark modes, sets the status bar color to match the surface color, and applies the custom typography across headlines and body text.
app/src/main/java/com/daavsnts/mymovies/ui/theme · high confidence
Introduces local storage for favorite movies and internal file management
The app now persists favorite movies in a local Room database, exposing methods to retrieve all favorite movie IDs, count favorites, and check if a movie is marked as favorite. Additionally, a new InternalDirectoryManager is added to handle copying files to the app's internal directory, supporting the storage of user profile images and backgrounds.
app/src/main/java/com/daavsnts/mymovies/data/local · medium confidence
New UI components for movie display and error states
The app introduces a suite of new Composable components in the UI layer to handle movie listings, search, and loading states. This includes a reusable ErrorMessage component for displaying error states, a MissingPoster placeholder for failed image loads, and a CircularProgressBar for displaying vote averages. The existing MovieCard component has been updated to support Loading and Error states via new LoadingMovieCard and ErrorMovieCard composables. Additionally, a SearchBar composable has been added for user input, and the MoviesList and MoviesGrid components now support displaying lists and grids of movies with proper loading and error handling.
app/src/main/java/com/daavsnts/mymovies/ui/screens/composables · high confidence
Behavioural changes
Initial project scaffolding and build configuration
The app module now includes a .gitignore file to exclude build artifacts, a proguard-rules.pro file for code obfuscation configuration, and a gradle-wrapper.properties file that specifies Gradle 8.0 as the build tool version.
app, gradle · high confidence
Introduce Hilt-based dependency injection for core app services
The app now uses Hilt for dependency injection, replacing the previous manual approach. A new AppModule provides key services including the MoviesApiService (configured with an API key interceptor), the NetworkMoviesRepository, and the UserRepository (wrapping local room and DataStore preferences). The MyMoviesApplication class is annotated with @HiltAndroidApp to enable Hilt's code generation.
app/src/main/java/com/daavsnts/mymovies/di · high confidence
Introduce MyMoviesApp with animated navigation and bottom bar
The app now features a new root composable, MyMoviesApp, which integrates a bottom navigation bar and animated navigation graph. This change replaces the previous Surface-based layout with a Scaffold containing a Box for content, utilizing the Accompanist library for animated navigation transitions.
app/src/main/java/com/daavsnts/mymovies/ui · high confidence
Introduced new repository interfaces and data models for movies and user preferences
The application now defines explicit domain interfaces for fetching movie data (trending, popular, upcoming, details, and search) and managing user-specific state (favorite movies and app preferences). These new interfaces are implemented by local and network repository classes that handle data transformation, such as formatting release dates and constructing image URLs, providing a cleaner separation between the domain layer and data sources.
app/src/main/java/com/daavsnts/mymovies/data/repository, app/src/main/java/com/daavsnts/mymovies/domain · high confidence
Introduces ScreenUiState and UI utility functions
The app now uses a sealed interface \ScreenUiState\ to manage screen states, supporting \Success\, \Loading\, and \Error\ (with an optional message) outcomes. Additionally, a new \Utils.kt\ file provides helper functions for image loading and a Compose \shimmerEffect\ modifier for UI animations.
app/src/main/java/com/daavsnts/mymovies/ui/screens · medium confidence
Introduces nested navigation with animated transitions for Movies and Favorites sections
The app now supports nested navigation within the Movies and Favorites screens, allowing users to drill down into movie details and back up seamlessly. This change introduces slide-in and slide-out animation transitions for these nested routes, providing a smoother visual experience when navigating between lists and detail views.
app/src/main/java/com/daavsnts/mymovies/ui/navigation · medium confidence
Test coverage
Added comprehensive Android instrumented tests for core app components; Added unit tests for the MoviesApiService.
Dependencies
Initial project setup with Android, Compose, and Hilt dependencies
The project has been initialized with a new Gradle build configuration, establishing the foundation for an Android application using Kotlin and Jetpack Compose. The setup includes core AndroidX libraries, Jetpack Compose BOM, and specific dependencies for state management (Hilt, ViewModel), networking (Retrofit, Gson, Kotlinx Serialization), local storage (Room, DataStore), image loading (Coil), and UI enhancements (Accompanist, Material Icons). This establishes the technical baseline for the app's architecture.
(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 49 → 46 (-3.5)
- Rubric changed (rubric-2026.08.19 → rubric-2026.09.15) — scores are not directly comparable.
Lenses
- Code Health 98 → 98 (-0.7)
- Architecture 100 → 95 (-5.0)
- Maturity 38 → 38 (+0.0)
- Readiness 24 → 24 (+0.0)
- Security 100 → 100 (+0.0)
- Domain Modelling 100 → 77 (-22.9)
Resolved (10)
- Coverage not included — suite not readable by the collector
- Dependency hygiene not measured — dependency manifest found but not parsed for hygiene
- Duplicated block (13 lines × 2) (app/src/main/java/com/daavsnts/mymovies/ui/screens/movieDetails/MovieDetailsScreen.kt)
- Duplicated block (15 lines × 2) (app/src/main/java/com/daavsnts/mymovies/ui/navigation/NavGraph.kt)
- Duplicated block (21 lines × 2) (app/src/main/java/com/daavsnts/mymovies/ui/navigation/NavGraph.kt)
- Duplicated block (7 lines × 2) (app/src/main/java/com/daavsnts/mymovies/data/repository/NetworkMoviesRepository.kt)
- No exposed public API
- Test reliability not included
- The installation guide links only to an external codelab and does not show how to build/run locally. (README.md)
- single-maintainer — knowledge-concentration (bus factor) risk
New (10)
- 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 (14 lines × 2) (app/src/main/java/com/daavsnts/mymovies/ui/navigation/NavGraph.kt)
- Duplicated block (14 lines × 2) (app/src/main/java/com/daavsnts/mymovies/ui/screens/movieDetails/MovieDetailsScreen.kt)
- Duplicated block (32 lines × 2) (app/src/main/java/com/daavsnts/mymovies/ui/navigation/NavGraph.kt)
- Duplicated block (7 lines × 2) (app/src/main/java/com/daavsnts/mymovies/data/repository/NetworkMoviesRepository.kt)
- MethodTooLong: NavGraphKt.FavoriteScreenGraph (app/src/main/java/com/daavsnts/mymovies/ui/navigation/NavGraph.kt)
- MethodTooLong: NavGraphKt.MoviesScreenGraph (app/src/main/java/com/daavsnts/mymovies/ui/navigation/NavGraph.kt)
- No ADRs found
Written by watchdog.canine.dev from the codebase's own history, inside the signed delivery this page is composed from.
Survey your own repository
daavsnts/my-movies-android 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 cc78b816061cf6a685511cd736c0694b0232345d — 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.