Releases: coflyn/Flow
Releases · coflyn/Flow
Release list
v1.0.4
v1.0.3
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.
v1.0.2
v1.0.1
Update to version 1.0.1 Multi-Select, Native Image Cropper & Major Stability Fixes Features - Multi-Select Batch Actions: Implemented "Hold to Select" across all song lists with a dynamic, theme-adaptive floating action bar for rapid mass additions to playlists and queue management. - Pure Flutter Image Cropping: Integrated a fully native `crop_image` engine replacing manual sliders. Features a 1:1 aspect ratio constraint for custom album covers and a 9:16 portrait constraint for custom backgrounds. - Custom In-App Cropper Modal: Designed a sleek, theme-consistent modal crop interface featuring deep dark backgrounds, crisp borders, and vibrant accent actions. Bug Fixes & Stability - Artwork Caching Race Condition Fix: Resolved a critical bug hiding the first 3 covers upon app launch by re-engineering the `ArtworkCacheManager` Native Platform Channel with a resilient 3-tier auto-retry loop and an anti-null failure mechanism. - Active Track Queue Validation: Fixed a playback disruption bug by intelligently hiding "Play Next" and "Add to Queue" actions for the currently active track and halting improper queue insertions. - Duration Calculation Consistency: Corrected album/playlist duration discrepancies by refactoring mathematical logic to use floor division, perfectly syncing album-level and track-level formats. UI & Rendering Improvements - 9:16 Real-Time Wallpaper Editor Mockups: Redesigned the live miniature UI previews under Settings to enforce a pristine 9:16 aspect ratio, meticulously relocating mock UI components to replicate the actual Player UI. - Jitter-Free Lyric Rendering & Dynamic Font Safety: Eliminated layout shifting in the synced karaoke lyrics engine and engineered a robust font name translator to eradicate silent gray-screen crashes. - Global Typography Inheritance: Fixed dynamic lyrics (Synced and Plain) to flawlessly inherit the globally injected GoogleFonts text theme. - Jitter-Free Sort Reordering: Disabled staggered animations during sort operations, allowing tracks to instantly rearrange without forcing unnecessary fade-in re-animations. - Settings Live Preview Enhancements: Updated the mock header in the Typography Live Preview from a generic string to a dynamic "Flow" string for a more authentic representation.