Skip to content
CAI
Software that uses CAICheck a score

PierfrancescoSoffritti/android-youtube-player

57.2

Adequate · 28 September 2026

5.4k

lines of production code

Kotlin

with Java, JavaScript

2

measurements over time

CAI band scale
CAI trend line
CAI lens gauges

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.