feat(player): Material Extended (V9) theme, dynamic majority-color transitions, thread safety, download & backup updates#1069
Open
IIXII-L192 wants to merge 4 commits into
Conversation
… color transitions, playback thread safety, and navigation layout
…cel, add expandable download manager and fix player thread safety
IIXII-L192
force-pushed
the
feat/v9-player-theme-and-ui-enhancements
branch
from
July 23, 2026 12:51
8dfdee8 to
c4207fb
Compare
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Description
This PR introduces comprehensive UI, animation, color extraction, theme coordination, thread-safety, navigation bar layout, download management, backup recovery, and unified localization settings.
Key Changes & Rationale
1. Material Extended (V9) Player Layout & Controls
V9BottomToggleRow) inPlayerComponents.ktand repositionedV9AnimatedPlaybackControlsat the bottom of the player container.aspectRatio(1f)withRoundedCornerShape(36.dp)while scaling dynamically into remaining vertical space.R.drawable.favorite/R.drawable.favorite_border).2. Majority-Color Extraction & Smooth Theme Animations
animateColorAsState(tween(800ms))acrossdynamicBgColor,dynamicAccentColor,dynamicTextColor, anddynamicIconButtonColor. Color values crossfade smoothly during song switches instead of jumping instantly.LaunchedEffectinPlayer.kttomediaMetadata?.thumbnailUrlalongside media ID, ensuring theme colors update automatically when tracks auto-advance.useDarkTheme:value = 0.96f) paired with high-contrast dark text (value = 0.08f).value = 0.08f) paired with off-white text (value = 0.96f).3. V7 Immersive Player Color Extractor Refinement
PlayerColorExtractor.ktto usepalette.dominantSwatchdirectly instead of generic weighted swatches (fixing incorrect tint selections such as burgundy vs. teal).v7BackdropToneby a subtle 5% (from1.22fto1.27f) for richer background aesthetics.4. Playback Service Thread-Safety
player.currentPositionand metadata properties on the main application thread before performing database queries or launching background coroutine scopes. This fixesjava.lang.IllegalStateException: Player is accessed on the wrong threadcrashes during media transitions and timeline/position discontinuities (e.g. ListenBrainz scrobbling & Together online session syncs).5. Navigation Bar & System Theme Fixes
padding(vertical = 8.dp)from the inner navigation items container inFloatingNavigationToolbar.kt, giving item buttons the full78.dpheight so active tab indicator pills render without clipping at the top.android:configChanges="uiMode"toMainActivityinAndroidManifest.xmlso system dark/light theme switches recompose in-place instead of destroying and recreating the Activity.6. Auto-Redownload on Backup Restore
downloadedSongsList()query and registered aDOWNLOADScategory in database backup schemas.MainActivity.ktchecking for aRedownloadOnRestoreKeypreference. If active, it automatically queues missing downloaded tracks viaDownloadService.sendAddDownload.7. Playlist Download & Cancel Optimization
8. Expandable Download Manager UI
allcompleted tracks toanycompleted tracks, ensuring partially downloaded collections remain visible.9. Unified App Language Selector Replacement
ar-EGfor Egyptian Arabic) to support automatic regional fallbacks across all Android versions. When disabled, the app falls back to English (en).Upstream vs. Modified Comparison
dev)feat/v9-player-theme-and-ui-enhancements)V9AnimatedPlaybackControlsand 1:1 squircle artworkanimateColorAsStatecrossfades & auto-next updatesuseDarkThemedominantSwatchwith +5% saturation tuningplayer.currentPositiondirectly insideDispatchers.IOcoroutineplayer.currentPositionon Main thread prior to launching coroutinevertical = 8.dppaddinguiModechangeandroid:configChanges="uiMode"Verification
./gradlew assembleGmsMobileUniversalDebugBUILD SUCCESSFULar-EGfor Egyptian Arabic) and English.