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.
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.
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
Implements WP1–WP6 of
punktfunk-planning/design/console-ui-sweep-2026-08-19.md(the console-UI sweep against the Android host).PointerInput::Downgrows atouch: bool(SDLFinger*arms and AndroidtoolTypefeed it; SDL's touch-synthesized mouse events are dropped viaSDL_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 interpretsScroll. 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 (theReleaseedge remains reserved).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).ConsoleCmd::BindProfile(the port design's WP5 leftover): "Default profile…" host-menu action → pin_hosts-style chooser; desktop arm writesKnownHost::profile_id, Kotlin arm mirrors it.HostRow::clipboard_sync,ConsoleCmd::SetClipboard, both service arms). Platform defaults stay divergent on purpose — the console only shows and writes the stored value.Gates run:
cargo fmt(all edited crates),:app:testDebugUnitTestgreen (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 vialogring) — on demand per the plan.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 referenced this pull request2026-08-19 23:24:49 +00:00