Making MetroList playback and playlist sync more predictable
Problem
Sync could duplicate playlists and contribute to memory pressure. Crossfade timing also needed to account for playback speed, while some podcasts failed with IO_UNSPECIFIED because of URL validation behavior.
Changes
I moved playlist cleanup ahead of the sync loop to prevent duplicate processing. For crossfade, I scaled trigger timing by playback speed, kept that speed on the secondary player, and used an ExoPlayer PlayerMessage for precise timing on the main looper. For podcasts, I stopped skipping HEAD validation on WEB_REMIX streams and closed the OkHttp response correctly.
Result
Playlist synchronization is less error-prone, crossfade transitions align with playback speed, and validation handles the affected podcast source correctly.
Commits: playlist sync, crossfade timing, podcast playback