Skip to content

Fold remote switches into the switch list and own their hold timing - #763

Merged
enaboapps merged 5 commits into
mainfrom
feat/unified-remote-switches
Sep 14, 2026
Merged

enaboapps merged 5 commits into
mainfrom
feat/unified-remote-switches

Conversation

@enaboapps

@enaboapps enaboapps commented Sep 14, 2026

Copy link
Copy Markdown
Contributor

Remote switches now live in the same list as keyboard switches, with the same editor, names and hold actions, and the PC owns hold timing for them.

Settings UI

  • The separate Remote switches panel and its Save button are gone. A switch forwarded from Switchify Remote is a row like any other, with a Remote N badge and a phone icon. Edit opens the same editor: name, press action, ordered hold actions with the timing note, Done and Remove.
  • Add remote switch takes the next free number; the editor's Remote switch select changes the number, which matches the switch's position on Remote's Forwarding screen. Remote switches can be named; unnamed ones show as Remote switch N.
  • Remote edits save as they happen, with the shared status line and a Retry save band on failure.

Behaviour

  • Saved remote assignments, the shared hold interval and a scan mode change apply to a live remote session instead of ending it: saving resets only the scanner and local key broker, and the session restarts on the next tick with the applied settings. Learning a key still ends the session, since the key broker must be free. A change that leaves the current mode without its required actions ends the session, since scanning could not continue.
  • Session start no longer rejects a stale profile revision. The PC applies its current assignments; Remote's labels are informational and refresh when profiles are reloaded.
  • Holding a remote switch past the emergency limit resets the scan and keeps the session, mirroring the local emergency hold.
  • A replaced press from Remote arrives as a sync without the switch followed by a fresh down, so the PC resets the gesture rather than treating the missing release as a selection.

The remote slot schema gains an optional name; files without it load unchanged. save_switches and configure_point_scan no longer bump the remote profile revision.

Companion

Switchify Remote must stop applying its hold-to-stop and idle limits to scanning profiles for holds longer than five seconds to reach the PC. That change is in the companion Remote PR switchifyapp/switchify-remote#173; until it ships, remote holds are capped by the phone's hold-to-stop setting.

Validation

tsc, 149 frontend tests plus 5 Node tests, cargo fmt, Clippy all targets with warnings denied, 362 Rust unit tests and 7 integration tests passed on Windows. An independent review of the first head found that live apply was dead behind the pause and that a replaced press could select; both are fixed with tests, along with focus after moving a remote switch or opening a remote draft. New tests cover remote rows in the list, editing in place, adding into the next free slot, moving a slot, removing with a failed save and retry, live application of config to a session, and names flowing into bindings and labels. Tests use fake input and do not send desktop input.

Physical Android to PC checks remain manual: a remote hold longer than five seconds offering hold actions, editing assignments during a live session, and the emergency hold resetting without ending the session.

Switches forwarded from Switchify Remote were a separate panel of eight
numbered slots with its own Save button and a reload-profiles chore
after every change. They are now rows in the same list with the same
editor: names, press action, ordered hold actions and the timing note.
Add remote switch takes the next free number and the number can be
changed in the editor. Edits save as they happen.

The backend applies saved remote assignments, the shared hold interval
and a mode change to a live session on the next press instead of ending
it, and only ends the session when the mode's required actions are
gone. Session start no longer rejects a stale profile revision, since
the PC applies its current assignments and Remote's labels are only
informational. Holding a remote switch past the emergency limit resets
the scan and keeps the session, as the local emergency hold does. Slots
gain an optional name; existing files load unchanged.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
OwenMcGirr and others added 3 commits September 14, 2026 17:29
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Pausing for a switch or scan-settings save ended the remote session
before the new settings were applied, so the live update never
happened. Pause now resets only the scanner and local key broker; the
session survives and restarts on the next tick with the applied
settings. Learning a key still stops everything, since the broker
must be free.

A replacement press from Remote arrives as a sync without the switch
followed by a fresh down, so the PC resets the gesture instead of
treating it as a release. Moving a remote switch to another number and
opening a remote draft keep focus, the emergency hold shown counts
remote hold lists, and an unusable Add button is skipped when focus
returns.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
@enaboapps enaboapps added this to the v1.0.0-rc.9 milestone Sep 14, 2026
@enaboapps
enaboapps merged commit b5273f1 into main Sep 14, 2026
6 checks passed
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.

2 participants