github MuwMx/YumaPlayer v1.2.0-Beta.3

latest release: v1.2.0-Beta.4
14 days ago

Changelog v1.2.0-Beta(3)

A major stabilization, playback performance, and architecture update. Focus on playback latency, synchronized lyrics reliability, Spotify/YTM dual-mode library sync, background Canvas video engine, and in-app updates.


✨ Highlights

🔁 Dual-Source Likes & Library Synchronization

  • Independent Source Flags: Migrated database (Room 35 → 36) to track likedYtm and likedSpotify separately. Liking a song on YouTube Music no longer corrupts Spotify library state, and vice versa.
  • Unified Read Semantics: UI hearts and badges reflect union state (likedYtm || likedSpotify), while local lists, filters, and counter badges strictly honor the selected service context.
  • Set-Diff Sync Engine: Reworked background sync using fast set-difference operations and batch lookups. Syncing 1000+ tracks now runs in milliseconds without UI freezes or database lockups.
  • Asymmetric Unliking & Mutex Guards: Single-tap fully unlikes across the active source; added dedicated in-flight sync guards and cooldown timers to prevent rate-limiting.

🎨 Looping Video Canvas Engine (Spotify / Apple)

  • Instant Disk Caching: Canvas videos now download and cache immediately upon track resolution. Local MP4 files take strict priority over network streams, killing replay latency and mobile data waste.
  • ExoPlayer CacheDataSource: Video streaming is now wrapped in a shared MediaCache layer.
  • Zero-Leak Transitions: Switching tracks immediately clears previous canvas artwork and releases the old video player; no old video flashes while the new track loads.
  • Aspect Ratio & Geometry Fix: Fixed horizontal text cropping on modern 20:9 displays. Immersive canvas artwork now scales at full 3:4 aspect ratio with an 80% gradient fade behind seekbars and controls.
  • Pause Synchronization: Fixed background video continuing to play when audio is paused.

🎤 Synchronized Lyrics Engine

  • Generation & Desync Guards: Added atomic generation tokens and media ID verification across all coroutine suspend points. Rapid track skipping will never leave the previous song's lyrics scrolling over new audio.
  • LRC Word-Timing & Mirror Pipeline: Fully restored upstream provider parity for LRCLIB, Kugou, Paxsenix, and BetterLyrics.
  • Clean Fallback Handling: Missing lyrics or LYRICS_NOT_FOUND now reliably clears the screen and ticker instead of freezing previous lines.
  • Removed Mini-Lyrics: Removed the experimental flickering lyrics text from the player controls column.

🔄 In-App Updater & Cast

  • Direct APK Download & Install: Switched in-app installer to the unified OkHttp engine with streaming progress and package-installer intent redirects.
  • FOSS Fallback: On FOSS builds, updates gracefully route to external browser releases.
  • Cast Integration: Restored 3-dot sheet Cast picker on GMS builds with unified YDS button styling.

⚡ Architecture, Network & Monolith Splits

  • Unified Network Layer: Enforced a single shared OkHttp client across all modules (DoH, rotating proxy, proxy authentication, connection pools). Eliminated isolated engine cross-kills.
  • Database DAO Modularization: Fully decomposed the 2500-line monolithic DatabaseDao into 9 focused domain DAOs (SongDao, PlaylistDao, AlbumDao, ArtistDao, etc.) behind a unified database facade.
  • Provider Decoupling: Split monolithic PaxsenixLyrics (5 backends) and BetterLyrics / TTMLParser into focused parsers and internal client delegates without breaking public APIs.
  • YTPlayerUtils & Spotify Split: Extracted player resolution, stream caching, and error mapping from YTPlayerUtils; isolated Spotify GraphQL, library, search, and playlist operations into modular components.
  • AI Content Filter: Ported optional AI content filtering to sanitize automated/AI-generated tracks from recommendations and feeds.

🛠️ Key Bug Fixes & Refinements

  • Player & Sheets: Fixed sheet gesture swallowing, dismiss teleport glitches, and unified modal backdrop blur layers.
  • Storage Settings: Replaced hardcoded paddings and ad-hoc card margins with standard YDS design tokens.
  • Background Playback: Hardened Foreground Service start notifications against Android 16 ForegroundServiceStartNotAllowedException.
  • Haptics: Standardized player, lyrics menu, and dismiss gestures on LocalYumaHaptics.

Don't miss a new YumaPlayer release

NewReleases is sending notifications on new releases.