From 5b2e3f3651005f532538f04a5cf0fd79beeb3e61 Mon Sep 17 00:00:00 2001 From: Jaap-Jan de Wit | DodoTech Date: Wed, 14 Oct 2026 17:27:57 +0200 Subject: [PATCH] Android: type user@host into the hosts search to open a terminal on a machine without saving it The phone's only unsaved way in was the box on the terminal screen, which is drawn only while nothing is open, so a second machine could not be reached that way while a first one's session was up. The search well at the top of HOSTS is always there and the design already calls it "Search or connect...", so it now reads an address the way the desktop palette does: with an @ in it, a NOT SAVED card above the list offers a password box and CONNECT. It connects through VaultViewModel.ConnectToEndpointAsync, the same path as the manual box and the desktop palette, so nothing is written to the keychain. The search box and the password are cleared once it dials, the password goes whenever the address changes, and an address the manual parser refuses gets its sentence under the box. Covered by six new ShellFlowTests cases; manual check 8.20 covers the card on a device. --- docs/manual-checks.md | 19 ++- .../Views/HostsScreen.axaml | 38 +++++- .../ViewModels/VaultViewModel.cs | 120 ++++++++++++++++++ .../ShellFlowTests.cs | 110 ++++++++++++++++ 4 files changed, 285 insertions(+), 2 deletions(-) diff --git a/docs/manual-checks.md b/docs/manual-checks.md index 1cb9058..6e3a2bd 100644 --- a/docs/manual-checks.md +++ b/docs/manual-checks.md @@ -1437,7 +1437,7 @@ time)" — is the worse failure of the two: it rebinds a host as a side effect o ## Phase 8 — Adding and removing on the phone's host list -Twenty-one checks, and the reason there are twenty-one rather than none is worth stating: **the layout suite +Twenty-two checks, and the reason there are twenty-two rather than none is worth stating: **the layout suite cannot see any of this and structurally never will.** `DodoSSH.Client.App.Layout.Tests` targets `net10.0` and `DodoSSH.Client.Android` targets `net10.0-android`, so a project reference is impossible; Avalonia's application, dispatcher and platform are one-shot process globals, so a second head cannot share the @@ -1810,6 +1810,23 @@ follow, and try disconnecting and reconnecting instead. --- +### 8.20 Connecting from the search box to a machine that is not saved + +With a terminal already open on some other machine, go back to HOSTS and type `user@host` for a reachable +machine that is **not** in the list into the search box at the top. Type its password into the card that +appears, and press CONNECT. + +**Pass:** the card appears only once there is an `@` in the box, names the address with `:22` on the end, and +says NOT SAVED. CONNECT opens a second tab for `user@host` — the first is still there — and the fingerprint +card asks about an unknown key over the terminal. Back on HOSTS the search box is empty, the list is the whole +list again, and there is no new host in it. A port the parser refuses (`root@box:70000`) gives a sentence in +amber under the box rather than a card. + +**Failure means:** the card sitting *over* the list rather than pushing it down is the panels' arrangement +having been lost — see the remark above `IsSendingChosenHostsToAVault` in `HostsScreen.axaml`. A password that +shows in the keyboard's suggestion strip is `Classes="secret"` missing from the box. Everything behind the +card is `ShellFlowTests`' hosts-search cases; this is the rectangles, and the software keyboard. + ## Phase 9 — Tag chips and the picker The desktop half is measured by the layout suite, which now seeds three tags and puts all of them on one diff --git a/src/DodoSSH.Client.Android/Views/HostsScreen.axaml b/src/DodoSSH.Client.Android/Views/HostsScreen.axaml index 484fc26..d5b0a72 100644 --- a/src/DodoSSH.Client.Android/Views/HostsScreen.axaml +++ b/src/DodoSSH.Client.Android/Views/HostsScreen.axaml @@ -72,7 +72,7 @@ - @@ -82,6 +82,42 @@ + + + + + + + + + + + + +