Skip to content

← All documentation

Post-install setup · Y2Reborn

REBORN-UI-POLISH-02 — physical-device legibility validation

Documentation published by SchulzCode/Y2Reborn.

Instructions published by the project, shown here word for word.

REBORN-UI-POLISH-02 — physical-device legibility validation

> **Historical record.** The dates, candidate identity, "current" claims, > next steps and permissions below belong to this recorded boundary. See > [current state](../CURRENT_REBORN_STATE.md) for the latest physically observed result.

Status: host-validated candidate; manual Y2 installation and physical viewing remain intentionally pending.

This is a presentation-layer polish pass on the reset UI. AppModel, typed Action/Effect flow, platform services, playback, storage, radios, power, and the native GLES renderer remain in place. Y2Linux source was not changed.

Native-size review

All previews are deterministic Quad renders at exactly 480×360. They were reviewed at 1:1 pixel size after rasterization; the supplied reference PNGs were used as composition targets, never as shipped UI backgrounds.

Preview directory:

/home/luca/Dokumente/Code/Y2Reborn/out/reborn-ui-polish-02/previews/

ScreenPreview
Now Playingnow-playing.png
Librarylibrary.png
Artistartist.png
Queuequeue.png
Settingssettings.png
Quick Settingsquick-settings.png
Lock / minimal playerlock.png
Bootboot.png

The preview generator is app/reborn/src/bin/reborn-preview.rs; the host rasterizer is tools/preview/render_previews.py.

Physical-size tokens

The pack palette remains the source of truth. TEXT_MUTED is lifted from the pack's #747A83 to #858B93 for functional readability at normal handheld distance; operational secondary information uses the unchanged brighter secondary tier. No screen contains required information below 12 px.

TokenPolish value
Hero / track title26 px
Screen title22 px
Section title18 px
Primary row16 px
Body14 px
Secondary / compact functional12 px
Decorative label only10 px
Normal interactive row54 px
Status bar32 px
Mini-player stripy=306, 54 px
Now Playing artwork168×168 px
List artwork48×48 px
Album grid2×2 visible, 72 px artwork
Focus outline2 px warm gold

Functional text advance was tightened from the reset pass to reduce tracking on the physical panel. Integer coordinates are retained throughout the screen composition. DejaVu Sans and DejaVu Serif are the packaged, licensed atlas fonts (assets/fonts/DejaVu*.LICENSE) used by the existing native renderer.

State and focus policy

Canvas::active_panel is used for current/selected state: a quiet surface, gold icon/text, and a small accent marker. Canvas::focus_panel is reserved for the one item that Select would activate. Quad.focus_target is validation metadata ignored by native rendering; UI tests count it to enforce the one-focus invariant.

Playing/current state is separate from focus. Disabled items remain muted and are not focusable. Modal composition clears the underlying focus markers before emitting its single modal target.

Screen-by-screen report

Now Playing

Library

Artist

Queue

Settings

Quick Settings

Lock / minimal player

Boot

Truncation and animation

Static labels are authored to fit their controlled bounds. Runtime track, artist, album, Bluetooth, Wi-Fi, and SSID strings use a single ellipsis policy; there is no always-running marquee and no decorative animation loop. A future focused-item marquee, if needed on-device, must remain delayed and singular.

Physical input contract retained

The existing input boundary remains:

evdev device/keycode → InputManager → NormalizedInput → ActionRouter → Action → Ui/AppModel → Effect → service

The audited physical mappings are:

Physical controlLinux sourceNormalized eventSemantic action
SelectY2 navigation buttons, EV_KEY 28press/release; long at 650 msSelect / ContextMenu
BackY2 navigation buttons, EV_KEY 158press/release; longBack / Home
Previousnavigation 105 or keypad 165press/release/repeat; longPrevious / SeekBackward
Nextnavigation 106 or keypad 163press/release/repeat; longNext / SeekForward
Play/Pausenavigation 164 or keypad 57press/release; longPlayPause / ShowNowPlaying
Powermtk-pmic-keys, EV_KEY 116press/release; longScreenSleep / ScreenWake / PowerMenu
Volume −any supported device, EV_KEY 114press/repeatVolumeDown
Volume +any supported device, EV_KEY 115press/repeatVolumeUp
Wheel clockwiseclick wheel EV_REL 8 or key 108/109WheelClockwiselist down, or volume up in Now Playing
Wheel counter-clockwiseclick wheel EV_REL 8 or key 103/104WheelCounterClockwiselist up, or volume down in Now Playing

Long-press threshold is 650 ms; repeat starts at 400 ms and repeats every 90 ms. Wheel acceleration is centralized and caps at six steps. Long press suppresses the matching short release. Only Power produces ScreenWake while the display is off; volume and selected playback controls continue without waking, while wheel/navigation/select/back are ignored.

Validation performed for this pass

ARM release, offline Buildroot/rootfs packaging, hashes, and manual installation coordinates are recorded after the committed source is built.

Published by the SchulzCode/Y2Reborn project [1] [3]