Skip to content

Add per-profile landscape orbit layouts and an animated mini player dock - #365

Merged
ultraelectronica merged 11 commits into
mainfrom
versionF
Nov 6, 2026
Merged

ultraelectronica merged 11 commits into
mainfrom
versionF

Conversation

@ultraelectronica

@ultraelectronica ultraelectronica commented Nov 6, 2026 •

Copy link
Copy Markdown
Member

Summary

  • Give the portrait and landscape orbit views independent layout preferences, so changing the landscape radius, spacing, selected scale, depth, visible items, focus or card width no longer disturbs the portrait carousel. Preferences persist under separate keys, reset independently, and share only the artwork, path and glow visuals.
  • Add a Layout Profile selector to Orbit settings with Portrait/Landscape choices driven by window shape rather than device orientation. Portrait keeps horizontal reach and card art size, while landscape exposes its own card width and hides the portrait-only controls.
  • Wire the landscape profile into the Songs orbit: wide windows use the landscape axis and geometry, compact cards stay within the stage at extreme scales, and the saved preferences are not rewritten by runtime clamping.
  • Restyle the orbit song card as a padded glass surface with the artwork always visible above a scrollable title/artist footer, so short landscape cards no longer hide artwork behind text. Selection is now a 26dp check badge instead of the previous icon treatment.
  • Let the orbit ribbon paint edge-to-edge under the navigation rail and shell overlays while keeping cards and hit-testing inside the music viewport. Paint the path as a full accent ring with a radial band and rim instead of a thin fixed arc.
  • Move the mini player into a new animated dock for short landscape windows: one stateful dock glides between the bottom and side positions in 220 ms, supports rapid reversals, and shares a single persistent tutorial anchor and hero across both placements. Larger side-navigation windows keep the existing static bottom mini player.
  • Extend the shell so tab pages run full height and the Songs ribbon reaches the bottom overlay, with an AbsorbPointer strip preventing the exposed inset from paging the view.
  • Add the new profile and reset copy to English, Taglish and Chinese catalogs and regenerate the localization output.

Tests

  • Orbit preference isolation, including independent persistence and per-profile reset.
  • Orbit settings profile switching without rotating the window.
  • Landscape orbit card count, depth, scale, radius, spacing, width, focal position, and selected-card containment at extreme sizes.
  • Edge-to-edge orbit painting at multiple viewport sizes and through the bottom shell inset.
  • Song card artwork visibility in a 220×110 landscape card.
  • Mini-player dock handoffs: 220 ms glide, rapid reversals, reduced motion and disabled animations, safe insets, one tutorial anchor, inactive-side isolation, and separated/embedded layouts.
  • Compact landscape boundary checks for the adaptive layout helper.

Related issue

none

Checklist

  • flutter analyze passes
  • flutter test passes
  • Rust changes: cargo test --manifest-path rust/Cargo.toml passes
  • Built and ran the app if the change touches a playback path (flutter run --flavor full)
  • Generated code regenerated and committed if bridge/drift/freezed models changed
  • CHANGELOG.md updated for user-facing changes
  • No secrets, keys, tokens, or machine-local files committed
  • One change per PR; no unrelated reformatting in the same diff
  • Hardware tested if the Rust audio engine or USB/DAC output changed

Move the song key from SongCard to its Stack parent and retain the
built card face across orbit ticks, so surviving cards keep their State
and decoded artwork instead of being rebuilt each frame.
Give each orientation its own persisted geometry, sizing, and depth
settings, surfaced through a profile selector in orbit settings and
used by the orbit renderer. Shared visuals like art resolution and
path/glow toggles remain common across both profiles.
Persist landscape-specific geometry, sizing, depth, and spacing
settings alongside the existing portrait values, with per-orientation
reset support in the preferences notifier and service.
Cover card count, depth, selected scale, radius, spacing, width, and
focal position from the landscape profile, and verify the selected card
stays within the stage at extreme sizes and scales.
Use the landscape orbit geometry, sizing, and depth values when the
viewport is wide, and expose the layout profile in settings search.
Replace the generic orbital reset strings with profile-specific
portrait/landscape labels, hints, reset confirmations, and shared
visuals section headers.
Show artwork above a scrollable one-line footer instead of
collapsing to a text overlay on short stages, and use a smaller
accent-aware selection indicator.
Keep tab pages full-height so the landscape ribbon can extend behind
the mini player and navigation bar, absorbing input in the exposed
strip and reserving side space for safe areas and the mini player.
Verify cards and the ribbon paint through gesture gutters, the mini
player reservation, and the portrait shell bottom inset, plus optional
screenshot output for visual inspection.
Mount the dock across all tabs and animate the mini player between the
bottom bar and orbit strip only for short landscape windows, leaving the
static bottom player for larger layouts.
Introduce a shared dock that glides the mini player between the bottom
bar and the compact orbit strip for short landscape windows. Both player
layouts stay mounted during the transition so only translation and
opacity animate, with the inactive side muted, ignoring input, and
skipped by heroes and semantics.

Respect reduced motion and the app-wide animations switch by snapping
instead of animating, keep a single tutorial anchor registered across
handoffs, and cover the behavior with widget tests.
@ultraelectronica ultraelectronica self-assigned this Nov 6, 2026
@ultraelectronica ultraelectronica changed the title Version f Add per-profile landscape orbit layouts and an animated mini player dock Nov 6, 2026
@ultraelectronica
ultraelectronica merged commit c2c5765 into main Nov 6, 2026
6 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant