Skip to content

Refine player seek bar, equalizer controls, and duration reconciliation#994

Merged
theovilardo merged 1 commit intomasterfrom
fix/sliders-fix
Feb 5, 2026
Merged

Refine player seek bar, equalizer controls, and duration reconciliation#994
theovilardo merged 1 commit intomasterfrom
fix/sliders-fix

Conversation

@theovilardo
Copy link
Copy Markdown
Owner

  • Duration & Playback Logic:
    • Introduces resolveEffectiveDuration in PlaybackStateHolder to reconcile player-reported duration with song metadata, preventing progress UI jumps during track transitions or remote sessions.
    • Implements a mismatch tolerance (1500ms) to prefer metadata hints unless the current position exceeds them.
    • Adds media ID validation in local progress updates to prevent UI updates for the wrong track during engine swaps.
  • Equalizer & Audio Controls:
    • Refactors EqualizerViewModel to update UI state immediately for better responsiveness while debouncing persistence to userPreferencesRepository.
    • Implements proper state management for Bass Boost, Virtualizer, and Loudness Enhancer with value clamping and debounced storage.
    • Updates VerticalStarSlider and WavyArcSlider with improved gesture handling that correctly disallows parent touch interception during interaction.
  • Player UI & Components:
    • Replaces manual gesture detection in WavySliderExpressive with a standard Slider overlay to handle interactions, while maintaining the LinearWavyProgressIndicator for visualization.
    • Adjusts PlayerSeekBar and FullPlayerContent padding to align progress tracks with the screen edges.
    • Updates FullPlayerContent to use the new duration reconciliation logic for displaying time labels and calculating progress fractions.
  • Visual Refinements:
    • Smooths the "Pill Morph" animation for the seek bar thumb during user interaction.
    • Ensures consistent track coloring and rotation logic for equalizer sliders.

- **Duration & Playback Logic**:
    - Introduces `resolveEffectiveDuration` in `PlaybackStateHolder` to reconcile player-reported duration with song metadata, preventing progress UI jumps during track transitions or remote sessions.
    - Implements a mismatch tolerance (1500ms) to prefer metadata hints unless the current position exceeds them.
    - Adds media ID validation in local progress updates to prevent UI updates for the wrong track during engine swaps.
- **Equalizer & Audio Controls**:
    - Refactors `EqualizerViewModel` to update UI state immediately for better responsiveness while debouncing persistence to `userPreferencesRepository`.
    - Implements proper state management for Bass Boost, Virtualizer, and Loudness Enhancer with value clamping and debounced storage.
    - Updates `VerticalStarSlider` and `WavyArcSlider` with improved gesture handling that correctly disallows parent touch interception during interaction.
- **Player UI & Components**:
    - Replaces manual gesture detection in `WavySliderExpressive` with a standard `Slider` overlay to handle interactions, while maintaining the `LinearWavyProgressIndicator` for visualization.
    - Adjusts `PlayerSeekBar` and `FullPlayerContent` padding to align progress tracks with the screen edges.
    - Updates `FullPlayerContent` to use the new duration reconciliation logic for displaying time labels and calculating progress fractions.
- **Visual Refinements**:
    - Smooths the "Pill Morph" animation for the seek bar thumb during user interaction.
    - Ensures consistent track coloring and rotation logic for equalizer sliders.
@theovilardo theovilardo merged commit 58966a2 into master Feb 5, 2026
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