android auto: the card says what the engine is doing, and a skip no longer leaves the old song playing
Reaching a row whose bytes are not on the phone read as the player going to the next track and freezing — the title changed, the position sat at 0:00, nothing said why — and after a skip the old song kept sounding under the new title until the fetch delivered, because start_at notified the card and spawned the resolver without stopping the engine (only the natural boundary was silent). The engine stops before it looks now: silence, the title, a spinner. The card is built buffering from its first frame (headlessTrack carries `resolving`), and the engine narrates on the artist line — "Signing in to Soulseek…", "Searching Soulseek…", "45 copies · connecting to <peer>…", "Streaming from <peer>…", "<peer> isn't sending · trying another copy…", "No copy found · trying the next track…" — through headlessState, kept in NowPlayingArgs.status and shown by SoulStreamPlayer while buffering; the engine's own Playing event clears it. The first tap's reply builds a fresh state after the JNI call the engine narrated inside, so it carries the line over rather than showing the artist for a beat. Verified on the head unit with a three-row test playlist: a cold tap reads "Searching Soulseek…" at 0:00 and plays at 0:14 with its cover; a skip into a row not fetched yet reads "Searching Soulseek…", then "Streaming from nouvellevag0…", then the artist again at 0:07, with the prefetch fetching the row after it.
This commit is contained in:
1 parent
9f7661afab
commit
bb7f1f1b2d
5 files changed
+82
-9
No files matched your search
+13
@@ -1159,6 +1159,19 @@ counts cached streams as "here". A tap while the app is UP is still handed
|
||||
to the page (`AutoNative.describe` → `playMediaId`), which owns the queue
|
||||
then.
|
||||
|
||||
**What the card says while a row is found.** Reaching a row whose bytes
|
||||
are not here used to read as the player going to the next track and
|
||||
freezing — and, after a skip, the OLD song kept sounding under the new
|
||||
title until the fetch delivered. Now `start_at` stops the engine before
|
||||
it looks (silence, not the wrong song), the card is built BUFFERING from
|
||||
its first frame (`headlessTrack` `resolving`), and the engine narrates on
|
||||
the card's artist line (`NowPlayingArgs.status`, sent through
|
||||
`headlessState`): "Signing in to Soulseek…", "Searching Soulseek…",
|
||||
"3 copies · connecting to <peer>…", "Streaming from <peer>…", "<peer> isn't
|
||||
sending · trying another copy…", "No copy found · trying the next track…".
|
||||
The engine's own Playing event clears the line and the artist returns. A
|
||||
row fetched ahead says "Streaming from <peer>…" for the beat it takes.
|
||||
|
||||
**Covers, always.** The car draws the app icon over a row with no cover,
|
||||
and thirty of GhettoTechie's forty rows had none — pasted-tracklist rows
|
||||
the catalog never matched. Two hands fill them. In the cold process,
|
||||
|
||||
Reference in new issue
Block a user