๐ต The oUTSKIRTs Player - Changelog
๐ Build 32 (Current)
๐ฒ Fixed Random Sorting
- Consistent sorting: Visual playlist and player now follow the same random order
- Fixed random sorting - same order in UI and playback
- Resolved duplicate randomization between components
- Stable experience during playback
- Generally available sorting: No longer dependent on experimental features
- Sorting works always regardless of experimental settings
- Clean separation between sorting and experimental features
- Improved user experience with clear functionality
- Shuffle button for random: Generate new random order with one click
- Smart shuffle button that only appears when random sorting is selected
- Instant new order generation
- Visual feedback and debug logging
- User setting for sorting: Show/hide sorting controls as needed
- Dedicated setting in the settings menu
- Persistent setting remembered between sessions
- User-friendly control over UI complexity
๐ฏ Enhanced Sorting Experience
- Consistent sorting: Same order in UI and playback regardless of method
- Latest first: Sorted by modification date
- Alphabetical: Sorted by filename
- Random: Stable order with shuffle option
- Smart sorting control: Intelligent handling of sorting states
- Automatic clearing of random orders when switching to other methods
- Optimized memory usage
- Seamless navigation between different sorting methods
๐ Build 31 (Current)
๐ New Notification System
- Automatic new track checking: Every 2 hours between 08:00-22:00
- Smart baseline system prevents false positives on first activation
- Intelligent new song detection with MD5 hash comparison
- Battery optimized with WorkManager and network constraints
- Android notifications: Direct playback of new tracks
- 'Play new tracks' button in notification
- Perfect English grammar: '1 new song has been added' vs 'X new songs
have been added'
- Persistent setting remembered between app sessions
- Testing and troubleshooting: Manual functionality for
developers
- 'Check for new tracks now' button for instant testing
- Reset baseline button for testing purposes
- Experimental feature in settings menu
โก Performance and Stability
- Timeout protection: App no longer hangs on server issues
- Improved HTTP requests with connection and read timeouts
- Optimized startup performance with faster feeder API
- Correct API endpoint usage (get_latest_songs)
๐ Build 30
๐ Complete Translation System Migration
- Dynamic language switching: Language can now be changed without
app restart
- UI updates instantly when changing language
- No app restart necessary
- Faster and more fluid user experience
- Complete string migration: All UI strings now use the new
StringManager system
- Replaced all context.getString() and stringResource() calls
- Centralized string handling
- Consistent translation across all UI components
- Improved codebase: Optimized string management
- Removed dependency on Android's traditional string resources
- Improved UI responsiveness during language changes
- Complete migration of all dialog components
๐ง Technical improvements
- StringManager integration: New centralized string handling
- LocaleHelper update: Integrated with StringManager for dynamic
updates
- LocalizedText component: New Compose UI component for automatic
language updates
๐ Bug fixes
- Fixed issues with language changes interrupting playback
- Fixed UI components that didn't update during language changes
- Improved null-safety in string formatting
๐ Build 27
๐ New Update Structure
- Updated folder structure: APK files are now organized in
separate folders
- App/Stable - Stable builds for regular use
- App/Dev - Development builds for testing
- App/Oldbuilds - Older builds for archiving
- App folder no longer visible in folder browser
- Branch Preference (Experimental): Choose which branch to follow
- Stable - Only check stable branch for updates
- Development - Check both stable and development branches
- Only available when "Experimental Features" is enabled
- Development builds may be unstable
- Improved build navigation: Builds are now organized in
expandable lists
- Separate sections for Stable, Development and old builds
- Better overview of available builds
- Clear indication of build type and status
๐ง Technical improvements
- Enhanced update system: Support for multiple build branches
- DataStore integration: Branch preference stored locally
- Intelligent update checks: Checks relevant folders based on
settings
๐ Bug fixes
- App folder no longer visible in music browser
- Improved error handling for update checks
๐ Build 26
๐ต Playback Improvements
- No automatic song selection on startup: App no longer remembers
last song on startup
- No song is automatically selected when app starts
- Playback only starts with explicit user action
- User has full control over what plays
- Improved "Next" and "Previous" functionality: Consistent
behavior in app and notification
- "Next" and "previous" buttons now work the same in app and
notification
- Playback starts automatically when switching songs
- Resolved timing issues with Media3 queue and playback
- Language change without interruption: Language change no longer
interrupts playback
- Saves playback state (song, position, playing state) during language
change
- Reloads UI with new language without restarting the app
- Restores playback state after language change
- Much faster transition than previous restart
๐ง Technical improvements
- Improved state management: Better handling of playback state
- Optimized language change: New function that preserves playback
during language change
- Timing optimization: Resolved issues with Media3 queue and
playback
๐ Bug fixes
- Fixed issue where app automatically selected and started playback on startup
- Resolved problem where "next" in app didn't start playback
- Fixed language change that interrupted playback
- Improved user experience when switching songs
๐ Build 25
๐ฎ Player Size Improvements
- Restored Settings Player Minimization: Player now automatically
minimizes when going to settings
- Player minimizes to 25% of screen height when settings menu opens
- When leaving settings, player returns to its previous size
- Smooth animation with 300ms transition for better user experience
- Improved Player Size Handling: Optimized logic for player size
restoration
- Saves user's chosen player size when going to settings
- Restores correct size when leaving settings
- Updates saved size when user manually changes player size
๐ฑ Update Dialog Improvements
- Responsive Update Dialog: Improved dialog size for small phones
- Increased dialog height from 35% to 60% on small phones
- Increased dialog height from 35% to 45% on normal phones
- Adjusted text size and button height for better visibility
- Scrollable Dialog: Added scroll functionality for safety
- All content is now accessible regardless of screen size
- Scroll only appears when necessary
- Future-proof solution that handles additional content
- Optimized UI for Small Devices: Reduced padding and spacing on
small phones
- Reduced padding from 24dp to 20dp on small phones
- Smaller spacing between elements to save space
- Larger buttons (44dp) that are easier to tap
๐ง Technical Improvements
- Animated Player Size: Implemented smooth animation for player
size changes
- Improved State Management: Better handling of player size state
- Responsive Design: Optimized UI for all device sizes
๐ Bug Fixes
- Restored functionality to minimize player when going to settings
- Fixed issue where update dialog was too small on small phones
- Resolved problem where buttons in update dialog weren't visible
- Improved user experience on small devices
๐ Build 22
๐ง Telemetry System Overhaul
- Session-based Tracking: Complete redesign of telemetry system for precise playtime measurement
- Implemented incremental play timer that only tracks playtime since last event
- Play segments start at play/resume/seek and stop at pause/complete/stop
- Eliminates double-counting and accumulation of playtime
- Pause Time Exclusion: Pause time no longer counts as playtime
- When song is paused, only actual playtime since last event is registered
- Resume starts new timer from zero
- Seek operations start new play segments for correct time-tracking
- Intelligent Event Handling: Improved event logic for precise statistics
- Prevents false pause events during song switching
- Correct handling of natural song completion vs manual skip
- Backend validation prevents double-registration within 5 seconds
๐ Improved Statistics Accuracy
- Accurate Playtime Reporting: Each pause/complete sends only incremental playtime
- First pause: only playtime since start
- Second pause: only playtime since resume (not accumulated)
- Song completion: only playtime since last resume
- Session vs Incremental Tracking: Intelligent distinction between event types
- Stop events (song switch): send total session playtime
- Pause/complete events: send only incremental playtime since last event
- Seek Handling: Seek operations don't affect playtime calculations
- Stops current segment before seek
- Starts new segment after seek
- Seek time doesn't count as playtime
๐ ๏ธ Technical Improvements
- Session Variable Reset: Complete reset of all timers during song switch
- Debug Logging: Extended logging for telemetry debugging and validation
- Backend Validation: PHP backend accepts duration from both play_stop and play_complete events
๐ Bug Fixes
- Fixed double-registration of playtime when songs end naturally
- Fixed pause time being included in total playtime
- Eliminated false pause events during automatic song transitions
- Fixed incorrect duration calculation during manual song switch while paused
๐ Build 20
๐ฌ Comment System Improvements
- Improved Comment Workflow: Dialog no longer closes when sending comments
- Comment field automatically resets after submission
- Dialog switches to "All feedback" tab to show the new comment
- User experience is now more intuitive and efficient
- Optimized Comment Interface: Comment field always starts empty when dialog opens
- Makes it faster to write new comments
- Removes the need to delete old text first
- Previous settings (alias/privacy) are still saved
- Fixed Anonymous Display: Resolved "null" problem in comment lists
- Both real NULL and text string "null" now display as "anonymous"
- Consistent handling across all feedback displays
- Improved data integrity for existing comments
๐ง System Optimization
- Removed WiFi Status Logging: Eliminated regular WiFi status logging for less noise in logs
- Improved Data Handling: Better null-value handling in database/API communication
๐ Bug Fixes
- Fixed issue where comment field wasn't reset after submission
- Fixed race condition between UI state and data refresh
- Improved anonymous display for both existing and new comments
๐ Build 18
๐ฎ Android TV Navigation & UX Improvements
- Increased Minimum Player Size: Raised from 40% to 45% on Android TV for better visibility
- Implemented Double-click Toggle: Improved double-click functionality with intelligent toggle
- Double-click on player area toggles between maximized (80%) and saved size
- Double-click on tabs minimizes player to saved size (all devices)
- Toggle logic detects if player is maximized (>75%) and switches accordingly
- Improved Double-click Navigation: Fixed compatibility with all input methods
- Hybrid solution combines onClick for single-click and detectTapGestures for double-click
- Single-click works with keyboard, remote, mouse and touch
- Double-click works only with mouse and touch (as expected)
- Tab navigation works correctly with remote and keyboard
๐จ UI & User Interaction
- Responsive Size Control: Improved user experience on all devices
- Cross-platform Compatibility: Functionality works on Android TV, tablets, phones and desktop
๐ Bug Fixes
- Fixed double-click on tabs that didn't work due to onClick conflicts
- Resolved tab navigation issues after double-click implementation
- Improved input method compatibility for all device types
- ๐ฏ Improved Android TV player focus handling
- ๐ All player buttons (play/pause, prev/next, cast, settings) now keep player maximized
- ๐ฑ Player remains maximized when navigating around all buttons in player area
- ๐ฎ Only minimizes when navigating away from player area completely (tabs/content)
- โก Responsive scaling of cast and settings buttons based on player size
- ๐จ Improved user experience on Android TV/Google TV
- ๐ต Lyrics button moved to player area on Android TV/Google TV for easy remote access
- ๐บ Lyrics button positioned to the left of cast button on TV platforms
- ๐ฑ๏ธ Maintains original lyrics button placement on non-TV devices with mouse/touch
- ๐ Complete telemetry system implemented
- ๐ต Playback statistics sent to server
- ๐ Dashboard with real-time statistics and analytics
- ๐ Password-protected admin interface
- ๐พ MySQL database for telemetry data storage
- ๐ฑ Device and song statistics tracking
- ๐ฏ Completion percentage and playtime recording
- ๐ก Cast vs local playback differentiation
- ๐๏ธ Folders filtered to only show those with MP3 files
- ๐งน Code cleanup - removed Cast diagnostics and legacy code
- ๐ง Telemetry double-registration and timing issues fixed
- ๐ Complete telemetry documentation (TELEMETRY.md)
- ๐ก Complete Google Cast integration implemented
- ๐ต Cast button in player with device dialog and connection
- ๐ผ๏ธ Cover art on Cast devices via local HTTP server
- โญ๏ธ Autoplay to next song during Cast playback
- ๐ Real-time position tracking and scrubber control
- ๐ Waveform generation and display during Cast
- ๐ Fresh cover art fetching on song change
- ๐ MD5 hash for unique image IDs (no collisions)
- โก Proper HTTP protocol with CORS support
- ๐ ๏ธ Concurrent job management for waveform generation
- ๐ฑ Improved UI spacing between Cast and Settings buttons
- ๐ Full Danish/English localization of Cast features
- ๐๏ธ Scrubber type persistence implemented
- โ๏ธ Cast system simplified to custom receiver only
- ๐ App information with version, build and date
- ๐ Changelog functionality added
- ๐ง Settings refactored to correct structure
- ๐ App restart synchronization implemented
- ๐ต Music service preserves state on app restart
- ๐ฑ UI automatically syncs with player state
- ๐ Auto-scroll in lyrics viewer
- ๐ฏ Follow automatically button with visual feedback
- โก Smooth scrolling to current line
- ๐ง Improved lyrics performance with LazyColumn
- ๐ค Special characters in filenames supported
- ๐ Improved handling of &, +, # in both root and subfolders
- ๐ต SRT files now found correctly in all folders
- ๐ Bug fixes in URL encoding
- ๐ค SRT lyrics support implemented
- ๐ Automatic lyrics loading from SRT files
- โฐ Time-synchronized text display
- ๐ Comprehensive debug logging added
- ๐ Complete internationalization (Danish/English)
- ๐ณ๏ธ Automatic language detection based on system
- ๐ฉ๐ฐ Danish flag icons and language selector
- ๐ Automatic app restart on language change
- ๐จ Dark/Light theme support
- ๐ต Basic music player functionality
- ๐ฑ Material Design 3 UI
- โญ Favorites system
- ๐ Folder browsing from server
- ๐ Waveform visualization
- ๐๏ธ Player controls (play, pause, skip)
- ๐จ Cover art display
- ๐ Shuffle and autoplay functions