10 Commits
Author SHA1 Message Date
John Corser 9b565d0183 Add Seasons and Series navigation rows to season browse page
When browsing a season, show a 'Seasons' row listing the other seasons
of the same series and a 'Series' row linking back to the parent series,
so users can navigate to sibling seasons or the show from within a season.
2026-09-20 14:37:00 +02:00
John Corser cc66607ac3 Refactor: Extract HEVC and AV1 codec modules (#5646)
* refactor: extract HEVC and AV1 codec modules

Follows up on #5604 by extracting the HEVC and AV1 codec detection logic
out of MediaCodecCapabilitiesTest into their own modules. After this
change MediaCodecCapabilitiesTest is a thin delegation facade with no
logic of its own.

SDK version branching uses the shared AndroidVersion helper (#5672) so
the checks read clearly at the call site and can be mocked in tests via
AndroidVersion.sdkInt, rather than a codec-local DeviceSdk wrapper. The
same helper replaces the remaining raw SDK_INT check in MediaCodecQuery.

* fix: use media3 MimeTypes constants to avoid InlinedApi lint

MediaFormat.MIMETYPE_VIDEO_DOLBY_VISION requires API 24 but min SDK is
23. Hoisting it into a const val tripped the InlinedApi lint check.
Switch to the media3 library MimeTypes constants (plain strings, no API
gate), matching how Av1CodecCapabilities already references them.
2026-06-30 14:03:52 +02:00
John Corser 698d31b4ca Add AndroidVersion helper for readable, mockable SDK version checks (#5672) 2026-06-28 09:43:59 +02:00
John Corser 30b2332cdc Refactor: Extract MediaCodecQuery class and AVC codec module
- Extract codec query logic into MediaCodecQuery concrete class (no interface
  since there's only one implementation)
- Extract AVC level mapping into AvcCodecCapabilities module with unit tests
- Remove unused context parameter from MediaCodecCapabilitiesTest
- Remove obsolete SDK_INT < M check (min SDK is now 23)
- Fix detekt nesting issues by extracting helper methods and using Sequence
2026-06-12 21:30:34 +02:00
John Corser a2dbcee97a Add playback info overlay to display codec, bitrate, and play method (#5521) 2026-05-09 09:53:24 +02:00
John Corser b45e1b8147 perf: Defer LiveTV check until after main rows are displayed (#5544) 2026-05-03 21:43:06 +02:00
John Corser 3584647f83 Use lighter field set for home screen API requests
Reduces API response payload for home screen rows by excluding heavy
fields (MediaSources, MediaStreams, Chapters, Trickplay) that aren't
needed for display. Full item data is fetched when user selects an item.

Benchmark: Cold start to home screen fully loaded (Nvidia Shield)
- Baseline: ~5200ms
- With this change: ~3800ms
- Improvement: 27% faster

Measurement methodology: Time from MainActivity START to last
'Creating items' log entry, averaged over 3 runs per configuration.
2026-04-26 23:33:13 +02:00
John Corser 7c150da1df Fix back button only working once after MainActivity compose refactor
AppNavigationHost used LaunchedEffect(currentAction) to react to navigation
changes, but LaunchedEffect only re-runs when its key actually changes.
Since GoBack is a singleton object, pressing back multiple times emits the
same value — so the effect ran the first time but ignored every subsequent
back press.

Switched to collecting the flow directly with LaunchedEffect(Unit) {
flow.collect {} }, which runs on every emission even when the value is the
same object.
2026-04-18 22:17:14 +02:00
John CorserandNiels van Velzen 83e810985a Remember subtitle language between videos (#5519)
* Fix subtitle settings reset on NextUp screen

When the NextUp screen transitions to the next episode, it creates a new
PlaybackController which loses the subtitle settings. This is because
mCurrentOptions is null on fresh playback.

The fix mirrors the existing audio language handling:
- Save the subtitle language code when user changes subtitles
- Restore it by finding matching stream when starting fresh playback

Fixes jellyfin/jellyfin-androidtv#5436

* Remove debug logging

* Fix videoQueueManager injection in setSubtitleIndex helper function

---------

Co-authored-by: Niels van Velzen <git@ndat.nl>
2026-04-18 12:04:25 +00:00
John Corser d21b4e9a35 Add user-defined AVC/HEVC codec level override (#5520) 2026-04-18 13:44:56 +02:00