The device settings screen shipped with three defects:
- Sliders (audio sync, playback speed, subtitle sync, next-up prompt,
sleep timer) were rendered controlled with only onValueCommit, so the
thumb never moved and no gesture could change the value. A shared
SettingSlider now keeps a draft during the drag and commits once on
release; the admin RegistrySettingControl had the same bug and uses it
too.
- "Change how they look" called an onOpenPanel the page never passed.
The screen now opens the shared SubtitleAppearancePanelView scoped to
the selected device and profile, with a reset that clears the row.
- Every setting was shown for every device, so a browser offered
"Screen orientation" and native-only toggles. settingsgen now emits
the manifest's advisory platforms field into the TypeScript contract,
and the screen hides settings whose platforms exclude the target
device — unless the device stores a value, which must stay clearable.
audio_sync_ms, dolby_vision_enabled and dv_profile7_hdr10_fallback
gain native-only tags (no web consumer exists); platforms is advisory
UI metadata, so no revision bump.
Kotlin/Swift generators deliberately unchanged: the native clients
hardcode their own applicability today, and their vendored bindings are
regenerated from their own repos.
Part of #215
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>