All notable changes to Flix will be documented in this file.
The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.
- The backdrop pan no longer stops partway through a slide: it runs on its own
ObjectAnimatorinstead of sharing the view'sViewPropertyAnimatorwith the crossfade (whosesetDurationcould retroactively shorten it), and its duration now derives from the real slide period rather than a staleROTATION_INTERVAL_MSconstant that had stopped governing rotation - Pan now runs one crossfade longer than a slide is on screen, so motion is still going as the image swaps out
- Release branding is opt-in via
flix.showLogoinlocal.properties(gitignored, defaults to false), so public releases ship unbranded without anyone having to remember to flip a build flag back
- Critical: Cold-start server discovery took 45-90s because
discoverServers()tested every connection candidate for every server one at a time, each with a 15s timeout - on a 3-server account this meant every unreachable LAN/Docker address on every server on the account cost a full serial 15s - Server discovery now races all servers, and all connection candidates within each server, concurrently (structured concurrency, losers cancelled on first success) using a short 3s probe timeout on a dedicated probe client, while the main data client keeps its generous 15s timeout for real artwork/library requests
- The last-known-good connection per server is now cached and probed first on the next launch; a hit skips discovery for that server entirely - the big win for a screensaver process that restarts constantly
- Corrected the ".plex.direct avoidance" comment/logic: plex.tv issues .plex.direct hostnames for nearly all connections including LAN ones (they carry the wildcard TLS cert), so hostname shape was never a reliable signal for "non-local" - local-first ordering is now driven by Plex's own
localflag plus a cheap, DNS-free same-subnet heuristic instead
- Minimal JVM unit test setup (
app/src/test, JUnit4 + kotlinx-coroutines-test) covering connection ordering, subnet matching, dashed-IP parsing, and the first-success-wins race helper
- Critical: Aggressive prioritization of direct IP addresses over .plex.direct hostnames
- DNS resolution failures when accessing library sections after server selection
- Improved error messages for .plex.direct DNS issues with troubleshooting guidance
- Connection status indicators in server selection (colored dots)
- Relay connection support (previously disabled)
- Enhanced diagnostic logging for server discovery
- Increased connection timeout from 5s to 15s for better reliability
- Server discovery now includes relay connections (
includeRelay=1) - Servers with failed connection tests are now shown with status indicators
- Server list displays connection status via colored dots (green/orange/red)
- Server discovery issues for users behind complex NAT/firewall setups
- Servers not appearing when only relay connections available
- Connection timeout too short for slower networks
- Improved error handling when server discovery fails
- Version number display on main screen
- Connection testing for Plex servers to find working URI
- BuildConfig flag to control Flix logo visibility (debug vs release builds)
- APK signing - releases are now properly signed and installable
- DNS resolution errors for .plex.direct hostnames on Android TV
- Connection timeouts (5s connect, 10s read/write) prevent hanging
- Android TV screensaver settings navigation fallback
- Connection now prefers direct IP addresses over .plex.direct hostnames
- Manual navigation may be required for screensaver settings on some Android TV devices
- Initial APK signing configuration for GitHub Actions
This is an early alpha release for testing. Expect bugs and incomplete features!
- GitHub Actions CI/CD workflow
- Issue and PR templates
- CONTRIBUTING.md guide
- EditorConfig for consistent code formatting
- Debug build variant with separate app ID
- BuildConfig fields for version info
- Lint warnings present (non-blocking)
- Requires manual API key configuration for enhanced artwork
- QR code-based Plex authentication with auto-fill PIN
- Web-based API key configuration via QR code
- Support for Fanart.tv HD artwork
- Support for TMDB backdrops and logos
- Server selection screen
- Library selection screen
- API settings screen with real-time validation
- Preview mode for testing screensaver
- Dynamic color-extracted gradients
- Ken Burns pan effect
- Smart aspect ratio-aware logo sizing
- Blur background layer (Android 12+)
- 4K Plex clearLogo support
- Smooth crossfade transitions
- Auto-discovery of Plex servers
- SSL certificate validation for external APIs
- Secure API key storage in SharedPreferences
- Local-only HTTP server for configuration
- OAuth device linking for Plex authentication
- ProGuard/R8 obfuscation enabled
- Logo alignment on screensaver
- Button spacing on main screen
- QR code sizing consistency
- SSL validation for external APIs
Use this for future releases:
## [X.Y.Z] - YYYY-MM-DD
### Added
- New features
### Changed
- Changes to existing functionality
### Deprecated
- Features that will be removed
### Removed
- Removed features
### Fixed
- Bug fixes
### Security
- Security improvements