* feat: Add new Maestro tests for album, playlist, artist, and favorites, and enhance existing tests with additional screenshots and refined playback flows.
* feat: Enhance Maestro CI/CD with improved caching, updated Maestro version, and refined emulator configurations for better performance and artifact collection.
* feat: Run Maestro Android tests using a single orchestrated flow file and collect project screenshots.
* fix: Add extended wait conditions to login test to improve stability and prevent flakiness.
* feat: Add test IDs to login, authentication, and library selection screens and update Maestro tests to use them.
* test: make sign out confirmation assertion optional
* feat: Improve login flow robustness by delegating app launch to the login test, increasing wait times, and adding more optional dialog dismissals.
* feat: Add APK caching to Maestro test workflow and conditionally run build steps.
* feat: make sign-out and cancellation steps in test more robust with optional taps and back key presses, and update login page assertion.
* test: remove optional flag from `pressKey: back` action in settings test.
---------
Co-authored-by: Violet Caulfield <42452695+anultravioletaurora@users.noreply.github.com>
Co-authored-by: Ritesh Shukla <riteshshukla2381@gmail.com>
What is the change
Implement persistent player queue state with a dedicated Zustand store (MMKV-backed): queue, currentTrack, currentIndex, shuffled, unShuffledQueue, and queueRef.
Restore the queue on app start: new initialization reads persisted state and rebuilds the TrackPlayer queue and active index.
Unify queue mutations to keep React Native Track Player and the persisted store in sync:
Loading a new queue sets queueRef, honors shuffle, computes start index, and writes to both RNTP and store.
"Play Next" and "Add to Queue" update RNTP, the live queue, and unShuffledQueue consistently.
Active track/index changes now propagate to the store and query cache.
Tighten/refine player query/invalidations so UI reflects the latest RNTP state.
Minor housekeeping in config/scripts to support the above (ESLint flat config, metro/jest/script updates).
What does this address
Fixes queue not restoring after relaunch or crash; playback position and the current track persist correctly.
Preserves shuffle state and the original unshuffled ordering for reliable shuffle toggle behavior.
Ensures "Play Next"/"Add to Queue" behave consistently with what the user sees, avoiding duplication or desyncs.
Reduces UI state drift by syncing RNTP events to both React Query and persistent store.
Co-authored-by: Violet Caulfield <42452695+anultravioletaurora@users.noreply.github.com>
Clean up Jest and Maestro Folders
Reduction of the number of calls being made by components
Fix issue where a different track would display than the one that is currently playing
Update OTA dependency to fix an issue on iOS
* Gapless playback (#372)
* Add gapless playback prefetch logic for next track
* Enhance player context to support multiple track downloads and prevent redundant prefetching
* Add download quality settings and integrate into track mapping and network contexts (#386)
* Add Shuffle
* Add Library Selection screen and navigation to account tab
* player redesign featuring blurred background artwork
* add repeat modes to player