From ac68032325fd492836a3366e7b5d48962a12bc0a Mon Sep 17 00:00:00 2001 From: Owen McGirr Date: Tue, 27 Oct 2026 10:05:44 +0000 Subject: [PATCH 1/3] Rename "Release switch keys" to "Pause listening" The tray item and Home button now read Pause listening / Resume listening, and Home shows Listening paused, so the label says what the person wants rather than reading like a key press. Docs updated to match. Closes #1211 Co-Authored-By: Claude Fable 5.1 --- site/src/content/docs/account-and-privacy.md | 4 ++-- .../content/docs/get-started/add-a-switch.md | 4 ++-- site/src/content/docs/troubleshooting.md | 4 ++-- src-tauri/src/lib.rs | 24 +++++++++---------- src/App.test.tsx | 8 +++---- src/App.tsx | 4 ++-- 6 files changed, 24 insertions(+), 24 deletions(-) diff --git a/site/src/content/docs/account-and-privacy.md b/site/src/content/docs/account-and-privacy.md index dd65f558..89a202a2 100644 --- a/site/src/content/docs/account-and-privacy.md +++ b/site/src/content/docs/account-and-privacy.md @@ -5,9 +5,9 @@ description: Optional sign-in that carries your settings between computers, auto ## Running in the background -Switchify PC lives in the system tray on Windows or the menu bar on a Mac, with live connection status. From there you can show the window, open Settings and the Switch Forwarding profiles, disconnect devices, release the switch keys, or quit. **Start with system** launches it quietly when you sign in. +Switchify PC lives in the system tray on Windows or the menu bar on a Mac, with live connection status. From there you can show the window, open Settings and the Switch Forwarding profiles, disconnect devices, pause listening to the switch keys, or quit. **Start with system** launches it quietly when you sign in. -**Release switch keys** hands your switch keys back to other apps until you choose **Resume switch keys**. See [Use the switch key as a normal key](/get-started/add-a-switch/#use-the-switch-key-as-a-normal-key). +**Pause listening** hands your switch keys back to other apps until you choose **Resume listening**. See [Use the switch key as a normal key](/get-started/add-a-switch/#use-the-switch-key-as-a-normal-key). ## Account diff --git a/site/src/content/docs/get-started/add-a-switch.md b/site/src/content/docs/get-started/add-a-switch.md index 87c903d8..ac74973e 100644 --- a/site/src/content/docs/get-started/add-a-switch.md +++ b/site/src/content/docs/get-started/add-a-switch.md @@ -55,9 +55,9 @@ Press **Escape**, or hold any switch for at least 4 seconds (longer if that swit ## Use the switch key as a normal key -While a Select switch is saved, Switchify PC takes its key everywhere, so a switch set to Space cannot type a space in other apps. To hand the keys back for a while, choose **Release switch keys** in the system tray on Windows or the menu bar on a Mac, or on the Home page under Saved switches. Your switches then do nothing in Switchify PC and the keys work as they normally would. +While a Select switch is saved, Switchify PC takes its key everywhere, so a switch set to Space cannot type a space in other apps. To hand the keys back for a while, choose **Pause listening** in the system tray on Windows or the menu bar on a Mac, or on the Home page under Saved switches. Your switches then do nothing in Switchify PC and the keys work as they normally would. -Choose **Resume switch keys** in the same places to take them back. Home shows **Keys released** under Saved switches while they are, and testing local switches waits until you resume. The release lasts until you resume or restart Switchify PC, so the switches are always ready after a restart. Switchify on Android is not affected: a remote scanning session carries on, and the release takes effect on the computer's own keys once it ends. +Choose **Resume listening** in the same places to take them back. Home shows **Listening paused** under Saved switches while listening is paused, and testing local switches waits until you resume. The pause lasts until you resume or restart Switchify PC, so the switches are always ready after a restart. Switchify on Android is not affected: a remote scanning session carries on, and the pause takes effect on the computer's own keys once it ends. ## On Windows diff --git a/site/src/content/docs/troubleshooting.md b/site/src/content/docs/troubleshooting.md index 0eb6681e..4025db56 100644 --- a/site/src/content/docs/troubleshooting.md +++ b/site/src/content/docs/troubleshooting.md @@ -18,11 +18,11 @@ Holding any switch for about 4 seconds is the emergency stop; so is Escape. Pres When the computer goes to sleep, Switchify PC releases the switch keys and shows **Switches paused while the computer sleeps**. After it wakes, scanning starts again on its own within a few seconds; press Select to begin. If the switches stay quiet after wake, release them, wait a moment and press Select once more, or restart Switchify PC. Sleep also ends a session forwarded from your phone; start forwarding again once the computer is awake. -If Home shows **Keys released** under Saved switches, someone chose **Release switch keys** in the tray or menu bar. Choose **Resume switch keys** there or on Home, or restart Switchify PC. +If Home shows **Listening paused** under Saved switches, someone chose **Pause listening** in the tray or menu bar. Choose **Resume listening** there or on Home, or restart Switchify PC. ## My switch key no longer types in other apps -That is expected while a Select switch is saved: Switchify PC takes the key everywhere. Choose **Release switch keys** in the tray or menu bar to use it as a normal key for a while, then **Resume switch keys** when you are done. See [Use the switch key as a normal key](/get-started/add-a-switch/#use-the-switch-key-as-a-normal-key). +That is expected while a Select switch is saved: Switchify PC takes the key everywhere. Choose **Pause listening** in the tray or menu bar to use it as a normal key for a while, then **Resume listening** when you are done. See [Use the switch key as a normal key](/get-started/add-a-switch/#use-the-switch-key-as-a-normal-key). ## Input access on a Mac diff --git a/src-tauri/src/lib.rs b/src-tauri/src/lib.rs index 70a75f5a..ae68c3dd 100644 --- a/src-tauri/src/lib.rs +++ b/src-tauri/src/lib.rs @@ -189,8 +189,8 @@ struct TraySnapshot { release_label: String, } -const RELEASE_SWITCH_KEYS_LABEL: &str = "Release switch keys"; -const RESUME_SWITCH_KEYS_LABEL: &str = "Resume switch keys"; +const RELEASE_SWITCH_KEYS_LABEL: &str = "Pause listening"; +const RESUME_SWITCH_KEYS_LABEL: &str = "Resume listening"; impl TraySnapshot { fn from_state(state: &AppState) -> Self { @@ -2237,7 +2237,7 @@ mod tests { TraySnapshot { status: "Status: Starting Bluetooth".into(), can_disconnect: false, - release_label: "Release switch keys".into(), + release_label: "Pause listening".into(), } ); @@ -2250,7 +2250,7 @@ mod tests { TraySnapshot { status: "Status: Ready to connect".into(), can_disconnect: false, - release_label: "Release switch keys".into(), + release_label: "Pause listening".into(), } ); @@ -2264,7 +2264,7 @@ mod tests { TraySnapshot { status: "Status: Connected to Pixel".into(), can_disconnect: true, - release_label: "Release switch keys".into(), + release_label: "Pause listening".into(), } ); @@ -2277,7 +2277,7 @@ mod tests { TraySnapshot { status: "Status: Connected to Pixel".into(), can_disconnect: true, - release_label: "Resume switch keys".into(), + release_label: "Resume listening".into(), } ); let _ = std::fs::remove_dir_all(root); @@ -2288,7 +2288,7 @@ mod tests { let snapshot = |status: &str, can_disconnect| TraySnapshot { status: status.into(), can_disconnect, - release_label: "Release switch keys".into(), + release_label: "Pause listening".into(), }; let cache = TrayCache::default(); // Records the setter calls made for one sync; `fail` makes them error. @@ -2315,7 +2315,7 @@ mod tests { [ "text Status: Ready to connect", "enabled false", - "release Release switch keys" + "release Pause listening" ] ); assert!(sync(snapshot("Status: Ready to connect", false), false).is_empty()); @@ -2330,12 +2330,12 @@ mod tests { assert_eq!( sync( TraySnapshot { - release_label: "Resume switch keys".into(), + release_label: "Resume listening".into(), ..snapshot("Status: Connected to Pixel", true) }, false ), - ["release Resume switch keys"] + ["release Resume listening"] ); } @@ -2344,7 +2344,7 @@ mod tests { let snapshot = TraySnapshot { status: "Status: Bluetooth is off".into(), can_disconnect: true, - release_label: "Release switch keys".into(), + release_label: "Pause listening".into(), }; let cache = TrayCache::default(); let attempts = std::cell::Cell::new(0); @@ -2362,7 +2362,7 @@ mod tests { TrayShown { status: None, can_disconnect: Some(true), - release_label: Some("Release switch keys".into()), + release_label: Some("Pause listening".into()), } ); cache.apply( diff --git a/src/App.test.tsx b/src/App.test.tsx index 6ba9218a..c5285cdc 100644 --- a/src/App.test.tsx +++ b/src/App.test.tsx @@ -82,13 +82,13 @@ describe("Switchify PC shell", () => { const release = vi.spyOn(api, "setSwitchKeysReleased"); render(); await screen.findByRole("heading", { name: "Ready" }); - fireEvent.click(screen.getByRole("button", { name: "Release switch keys" })); + fireEvent.click(screen.getByRole("button", { name: "Pause listening" })); expect(release).toHaveBeenCalledWith(true); await screen.findByRole("heading", { name: "Switch keys released" }); - expect(screen.getByText("1 saved · Keys released")).toBeInTheDocument(); + expect(screen.getByText("1 saved · Listening paused")).toBeInTheDocument(); expect(screen.queryByRole("button", { name: "Edit switches" })).not.toBeInTheDocument(); - expect(screen.getAllByRole("button", { name: "Resume switch keys" })).toHaveLength(2); - fireEvent.click(screen.getAllByRole("button", { name: "Resume switch keys" })[0]); + expect(screen.getAllByRole("button", { name: "Resume listening" })).toHaveLength(2); + fireEvent.click(screen.getAllByRole("button", { name: "Resume listening" })[0]); expect(release).toHaveBeenLastCalledWith(false); await screen.findByRole("heading", { name: "Ready" }); expect(screen.getByRole("button", { name: "Edit switches" })).toBeInTheDocument(); diff --git a/src/App.tsx b/src/App.tsx index ef430212..85e7951e 100644 --- a/src/App.tsx +++ b/src/App.tsx @@ -108,12 +108,12 @@ function HomeView({ state, switches, scanning, navigate, onDisconnect, onAccessi

{title}

{message}

{released - ? + ? : }

Input access

{state.accessibility === "required" && }
-

Saved switches

{saved.length} saved · {released ? "Keys released" : hasSelect ? "Select assigned" : "Select action needed"}

{saved.length > 0 && }
+

Saved switches

{saved.length} saved · {released ? "Listening paused" : hasSelect ? "Select assigned" : "Select action needed"}

{saved.length > 0 && }

Scanning

{selectOpensHome(scanning.config) ? "Select opens Home" : `Select starts ${lastModeName(scanning.config)}`} · {areaOptions(scanning.config, scanning.config.controlMode).automatic ? "Automatic" : "Manual"}

Mobile connection (optional)

{mobileConnected ? state.connectedDeviceName ?? bluetoothLabels.connected : bluetoothLabels[state.bluetooth]}

{mobileConnected ? : }
From fd251b676bbe34ef7c043d19edc13b31a543ad1c Mon Sep 17 00:00:00 2001 From: Owen McGirr Date: Tue, 27 Oct 2026 10:07:51 +0000 Subject: [PATCH 2/3] Match the Home heading, activity line and test message to Pause listening Review found three more user-facing strings that still said the switch keys were released: the Home status heading, the activity line set when toggling, and the message shown when testing a local switch while paused. Co-Authored-By: Claude Fable 5.1 --- site/src/content/docs/account-and-privacy.md | 2 +- src-tauri/src/lib.rs | 4 ++-- src-tauri/src/scanning_runtime.rs | 2 +- src/App.test.tsx | 2 +- src/homeStatus.test.ts | 2 +- src/homeStatus.ts | 2 +- 6 files changed, 7 insertions(+), 7 deletions(-) diff --git a/site/src/content/docs/account-and-privacy.md b/site/src/content/docs/account-and-privacy.md index 89a202a2..7c1b80c7 100644 --- a/site/src/content/docs/account-and-privacy.md +++ b/site/src/content/docs/account-and-privacy.md @@ -5,7 +5,7 @@ description: Optional sign-in that carries your settings between computers, auto ## Running in the background -Switchify PC lives in the system tray on Windows or the menu bar on a Mac, with live connection status. From there you can show the window, open Settings and the Switch Forwarding profiles, disconnect devices, pause listening to the switch keys, or quit. **Start with system** launches it quietly when you sign in. +Switchify PC lives in the system tray on Windows or the menu bar on a Mac, with live connection status. From there you can show the window, open Settings and the Switch Forwarding profiles, disconnect devices, pause listening for switch keys, or quit. **Start with system** launches it quietly when you sign in. **Pause listening** hands your switch keys back to other apps until you choose **Resume listening**. See [Use the switch key as a normal key](/get-started/add-a-switch/#use-the-switch-key-as-a-normal-key). diff --git a/src-tauri/src/lib.rs b/src-tauri/src/lib.rs index ae68c3dd..65b3dc3b 100644 --- a/src-tauri/src/lib.rs +++ b/src-tauri/src/lib.rs @@ -307,9 +307,9 @@ fn set_switch_keys_released_inner(app: &AppHandle, model: &AppModel, released: b &model.shared, ActivityKind::Info, if released { - "Switch keys released. They work as normal keys until you resume." + "Listening paused. Your switch keys work as normal keys until you resume." } else { - "Switch keys resumed." + "Listening resumed." }, ); state::emit_state(app, &model.shared); diff --git a/src-tauri/src/scanning_runtime.rs b/src-tauri/src/scanning_runtime.rs index 98766d34..2147dead 100644 --- a/src-tauri/src/scanning_runtime.rs +++ b/src-tauri/src/scanning_runtime.rs @@ -270,7 +270,7 @@ struct ScanService { struct SwitchKeysRelease(AtomicBool); /// Shown on Home while the keys are released; it names where to resume. pub const SWITCH_KEYS_RELEASED_MESSAGE: &str = - "Switch keys released. Resume them from the tray or menu bar, or on Home."; + "Listening paused. Resume listening from the tray or menu bar, or on Home."; pub fn switch_keys_released(app: &AppHandle) -> bool { app.try_state::() .is_some_and(|flag| flag.0.load(Ordering::SeqCst)) diff --git a/src/App.test.tsx b/src/App.test.tsx index c5285cdc..b76081ca 100644 --- a/src/App.test.tsx +++ b/src/App.test.tsx @@ -84,7 +84,7 @@ describe("Switchify PC shell", () => { await screen.findByRole("heading", { name: "Ready" }); fireEvent.click(screen.getByRole("button", { name: "Pause listening" })); expect(release).toHaveBeenCalledWith(true); - await screen.findByRole("heading", { name: "Switch keys released" }); + await screen.findByRole("heading", { name: "Listening paused" }); expect(screen.getByText("1 saved · Listening paused")).toBeInTheDocument(); expect(screen.queryByRole("button", { name: "Edit switches" })).not.toBeInTheDocument(); expect(screen.getAllByRole("button", { name: "Resume listening" })).toHaveLength(2); diff --git a/src/homeStatus.test.ts b/src/homeStatus.test.ts index bc51d3fa..90f62ede 100644 --- a/src/homeStatus.test.ts +++ b/src/homeStatus.test.ts @@ -17,7 +17,7 @@ describe("homeStatus", () => { ["Remote in control when otherwise ready", { scanning: { ...scanning, remote: true } }, "Remote in control", "neutral"], ["Remote in control without a local Select", { scanning: { ...scanning, remote: true }, bluetooth: "connected", hasSelect: false }, "Remote in control", "neutral"], ["a mobile connection without a local Select", { bluetooth: "connected", hasSelect: false }, "Paused for mobile", "neutral"], - ["released switch keys", { switchKeysReleased: true, scanning: { ...scanning, enabled: false } }, "Switch keys released", "neutral"], + ["released switch keys", { switchKeysReleased: true, scanning: { ...scanning, enabled: false } }, "Listening paused", "neutral"], ["Remote in control while the keys are released", { switchKeysReleased: true, scanning: { ...scanning, remote: true } }, "Remote in control", "neutral"], ["no Select switch", { hasSelect: false }, "Finish setting up", "attention"], ["paused", { scanning: { ...scanning, paused: true } }, "Paused", "neutral"], diff --git a/src/homeStatus.ts b/src/homeStatus.ts index 17b7f69d..cba4f1b5 100644 --- a/src/homeStatus.ts +++ b/src/homeStatus.ts @@ -27,7 +27,7 @@ export function homeStatus({ accessibility, bluetooth, switchesLoaded, hasSelect if (!scanning.supported) return { title: "Switch control unavailable", tone: "neutral", message: scanning.message }; if (scanning.remote) return { title: "Remote in control", tone: "neutral", message: "Remote controls scanning. Use the switches in Remote; PC Escape stops the session." }; if (bluetooth === "connected") return { title: "Paused for mobile", tone: "neutral", message: "Local scanning is paused while a mobile device is connected." }; - if (switchKeysReleased) return { title: "Switch keys released", tone: "neutral", message: "Your switch keys work as normal keys in other apps. Resume them to scan again." }; + if (switchKeysReleased) return { title: "Listening paused", tone: "neutral", message: "Your switch keys work as normal keys in other apps. Choose Resume listening to scan again." }; if (!switchesLoaded) return { title: "Switch control", tone: "neutral", message: "Loading switch control..." }; if (!hasSelect) return { title: "Finish setting up", tone: "attention", message: "Add a switch with the Select action to begin scanning." }; if (scanning.paused) return { title: "Paused", tone: "neutral", message: "Scanning is paused. Use your Pause / resume switch to continue." }; From 801aa97995a18fd0aaf882b37c17933accb6ba4f Mon Sep 17 00:00:00 2001 From: Owen McGirr Date: Tue, 27 Oct 2026 10:09:13 +0000 Subject: [PATCH 3/3] Say Resume listening in the switch testing message Co-Authored-By: Claude Fable 5.1 --- src-tauri/src/switch_practice.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src-tauri/src/switch_practice.rs b/src-tauri/src/switch_practice.rs index b1195360..4c149414 100644 --- a/src-tauri/src/switch_practice.rs +++ b/src-tauri/src/switch_practice.rs @@ -299,7 +299,7 @@ pub fn begin(app: &AppHandle, remote: bool) -> Result { // Practice enables the key broker itself, so honour the release here // as `wanted` does for scanning. if crate::scanning_runtime::switch_keys_released(app) { - return Err("Resume the switch keys before testing switches.".into()); + return Err("Resume listening before testing switches.".into()); } (switches.settings(), 0) };