austinried
d36c752c72
test the tab row reflows in a single direction during a switch
...
Drives the pager across the Artists to Playlists transition and asserts the
Songs icon only moves one way. Fails on the min-width clamp version (738-727-745)
and passes on the natural-48dp version. LibraryTabs is internal so the test can
drive its PagerState.
2026-10-04 00:29:57 +00:00
austinried
57957880d9
size the collapsed tab to 48dp so the label reflow never clamps
...
A min-width clamp kept an incoming tab at 48dp until its label passed ~4dp while the outgoing label shrank immediately, so the tab row dipped left and then grew right. With the tab naturally 48dp wide (8dp/16dp padding around the 24dp icon) the width tracks the label continuously and the row moves one way.
2026-10-04 00:29:57 +00:00
austinried
7009aa8ef5
keep the tab content left-aligned so min-size centring cannot shift the icons
...
Replace minimumInteractiveComponentSize (which centred the whole tab content and drifted as the active label expanded) with an explicit 48dp touch target whose content is aligned to the start. The icon position no longer depends on the label width.
2026-10-04 00:29:57 +00:00
austinried
ef349f0346
revert the tab overlay clip measurement
...
Tracking the content position per frame made the inactive-tab colour split chase the layout instead of only following the indicator, so the icons jittered on a swipe. Go back to the stable tab-relative offset.
2026-10-04 00:29:57 +00:00
austinried
5b88792f72
address the code review findings
...
- offer a Sync button on a truly empty library tab so an empty library is not stranded (pull-to-refresh needs scrollable content)
- do not close the search field when it auto-syncs from a tab with an empty term
- make rememberArtworkColors nullable so the no-track fallbacks are live and the idle theme is the monochrome background
- measure the tab overlay content offset so the colour clip accounts for the touch-target centering
- put the pull indicator below the status-bar scrim, and seed the tab bar height estimate to avoid a first-frame inset jump
- collapse the two equal clearance constants, drop the redundant search imePadding, reuse the hoisted artwork for the mini player, and de-duplicate the mini player screenshots
2026-10-04 00:29:57 +00:00
austinried
60acdbeae3
theme the pull-to-refresh indicator from the artwork and stop the library reflow on search
...
- the indicator now uses the artwork primary and player surface instead of the default onSurfaceVariant
- keep the tab bar height in the list inset while searching so the content does not expand for a frame before the keyboard lands
2026-10-04 00:29:57 +00:00
austinried
e031e92e2d
pull to refresh, hide the bar while searching, animate the progress inset, circular warm damping
...
- replace the library sync button with pull-to-refresh on every tab
- hide the tab bar while searching so only the search field sits above the keyboard
- animate the mini player progress bar between full bleed and 8dp inset rounded ends as the tab bar comes and goes
- make the warm-hue saturation damping continuous across the 0/360 hue wrap
2026-10-04 00:29:57 +00:00
austinried
10b21303d2
address the adversarial review findings
...
- restore the library sync control removed when the tab bar was reworked, with a test that clicks it
- lift the search field above the tab bar instead of overlapping it
- give the tabs and settings/sync buttons 48dp touch targets
- drop the duplicated label semantics on tabs
- animate the library bottom inset so the bar does not jump when the mini player enters/exits
- remove imports and a parameter left dead by the header rework
2026-10-04 00:29:57 +00:00
austinried
13568b9bee
raise the library fab elevation for a visible shadow
2026-10-04 00:29:57 +00:00
austinried
639c86bccc
square the progress track ends, keep the rounded head
2026-10-04 00:29:57 +00:00
austinried
c8231c88b4
make the mini player progress bar full width again
2026-10-04 00:29:57 +00:00
austinried
4e9932fc1e
3dp progress bar and 8/8/8/12 mini player padding
2026-10-04 00:29:57 +00:00
austinried
2a14f3bde5
try a 2dp mini player progress bar
2026-10-04 00:29:57 +00:00
austinried
675f235035
inset and round the mini player progress bar; align its cover art at 8dp
2026-10-04 00:29:57 +00:00
austinried
25aa7c2aea
fill the tab bar safe area and keep the fab above the bar
2026-10-04 00:29:57 +00:00
austinried
4530335bd7
respect the nav bar inset for the tab bar and apply the artwork theme globally
2026-10-04 00:29:57 +00:00
austinried
9736d51955
restore the original mini player padding and tab bar height
2026-10-04 00:29:57 +00:00
austinried
7389316aa7
make the tab bar and mini player row both 64dp (8dp padding around the art)
2026-10-04 00:29:57 +00:00
austinried
1515cda836
match the mini player height to the tab bar
2026-10-04 00:29:57 +00:00
austinried
059016c64c
make the mini player a little taller with a bigger album art
2026-10-04 00:29:57 +00:00
austinried
ec7f525d42
move the library tab bar to the bottom above the mini player
2026-10-04 00:29:57 +00:00
austinried
018979909e
let the tab bar wrap its content instead of filling the width
2026-10-04 00:29:57 +00:00
austinried
865366e755
line up the tab bar at 8dp, put the gear beside the tabs with a divider
2026-10-04 00:29:57 +00:00
austinried
efd7518fc3
merge the settings into the tab bar and add a status bar scrim
2026-10-04 00:29:57 +00:00
austinried
f07d1a66c9
make the edge-facing tab and settings corners square and flush
2026-10-04 00:29:57 +00:00
austinried
4fcdf7f5fb
pad the tab container so it matches the settings container height
2026-10-04 00:29:57 +00:00
austinried
e0ffb48715
put the tabs and settings in their own opaque rounded containers over a transparent header
2026-10-04 00:29:57 +00:00
austinried
ab39fc259e
overlay a translucent header onto the library content
2026-10-04 00:29:57 +00:00
austinried
40f20eaa40
clip the inactive tab copy out from under the indicator so the active colour is exact
2026-10-04 00:29:57 +00:00
austinried
938d7e0885
remove an accidentally committed jvm crash log and ignore them
2026-10-04 00:29:57 +00:00
austinried
29097711cf
use a 3dp mini player progress bar
2026-10-04 00:29:57 +00:00
austinried
a95236eb3e
tighten the tab bar vertical padding
2026-10-04 00:29:57 +00:00
austinried
38f3766dd1
switch tab icon/text colour by hard overlay clipped to the indicator
2026-10-04 00:29:57 +00:00
austinried
76eb4a061d
delay the tab icon and label colour transition
2026-10-04 00:29:57 +00:00
austinried
14f7f4c86e
keep the indicator leading edge on the travel side to avoid a mid-swipe hitch; restore 12dp
2026-10-04 00:29:57 +00:00
austinried
9333cae0cc
trim a hair off the tab label right padding
2026-10-04 00:29:57 +00:00
austinried
25d2e150e7
drive the tab label collapse and expansion from one transition
2026-10-04 00:29:57 +00:00
austinried
94a0326b4e
stretch the leading edge of the tab indicator toward the target
2026-10-04 00:29:56 +00:00
austinried
bad401b003
restore the single stretching tab indicator
2026-10-04 00:29:56 +00:00
austinried
a780b4c2f4
tie the tab label reveal to the swipe and rebalance the pill padding
2026-10-04 00:29:56 +00:00
austinried
0825b8411c
slim the active tab pill and reveal its label from the start
2026-10-04 00:29:56 +00:00
austinried
2464c26c79
replace the collapsing library title with expanding pill tabs
2026-10-04 00:29:56 +00:00
austinried
48235722db
make the artwork primary brighter and more saturated
2026-10-04 00:29:56 +00:00
austinried
ed4baf3c9b
hold the active tab icon colour for the first part of a swipe
2026-10-04 00:29:56 +00:00
austinried
4a7a0aafca
colour the selected tab from the artwork and raise the warm damping
2026-10-04 00:29:56 +00:00
austinried
d1b5aaeeb7
smooth the warm damping so switching artwork does not flash
2026-10-04 00:29:56 +00:00
austinried
5e00bf86a8
lift warm tonal surfaces to the bright gradient tone
2026-10-04 00:29:56 +00:00
austinried
043c6201ba
damp the saturation of warm tonal surfaces to avoid brown
2026-10-04 00:29:56 +00:00
austinried
c56ae3f0ed
revert the warm hue harmonisation
2026-10-04 00:29:56 +00:00
austinried
a54a54ffa4
rotate warm artwork hues out of the brown/olive range for dark tones
2026-10-04 00:29:56 +00:00
austinried
97397e6e5e
match the library header colour to the mini player
2026-10-04 00:29:56 +00:00
austinried
8ab4cbb0d0
tint the library background and fab from the current artwork
2026-10-04 00:29:56 +00:00
austinried
a633a6c290
saturate the tonal mini player surface a little more
2026-10-04 00:29:56 +00:00
austinried
c10aa2df8c
make the mini player surface tonal instead of the saturated gradient colour
2026-10-04 00:29:56 +00:00
austinried
490ab8dbe4
address review: drop the stale duration carry, tint the split pill divider when disabled
2026-10-04 00:29:56 +00:00
austinried
6ae868c380
use 68 dp split pill segments
2026-10-04 00:29:56 +00:00
austinried
9299660bb2
widen the split pill segments a little more
2026-10-04 00:29:56 +00:00
austinried
521b11f9db
optically centre the download icon and enlarge the split pill icons
2026-10-04 00:29:56 +00:00
austinried
3ea808e5cc
widen the split pill segments and restore the 24 dp icons
2026-10-04 00:29:56 +00:00
austinried
ebf0653ec4
join play and shuffle into one split pill
2026-10-04 00:29:56 +00:00
austinried
a3de58b7b8
enlarge the play and shuffle button icons
2026-10-04 00:29:56 +00:00
austinried
c1c7db71b0
widen the play and shuffle pills and inset the download and more buttons
2026-10-04 00:29:56 +00:00
austinried
0e55ce65f5
fix the restored position display, detail controls, mini player colour and source bar inset
2026-10-04 00:29:56 +00:00
austinried
bd23f4369f
update the architecture docs for the removed search index
2026-10-04 00:29:56 +00:00
austinried
ef5bf40bf7
drop the unused FTS5 search index
2026-10-04 00:29:56 +00:00
austinried
bf3afb9c17
drop the speculative legacy album sort migration
2026-10-04 00:29:56 +00:00
austinried
f5948812bb
address review round 3: keep the search bar across recomposition, fix tab landing, page the queried songs queue
2026-10-04 00:29:56 +00:00
austinried
605bd1a6c6
songs queue follows the applied sort and starred filter; clear a tab's search when leaving it
2026-10-04 00:29:56 +00:00
austinried
d55406c85e
address review: keep per-tab search visible and clearable, fix direction arrow, guard scroll reset, harden date parsing
2026-10-04 00:29:56 +00:00
austinried
fc3beaee11
speed up the mini player animation
2026-10-04 00:29:56 +00:00
austinried
8fe6fb3282
animate the mini player with the keyboard instead of snapping
2026-10-04 00:29:56 +00:00
austinried
d3c38604b5
delay the mini player's return until the keyboard has mostly slid away
2026-10-04 00:29:56 +00:00
austinried
92d9b8bbd5
bring the mini player back as soon as the keyboard starts to hide
2026-10-04 00:29:56 +00:00
austinried
187a4b3dff
hide the mini player only while the keyboard is up
2026-10-04 00:29:56 +00:00
austinried
82b64c7bc7
seat the search bar above the keyboard
2026-10-04 00:29:56 +00:00
austinried
2161a6455d
keep the search bar above the keyboard
2026-10-04 00:29:56 +00:00
austinried
448a211d88
polish library controls and song ordering
2026-10-04 00:29:56 +00:00
austinried
f1c030f0e1
address review: play songs by id, reverse album sort, tab-scoped scroll reset, literal search and stable tiebreakers
2026-10-04 00:29:55 +00:00
austinried
e99ed1dc45
song added sort, robust scroll reset, restyled search and filter controls
2026-10-04 00:29:55 +00:00
austinried
9326429e17
parse Subsonic dates with java.time via core library desugaring
2026-10-04 00:29:55 +00:00
austinried
266b677ece
parse Subsonic dates without DatatypeFactory, reset list scroll on option change, fix search bar over the keyboard
2026-10-04 00:29:55 +00:00
austinried
63f0549181
tristate starred filter, filter-aware empty state, keyboard-safe search bar
2026-10-04 00:29:55 +00:00
austinried
a2d42f7957
rework the library lists: inline filter, playlist updated, starred sort, clearer controls
2026-10-04 00:29:55 +00:00
austinried
9a99977342
add sort, filters and search to the library
2026-10-04 00:29:55 +00:00
austinried
120d180220
shrink the track numbers to bodySmall in an 18dp column
2026-10-04 00:29:55 +00:00
austinried
b978e9cc37
center the track numbers in their column
2026-10-04 00:29:55 +00:00
austinried
0f9b72a364
left align the track numbers
2026-10-04 00:29:55 +00:00
austinried
31179f1287
use titleLarge for disc headings and number album tracks
2026-10-04 00:29:55 +00:00
austinried
9ca6273b82
show disc headings in multi-disc album track lists
2026-10-04 00:29:55 +00:00
austinried
21df098d2a
stop the viewport fill growing when a short list is scrolled
2026-10-04 00:29:55 +00:00
austinried
e7f8032250
address fourth review: reset the saved position per track and serialize cursor writes
2026-10-04 00:29:55 +00:00
austinried
20ab30920f
persist and restore the playback position within the track
2026-10-04 00:29:55 +00:00
austinried
89376cef86
rescan the queue scroll to the current track on every open
2026-10-04 00:29:55 +00:00
austinried
88d0113191
start the queue unshuffled from the play buttons
2026-10-04 00:29:55 +00:00
austinried
a8f1b30d67
start a shuffled queue from the album and playlist shuffle buttons
2026-10-04 00:29:55 +00:00
austinried
db58887567
load the queue around the current track and scroll to it
2026-10-04 00:29:55 +00:00
austinried
e1171d7588
key the queue now-playing highlight by song id
2026-10-04 00:29:55 +00:00
austinried
59d20d4eda
address third review: rebuild the window when the shuffle is dropped, atomic queue version
2026-10-04 00:29:55 +00:00
austinried
f982293fd1
toggle shuffle without re-preparing the current track
2026-10-04 00:29:55 +00:00
austinried
b2f654e10f
address second review: shuffle cache invalidation, locking, ended latch
2026-10-04 00:29:55 +00:00