edde746
ac397f32a3
feat: redesign TV player controls
...
- BACK key dismisses layers (content strip → controls → exit) with
early BackKeyCoordinator marking to prevent PopScope race condition
- Hide volume control and PiP button on TV
- Fix focus chain with mounted-node-aware navigation for live/non-live
- Fix focus reclaim on controls hide (hasPrimaryFocus vs hasFocus)
to prevent screen-level self-heal from stealing timeline focus
- LEFT/RIGHT shows controls with timeline focused for seeking
Close #701
2026-03-15 03:10:51 +01:00
edde746
d236e7fec6
fix: tighten and align media detail screen spacing
2026-03-15 01:31:18 +01:00
edde746
6d7cdc4ef4
fix: preserve chapters/markers in cache during watch state sync
2026-03-15 01:04:13 +01:00
edde746
dd11e8d3b2
fix: scroll list tiles into view on dpad focus
2026-03-14 11:20:31 +01:00
edde746
4f736c555b
fix: make PlexMetadata type/key/title nullable for folder items
...
Plex API returns Directory entries without type field, causing
TypeError crash in fromJson. Made fields nullable and migrated
callers to use mediaType enum and displayTitle getter instead
of raw string access.
2026-03-14 05:40:14 +01:00
edde746
3d30ea1342
fix(macos): reduce idle CPU when video player is paused
...
- Remove vulkan-swap-mode mailbox (continuous GPU rendering even when paused)
- End playback activity assertion on pause, restore on play
- Fix PerformanceStatsService persistent frame callback leak
2026-03-12 23:22:58 +01:00
edde746
8a28a2c398
fix: only autofocus bottom sheets in keyboard/dpad mode
2026-03-12 05:02:52 +01:00
edde746
c062dd944e
feat: inline season tabs and d-pad focus improvements
2026-03-12 00:57:51 +01:00
edde746
5538e0627b
refactor: remove SeasonDetailScreen, unify into MediaDetailScreen
...
Extract EpisodeCard to its own widget file. MediaDetailScreen now handles
isSeason by showing episodes directly, with proper watch state tracking,
deletion handling, and D-pad focus navigation. Hide empty overview sections.
2026-03-11 23:08:39 +01:00
Micah Morrison
cb0ed15c0c
Fix issue with always on top getting stuck
2026-03-11 15:00:17 -04:00
edde746
4681d60850
fix: hide admin actions from non-admin users
...
close #677
2026-03-11 18:18:27 +01:00
edde746
78052dc07f
fix: player stuck on skip credits with no next episode
...
close #678
2026-03-11 18:02:33 +01:00
edde746
67c66ff0c1
fix: prevent layout shift for image placeholders
2026-03-11 15:02:38 +01:00
edde746
d1bb99635a
feat: configurable intro/credits marker regex patterns
...
Add settings to customize regex patterns for matching intro and credits
markers in chapter titles, with the current hardcoded values as defaults.
Also reclassifies real markers with non-standard type strings against the
configured patterns.
2026-03-11 15:00:24 +01:00
edde746
307fd354d6
fix: make overlay sheets dismissible when no descendant is focused
...
close #673
2026-03-11 13:30:07 +01:00
edde746
166e73cdaa
fix: sync button focus nodes with actual action count
2026-03-10 06:08:55 +01:00
edde746
42e066288f
fix: clickable title event bubbling and movie support
2026-03-10 01:57:28 +01:00
edde746
6daf77c890
feat: convert settings dialogs to platform-adaptive menus
...
Replace AlertDialog-based selection dialogs with popup dropdowns on
desktop/TV and bottom sheets on mobile, matching the context menu
pattern. Fix popup background blending into cards by tinting surface.
2026-03-10 01:18:33 +01:00
edde746
3c51760203
feat: mouse-only clickable text on media cards
2026-03-09 23:56:24 +01:00
edde746
82b0de9223
feat: display movie edition titles across all views
2026-03-09 16:16:37 +01:00
edde746
61e4bda616
fix: content strip text colors in light mode
...
close #659
2026-03-09 12:53:16 +01:00
edde746
0fc64cdf81
fix: catch seek PlatformException at source, remove coordinator
...
Catch COMMAND_FAILED/NOT_INITIALIZED in PlayerNative.seek() and
PlayerAndroid.seek() directly, preventing unhandled PlatformException
crashes on macOS app resume. Remove the ~200-line
_PendingSeekCoordinator system and revert all callsites to direct
player.seek(clampSeekPosition(...)). Keep seekable property/stream
and media controls gating. Add ExoPlayer seekable emission.
2026-03-09 07:21:36 +01:00
edde746
5be7b43cb8
fix: improve content strip text visibility
...
close #656
2026-03-09 01:04:14 +01:00
edde746
57420e51cf
fix: lazy client fetch in context menu
2026-03-08 19:03:03 +01:00
edde746
7a1f677c75
fix: content strip lint warnings
2026-03-07 22:10:45 +01:00
edde746
0b1f64ef8a
refactor: simplify mobile player controls
...
close #641
2026-03-07 20:48:17 +01:00
edde746
c56e73eefe
feat: add content strip for dpad navigation
2026-03-07 20:17:28 +01:00
edde746
7cfa18e1e9
fix: remove redundant thumbnail popup during dpad timeline seeking
2026-03-07 18:29:52 +01:00
edde746
06034bb8e7
feat: scale queue items for tablet screens
...
close #644
2026-03-07 17:06:13 +01:00
edde746
1318c54c0c
feat: improve performance overlay layout and add decoder details
2026-03-06 19:25:41 +01:00
edde746
c9a1bc97c4
fix: remove dead state paths and restore track hotkeys
2026-03-06 11:50:45 +01:00
edde746
c1e2bc36ea
refactor: share Apple MPV core and media helpers
2026-03-06 10:16:33 +01:00
Micah Morrison
a9c7130d55
Fix an issue setting episode artwork
2026-03-05 19:21:30 -05:00
edde746
22a733280a
fix: respect view mode in detail screens, disable scale in list mode
...
close #631
2026-03-05 17:38:38 +01:00
edde746
c785ce1f88
fix: queue sheet image loading priority with itemExtent
2026-03-05 16:11:14 +01:00
edde746
a2cd3397c9
fix: desktop context menu position and bottom sheet sizing
2026-03-05 14:25:23 +01:00
edde746
317d5dbdd9
feat: DV Profile 7→8.1 RPU conversion via libdovi
...
Convert Dolby Vision Profile 7 RPU NALUs to Profile 8.1 using libdovi
native bridge, preserving dynamic tone mapping on devices with DV8
decoders. Falls back to HEVC stripping when no DV8 decoder is present.
- Add JNI bridge (dovi_bridge.cpp) wrapping libdovi's RPU converter
- Download prebuilt libdovi from edde746/libdovi-builds releases
- DoviConvertingTrackOutput: DV81 mode converts RPUs, HEVC_STRIP strips
- Retry logic: if native DV7 decoding fails, auto-retry with conversion
- Performance overlay shows active DV conversion mode
2026-03-05 11:11:57 +01:00
edde746
5877673755
fix: reduce UI padding between media items
...
close #629
2026-03-04 18:36:12 +01:00
edde746
13b5d7bae8
feat: secondary subtitle tracks
...
close #625
2026-03-04 09:35:36 +01:00
edde746
3a76754af9
feat: custom GLSL shader import
...
close #624
2026-03-04 08:47:40 +01:00
edde746
cd2ab9d9cd
refactor: deduplicate shared patterns, replace hardcoded colors
2026-03-03 22:43:00 +01:00
edde746
cb7de47aed
fix: guard ScrollController.position access in HorizontalScrollWithArrows
...
Prevents "Too many elements" StateError on Android TV when the controller
temporarily has multiple positions during widget rebuilds.
2026-03-03 20:45:38 +01:00
edde746
c6ace690cb
refactor: clean up download code duplication
2026-03-03 16:31:02 +01:00
edde746
ebf2d1e516
fix: shorten nav labels
...
close #612
2026-03-03 12:13:43 +01:00
edde746
4bce668df6
fix: asymmetric divider in track sheet on landscape
2026-03-03 12:04:03 +01:00
edde746
1629801074
feat: add swipe-up content strip for mobile video controls
2026-03-03 11:03:31 +01:00
edde746
7001032e51
feat: combine audio & subtitle track sheets into one
2026-03-03 07:16:45 +01:00
edde746
47f2afb665
feat: bottom sheet polish
2026-03-02 21:24:53 +01:00
edde746
3b2e278868
fix: hide redundant items in context menu
2026-03-02 20:42:47 +01:00
edde746
8baa84c06f
fix: use player.state.track for selected subtitle check
2026-03-02 19:25:13 +01:00