You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
feat : v1.0.3 Complete Feature Update & Enhancements
- Library Layout Density Selector: Added a "Library Density" setting (Standard vs Compact) allowing users to customize track row spacing, thumbnail sizing, and padding to fit up to 25% more songs on screen.
- Auto-Play on Headset Connect: Implemented an "Auto-play on Headset Connect" toggle under Audio & Playback. Flow listens to native AudioSession device change events and automatically resumes playback when headphones or Bluetooth audio devices connect.
- Playback Speed & Pitch Controls: Added dedicated Playback Speed (0.5x - 2.0x) and Pitch Lock configuration to Settings and audio engine with smooth ExoPlayer Sonic DSP handling.
- Custom Lyric Font Size Configurator: Added a "Lyric Font Size" setting with live preview slider (14sp to 30sp), dynamically scaling synced and plain text lyrics across player views.
- Android Mono Audio Integration: Re-architected native MainActivity.kt and settings_screen.dart Mono Audio toggle logic. Implemented multi-key fallback (master_mono and mono_audio across Settings.System and Settings.Global) and eliminated false-positive "not supported" toast errors and startup state resets.
- Robust Scoped Storage Deletion Fallback: Fixed an issue where deleting a track from device failed to present the "Permission Denied / Hide Track" dialog due to an unmounted BuildContext after closing the context menu. Captured parentContext to guarantee the fallback dialog is reliably displayed on Android 10+ devices.
- Auto-Check for Updates Toggle & Startup Check: Added an "Auto-check for updates" toggle switch in Settings. When enabled, Flow automatically performs a background release check on app launch and prompts the user with an update dialog if a new version is available on GitHub.
- Synced Last Played & Most Played Logic: Unified track recency and play-count tracking. All played tracks with playCount > 0 are automatically backfilled and synced into the Last Played smart playlist, ensuring Last Played count is always consistent with Most Played.
- Audio Ringtone Cutter & Editor: Integrated a dedicated Ringtone Trimmer accessible directly from any track's context menu. Features interactive dual-handle RangeSlider duration selection, real-time slice audio preview playback with timestamp display, dynamic segment length badges, and 1-tap ringtone saving to /Ringtones/.
- Sleep Timer Soft Fade-Out & Custom Minutes Input: Upgraded the Sleep Timer engine with a smooth volume fade-out mechanism during the final 20 seconds of countdown, preventing abrupt audio cutoffs. Added a custom duration dialog enabling users to input any custom time in minutes (e.g. 7, 25, 90, 120 mins) available across all timer entry points.
- Song Info Filename Truncation Fix: Truncated long file names in the Song Info modal with ellipsis (...) to prevent horizontal layout overflows and right-side screen leaks.
- Seamless Hero Morphing Artwork Animation: Implemented shared element Hero animation (heroTag: "mini_to_full_player_artwork") connecting the Mini Player and Full-Screen Song View. Tapping or dragging open the Mini Player causes the 48px artwork thumbnail to fluidly scale and morph into the 300px+ hero artwork with matching border radius transformations at 60 FPS.
- Expanded Mini Player & Gesture Inset Adaptation: Enhanced the Mini Player with a taller, roomier 68px container, larger 48px artwork thumbnail, elevated drop-shadow depth, and dynamic bottom gesture inset calculation (MediaQuery.of(context).padding.bottom), eliminating empty gaps under gesture navigation bars on modern smartphones.
- Sleek Rounded Modal Sheet Corners: Replaced sharp 90-degree rectangle corners on both Album View (Detail View) and Song View (Full-Screen Player) with modern 28px rounded top-left and top-right corners (ClipRRect(borderRadius: BorderRadius.vertical(top: Radius.circular(28)))), delivering an elegant, premium card aesthetic.
- Dynamic Sticky Top Navbar on Scroll: Designed and implemented a sleek, sticky top navigation bar for Album, Artist, and Playlist detail views. As the user scrolls down through the track list, the top navbar smoothly fades in with a glassmorphic background, displaying a dedicated back button on the left, truncated album title in selected font typography in the center, and context options on the right.
- High-Resolution Custom Artwork Engine: Fixed an issue where custom metadata artwork in Album, Artist, and Playlist detail views appeared blurry ("burik"). Upgraded CachedTrackArtwork to use un-downsampled full-resolution FileImage with FilterQuality.high for large views (size > 100), guaranteeing razor-sharp, crystal-clear artwork on 2K and 4K smartphone displays.
- Smooth 60 FPS Album View Transitions: Resolved UI micro-stutters when opening Album or Playlist detail views with custom artwork. Updated ArtworkCacheManager.preloadAllArtworks to preload full FileImage instances into Flutter's ImageCache in the background, ensuring instant, stutter-free 60 FPS page transitions.
- "Forgotten Gems" Smart Playlist: Introduced a dedicated 4th Smart Playlist ("Forgotten Gems" / "Lagu Terlupakan" / "隠れた名曲") that automatically aggregates all tracks in the user's music library that are rarely played (playCount <= 2). Features custom diamond branding, instant playback integration, and full i18n localization support across English, Indonesian, and Japanese.
- Complete Settings Modals Light Mode Polish: Comprehensive audit and refinement across all Settings bottom sheets (Sleep Timer, Play Count Threshold, Accent Selector, Player Background Selector, Language Selector). Resolved dark-background leaks under Light Mode by making all modal sheets dynamically adapt their background, drag handle, divider, and text colors based on isAppLight.
- Unlimited Last Played Playlist Capacity: Completely removed the legacy hardcoded history cap on the Last Played smart playlist. Because track IDs are automatically deduplicated upon every playback session, the list now dynamically retains 100% of the user's listened tracks in exact recency order up to their entire music library size.