Commit Graph

2596 Commits

Author SHA1 Message Date
Arkadiusz Fal
d4f8cade90 Let tvOS chapter capsule grow with its title 2026-04-18 20:38:01 +02:00
Arkadiusz Fal
851c7e2ebf Fade out tvOS player controls on auto-hide 2026-04-18 20:38:01 +02:00
Arkadiusz Fal
944f849929 Revert "Fade out tvOS player controls on auto-hide"
This reverts commit a65fbc44ff721a7cb73afd04c41bd44d58bcb034.
2026-04-18 20:38:01 +02:00
Arkadiusz Fal
eb697b7bbc Add List/Grid layout option for Home sections
Introduces a "Display sections as" picker in Home settings with List and
Grid modes. Grid renders each section as a horizontal shelf of video
cards, defaulting to Grid on tvOS and List on iOS/macOS. Per-platform
defaults are preserved via a platform-specific settings key.

On tvOS the shelf is a focus section so swiping up/down between rows of
different lengths works without getting stuck at the end of a row.
2026-04-18 20:38:01 +02:00
Arkadiusz Fal
758f4a678d Fade out tvOS player controls on auto-hide 2026-04-18 20:38:01 +02:00
Arkadiusz Fal
c52796db75 Remove seek time overlay from tvOS storyboard preview 2026-04-18 20:38:01 +02:00
Arkadiusz Fal
d422bf13e5 Add Open URL and Remote Control as sidebar items
After disabling home shortcuts on tvOS, Open URL and Remote Control had
no entry point. Add them as configurable sidebar main items. Remote
Control defaults to visible on tvOS; Open URL defaults to hidden on all
platforms.
2026-04-18 20:38:01 +02:00
Arkadiusz Fal
e141a168f0 Use video context menu ControlGroup only on iOS 2026-04-18 20:38:01 +02:00
Arkadiusz Fal
43f62d997f Match tvOS seek preview to iOS glass design 2026-04-18 20:38:01 +02:00
Arkadiusz Fal
7067413b9b Push channel onto nav stack from tvOS details panel
The "View Channel" button in the tvOS video details panel only dismissed
the player; the channel was never pushed. Delegate to
NavigationCoordinator.navigateToChannel(for:collapsePlayer:) so
UnifiedTabView's pendingNavigation observer appends the destination,
matching iOS behavior and handling extracted/media-source cases.
2026-04-18 20:38:01 +02:00
Arkadiusz Fal
c3de87a12e Add channel avatar to tvOS player controls
Matches the iOS controls by showing the channel avatar next to the
video title and channel name, reusing ChannelAvatarView and the
Yattee Server fallback.
2026-04-18 20:38:01 +02:00
Arkadiusz Fal
4837fc6548 Make tvOS details panel use full screen 2026-04-18 20:38:01 +02:00
Arkadiusz Fal
f2c2a86d47 Reorder tvOS player controls and add Previous button
Close button is now the rightmost action (after Queue), matching the
user-requested layout. A Previous button sits before Next and appears
whenever a queue is present, disabled until history accumulates.
2026-04-18 20:38:01 +02:00
Arkadiusz Fal
29782035f7 Open queue sheet from tvOS player controls
Turn the tvOS bottom-row queue count indicator into a focusable button
that opens QueueManagementSheet in a fullScreenCover with an
ultraThinMaterial backdrop, matching the Settings sheet pattern. Hide
the sheet's close toolbar button on tvOS (Menu button dismisses) and
replace the unusable Menu-based queue mode picker with an icon-only
tap-to-cycle button.
2026-04-18 20:38:01 +02:00
Arkadiusz Fal
9aeb329b64 Remove tvOS scrub hint labels from progress bar 2026-04-18 20:38:01 +02:00
Arkadiusz Fal
24a728e692 Cancel tvOS scrub with Menu button instead of seeking
Pressing Menu while scrubbing now discards the pending scrub and leaves
playback time unchanged, instead of committing the seek via the
focus-loss path.
2026-04-18 20:38:01 +02:00
Arkadiusz Fal
bfc646a73f Scale tvOS scrub step by swipe rate
tvOS rasterizes Siri Remote touchpad swipes into discrete onMoveCommand
events at ~300-400ms, so a fast swipe and a single tap delivered the
same fixed step. Track gap between events: rapid same-direction events
(under 500ms) build a streak that multiplies the step via a power curve,
while deliberate taps still land on the base step.
2026-04-18 20:38:01 +02:00
Arkadiusz Fal
4c29ca9455 Seek with remote arrows when tvOS scrubber is focused
Pressing left/right on the focused progress bar now triggers the same
accumulating 10s seek as the hidden-controls flow, but updates the
visible scrubber in place with no overlay. Both tvOS arrow-seek paths
accumulate a signed net offset so a reverse press subtracts from the
pending amount instead of restarting from the current playback time.
2026-04-18 20:38:01 +02:00
Arkadiusz Fal
9260d48f4c Make tvOS sidebar main navigation toggles focusable
The tvOS Main Navigation list relied on .onMove with native Toggle
rows inside editMode, which leaves only the drag handle focusable on
tvOS. Replace it with a TVSidebarMainItemRow modeled on the home
customization screen: explicit up/down chevrons on the left and a
tap-to-toggle checkmark button as the row body. Required items render
disabled with a dimmed checkmark.
2026-04-18 20:38:01 +02:00
Arkadiusz Fal
2dcfe52bfb Fix broken modifier chain around playback speed menu style 2026-04-18 20:38:01 +02:00
Arkadiusz Fal
c7d1f1c20b Seek with remote arrows when tvOS player controls are hidden
Left/right on the Siri Remote now seek instead of revealing controls,
reusing the iOS tap-seek accumulation handler and feedback overlay so
rapid presses compound into a single "+30s" / "-20s" jump. Up/down
still show controls.
2026-04-18 20:38:01 +02:00
Arkadiusz Fal
f5ddcd0fa5 Keep tvOS seek bar stationary and float preview above 2026-04-18 20:38:01 +02:00
Arkadiusz Fal
0d5a733b0b Remove redundant center transport controls on tvOS
Siri Remote already handles play/pause and seeking natively, so the
on-screen skip/play/pause cluster was duplicate UI. Initial and
restored focus now targets the progress bar.
2026-04-18 20:38:01 +02:00
Arkadiusz Fal
c7942ef555 Rework tvOS player controls and settings sheet
Replace the tvOS bottom action bar with Settings / Info / Comments /
Next / Close. Settings reuses QualitySelectorView (video, audio,
subtitles, speed); Comments opens TVDetailsPanel directly on the
comments tab; Close stops playback and dismisses.

Debug button is hidden by default and can be re-enabled via a new
tvOS-only Advanced Settings > Developer toggle.

Present the settings sheet as a fullScreenCover with a centered
material card, fix the "Normal" hyphenation, and restyle row selection
throughout the quality selector on tvOS: per-row rounded backgrounds
with focus tint + stroke, vertical spacing instead of dividers, and a
focusable speed-rate menu.
2026-04-18 20:38:01 +02:00
Arkadiusz Fal
4f9285686a Avoid collapsed sidebar pill overlapping search on tvOS
Use the tab root's top safe-area inset instead of a fixed 20pt, so the
search/options header in History and Bookmarks clears the floating "Home"
pill drawn by the sidebarAdaptable TabView.
2026-04-18 20:38:01 +02:00
Arkadiusz Fal
d111f93462 Add vertical space between Home section header and rows on tvOS 2026-04-18 20:38:01 +02:00
Arkadiusz Fal
39a04ba7a4 Hide Home shortcuts on tvOS 2026-04-18 20:38:01 +02:00
Arkadiusz Fal
babaca74f2 Keep playback alive when dismissing tvOS player with Menu button
Calling stop() on Menu-button dismiss cleared currentVideo and tore down
the backend, so audio did not continue and the "Now Playing" sidebar
tab never appeared. Match the iOS/macOS dismissal path instead and just
collapse the fullScreenCover.
2026-04-18 20:38:01 +02:00
Arkadiusz Fal
2c49a5e65a Update localizable 2026-04-18 20:38:01 +02:00
Arkadiusz Fal
9e95a91284 Sync sidebar/tab bar/home layout per-platform via iCloud
Extends `SettingsKey.isPlatformSpecific` to cover home, tab bar, and
sidebar layout, plus player details panel and video swipe actions, so
iOS devices sync these with other iOS devices (and tvOS with tvOS,
macOS with macOS) instead of overwriting each other via the shared
iCloud key. Adds a one-shot migration that copies legacy unprefixed
values into the new platform-prefixed slots locally and in iCloud,
preserving protected-key timestamps.
2026-04-18 20:38:01 +02:00
Arkadiusz Fal
f4605e7390 Force plain list style on tvOS and hide setting from appearance
Inset/grouped list style doesn't work well with tvOS focus effects.
Always return .plain on tvOS and hide the list style picker from
appearance settings.
2026-04-18 20:38:01 +02:00
Arkadiusz Fal
8253b1a247 Hide dividers between recent search items on tvOS 2026-04-18 20:38:01 +02:00
Arkadiusz Fal
454f10b3ab Show selected content type in tvOS Type filter button
Display the current selection (All/Videos/Playlists/Channels) instead
of the static "Type" label so users can see the active filter at a
glance.
2026-04-18 20:38:01 +02:00
Arkadiusz Fal
d8722e6150 Remove overlay pattern from tvOS search results to fix focus clipping
The backgroundStyle.ignoresSafeArea().overlay(ScrollView) pattern
clips the tvOS focus effect at the overlay boundary. On tvOS, render
the ScrollView directly so focus highlights can extend naturally.
2026-04-18 20:38:01 +02:00
Arkadiusz Fal
885c478857 Increase top spacing for tvOS focus effect on first content row
Add padding above the content area so the tvOS focus highlight on the
first row isn't clipped by the search header above it.
2026-04-18 20:38:01 +02:00
Arkadiusz Fal
c3a2f7a965 Add bottom padding to tvOS search header for focus effect clearance 2026-04-18 20:38:01 +02:00
Arkadiusz Fal
5417374275 Consolidate tvOS search header: search, type, filters, view options
Reorganize the tvOS search UI into a single header row with search
field, type filter menu, combined filters menu (sort/date/duration
with reset), and view options button. Removes the separate filter
strip between search and results on tvOS.
2026-04-18 20:38:01 +02:00
Arkadiusz Fal
debfdef26f Increase grid spacing on tvOS for focus effect clearance
The tvOS focus effect scales up the focused card, causing it to overlap
adjacent cards' text. Increase grid spacing from 32 to 48 points.
2026-04-18 20:38:01 +02:00
Arkadiusz Fal
84db5d0c42 Use List instead of Form for View Options on tvOS
Form inside a sheet causes clipped rows and invisible text on focused
items due to white-on-white rendering. Use a plain List on tvOS which
handles the focus styling correctly.
2026-04-18 20:38:01 +02:00
Arkadiusz Fal
310869fad8 Add horizontal padding to View Options sheet on tvOS
Prevents form rows from being cut off at the left and right edges
of the narrow tvOS sheet.
2026-04-18 20:38:01 +02:00
Arkadiusz Fal
58c3bdc0b6 Wrap View Options sheet in NavigationStack on tvOS for picker labels
The .pickerStyle(.menu) hid labels. Instead, wrap the Form in a
NavigationStack on tvOS so the default navigation picker style works
and shows both labels and values.
2026-04-18 20:38:01 +02:00
Arkadiusz Fal
338127c692 Fix disabled pickers in View Options sheet on tvOS
Use .pickerStyle(.menu) for Row Size, Columns, and Channel Strip
pickers on tvOS so they work inside a sheet without NavigationStack.
2026-04-18 20:38:01 +02:00
Arkadiusz Fal
893878c8a3 Update localizable 2026-04-18 20:38:01 +02:00
Arkadiusz Fal
d62ba1e143 Hide list row dividers and card clipping on tvOS
Dividers inside rows conflict with the tvOS focus highlight effect.
Remove dividers and the inset card background/clipShape on tvOS so
the focus effect renders cleanly without visual artifacts.
2026-04-18 20:38:01 +02:00
Arkadiusz Fal
3c7581de1a Replace search content type segmented picker with Menu on tvOS
Unifies the filter strip on tvOS so all filters (sort, date, duration,
content type) use the same inline Menu style instead of mixing menus
with a segmented picker.
2026-04-18 20:38:01 +02:00
Arkadiusz Fal
831773a609 Replace search filters sheet with inline menus on tvOS
The filters sheet is too small and awkward on tvOS. Replace the filter
button with inline Menu pickers for Sort By, Upload Date, and Duration
directly in the filter strip. Applied to both SearchView and
InstanceBrowseView.
2026-04-18 20:38:01 +02:00
Arkadiusz Fal
bcb0864fca Fix tvOS search view: replace searchable with inline TextField, fix clipped focus
Use inline TextField with focusSection instead of .searchable() on tvOS
to prevent keyboard/navigation title overlap. Remove clipShape on recent
search items so tvOS focus effect is not cut off.
2026-04-18 20:38:01 +02:00
Arkadiusz Fal
bbeb38ecf0 Hide link action, clipboard, and handoff settings on tvOS
These features are not available on Apple TV: clipboard monitoring,
default link action (no tap/share), and Handoff continuity.
2026-04-18 20:38:01 +02:00
Arkadiusz Fal
5ae1fc3f29 Fix tvOS instance browse view overlapping search and navigation UI
Use inline TextField with focusSection instead of .searchable() and
.navigationTitle() on tvOS, matching the pattern in HistoryListView.
2026-04-18 20:38:01 +02:00
Arkadiusz Fal
4b245ec176 Improve tvOS settings layout: use navigation instead of sheets, fix focus clipping
- Replace sheets with navigationDestination for Add/Edit Source on tvOS
  (tvOS sheets have fixed size that doesn't fit the content)
- Fix focused cell clipping by replacing TVSettingsContainer's frame-based
  layout with safeAreaInset, matching the main settings view pattern
- Use standard List with .listStyle(.grouped) for Sources on tvOS
- Add sidebar icons and titles to TVSettingsContainer for all settings
  subviews, utilizing the left column space
- Remove redundant large navigation titles on tvOS (shown in sidebar)
- Move Edit Source Save button from toolbar into form above Delete button
  for better tvOS focus navigation
2026-04-18 20:38:01 +02:00