This website requires JavaScript.
6129536153
diag(android): log ForwardingPlayer transport overrides on entry
bvandeusen
2026-06-03 22:32:33 -04:00
e6c3c959fa
fix(android): handleZeroDurationIfNeeded ReturnCount within cap
bvandeusen
2026-06-03 22:25:53 -04:00
e011b04e04
fix(android): remove pollLoop cursor sync -- races with queue load and SOAP
bvandeusen
2026-06-03 22:24:34 -04:00
e2866795ef
fix(android): skip zero-duration auto-advance during UPnP playback
bvandeusen
2026-06-03 22:18:11 -04:00
e20d7b1438
fix(android): correct SOAPACTION assertions in next/previous tests
bvandeusen
2026-06-03 22:06:54 -04:00
2a098a78fe
feat(android): Sonos queue mode -- ClearQueue + AddURIToQueue + x-rincon-queue
bvandeusen and Claude Sonnet 4.6
2026-06-03 21:55:03 -04:00
ece37e9a92
fix(android): remove pollLoop natural-advance -- races with selectUpnp and skip
bvandeusen and Claude Sonnet 4.6
2026-06-03 21:42:01 -04:00
8a1203c4a1
fix(android): revert x-rincon-mp3radio Sonos URI -- plain https for music tracks
bvandeusen and Claude Sonnet 4.6
2026-06-03 21:31:31 -04:00
487d1bd430
fix(android): SOAP/UPnP parsers enable processNamespaces -- correct name extraction
bvandeusen and Claude Sonnet 4.6
2026-06-03 20:58:59 -04:00
5c99341b34
fix(android): test assertions use JUnit Jupiter for lazy-message Supplier<String>
bvandeusen and Claude Sonnet 4.6
2026-06-03 20:51:28 -04:00
8fe3308afd
fix(android): detekt -- parseHhMmSs ReturnCount/MagicNumber + readUntilEndTag jumps
bvandeusen and Claude Sonnet 4.6
2026-06-03 20:45:00 -04:00
96594ba52b
fix(android): Sonos ZGT robust extraction -- escaped + nested element fallback + diag
bvandeusen
2026-06-03 20:40:52 -04:00
2c61d7a333
fix(android): Sonos UDN comparison strips _MR/_MS suffix -- coordinator routing
bvandeusen and Claude Sonnet 4.6
2026-06-03 20:29:08 -04:00
8652b86f40
fix(android): Sonos x-rincon-mp3radio URI transform for SetAVTransportURI
bvandeusen and Claude Sonnet 4.6
2026-06-03 20:20:25 -04:00
75132a2afe
diag(android): log raw SOAP response body for first 3 UPnP polls
bvandeusen and Claude Sonnet 4.6
2026-06-03 20:12:15 -04:00
673f98487f
fix(android): UPnP local pause via delegate -- no SOAP race
bvandeusen and Claude Sonnet 4.6
2026-06-03 19:53:41 -04:00
c556388a6b
fix(android): UPnP activation order -- pause local before holder.set; sync+preQueue sequential; diagnostic Timber.w
bvandeusen and Claude Sonnet 4.6
2026-06-03 19:47:19 -04:00
edffdec2b2
fix(android): UPnP drop falls back to local; pollLoop detects natural advance
bvandeusen and Claude Sonnet 4.6
2026-06-03 18:07:20 -04:00
1ab21d81ca
feat(android): SetNextAVTransportURI pre-queue for gap-free UPnP advance
bvandeusen and Claude Sonnet 4.6
2026-06-03 17:53:10 -04:00
81794e2475
fix(android): UPnP volume cache keyed to active route id
bvandeusen
2026-06-03 17:52:00 -04:00
29309d9bfb
ui(android): drop snackbar + hardware volume keys when UPnP route active
bvandeusen and Claude Sonnet 4.6
2026-06-03 17:43:55 -04:00
70b29567fb
refactor(android): service holds Player not ExoPlayer for ForwardingPlayer wrap
bvandeusen and Claude Sonnet 4.6
2026-06-03 17:36:35 -04:00
2f4d67d3c8
feat(android): PlayerFactory wraps ExoPlayer in ForwardingPlayer + drop events
bvandeusen and Claude Sonnet 4.6
2026-06-03 17:34:35 -04:00
b2bfe96559
ui(android): LazyColumn stable keys for in-place output picker row continuity
bvandeusen and Claude Sonnet 4.6
2026-06-03 17:33:01 -04:00
e9dd3e4d2a
fix(android): OutputPicker -- local capture, selectUpnp mutex, shared dedup helper, suppress
bvandeusen and Claude Sonnet 4.6
2026-06-03 17:31:40 -04:00
b29875fd30
feat(android): UPnP selection state, disconnect, BuiltIn-pinned alphabetical sort
bvandeusen
2026-06-03 17:24:08 -04:00
85cea8d559
fix(android): UPnP forwarding -- route mint failures through drop, no double drop
bvandeusen and Claude Sonnet 4.6
2026-06-03 17:18:53 -04:00
ab6c3a1354
feat(android): MinstrelForwardingPlayer wraps ExoPlayer with UPnP branching
bvandeusen and Claude Opus 4.7
2026-06-03 17:12:11 -04:00
3aee2276bc
feat(android): RemotePlayerState container for UPnP-synthesized player state
bvandeusen and Claude Sonnet 4.6
2026-06-03 17:08:04 -04:00
9a7d3b2d30
feat(android): ActiveUpnpHolder singleton for picker -> player handoff
bvandeusen and Claude Sonnet 4.6
2026-06-03 17:06:33 -04:00
9002cf5559
refactor(android): UPnP discovery cleanup -- bareUdn helper, Timber, suppress, kdoc
bvandeusen and Claude Sonnet 4.6
2026-06-03 17:05:31 -04:00
a5e4570f01
feat(android): UPnP in-place updates + Sonos topology aggregation
bvandeusen
2026-06-03 16:59:31 -04:00
bfcb9c42a0
feat(android): Sonos ZoneGroupTopology client + parser
bvandeusen and Claude Sonnet 4.6
2026-06-03 16:53:29 -04:00
799d50024c
test(android): RenderingControl lower clamp + GetVolume request body checks
bvandeusen and Claude Sonnet 4.6
2026-06-03 16:51:07 -04:00
8c0c4c8600
feat(android): RenderingControl get/set volume
bvandeusen
2026-06-03 16:48:40 -04:00
3cdb416f94
fix(android): AVTransport test assertions escape DIDL; consolidate xmlEscape
bvandeusen and Claude Sonnet 4.6
2026-06-03 16:47:18 -04:00
d62a3b8134
feat(android): AVTransport pause/seek/nextURI/positionInfo/transportInfo
bvandeusen and Claude Sonnet 4.6
2026-06-03 16:42:04 -04:00
574bf29a7e
fix(android): PlayerController transport methods dispatch to controller thread
bvandeusen
2026-06-03 16:00:53 -04:00
24b7c92abd
fix(server+android): DIDL-Lite metadata for Sonos UPnP (error 1023)
bvandeusen
2026-06-03 15:54:56 -04:00
3c4c27fb08
Merge pull request 'v2026.06.03 hotfix — Sonos cast URL + UPnP picker polish' (#78 ) from dev into main
v2026.06.03
bvandeusen
2026-06-03 15:30:09 -04:00
7d15f57e86
fix(server): cast token URL honors X-Forwarded-Proto / Host
bvandeusen
2026-06-03 15:17:34 -04:00
a9edc12523
fix(android): release-build Timber tree at WARN+ for operator diagnosis
bvandeusen
2026-06-03 15:01:03 -04:00
96f12d6aac
fix(android): UPnP select - loud logs on every code path
bvandeusen
2026-06-03 14:59:57 -04:00
036da9dea8
fix(android): UPnP - clean Sonos friendlyName for picker display
bvandeusen
2026-06-03 14:54:39 -04:00
a62a20b599
Merge pull request 'v2026.06.03 — Media3 like button + Bluetooth/UPnP picker + system playlist daily rotation' (#77 ) from dev into main
bvandeusen
2026-06-03 14:09:23 -04:00
7c11cdc4d1
fix(server): handleGetStream - auth check before DB lookup
bvandeusen
2026-06-03 13:43:28 -04:00
c3614c6333
fix(server): errcheck violations from UPnP slice
bvandeusen
2026-06-03 13:41:54 -04:00
9e67088fdb
fix(server): TestRoutesRegisteredInMount - missing streamSecret arg
bvandeusen
2026-06-03 13:30:36 -04:00
6da6cb5c5a
fix(server): daily-rotate all deterministic mixes + diversity top-up fallback
bvandeusen
2026-06-03 13:22:23 -04:00
7473e98d91
fix(server): unify discovery-mix producers + daily-rotate the deterministic ones
bvandeusen
2026-06-03 13:18:17 -04:00
3df5e5cb3c
fix(android): playlist like state + playlist cover URL
bvandeusen
2026-06-03 13:11:55 -04:00
448c9f2e74
chore(android): UPnP picker - log selectUpnp failures + drop dead fetchJob
bvandeusen
2026-06-03 12:56:45 -04:00
03cdff547d
feat(android): UPnP picker integration (UPnP slice 6/6)
bvandeusen
2026-06-03 12:52:15 -04:00
f8c93e013d
feat(android): UPnP SOAP envelope + AVTransport client (UPnP slice 5/6)
bvandeusen
2026-06-03 12:43:54 -04:00
1f02813cc6
fix(android): UPnP - add kxml2 to test classpath so DeviceDescriptionTest runs
bvandeusen
2026-06-03 12:02:51 -04:00
dc5b8252bb
feat(android): UPnP SSDP discovery + device description (UPnP slice 4/6)
bvandeusen
2026-06-03 12:01:00 -04:00
5f3905f2c7
feat(android): UPnP picker foundation (UPnP slice 3/6)
bvandeusen and Claude Opus 4.7
2026-06-03 11:51:11 -04:00
e774097fd8
feat(server): POST /api/cast/stream-token + secret bootstrap (UPnP slice 2/6)
bvandeusen and Claude Opus 4.7
2026-06-03 11:46:57 -04:00
236637fcd3
feat(server): HMAC stream token auth path (UPnP slice 1/6)
bvandeusen
2026-06-03 11:34:02 -04:00
d7fe515940
fix(android): output picker CI - passive discovery + LongMethod
bvandeusen
2026-06-03 10:49:32 -04:00
8258b6c29f
feat(android): NowPlaying output-picker integration
bvandeusen
2026-06-03 10:42:30 -04:00
d10113db54
fix(android): output picker - add Settings icon to permission hint
bvandeusen
2026-06-03 10:39:05 -04:00
a319e3f66d
feat(android): output picker Compose UI - chip + sheet
bvandeusen
2026-06-03 10:35:48 -04:00
692d9dab60
feat(android): OutputPickerViewModel - sheet lifecycle + selection
bvandeusen
2026-06-03 10:33:06 -04:00
087486d253
feat(android): OutputPickerController - MediaRouter facade
bvandeusen
2026-06-03 10:30:23 -04:00
0662c9d5cc
feat(android): output picker foundation - mediarouter + OutputRoute
bvandeusen
2026-06-03 10:27:02 -04:00
e69a5204db
fix(android): PlayerController.setQueue dispatches to controller thread
bvandeusen
2026-06-03 09:48:38 -04:00
4be7e47584
chore(android): drop redundant !! on PlaylistRef.systemVariant
bvandeusen
2026-06-03 09:38:24 -04:00
551bbf83c2
feat(android): wire MediaSession like button + reactive state
bvandeusen
2026-06-03 09:28:37 -04:00
43754d03c4
revert(android): drop LikeMediaCallback JVM tests + testOptions flag
bvandeusen
2026-06-03 09:19:37 -04:00
7807e31b22
fix(android): testOptions isReturnDefaultValues = true
bvandeusen
2026-06-03 09:11:59 -04:00
9a7cfac7f8
fix(android): LikeMediaCallback ReturnCount — extract toggle helper
bvandeusen
2026-06-03 07:40:33 -04:00
d37ef56bb1
feat(android): LikeMediaCallback for media-session like button
bvandeusen
2026-06-02 23:48:25 -04:00
ad7e57fe66
feat(android): scrubber thumb pill — fixes off-center perception
bvandeusen
2026-06-02 22:48:40 -04:00
d9b2dd957c
Merge pull request 'fix(android): interceptor order — auth before baseUrl (hotfix for v2026.06.02)' (#76 ) from dev into main
v2026.06.02
bvandeusen
2026-06-02 22:07:32 -04:00
94b3b87785
fix(android): interceptor order — auth before baseUrl
bvandeusen
2026-06-02 21:47:53 -04:00
46dcd38fd8
Merge pull request 'Drift audit 2026-06-02 — 26 findings shipped' (#75 ) from dev into main
bvandeusen
2026-06-02 19:21:53 -04:00
cb2f9a2ea2
fix(server): GC test seeds tracks with file_size + file_format
bvandeusen
2026-06-02 19:04:00 -04:00
305d4780ac
fix(server): TestGcCloseStalePlayEvents seeds artist with sort_name
bvandeusen
2026-06-02 18:47:31 -04:00
dbcadf0f93
fix(android): drift #576 — LikesRepository uses real userId, clears on switch
bvandeusen
2026-06-02 18:35:54 -04:00
258bc1f75c
feat(server): drift audit batch 7 — periodic GC worker for 5 lifecycle gaps
bvandeusen
2026-06-02 18:32:22 -04:00
bda0896d82
docs(server): drift #572 — delete.go honest about missing reconcile
bvandeusen
2026-06-02 18:26:45 -04:00
413d729711
fix(web): drift audit batch 5 — SSR redirect + radio exclude cap
bvandeusen
2026-06-02 18:25:52 -04:00
b970b87343
fix(server): drift #578 — /api/me returns profile shape with display_name + email
bvandeusen
2026-06-02 18:24:23 -04:00
5014f7548e
fix: drift audit batch 3b — cold-boot resume correctness
bvandeusen
2026-06-02 18:21:39 -04:00
b19c621743
fix: drift audit batch 3a — Android offline correctness
bvandeusen
2026-06-02 18:18:59 -04:00
fb3116d640
fix: drift audit batch 2 — patterned fixes mirroring prior work
bvandeusen
2026-06-02 18:16:29 -04:00
47d2f61161
fix: drift audit batch 1 — six small mechanical wins
bvandeusen
2026-06-02 18:11:25 -04:00
7838038047
Merge pull request 'Playback errors slice + scrubber polish + various polish' (#74 ) from dev into main
bvandeusen
2026-06-02 14:14:11 -04:00
9f0af9c24b
feat(android): CI-injected versionName with commit-count iteration
bvandeusen
2026-06-02 14:07:57 -04:00
76e64fd022
fix(android): close PlaybackErrorsApi kdoc — Kotlin nested-comment trap
bvandeusen
2026-06-02 11:51:19 -04:00
337fce83a1
fix(android): satisfy detekt — ReturnCount + LongMethod refactors
bvandeusen
2026-06-02 11:45:45 -04:00
de61305fde
feat(web): admin playback-errors inbox
bvandeusen
2026-06-02 11:34:46 -04:00
99e1df4920
feat(android): detect zero-duration tracks, fail fast, report to server
bvandeusen
2026-06-02 11:30:35 -04:00
15b59a214d
feat(server): playback_errors table + admin inbox endpoints
bvandeusen
2026-06-02 11:25:50 -04:00
6a54d074fd
revert(android): drop NowPlaying scrubber height clamp
bvandeusen
2026-06-02 10:28:27 -04:00
d9c7aae268
feat(android): slim NowPlaying scrubber — 4dp track + tight slider
bvandeusen
2026-06-02 10:24:31 -04:00
5fd1a5724a
fix(android): always use dominant swatch for NowPlaying background
bvandeusen
2026-06-02 10:24:19 -04:00
516d22fc73
feat(android): Start Radio preserves current playback, queues after
bvandeusen
2026-06-02 10:09:00 -04:00
1fdd785ee5
fix(android): key UiState Crossfades on state::class to stop refresh flicker
bvandeusen
2026-06-02 10:07:10 -04:00