Skip to content

feat(ui): smooth 90Hz tab navigation, sleek circular sliders, infinite autoplay, and in-app updater - #34

Closed
fhes-tus wants to merge 1 commit into
Clash-Projects:mainfrom
fhes-tus:feature/expressive-ui-and-playback
Closed

feat(ui): smooth 90Hz tab navigation, sleek circular sliders, infinite autoplay, and in-app updater#34
fhes-tus wants to merge 1 commit into
Clash-Projects:mainfrom
fhes-tus:feature/expressive-ui-and-playback

Conversation

@fhes-tus

@fhes-tus fhes-tus commented Sep 4, 2026

Copy link
Copy Markdown

Overview

This PR brings major UI fluidity, modern slider styling, and playback enhancements to LastWave:

1. Buttery-Smooth Tab Navigation & Reactive Dock (MainShell.kt)

  • Problem: When swiping or switching tabs on 90Hz / 120Hz displays, horizontal transitions exhibited stutter due to cold first-frame composition (beyondViewportPageCount = 0) and delayed pill animations.
  • Solution:
    • Enabled beyondViewportPageCount = 1 so adjacent screen layouts stay cached in GPU composition memory.
    • Bound the floating dock selection to pagerState.targetPage for instantaneous pill response on finger tap.
    • Tuned dock pill animation with non-oscillating ExpressiveMotion.smoothSpring().

2. Sleek Circular Slider Thumbs (ExpressiveSlider.kt & PlayerHost.kt)

  • Problem: Seekbars and settings sliders previously used tall 38dp vertical bars and default Material rectangular capsules.
  • Solution:
    • Redesigned the expanded player seekbar thumb into a sleek circular knob with depth halo and inner surface core.
    • Created reusable ExpressiveSlider (in ui/common/) featuring capsule tracks and dynamic halo expansion on drag/press, applied across Settings (EQ gain, volume, color pickers) and Generator.

3. YouTube-Music-Style Infinite Autoplay (MusicPlayer.kt)

  • Problem: Music abruptly ended when an album or playlist finished.
  • Solution:
    • Seamlessly extends ordinary playback queues with similar tracks via Last.fm API recommendations and Discover fallback.
    • Proactively queries for refills before the queue runs out, with fallback resumption if playback reached the end.
    • User-toggleable in Now Playing queue sheet and in Settings.

4. Full-Device Local Music Scanner (TrackDownloadManager.kt)

  • Problem: The local library scanner previously only checked Music/LastWave%, ignoring user audio in other device folders (Music/, Download/, etc.).
  • Solution:
    • Expanded MediaStore query to index all valid audio tracks (IS_MUSIC != 0) across device storage, filtering out short audio clips (<30s).
    • Added safety guards ensuring deleteDownloadedTrack only deletes physical files that LastWave owns, keeping personal user audio untouched.
    • Declared READ_MEDIA_AUDIO for Android 13+ with runtime permission checks.

5. In-App GitHub Auto-Updater (AppUpdateManager.kt & SettingsScreen.kt)

  • Added direct GitHub release checking against Clash-Projects/LastWave-native/releases/latest.
  • Displays current vs latest version badge, changelog dialog ("What's new"), and direct release/APK download in Settings.

Verification

  • Tested and verified with ./gradlew compileDebugKotlin and ./gradlew assembleDebug (0 compiler warnings/errors, all native Oboe ABIs compiled).
  • Tested on Android device with smooth 90 FPS tab scrolling.

@fhes-tus
fhes-tus force-pushed the feature/expressive-ui-and-playback branch from f37df2e to a66734a Compare September 5, 2026 12:08
@fhes-tus
fhes-tus force-pushed the feature/expressive-ui-and-playback branch from a66734a to 9faacfc Compare September 6, 2026 21:04
@ajisth69
ajisth69 force-pushed the main branch 6 times, most recently from 96d57da to d0a4f18 Compare September 7, 2026 09:54
…ay, and in-app updater

- Optimize tab transitions in MainShell with beyondViewportPageCount=1, targetPage dock tracking, and smooth springs for stutter-free 90Hz rendering
- Redesign seekbar and settings sliders with sleek circular halo knobs (ExpressiveSlider) replacing vertical 38dp bars
- Add YouTube-Music-style infinite autoplay engine with proactive queue refills and user toggle
- Expand local music scanner to discover all device audio files with safe deletion guards
- Add in-app GitHub update checker and changelog dialog in Settings
@fhes-tus
fhes-tus force-pushed the feature/expressive-ui-and-playback branch from afeb958 to 393c715 Compare September 7, 2026 20:40
@ajisth69 ajisth69 closed this Sep 8, 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.

2 participants