Skip to content

Fix Xbox shell focus and library filter navigation - #6

Open
CyberoniOntoni wants to merge 6 commits into
feature/collection-navigationfrom
feature/xbox-shell-focus
Open

Fix Xbox shell focus and library filter navigation#6
CyberoniOntoni wants to merge 6 commits into
feature/collection-navigationfrom
feature/xbox-shell-focus

Conversation

@CyberoniOntoni

Copy link
Copy Markdown
Owner

Summary

Fixes Xbox focus behavior in the app shell and library filter toolbar.

  • Add ShellFocusCoordinator — search is not auto-focused on page navigation
  • Avoid invalid FocusState.Unfocused API usage that crashed on Xbox (0xc000027b)
  • Up from Home carousel focuses the search bar
  • Move library filter toolbar XYFocus bindings to code-behind for console stability
  • Reset Home first-item focus when returning to the page

~137 lines — stacks on the collection navigation PR.

Merge order

Merge after the collection navigation PR.

Test plan

  • Search is not focused by default after navigating to Home or library
  • Up from Home focuses the search bar
  • Opening Movies from Home no longer crashes
  • Library filter/clear buttons are reachable with controller

CyberoniOntoni and others added 5 commits June 20, 2026 22:13
…rm#93)

Centralize gamepad helpers in GamepadInput and route shell shortcuts through NavigationManager at the CoreWindow level. Map video transport controls for A/X/sticks/D-pad/LB/RB and add back navigation for WebVideo.

Polish: fix GamepadA stealing focus from transport controls, unify menu callbacks through RelayCommands, remove redundant Escape handler, and consolidate menu-open API.
Add a root CONTRIBUTING.md and a pull request template covering: single-purpose PRs; the 0-warning build as the only validation gate (there are no automated tests); manual testing of UI/playback/controller changes with the tested platform declared (real Xbox preferred, Windows acceptable); and PR descriptions with screenshots or recordings for UI changes. The guidelines are self-contained so contributors aren't routed to the AI-focused .github/copilot-instructions.md.
Page ViewModels started their data loads as fire-and-forget async work with
no cancellation (HomeViewModel.Initialize and ItemDetailsViewModel.HandleParameters
were async void; LibraryViewModel fired `_ = InitializeAsync()` and
`_ = RefreshItemsAsync()` from every sort/filter change). A superseded load's
post-await continuation could overwrite newer view-model state - for example,
rapidly toggling library filters could leave the grid showing the results of an
earlier selection.

Introduce a small shared CancellableLoad helper that owns a CancellationTokenSource,
cancels any prior in-flight load when a new one starts, and swallows the superseded
OperationCanceledException. Each affected ViewModel routes its load entry points
through it and threads the cancellation token into every Kiota GetAsync call, so a
superseded request is cancelled at the HTTP layer. Terminal state commits are guarded
with ThrowIfCancellationRequested so an already-completed request cannot write stale
state, and IsLoading is only cleared by the surviving load.
Load only the selected external subtitle via IRequestAdapter for Jellyfin-hosted tracks and CreateFromUri for third-party URLs. Route subtitle presentation by DeliveryMethod, cache bitrate per session, and ensure the device profile is initialized before playback info requests.
Target Xbox OS 22000+ in the app manifest, use JellyBox.exe entry point for Native AOT packages, and add a sideload-only win-x64 publish profile for Release builds.
@CyberoniOntoni
CyberoniOntoni force-pushed the feature/xbox-shell-focus branch 2 times, most recently from c1f7bd0 to 5a9c293 Compare June 23, 2026 10:49
@CyberoniOntoni
CyberoniOntoni force-pushed the feature/xbox-shell-focus branch 3 times, most recently from 54e2f39 to 9d055d4 Compare June 23, 2026 12:27
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants