- Add FocusRequester support to ContentCard component
- Track focused row and item indices in HomeScreen
- Add focus restoration logic to CatalogRowSection
- Wire up focus callbacks to update state on focus changes
- Handle edge cases: item not composed, item no longer exists
Completes focus restoration feature started in f5ead7c7. When
returning from MetaDetailsScreen, focus now restores to the exact
ContentCard that was clicked, not just scroll position.
- Change selectedContainerColor from gray to teal with 30% alpha
- Change selectedContentColor from gray to teal
- Maintain existing bright teal focus border
- Improves visual distinction between selected/unselected states
- Added Android Log error logging in parseProgressMap() catch block
- Logs exceptions when JSON parsing fails to help diagnose data issues
- Prevents silent data loss without notification
- Uses "WatchProgressPrefs" tag for easy filtering in logcat
This will help identify and diagnose watch progress data corruption
issues that were previously failing silently.
- Replaced blocking map() with flatMapLatest() and flow builder
- Moved network operations to IO dispatcher using flowOn()
- Changed from imperative loop to functional mapNotNull()
- Prevents UI freezing when fetching multiple addons
- Improves responsiveness by running network calls on IO threads
This ensures that addon fetching doesn't block the main thread and
improves performance when loading multiple addons concurrently.
- Replaced three separate flow collectors with a single combined flow
- Prevents potential race conditions and reduces coroutine overhead
- Uses combine() to merge pluginsEnabled, repositories, and scrapers flows
- Single collector updates UI state atomically for all three values
This ensures that flow collection is more efficient and reduces the risk
of memory leaks from multiple concurrent collectors.
- Created HomeScreenFocusState data class to store scroll and focus state
- Added focus state management to HomeViewModel
- Implemented scroll position saving in HomeScreen using DisposableEffect
- Implemented scroll position restoration using LaunchedEffect
- Added horizontal scroll restoration support to CatalogRowSection
- Fixes issue where users lost their place when returning from detail screen
This ensures that when users navigate from HomeScreen -> MetaDetailsScreen
and back, their vertical scroll position and horizontal scroll positions in
catalog rows are properly restored.
- Changed FocusRing from subtle grey (#BDBDBD) to bright teal (#00E5CC)
- Changed FocusBackground from dark grey (#2B2B2B) to dark teal (#1A3D38)
- Changed BorderFocused to match FocusRing for consistency
- Improves focus clarity on Android TV with high contrast colors