PopPsyA/Mediateka
50.7
Adequate · 21 September 2026
7.8k
lines of production code
Java
primary language
4
measurements over time
What this system is
This is an Android application for browsing and managing information about cinemas and actors. It provides features for searching and viewing details of movies and celebrities, including image galleries and popularity metrics. The system supports user preferences such as favorite cinemas, notification settings, and local data persistence. It also includes a settings screen and robust testing coverage for its presentation and domain layers.
Features
Added Settings screen with AppCompat support
A new Settings screen has been added to the app. It uses a custom AppCompatPreferenceActivity to provide consistent styling and behavior across different Android versions, and includes a navigation up button to return to the previous screen.
app/src/main/java/com/ru/devit/mediateka/presentation/settings · high confidence
Added ability to save and manage a list of favorite cinemas
Users can now add cinemas to a 'favorites' list, which is persisted in the local database. The application provides domain logic (GetFavouriteListCinema) and repository methods to save, remove, and retrieve this list. The UI is supported by an abstract list adapter and touch helpers that manage the state of these favorite items.
. · high confidence
Added image retrieval endpoints for cinema and actor details
The network layer now includes new API methods to fetch image collections for both cinema and actor details. Specifically, getImagesForCinema retrieves images for a given movie ID, and getImagesForActor retrieves images for a given person ID, enabling the UI to display visual content in the respective detail screens.
app/src/main/java/com/ru/devit/mediateka/data/datasource/network · high confidence
Added notification, connectivity, and preferences management components
The app introduces three new data-layer components to support new user-facing capabilities. Users can now receive cinema notifications with sound and vibration effects, with the option to toggle sound in settings. The app also monitors internet connectivity and notifies the main activity of connection changes. Additionally, the app now persists the user's cinema sorting position preference.
app/src/main/java/com/ru/devit/mediateka/data · high confidence
Adds dependency injection support for the cinema favorites feature
The app now supports adding cinemas to a favorites list. This is enabled by a new \CinemaFavouriteListComponent\ and \CinemaFavouriteListModule\ that wire up the \FavouriteListCinemaActivity\ and \FavouriteListCinemaPresenter\. The \CinemaDetailModule\ has been updated to inject \GetFavouriteListCinema\ into \CinemaDetailPresenter\, allowing the cinema detail screen to interact with the favorites functionality. Additionally, the \CinemaComponent\ has been extended to include the new favorite list subcomponent.
app/src/main/java/com/ru/devit/mediateka/di/cinema · high confidence
Enhanced Cinema Detail screen with favorites, scheduling, and improved navigation
Users can now add cinemas to their favorites list and schedule showtimes directly from the Cinema Detail screen. The interface includes a floating action button menu for quick actions, a poster slider for browsing backdrops, and a clickable description that expands to show long text. Additionally, the presenter and fragment have been refactored to survive orientation changes, and the UI has been updated to use a singleton image path creator instead of hardcoded constants.
app/src/main/java/com/ru/devit/mediateka/presentation/cinemadetail · high confidence
Enhanced actor detail view with photo gallery and sharing options
The Actor Detail screen now includes a photo gallery (PosterSlider) and allows users to share the actor's profile link. Users can tap the actor's avatar or photos to view a full-screen slider of their posters with a transition animation. Additionally, a share button has been added to the menu, enabling users to share the actor's TMDB profile URL via the system share sheet.
app/src/main/java/com/ru/devit/mediateka/presentation/actordetail · high confidence
Initial project setup and documentation
The repository was initialized with essential project files including a Travis CI configuration (.travis.yml) for automated testing, an Apache 2.0 LICENSE, a Privacy Policy, and a comprehensive README.md detailing the app's features, architecture, and technology stack. The .gitignore file was updated to exclude build artifacts and IDE-specific files, and the gradlew script was made executable.
(repo-wide) · high confidence
Introduced common presentation interfaces and utilities
Added several new interfaces and classes to the common presentation layer to support UI interactions and media handling. This includes click listeners for actors and cinemas, a tab selection listener, a page scrolled listener, a cinema tab selector view interface, a holder renderer interface, and a PhotoLoader class for saving images to the device's gallery.
app/src/main/java/com/ru/devit/mediateka/presentation/common · high confidence
New Poster Slider for browsing image collections
Users can now view a full-screen, swipeable gallery of posters or backdrops via a new PosterSliderActivity. The slider displays a page counter (e.g., '1/5') and allows users to save individual images to their device's gallery folder. Image quality is dynamically adjusted based on user preferences for background images, while regular posters use a fixed quality setting.
app/src/main/java/com/ru/devit/mediateka/presentation/posterslider · high confidence
New custom UI widgets and refactored header logic
Added three new custom widgets: a date and time picker, an indicator view for page navigation, and a collapsible text view with expand/collapse animations. Also introduced a hideable floating action button behavior. In the Cinema header, replaced hardcoded string formatting with FormatterUtils methods that accept context for localization.
app/src/main/java/com/ru/devit/mediateka/presentation/widget · high confidence
Behavioural changes
Add cinema sorting and swipe-to-dismiss to the favourite list
Users can now sort their favourite cinema list by selecting a sorting option from a new dialog, with the chosen preference saved for future sessions. The list also supports swipe gestures to remove cinemas, with an undo option and a clear-all action available via the menu. An empty state message is displayed when the list is empty.
app/src/main/java/com/ru/devit/mediateka/presentation/favouritelistcinema · high confidence
Added clear button to search field
Users can now clear the search input by tapping a new close icon that appears on the right side of the search field. The clear button is hidden when the field is empty and appears as the user types. Additionally, the search header dynamically changes color to match the selected tab (cinemas or actors).
app/src/main/java/com/ru/devit/mediateka/presentation/search · high confidence
Added database type converter and network connectivity monitoring
The app now supports storing integer arrays in the local database via a new IntArrayConverter, and the application monitors internet connectivity status to handle network state changes.
app/src/main/java/com/ru/devit/mediateka · medium confidence
Added network connectivity monitoring and scroll-to-top functionality
The main activity now listens for internet connection changes via a new SyncConnectionListener interface and a corresponding receiver, allowing the app to react to network status. Additionally, a Floating Action Button (FAB) has been added to the main activity to allow users to scroll up the content.
app/src/main/java/com/ru/devit/mediateka/presentation/main · medium confidence
Added status bar color customization and title management methods
The base activity now supports dynamic status bar color changes via a new \changeStatusBarColor\ method, allowing developers to set the status bar color for activities extending this base. Additionally, title management for the collapsing toolbar has been abstracted into a \setCollapsingToolbarTitle\ method, replacing direct calls to \getCollapsingToolbarLayout().setTitle()\. These changes provide a more consistent API for UI customization in the app's base activity.
app/src/main/java/com/ru/devit/mediateka/presentation/base · medium confidence
Cinema list now supports switching between large and small item views
Users can now toggle the cinema list display between a standard large-item layout and a compact single-row layout. This is achieved via a new menu option that switches the underlying adapter, allowing for a more flexible browsing experience. The change also introduces a new enum-based tab system (CinemaTab) and a position picker to manage different cinema lists (Popular, Top Rated, Upcoming) more cleanly.
app/src/main/java/com/ru/devit/mediateka/presentation/cinemalist · high confidence
Domain layer refactoring and new repository methods
The application's domain layer has been reorganized to better separate concerns. Repository interfaces (Actor, Cinema) have been moved from the data layer to the domain layer, with the ActorRepository gaining a new method to fetch popular actors. A new SystemTimeCalculator interface and an Actions utility class have been added to the domain layer to centralize time calculation and action handling logic. Additionally, the UseCase base class now enforces immutability on its CompositeDisposable and provides a helper method for applying scheduler transformations to Completable streams.
app/src/main/java/com/ru/devit/mediateka/domain · medium confidence
Enforced immutability of the application context in dependency injection
The application context stored in the dependency injection manager is now declared as a final field. This change ensures that the context reference cannot be reassigned, preventing accidental modification of the dependency injection state and reinforcing the stability of the app's core components.
app/src/main/java/com/ru/devit/mediateka/di · high confidence
Enhanced database queries and schema for actors and cinemas
The database layer was refactored to support new data retrieval and storage capabilities. The main database class was renamed from AppDatabase to MediatekaDatabase, and type converters were added to handle integer arrays. For actors, a new query was introduced to retrieve a list of popular actors sorted by popularity, and a method to search for actors by name was added. For cinemas, the system now supports marking and retrieving favorite cinemas, and the query for upcoming cinemas was updated to filter by release year. Additionally, the conflict resolution strategy for inserting cinema data was changed from IGNORE to ROLLBACK.
app/src/main/java/com/ru/devit/mediateka/data/datasource/db · medium confidence
Expanded network models to support image galleries and actor popularity
The app now supports displaying image galleries (posters, profiles, backdrops) for both cinema and actor details, as well as displaying actor popularity scores. This is achieved by introducing new network models (ImagesResponse, Poster) and updating existing ones (ActorDetailResponse, ActorNetwork, CinemaDetailResponse) to include image collections and popularity metrics.
app/src/main/java/com/ru/devit/mediateka/models/network · high confidence
Improved actor list responsiveness and decoupled view logic
The actor list now displays a progress bar to indicate loading states, improving perceived responsiveness. The view layer has been decoupled from the presenter by replacing direct presenter dependencies with the OnActorClickListener interface, and the adapter initialization was updated to use a lambda-based click handler. Additionally, the presenter was refactored to use a shared Actions object for lifecycle management and the view interface now includes a clearAdapter method to reset the list state.
app/src/main/java/com/ru/devit/mediateka/presentation/actorlist · medium confidence
Improved search responsiveness and data handling
The cinema search experience is now more responsive, with the debounce delay reduced from 1000ms to 800ms. The search logic has been refactored to use a shared 'Actions' component for managing UI states like loading and clearing the adapter. Additionally, a new method was added to the 'GetCinemaById' use case to check if a retrieved cinema's time is in the future.
app/src/main/java/com/ru/devit/mediateka/domain/cinemausecases · high confidence
Improved search responsiveness and state management for actor queries
The actor search functionality now provides immediate visual feedback during typing by integrating an Actions interface to manage UI states such as loading indicators and adapter clearing. The search query processing has been updated to debounce for 800ms and includes logic to track data loading status, ensuring the UI updates correctly as the user types.
app/src/main/java/com/ru/devit/mediateka/domain/actorusecases · medium confidence
Popular Actors screen refactored with transition animations and navigation support
The Popular Actors screen has been refactored to improve user experience. A shared element transition animation is now applied when navigating to an actor's detail page, providing a smoother visual flow. Additionally, the activity now includes a navigation up button in the toolbar, allowing users to easily return to the previous screen.
app/src/main/java/com/ru/devit/mediateka/presentation/popularactors · high confidence
Refactored data mappers to improve null-safety and structure
The mappers in the models/mapper package were refactored to improve code structure and null-safety. Key changes include replacing hardcoded string constants with utility methods like defaultValueIfNull, adding null checks for potentially null network responses (e.g., tagged images, credits), and extracting complex mapping logic into dedicated private methods (e.g., setActors, setPosters). Additionally, the codebase now handles missing data more gracefully by returning empty lists or default values instead of throwing exceptions or leaving fields null.
app/src/main/java/com/ru/devit/mediateka/models/mapper · high confidence
Refactored image URL generation and localized genre/duration formatting
Replaced the hardcoded image path constants with a new Kotlin object, UrlImagePathCreator, which generates URLs for 1280p, 780p, and 185p image qualities. Updated FormatterUtils to use context-based string resources for genre names and duration formatting, replacing direct string formatting and hardcoded defaults with localized strings and a shared DEFAULT\_VALUE constant. Added a new reveal animation utility in AnimUtils.
app/src/main/java/com/ru/devit/mediateka/utils · high confidence
Refactors SmallCinemaListAdapter to use interface-based click handling and header control
The SmallCinemaListAdapter has been refactored to remove direct dependencies on the presenter, instead accepting an OnCinemaClickListener interface and context parameters. This allows the list adapter to be more flexible, supporting optional header display and background visibility. The SmallCinemasFragment has been updated to pass the necessary context and click listener to the adapter, and the SmallCinemasPresenter now uses a dedicated subscriber for handling search results and loading states.
app/src/main/java/com/ru/devit/mediateka/presentation/smallcinemalist · medium confidence
Support for GridLayoutManager in pagination scrolling
The pagination scroll listener now supports GridLayoutManager in addition to LinearLayoutManager, allowing smooth scrolling and page loading to work correctly with grid-based layouts. An OFFSET constant (7) is used to trigger loading more items slightly before the end of the list, and the previous isLoading() method was removed.
app/src/main/java/com/ru/devit/mediateka/utils/pagination · high confidence
Updated Gradle wrapper to version 5.6.4
The Gradle wrapper has been upgraded from version 4.1 to 5.6.4, ensuring that the project uses a more recent version of the build tool.
gradle · high confidence
Updated dependency injection configuration for new activities and shared preferences
The app's dependency injection setup has been updated to support new UI components and data management. Specifically, the Dagger graph now provides and injects SharedPreferenceManager as a singleton, enabling persistent local storage access. Additionally, the AppComponent has been extended to inject dependencies into MainActivity and PosterSliderActivity, ensuring these screens can access required services and managers through the DI container.
app/src/main/java/com/ru/devit/mediateka/di/application · high confidence
Updated dependency injection to use domain-layer repositories
The actor dependency injection modules (ActorModule, ActorListModule, ActorDetailModule) have been refactored to depend on the domain-layer ActorRepository interface rather than the data-layer implementation. This change aligns the presentation layer with the domain model, ensuring that the ActorComponent can inject dependencies into the new PopularActorsActivity.
app/src/main/java/com/ru/devit/mediateka/di/actor · high confidence
Updated model classes to support multiple media URLs and new properties
The Actor and Cinema model classes have been refactored to support multiple image URLs instead of single paths. Specifically, the Actor model now includes lists for posters and background images, plus a popularity score, while the Cinema model now holds lists for poster and backdrop URLs and an array of genre IDs. Additionally, a new DateAndTimeInfo model class was added to handle date and time data.
app/src/main/java/com/ru/devit/mediateka/models/model · high confidence
Test coverage
Added base UnitTest class for unit testing; Added unit tests for Actor Detail presentation layer; Added unit tests for ActorsPresenter; Added unit tests for CinemaDetailPresenter and CinemaDetailContentPresenter; Added unit tests for CinemaLocalRepository; Added unit tests for FavouriteListCinemaPresenter; Added unit tests for MainPresenter; Added unit tests for PosterSliderPresenter; Added unit tests for SearchPresenter; Added unit tests for SmallCinemasPresenter; Added unit tests for actor and cinema mappers.
Dependencies
Updated Android build configuration and library dependencies
The Android application has been upgraded to compile against Android SDK 28 and build tools 28.0.3, with the target SDK also raised to 28. Key dependencies have been updated: Room is upgraded from 1.0.0 to 1.1.1, the Android Support Library from 27.0.1 to 28.0.0, RxJava2 from 2.1.5 to 2.1.14, and Dagger from 2.13 to 2.16. Additionally, Kotlin support is now enabled with kotlin-stdlib-jdk7, and the Gradle build script has been updated to version 3.6.3 with Kotlin 1.3.61.
(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 → 51 (-5.2)
- Rubric changed (rubric-2026.08.19 → rubric-2026.09.15) — scores are not directly comparable.
Lenses
- Code Health 94 → 97 (+2.2)
- Architecture 99 → 95 (-3.5)
- Maturity 31 → 31 (+0.0)
- Readiness 57 → 39 (-18.1)
- Security 95 → 95 (+0.0)
- Domain Modelling 100 → 91 (-8.5)
Resolved (10)
- Change coupling: CinemaViewHolder.java ↔ SmallCinemaViewHolder.java (app/src/main/java/com/ru/devit/mediateka/presentation/cinemalist/CinemaViewHolder.java)
- 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/ru/devit/mediateka/domain/actorusecases/GetActorsByQuery.java)
- Duplicated block (6 lines × 2) (app/src/main/java/com/ru/devit/mediateka/models/mapper/ActorDetailEntityToActor.java)
- Duplicated block (6 lines × 2) (app/src/main/java/com/ru/devit/mediateka/models/mapper/ActorDetailEntityToActor.java)
- Duplicated block (6 lines × 2) (app/src/main/java/com/ru/devit/mediateka/models/mapper/ActorDetailEntityToActor.java)
- No exposed public API
- Test reliability not included
- dormant codebase — no living knowledge left to concentrate
New (16)
- Dependency hygiene PARTLY measured — Maven/Gradle declarations read, no dependency graph resolved
- Documentation: no contributor guidance (README.md)
- Documentation: no installation or build instructions (README.md)
- Documentation: no usage examples (README.md)
- Duplicated block (15 lines × 2) (app/src/main/java/com/ru/devit/mediateka/models/mapper/ActorDetailEntityToActor.java)
- Duplicated block (18 lines × 2) (app/src/main/java/com/ru/devit/mediateka/domain/actorusecases/GetActorsByQuery.java)
- Duplicated block (5 lines × 2) (app/src/main/java/com/ru/devit/mediateka/models/mapper/ActorDetailEntityToActor.java)
- Duplicated block (6 lines × 2) (app/src/main/java/com/ru/devit/mediateka/models/mapper/ActorDetailEntityToActor.java)
- Duplicated block (6 lines × 3) (app/src/main/java/com/ru/devit/mediateka/models/mapper/ActorDetailEntityToActor.java)
- Duplicated block (8 lines × 2) (app/src/main/java/com/ru/devit/mediateka/presentation/cinemadetail/CinemaDetailContentFragment.java)
- Leaked secret: high-entropy-secret (gradle.properties)
- Members sharing a duplicated core (4 members, 50+ identical tokens) (app/src/main/java/com/ru/devit/mediateka/models/mapper/ActorDetailEntityToActor.java)
- No ADRs found
- No assertions: shouldUndoWhenUndoPressed (app/src/test/java/com/ru/devit/mediateka/presentation/favouritelistcinema/FavouriteListCinemaPresenterTest.java)
- No dependency advisory monitoring
- TodoComment (app/src/main/java/com/ru/devit/mediateka/data/repository/actor/ActorLocalRepository.java)
Architecture
- Containers 0 added · 0 removed · contexts 1 added · 1 removed · edges 0 added · 0 removed
Added bounded contexts (1)
- app
Removed bounded contexts (1)
- .
Written by watchdog.canine.dev from the codebase's own history, inside the signed delivery this page is composed from.
Survey your own repository
PopPsyA/Mediateka 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 917df3c0b86daef73a67a3a6e73401860d073114 — 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.