Commit Graph
424 Commits
Author SHA1 Message Date
zarzet ab8a329d2d refactor(layering): move UI action helpers from services and utils to controllers
Batch actions, clickable metadata, playback, auth launcher, action forms and
the glass warmup drive UI flows, so they belong with the controllers. Files
with more than three importers (or an importer that must stay untouched) keep
a one-line re-export at the old path.
2026-10-19 00:37:42 +07:00
zarzet b64b08c4d0 refactor(shell): move nav icons to a widget file and startup prompts into a part
BouncingIcon, SlidingIcon and SpinIcon are standalone widgets, so they now
live in lib/widgets/nav_destination_icons.dart. The SAF repair, upgrade intro,
update, announcement and SAF migration prompts move into a part as an
extension on the shell State; the call sites in initState are unchanged.
2026-10-18 22:42:38 +07:00
zarzet 77c8639df2 refactor(lyrics): split player_lyrics.dart into line-style and word-sweep parts
The word-sweep painter and the line style helpers are self-contained, so
they move into part files of the same library. No behavior change.
2026-10-18 22:40:10 +07:00
zarzet 237690cd89 refactor(metadata): move editor form primitives into a widgets file
Options group, quick-select button, switch field, selection field and
section card become public StatelessWidgets in metadata_editor_fields.dart
with unchanged build bodies; State fields they read (color scheme, fetching
flag) are now constructor parameters.
2026-10-18 22:39:31 +07:00
zarzet 96568f720a refactor(library): move queue download labels, dialogs and sliver grid out of queue_tab.dart
Pure moves: download label helpers and the download dialogs become parts of
the queue_tab library, and the animated sliver grid becomes a public widget
in lib/widgets since it uses no private state.
2026-10-18 22:26:54 +07:00
zarzet acbc614f42 perf(library): build DateFormat and RegExp once instead of per row
The month-year DateFormat was rebuilt for every loaded row and every
fast-scroller drag label; it is now cached per locale tag. Constant-pattern
RegExp objects built per call (or per word) are now static or top-level.
2026-10-18 21:56:46 +07:00
zarzet 0810ee7847 refactor(library): drop unread QueueTab page parameters and fast-scroller callbacks
Nothing read parentPageController, parentPageIndex or nextPageIndex, and the
Library tab root watched showExtensionStore only to compute them, so toggling
that setting rebuilt the tab for nothing. No caller passed the fast scroller
onDragStart/onDragEnd callbacks.
2026-10-18 21:54:05 +07:00
zarzet dbee3d56cb feat(player): search lyrics online for files without them
The empty lyrics page offers Search online, which asks the enabled lyrics
providers in their configured order. The result is shown in the player
only and never written to the file; a late result is dropped after the
track changes, and a miss says so.
2026-10-18 19:24:39 +07:00
zarzet 2ede99bef8 fix(player): restore the lighter full-screen cover scrim
Shade the app bar lightly and ease it out so white icons stay legible
without darkening the top of the cover.
2026-10-18 12:41:28 +07:00
zarzet 080df889d0 fix(library): recover missing local album artwork from audio 2026-10-18 04:09:15 +07:00
zarzet 9b622f941c chore(settings): clarify beta features and playback information 2026-10-18 03:11:44 +07:00
zarzet 1a6dc7366e feat(home): expose extension country settings and isolate regional caches 2026-10-18 03:11:33 +07:00
zarzet f426b2d1f0 fix(player): report Android output failures without skipping tracks 2026-10-18 03:11:20 +07:00
zarzet 2782b1f7f2 feat(lyrics): refresh quote sharing and load lyrics on demand 2026-10-18 03:10:53 +07:00
zarzet afab47ae4d perf(lyrics): cache timed lyric segment geometry 2026-10-18 00:46:52 +07:00
zarzet 12119530a7 refactor(library): share selection action grid layout 2026-10-18 00:46:52 +07:00
zarzet 50368012c0 refactor(settings): share selectable bottom sheet options 2026-10-18 00:46:51 +07:00
zarzet 08bc422634 perf(player): cache adjacent track titles during swipes 2026-10-18 00:46:51 +07:00
zarzet 05a5613332 feat(player): add configurable full-screen cover art
Offer default and full-screen artwork in Material and Mornye, retaining landscape layouts and full-screen Mornye motion artwork. Keep the Material header readable over bright covers and normalize invalid saved styles without resetting other settings.

Validation: 144 related Flutter tests, flutter analyze, generated settings, formatter and diff checks.
2026-10-17 22:27:06 +07:00
zarzet 6debfccba2 fix(theme): retain dominant cover colors in player backgrounds 2026-10-17 16:18:39 +07:00
zarzet 78a5e078cd feat(lyrics): share lyric cards and refine timed vocal transitions 2026-10-17 16:18:35 +07:00
zarzet 40f65d3a4d feat(player): show audio source processing and output details 2026-10-17 16:18:32 +07:00
zarzet ecf594aac2 feat(equalizer): add multiband EQ and per-player native audio processing 2026-10-17 16:18:30 +07:00
zarzet befcd2adec feat(a11y): label controls and improve settings contrast and targets 2026-10-17 16:18:25 +07:00
zarzet 47ccf9c9ed fix(player): size volume slider handle proportionally 2026-10-15 22:37:55 +07:00
zarzet 23fe78f30d feat(loading): align skeletons with collection and extension layouts 2026-10-15 19:16:47 +07:00
zarzet 2111afa468 feat(player): share volume controls across Material and Mornye 2026-10-15 19:16:17 +07:00
zarzet 318fbe714e refactor(ui): use shared loading indicators 2026-10-15 16:00:34 +07:00
zarzet bf8ae854dd feat(forms): adopt expressive inputs with consistent form state 2026-10-15 16:00:15 +07:00
zarzet c5491302a7 feat(ui): add themed menus and adaptive checkbox rows 2026-10-15 16:00:02 +07:00
zarzet 33dca89f28 feat(ui): unify content cards and preserve press behavior 2026-10-15 15:59:38 +07:00
zarzet d28e3f65b1 fix(headers): fit artwork and unify toolbar controls 2026-10-15 02:52:23 +07:00
zarzet 1bae2e6b16 refactor(ui): unify expressive actions and modal transitions 2026-10-15 02:52:15 +07:00
zarzet bd0b4a50c3 feat(layout): adapt tablet navigation and center wide content 2026-10-15 02:51:53 +07:00
zarzet 1cc233bdc1 fix(settings): unify adaptive sheet layout and drag behavior 2026-10-15 01:14:54 +07:00
zarzet d96a9b56cd fix(extensions): use adaptive icons for installed extension avatars 2026-10-15 00:28:16 +07:00
zarzet 3fd1588154 fix(library): align filter and sort sheet sizing and dismissal 2026-10-15 00:28:16 +07:00
zarzet 97d8ee3695 fix(player): prevent overlapping titles during rapid skips 2026-10-14 23:05:08 +07:00
zarzet 8d1a42e01a feat(player): refine mini-player and queue feedback 2026-10-14 23:04:56 +07:00
zarzet 83a55fb80b feat(library): add sectioned browsing and adaptive fast scrolling 2026-10-14 23:04:46 +07:00
zarzet 9bac4a6efb feat(material): unify progress and surface transitions 2026-10-14 23:04:27 +07:00
zarzet 56e2eb8589 feat(material): animate header action groups and collapse 2026-10-14 23:04:07 +07:00
zarzet 736cfcd081 feat(settings): connect custom Material settings rows 2026-10-14 23:03:27 +07:00
zarzet ef600973e8 style(material): align tonal surfaces and control shapes 2026-10-14 20:20:44 +07:00
zarzet 8f6aa00152 feat(settings): connect standard Material settings rows 2026-10-14 20:20:44 +07:00
zarzet 5e6afc7a32 feat(ui): add Material Expressive spring motion 2026-10-14 20:20:44 +07:00
zarzet 62ce404390 feat(ui): extend Material Expressive surfaces and playback controls 2026-10-13 22:58:00 +07:00
zarzet 0b3b9c21c9 feat(theme): show a check on selected expressive switches
M3ESwitch does not read the Flutter switch theme, so selected switches
lost the check thumb icon that the standard Material switch shows.
2026-10-13 18:27:38 +07:00
zarzet e56d59c798 feat(theme): adopt Material Symbols and expressive components
The Material theme now draws its main surfaces with rounded Material
Symbols: navigation, player, mini player, queue, settings, sheets,
dialogs and shared controls. AppIcon maps legacy Icons to their symbol
and keeps outlined glyphs unfilled. Mornye keeps its original icons.

Icon buttons, text and filled buttons, dialog actions, sliders, the setup
FAB and indeterminate spinners use the Material 3 Expressive components.
Each wrapper falls back to the standard Flutter widget for Mornye, reduced
motion and custom sizing, so existing layouts and hit areas stay intact.
2026-10-13 18:27:38 +07:00
zarzet 78699a9163 fix(mornye): strengthen held navigation glass refraction 2026-10-11 16:14:55 +07:00