Add typed video-quality selection to the options menu of all three skins - #965
Merged
diegotori merged 3 commits intoSep 16, 2026
Merged
Conversation
Codecov Report❌ Patch coverage is
Additional details and impacted files@@ Coverage Diff @@
## master #965 +/- ##
==========================================
+ Coverage 72.73% 77.70% +4.97%
==========================================
Files 41 43 +2
Lines 2560 2687 +127
==========================================
+ Hits 1862 2088 +226
+ Misses 698 599 -99 ☔ View full report in Codecov by Harness. 🚀 New features to boost your workflow:
|
Ortes
force-pushed
the
feat/video-quality-selection
branch
4 times, most recently
from
September 15, 2026 06:14
ef02e74 to
b95caf1
Compare
Collaborator
|
@Ortes looks like you have conflicts. Please resolve them. Thanks. |
Adds a VideoQuality model and ChewieController support for it (videoQualities, activeVideoQualityId, onVideoQualityChanged, setVideoQualities, selectVideoQuality), with a Quality entry and selection dialog in the Material, Material desktop and Cupertino controls, plus an OptionsTranslation.qualityButtonText override. Chewie owns the menu and the selection state; switching the stream is left to the host via onVideoQualityChanged — typically a swapVideoSource call for separate files per quality, or a rendition switch on an adaptive stream. The menu stays hidden until more than one quality is supplied.
Widget tests for the Cupertino and Material desktop quality flows (gating, active check mark, host callback, translated button text, the options-button gate for additionalOptions), plus unit tests for VideoQuality equality and the OptionsTranslation.qualityButtonText plumbing. The selection tests run while playing so the hide-timer restart paths are exercised too.
Ortes
force-pushed
the
feat/video-quality-selection
branch
from
September 16, 2026 19:32
b95caf1 to
00d4b3a
Compare
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
What this adds
A typed, host-driven video-quality picker, closing the long-standing ask in #852 and superseding #492 and #867:
VideoQuality {id, label}—idis opaque to chewie (a URL, an HLS rendition index, …).hasVideoQualities).setVideoQualities(...)for qualities known only after a manifest parses;selectVideoQuality(...)for programmatic selection; all three fields carried throughcopyWith.OptionsTranslation.qualityButtonTextfor i18n.Design: why not a
Map<String, String>of label → URL?That's the shape #492 and #867 used, and it's the reason both stalled: it can't express HLS/DASH rendition switching (one URL, many qualities), per-quality headers or DRM, or qualities discovered after load — and it forces chewie to own controller recreation, the exact concern raised in the #867 review. Instead, chewie owns the UI and selection state, and the host owns the switch — for the common separate-files case that's the three-line
swapVideoSourcecall from #963 shown above (demoed in the example app). This mirrors the shape of the subtitle/audio track proposals in #948/#949, so the three "pick one variant" features stay one pattern.Thanks @akmalova (#867) and @merdweebner (#492) for the groundwork.
Tests
Unit tests for the controller surface (gating, set/select semantics, notifications,
copyWith) and Material widget tests: menu gating, active-quality check mark, host callback on selection, and thequalityButtonTextoverride.