- Downloads resolve streams with the user's download format/quality via a
new StreamRequest instead of the streaming settings, and bypass the
playback stream-URL cache in both directions
- Downloads only consider progressive streams; DASH/HLS manifests were
previously saved as-is instead of audio
- NewPipe: map AAC "mp4a.40.x"/"m4a" to the advertised "aac"/"mp4" so real
AAC streams can match (previously the hard-coded aac/mp4 manifests always
won), report each stream's real delivery method, skip streams without a
format or non-URL content
- Fail the download on non-2xx responses, on a range request answered with
a full 200, and on video/* content, with localized reasons, instead of
writing the response body to disk
- Save AAC as .m4a
- Tests for request overrides, manifest exclusion and cache isolation
Downloads
- Show the real download folder: "Current folder: <path> (default)" in
settings instead of the misleading "default music folder", and a
"Saved to <path>" line on the Downloads screen
- Register finished downloads with Android's MediaStore (MediaScanner) so
music players and the Files app see them immediately
- Add tagged logs across the download path to diagnose format/quality
selection: raw NewPipe streams ([Streams]), every selection candidate
with its rank key and fallback warnings ([Resolve]), and per-download
enqueue prefs, resolved stream, HEAD/GET status + content type, segment
responses and written vs expected bytes ([Download])
Connect status
- Mobile Home keeps its Devices / Group Jam / Support icons (Jam now uses
the sound icon) and shows a slim banner only while remote-controlling a
device or in a Jam ("Playing on krtx", "Hosting · 3 listeners")
- Sidebar Devices / Group Jam rows get a live dot and status line
- New ConnectStatusViewModel feeds both
Remote control settings
- Extract "Allow remote control" and "Device name" into shared
remoteControlSettingCards, used by Playback settings and a new
"This device" section on the Devices screen
- Remove the unused "Enable Connect" setting and its strings
- Redesign RemoteControlScreen to match the expanded player: artwork sized
to fit, side-by-side queue panel on wide screens, proper connecting /
disconnected / error states, "Playing on <device>" subtitle
- Seek and volume sliders keep local drag state and only commit on release
(volume throttled while dragging) instead of sending a command per frame
- Redesign DevicesScreen with the settings card components, a connected
device card, error banner and empty state; ViewModels expose one UiState
- Fix tapping an already-connected device doing nothing; reopen its remote
screen instead, and switch devices by disconnecting first
- Fix the controller getting stuck in Connecting after the host denies a
request: Ktor never delivers Close frames to `incoming`, so detect the
close reason after the receive loop ends
- Fix a UI freeze when leaving the devices screen on desktop: run discovery
(and JmDNS's blocking close/resolve) on Dispatchers.IO
- Advertise the LAN address of the default-route interface on desktop;
dns-sd-kt otherwise picks any site-local address, e.g. a Docker bridge