Console-UI sweep: touch gestures, controller-audio rows, host-menu bind/clipboard, Android idle gates #333

Merged
enricobuehler merged 3 commits from worktree-console-ui-sweep-wps into main 2026-08-19 14:26:36 +00:00
Owner

Implements WP1–WP6 of punktfunk-planning/design/console-ui-sweep-2026-08-19.md (the console-UI sweep against the Android host).

  • WP1 — touch deferred-tap + drag-to-scroll. PointerInput::Down grows a touch: bool (SDL Finger* arms and Android toolType feed it; SDL's touch-synthesized mouse events are dropped via SDL_TOUCH_MOUSEID). The shell tracks the gesture: a lift within slop is a tap delivered at the anchor; past slop it's a drag emitting one synthetic scroll tick per 56dp of dominant-axis travel — zero widget changes, every screen already interprets Scroll. Fixes the on-glass defect where any swipe across the settings list cycled the value it landed on. Mouse behavior is byte-identical; fling is deliberately left for a follow-up (the Release edge remains reserved).
  • WP2 — Controller haptics + Controller speaker rows (pad_haptics, pad_speaker) in the Controller tab, forwarding-gated like their siblings; the speaker row edits the stored string the way the GTK switch does ("mix" reads Off). Row detail strings are platform-aware now (desktop-only chords aren't taught on Android).
  • WP3 — Send logs was already desktop-gated on main; pinned by a test.
  • WP4 — ConsoleCmd::BindProfile (the port design's WP5 leftover): "Default profile…" host-menu action → pin_hosts-style chooser; desktop arm writes KnownHost::profile_id, Kotlin arm mirrors it.
  • WP5 — per-host Shared clipboard toggle on the host menu (HostRow::clipboard_sync, ConsoleCmd::SetClipboard, both service arms). Platform defaults stay divergent on purpose — the console only shows and writes the stored value.
  • WP6 — Android idle gates: the reachability sweep probes only while the console is attached; the render thread drops to half rate after 60 s without input.

Gates run: cargo fmt (all edited crates), :app:testDebugUnitTest green (compiles the full Android-target Rust stack for all 3 ABIs + JNI import check). Desktop-side compile/tests + settings-scene raster re-baseline ride this PR's CI. Not included: WP5b (Android SendLogs wiring via logring) — on demand per the plan.

Implements WP1–WP6 of `punktfunk-planning/design/console-ui-sweep-2026-08-19.md` (the console-UI sweep against the Android host). - **WP1 — touch deferred-tap + drag-to-scroll.** `PointerInput::Down` grows a `touch: bool` (SDL `Finger*` arms and Android `toolType` feed it; SDL's touch-synthesized mouse events are dropped via `SDL_TOUCH_MOUSEID`). The shell tracks the gesture: a lift within slop is a tap delivered **at the anchor**; past slop it's a drag emitting one synthetic scroll tick per 56dp of dominant-axis travel — zero widget changes, every screen already interprets `Scroll`. Fixes the on-glass defect where any swipe across the settings list cycled the value it landed on. Mouse behavior is byte-identical; fling is deliberately left for a follow-up (the `Release` edge remains reserved). - **WP2 — Controller haptics + Controller speaker rows** (`pad_haptics`, `pad_speaker`) in the Controller tab, forwarding-gated like their siblings; the speaker row edits the stored string the way the GTK switch does (`"mix"` reads Off). Row detail strings are platform-aware now (desktop-only chords aren't taught on Android). - **WP3** — Send logs was already desktop-gated on main; pinned by a test. - **WP4 — `ConsoleCmd::BindProfile`** (the port design's WP5 leftover): "Default profile…" host-menu action → pin_hosts-style chooser; desktop arm writes `KnownHost::profile_id`, Kotlin arm mirrors it. - **WP5 — per-host Shared clipboard toggle** on the host menu (`HostRow::clipboard_sync`, `ConsoleCmd::SetClipboard`, both service arms). Platform defaults stay divergent on purpose — the console only shows and writes the stored value. - **WP6 — Android idle gates**: the reachability sweep probes only while the console is attached; the render thread drops to half rate after 60 s without input. Gates run: `cargo fmt` (all edited crates), `:app:testDebugUnitTest` green (compiles the full Android-target Rust stack for all 3 ABIs + JNI import check). Desktop-side compile/tests + settings-scene raster re-baseline ride this PR's CI. Not included: WP5b (Android SendLogs wiring via `logring`) — on demand per the plan.
enricobuehler added 1 commit 2026-08-19 13:16:21 +00:00
feat(console-ui): touch gestures, controller-audio rows, host-menu bind/clipboard, Android idle gates
ci / bun-nix (pull_request) Successful in 27s
ci / rust-arm64 (pull_request) Failing after 57s
ci / web (pull_request) Successful in 1m2s
ci / docs-site (pull_request) Successful in 1m17s
ci / rust (pull_request) Failing after 3m7s
windows-client / client (x64, , x86_64-pc-windows-msvc, C:\t) (pull_request) Failing after 3m31s
android / android (pull_request) Successful in 6m14s
windows-client / client (arm64, --no-default-features, aarch64-pc-windows-msvc, C:\t-a64) (pull_request) Successful in 2m57s
5d3301ed9b
The 2026-08-19 console-ui sweep (punktfunk-planning design/console-ui-sweep-2026-08-19.md),
WP1-WP6:

- WP1 — touch deferred-tap + drag-to-scroll. PointerInput::Down grows a touch flag
  (SDL Finger* arms and Android toolType feed it; SDL's touch-synthesized mouse events
  are dropped); the shell tracks the gesture: within slop a lift is a tap delivered at
  the anchor, past it drags emit one synthetic scroll tick per 56dp of dominant-axis
  travel. Fixes the on-glass defect where any swipe across the settings list cycled the
  value it landed on (MenuList presses focus AND activate). Mouse behavior unchanged.
  Fling deliberately not included; the Release edge stays for it.
- WP2 — Controller haptics + Controller speaker rows (trust::Settings::{pad_haptics,
  pad_speaker}) in the Controller tab, forwarding-gated like their siblings; the
  speaker row speaks the GTK switch's dialect over the stored string. Detail strings
  are platform-aware now (the Stats/Mouse desktop chords are not taught on Android).
- WP3 — Send logs was already desktop-gated in actions(); pinned by a test.
- WP4 — ConsoleCmd::BindProfile lands (the port design's WP5 leftover): a Default
  profile… host-menu action opens a pin_hosts-style chooser; desktop arm writes
  KnownHost::profile_id, Kotlin arm mirrors it.
- WP5 — per-host Shared clipboard toggle on the host menu (HostRow::clipboard_sync,
  ConsoleCmd::SetClipboard, both service arms). Platform defaults stay divergent on
  purpose; the console shows and writes the stored value only.
- WP6 — Android idle gates: the reachability sweep only probes while the console is
  attached, and the render thread drops to half rate after 60s without input.
enricobuehler added 1 commit 2026-08-19 13:32:57 +00:00
fix(console-ui): the two HostRow literals the field sweep missed (pair test, settings test)
ci / bun-nix (pull_request) Successful in 44s
ci / rust-arm64 (pull_request) Failing after 1m9s
ci / web (pull_request) Successful in 1m11s
ci / docs-site (pull_request) Successful in 1m12s
ci / rust (pull_request) Failing after 3m2s
windows-client / client (x64, , x86_64-pc-windows-msvc, C:\t) (pull_request) Failing after 4m8s
android / android (pull_request) Successful in 5m58s
windows-client / client (arm64, --no-default-features, aarch64-pc-windows-msvc, C:\t-a64) (pull_request) Successful in 3m10s
f50721aedb
enricobuehler added 1 commit 2026-08-19 13:45:58 +00:00
fix(console-ui): drop_non_drop in the bind-profile test — NLL already ends the borrow
ci / bun-nix (pull_request) Successful in 28s
ci / web (pull_request) Successful in 1m11s
ci / docs-site (pull_request) Successful in 1m17s
ci / rust-arm64 (pull_request) Successful in 3m12s
windows-client / client (x64, , x86_64-pc-windows-msvc, C:\t) (pull_request) Successful in 6m32s
ci / rust (pull_request) Successful in 8m5s
android / android (pull_request) Successful in 8m48s
windows-client / client (arm64, --no-default-features, aarch64-pc-windows-msvc, C:\t-a64) (pull_request) Successful in 2m51s
0fd44d8242
enricobuehler merged commit 0d22333831 into main 2026-08-19 14:26:36 +00:00
enricobuehler deleted branch worktree-console-ui-sweep-wps 2026-08-19 14:26:40 +00:00
Sign in to join this conversation.
No Reviewers
No labels
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: unom/punktfunk#333