Skip to content

Quick wins: desktop fullscreen, player buffering/overscroll, library & nav fixes - #50

Merged
ingoau merged 8 commits into
mainfrom
fix/quick-wins
Oct 9, 2026
Merged

ingoau merged 8 commits into
mainfrom
fix/quick-wins

Conversation

@ingoau

@ingoau ingoau commented Oct 9, 2026

Copy link
Copy Markdown
Owner

Seven small fixes, one commit each.

Desktop

  • Desktop fullscreen shouldn't fullscreen the window #43 Opening the fullscreen player no longer makes the OS window fullscreen. A new header button turns window fullscreen on and off. If that button turned it on, closing the player takes the window back out. A window that was already fullscreen before the player opened stays fullscreen. The collapse chevron's label is now "Close player", so it doesn't read like the new button.

Android: now playing

Android: library & navigation

Testing

  • Android :app:testDebugUnitTest on this branch: 128 tests, 0 failures, 13 skipped. The skipped suites look like they need the native core, a real server or screenshot recording. New tests: SelectionToolbarTest, NavBarCustomisationTest.switchingPlacesClosesSettings, and an updated FullPlayerLayoutTest.
  • Desktop pnpm typecheck: passes. Vitest: 150/150 pass.
  • Desktop e2e: playback.spec.ts's fullscreen test is extended to check that the window isn't fullscreen on open, that the button toggles fullscreen, and that closing the player exits it. With one check commented out locally, the test passes. That check, the fluid background showing data-source="artwork" at line 78, fails the same way on unchanged main.
    • These e2e specs fail the same way on unchanged main: keyboard-a11y:273, exit-motion:31, keyboard:4.
    • These fail only on this branch: a11y:103 (the new button passes its axe checks, then the test times out at the command palette) and motion-contrast:114 (fails on the same fluid-background check). They weren't run on main, and the cause isn't confirmed.
  • No change has been checked visually on a device or in the running app yet. In particular, the loader's size inside the play button needs a look.

Closes #43
Closes #33
Closes #15
Closes #24
Closes #23
Closes #22
Closes #35

🤖 Generated with Claude Code

https://claude.ai/code/session_01Y13F1MZyepBvGTi1ceeGUc

ingoau and others added 8 commits October 9, 2026 17:02
Drop the "Buffering" text under the seek bar. While the transport is
buffering, the full player's play/pause button and the mini player's
play/pause show the Material 3 Expressive LoadingIndicator in place of
the icon. Both stay tappable, and screen readers hear "Buffering" as
the button's state.

Closes #33

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
While another device plays, the full player no longer shows a "Playing
on <device>" notice under the artwork; the highlighted Connect button
at the top right is the one way to the device picker. Removes the
composable and its string, and the layout test now checks there is no
such line and that Connect opens the picker.

Closes #15

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The full player's page scroll used the default overscroll effect, so a
swipe up on a page that already fits (or past its end) stretched the
whole player. Pass overscrollEffect = null to its verticalScroll.

Closes #24

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The lists scroll under the whole top bar, and the row of link chips
(Recent queues, Downloads, Filters) between the app bar and the tabs had
no background, so rows showed through. The header column now has the app
bar's scroll-tinted container colour, shared by the bar and the tab row.

Closes #23

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Y13F1MZyepBvGTi1ceeGUc
Settings pushed over Home was saved into Home's stack by a switch to
another place and restored on the way back, so the Home tab reopened
Settings and Home itself could not be reached. Switching places now pops
Settings (and anything opened from it) first; re-tapping the selected
place still pops to its root. goToPlace only records a place's own
screen as the stack root, so Home stays selected over its restored
screens.

Closes #22

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Y13F1MZyepBvGTi1ceeGUc
…ars"

The bulk toolbar showed the contextMenu's rate5 entry as a fixed
"Rate 5 stars". As in the action sheet, rate5 now stands for one rating
entry: "Set rating…" opens the rating dialog (with a "Clear rating"
button, since the selection has no current rating to tap) and applies
the chosen 0-5 stars to every selected item through the core's rateN
actions. The customisable context-menu list is unchanged: rate5 still
decides whether the entry appears.

Closes #35

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Y13F1MZyepBvGTi1ceeGUc
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Opening the fullscreen "Now playing" view no longer puts the OS window
into fullscreen. A full screen button beside the collapse chevron toggles
the window's fullscreen instead (state from windowState, which main
broadcasts on enter/leave-full-screen); if that button put the window into
fullscreen, closing the player takes it back out. The collapse button is
relabelled "Close player" so it no longer reads as the window toggle.

Closes #43

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@ingoau
ingoau merged commit 662c642 into main Oct 9, 2026
4 checks passed
@ingoau
ingoau deleted the fix/quick-wins branch October 12, 2026 04:27
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment