Skip to content

fix(settings): offer native and custom resolutions and FPS in the modern lists - #280

Merged
papi-ux merged 1 commit into
masterfrom
fix/modern-settings-device-lists
Sep 5, 2026
Merged

fix(settings): offer native and custom resolutions and FPS in the modern lists#280
papi-ux merged 1 commit into
masterfrom
fix/modern-settings-device-lists

Conversation

@papi-ux

@papi-ux papi-ux commented Sep 5, 2026

Copy link
Copy Markdown
Owner

Summary

From nova#275 (second report in the thread): a custom resolution set under Settings > Advanced never appeared in the modern Client stream defaults > Resolution list, only in the legacy view. The modern settings read every list from the XML arrays alone; the legacy fragment appends the device's native modes and the custom values at runtime. So the modern list was missing both.

  • NovaDeviceListOptions mirrors the legacy additions as pure functions: the custom resolution first, then the notch-adjusted real size and every supported display mode (TV hosts keep the same 4K gate), with the portrait/landscape pair for squarish screens and the same labels (Custom (2560x1600), Native (Portrait) (…), Native Full-Screen (…)); on the FPS list, the custom refresh rate (90.0, the string form the legacy fragment stores) and the rounded native rate. Existing values are never duplicated; bad input is ignored.
  • NovaSettingDefinitions.load reads the device once (forDevice) and applies it to list_resolution and list_fps; every device read is wrapped so a missing display or preferences can never break settings load.
  • CHANGELOG Unreleased entry.

Not changed: the legacy fragment (it keeps its own code path), and the legacy behaviour that a custom value appears after the settings screen is reopened.

Exact candidate

Commit: 8dce261ec708241b18f8cb64c1c123d0d4336ae0
Tree: 46660f56799fb411a9709ccffe8555e30ea92f7b
Parent: 224693913dfe45e2b29d796021ae5ab361bfe0ee
Base: 224693913dfe45e2b29d796021ae5ab361bfe0ee

Verification

  • NovaDeviceListOptionsTest 5/5 (custom appended, dedupe and bad input, squarish pair, native and notch labels, FPS forms)
  • NovaSettingsDefinitionsTest 19/19 including the new Robolectric case, which fails against master's loader (RED) and passes here
  • KotlinPreferenceScreensMigrationTest 13/13, NovaSettingsUiStateTest 7/7
  • bash scripts/check-public-docs.sh, bash scripts/check-public-surface.sh, git diff --check: clean

Not covered: a device run of the modern settings screen; the full JVM suite and lint run in CI.

…ern lists

The modern settings read every list from the XML arrays alone, so a custom
resolution typed under Advanced only ever appeared in the legacy view, and
the device's native modes were missing from the modern resolution list
entirely (nova#275). NovaDeviceListOptions mirrors what the legacy fragment
appends at runtime: the custom resolution first, then the notch-adjusted
size and every supported display mode, with the portrait and landscape
pair for squarish screens, and the custom refresh rate and native rate on
the FPS list, in the same string forms the legacy fragment stores. The
maths is pure and unit-tested; NovaSettingDefinitions.load applies it once
per load, and a Robolectric case proves a custom resolution set in
preferences shows up in the modern list.
@papi-ux
papi-ux merged commit e8b35ea into master Sep 5, 2026
6 checks passed
@papi-ux papi-ux mentioned this pull request Sep 5, 2026
4 tasks
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.

1 participant