PierfrancescoSoffritti/android-youtube-player
57.2
Adequate · 28 September 2026
5.4k
lines of production code
Kotlin
with Java, JavaScript
2
measurements over time
What this system is
This system is an Android library for integrating YouTube video playback, featuring a core player module that supports playlist management and network recovery. It extends functionality with a custom UI module for standard player controls and a Chromecast module that enables casting video playback to external devices with synchronized state management. The project is structured as a modular AndroidX/Kotlin codebase with sample applications demonstrating local and cast playback scenarios.
How it got here
2016 — Initial setup and modernization
5 changes.
The project was initialized with essential repository infrastructure, including CI, licensing, and documentation. It underwent a significant modernization by migrating to AndroidX, Kotlin, and a modular structure, while removing legacy WebView-based player implementations and updating build tools.
2018–2023 — Chromecast integration and core refactoring
9 changes.
This period focused on restructuring the core library with new player interfaces and playlist support, while introducing a comprehensive Chromecast ecosystem including sender, receiver, and custom UI modules. The sample applications were modernized to demonstrate these capabilities, featuring expanded examples for casting, local playback, and media notifications.
Features
Added notification support for Chromecast sample app
The Chromecast sample app now includes a NotificationManager that displays a persistent media notification while casting. This notification allows users to toggle playback and disconnect from the Chromecast device directly from the status bar, with the video ID displayed as the title when available.
. · high confidence
Initial release of Chromecast YouTube Player Receiver
This change introduces the complete Chromecast receiver application for playing YouTube videos, including the HTML entry point, CSS styling, and the JavaScript logic for managing the YouTube IFrame Player and Cast communication. Users can now cast YouTube videos to their devices, with support for playback controls (play, pause, seek, volume), playback speed adjustment, and playlist management (next/previous video, shuffle, loop). The receiver handles the Cast framework lifecycle, custom message dispatching between sender and receiver, and state synchronization.
chromecast-receiver · high confidence
Initial repository setup with CI, funding, license, and documentation
The repository is initialized with essential project files: a Travis CI configuration for Android builds, a GitHub FUNDING.yml file linking to the maintainer, an MIT LICENSE, and a comprehensive README.md detailing the android-youtube-player library, its usage, and sample apps. Additionally, a .gitignore file is added to exclude build artifacts and IDE settings, and the Gradle wrapper scripts (gradlew and gradlew.bat) are updated to a newer POSIX-compliant version.
(repo-wide) · high confidence
Introduce custom UI module with default player controls and menu
This change introduces the \custom-ui\ module, providing a default implementation of the \PlayerUiController\ interface. It adds a complete set of player controls including a seek bar with time display, play/pause, fullscreen toggle, and a context menu, along with utilities for fading controls and formatting time. This module serves as the reference UI layer for the YouTube player, allowing users to have a ready-to-use, customizable player interface out of the box.
custom-ui · high confidence
Introduction of the chromecast-sender module
A new chromecast-sender module has been added to the project, providing the infrastructure for sending YouTube video playback commands to a Chromecast receiver. This module introduces a full-duplex communication channel using a custom namespace, manages Cast session lifecycle events (connecting, connected, disconnected), and dispatches state updates (such as ready, state changes, and playback quality) from the receiver back to the local YouTube player bridge. It also includes utilities for checking Google Play Services availability and parsing JSON messages exchanged between the sender and receiver.
chromecast-sender · high confidence
Removals
Removal of legacy MainActivity sample entry point
The original MainActivity.java file, which served as the primary sample entry point for initializing and managing the YouTubePlayer, has been removed from the codebase. This change eliminates the legacy implementation that handled player initialization, lifecycle management, and orientation-based layout adjustments directly within this single activity, reflecting a broader refactoring of the sample application's structure.
sample/src/main/java · high confidence
Removal of legacy WebView-based YouTube player implementation
The legacy YouTube player implementation, which relied on a WebView, a custom HTML5 player template, and a Java-to-JavaScript bridge, has been completely removed from the library. This change eliminates the \YouTubePlayer\ WebView class, the \InnerYouTubePlayerListener\ helper, the \YouTubePlayerBridge\ for communication, the \YouTubePlayerParams\ configuration object, and the embedded \player.html\ resource. Users relying on this specific WebView-based playback method will no longer have access to it and must migrate to the library's current player architecture.
YouTubePlayer/src/main/java · high confidence
Behavioural changes
1 commit (0 fixes) modifying chromecast-sender-sample-app/apk, core-sample-app/apk
A change to existing behaviour in chromecast-sender-sample-app/apk, core-sample-app/apk — 1 commit, 2 files.
chromecast-sender-sample-app/apk, core-sample-app/apk · low confidence · unverified
Chromecast sample app restructured with new example activities and UI components
The chromecast-sender-sample-app has been reorganized to provide a cleaner entry point and distinct examples for different casting scenarios. A new MainActivity now serves as the launcher, directing users to a template-based menu that lists four specific examples: Basic Example, Player Controls Example, Notification Example, and Local Player Init Example. The app now includes dedicated activities for each scenario, such as BasicExampleActivity for simple casting, PlayerControlsExample for custom UI integration, NotificationExampleActivity for media notification support, and LocalPlayerInitExampleActivity for handling both local and cast playback. Supporting these examples are new utility classes like MediaRouteButtonUtils for managing the Cast button, SimpleChromeCastUiController for custom UI state management, and NotificationManager for handling media notifications. The app also introduces a CastOptionsProvider for configuring the Cast framework and uses a VideoIdsProvider to cycle through sample videos.
chromecast-sender-sample-app/src · high confidence
Core library restructured with new player interfaces and playlist support
The core library has been refactored to introduce a new \YouTubePlayer\ interface and \PlayerConstants\ enums, replacing the previous implementation. This change adds support for playlist controls (next, previous, shuffle, loop) and allows querying the mute state asynchronously. The player now uses a \LegacyYouTubePlayerView\ internally and includes a \NetworkObserver\ to automatically resume playback when connectivity is restored after an HTML5 player error. Additionally, \IFramePlayerOptions\ now supports playlist configuration via \list\ and \listType\ parameters, and the default origin is set to the app's package name.
core · high confidence
Sample app restructured with new template and expanded examples
The core sample application has been reorganized to use a new \SampleAppTemplateActivity\ for the main menu, which now lists a broader set of demonstration activities including Chromecast, Compose, and Picture-in-Picture. The codebase has been modernized by migrating the Complete and Compose examples to Kotlin, and the Chromecast integration has been expanded with a dedicated example activity, a \CastOptionsProvider\, and a \YouTubePlayersManager\ to handle synchronization between local and cast playback.
core-sample-app/src · high confidence
Updated ProGuard rules and added .gitignore for core-sample-app
The core-sample-app now includes a .gitignore file to exclude build artifacts and has moved its ProGuard configuration to a dedicated proguard-rules.pro file. This configuration has been expanded to suppress warnings and preserve classes related to Google API clients, HTTP clients, and Play Services, ensuring smoother builds and runtime behavior for these dependencies.
core-sample-app · high confidence
Dependencies
Gradle wrapper upgraded to version 8.14.2
The Gradle wrapper has been updated from version 2.14.1 to 8.14.2, which will cause builds to use the newer Gradle distribution. The configuration also includes a network timeout setting of 10000ms and enables distribution URL validation to ensure the integrity of the downloaded Gradle binary.
gradle · high confidence
Migrate to AndroidX, Kotlin, and modern Gradle with new modular structure
The project has been restructured into five modules (core, custom-ui, chromecast-sender, and their respective sample apps), replacing the legacy YouTubePlayer and sample modules. This update migrates the codebase to AndroidX, Kotlin 2.1.0, and Gradle Plugin 8.10.1, raising the compile SDK to 36 and minimum SDK to 21. It introduces Jetpack Compose support in the core sample app, integrates the Chromecast sender library, and configures publishing to Maven Central via the Gradle Nexus plugin.
(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 55 → 57 (+2.4)
- Rubric changed (rubric-2026.09.8 → rubric-2026.09.16) — scores are not directly comparable.
Lenses
- Code Health 68 → 70 (+1.8)
- Architecture 100 → 98 (-2.3)
- Maturity 47 → 47 (+0.0)
- Readiness 50 → 55 (+5.2)
- Security 67 → 67 (+0.0)
- Performance 100 (new)
Resolved (5)
- Concentrated knowledge decay
- Documentation: no architecture or design documentation (README.md)
- Documentation: no installation or build instructions (README.md)
- Documentation: no licence statement (README.md)
- Documentation: no usage examples (README.md)
New (7)
- Dormant codebase
- Duplicated block (10 lines × 3) (core-sample-app/src/main/java/com/pierfrancescosoffritti/androidyoutubeplayer/core/sampleapp/examples/defaultCustomUiExample/DefaultCustomUiExampleActivity.java)
- Duplicated block (10 lines × 7) (core-sample-app/src/main/java/com/pierfrancescosoffritti/androidyoutubeplayer/core/sampleapp/examples/customUiExample/CustomUiActivity.java)
- Duplicated block (8 lines × 3) (core-sample-app/src/main/java/com/pierfrancescosoffritti/androidyoutubeplayer/core/sampleapp/examples/defaultCustomUiExample/DefaultCustomUiExampleActivity.java)
- Low cohesion: DefaultPlayerUiController (LCOM4 6) (custom-ui/src/main/java/com/pierfrancescosoffritti/androidyoutubeplayer/core/customui/DefaultPlayerUiController.kt)
- No ADRs found
- Off the main sequence: :core
Architecture
- Containers 0 added · 0 removed · contexts 4 added · 1 removed · edges 5 added · 0 removed
Added bounded contexts (4)
- chromecast-sender
- chromecast-sender-sample-app
- core
- core-sample-app
Removed bounded contexts (1)
- .
Added dependency edges (5)
- chromecast-sender → core
- chromecast-sender-sample-app → chromecast-sender
- chromecast-sender-sample-app → core
- core-sample-app → core
- custom-ui → core
Written by watchdog.canine.dev from the codebase's own history, inside the signed delivery this page is composed from.
Survey your own repository
PierfrancescoSoffritti/android-youtube-player 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 28 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 60efc356fa791e05e391a971d8a755f2b227f098 — the exact code this score is about.
- Scored under rubric-2026.09.16 — the same rubric and the same method as every other entry in this index.
- Measured by watchdog.canine.dev using codehealth-analyzer preprod-2d9048c36d26.