Keep the phone's nav under Connections when nothing is running

The chrome stands down for a shell, and it was standing down for the whole
terminal surface. Those parted company when that surface gained a connect page:
with no tabs open it draws a box, a CONNECT button and the machines connected to
before, which is a page in everything but which enum it is in. A third of the
display is worth giving to a shell and is not worth giving to that. Worse, it is
the one screen somebody arrives at by closing their last tab — so the state the
collapsed bar was most likely to be seen in was the state where it left the
system back gesture as the only route to Hosts or Settings.

So RefreshChrome reads one more question. IsTerminalSurface with no tabs joins
the pages in both flags, which keeps the rail and the bar in step: above 600dp
the rail is the bar, and fixing only the narrow layout would leave an unfolded
device on the same screen with the same nothing. The vault header is deliberately
not part of it. The surface draws its own bar with back and the +, and a header
above that is the second row of chrome this head exists to avoid.

The Connections entry lights for the first time, on IsTerminalSurface. It was
left unbound on the argument that the bar was never drawn while that surface was
up, so a lit state was unreachable — that argument is now false, and the flag is
unambiguous on a control that is only drawn in two situations: false on every
page, true on the connect page, and never read while a shell is showing. A bar
sitting under a screen it does not point at is the entry looking broken instead.

Nothing here is testable on this head — the phone's rectangles have no coverage,
for the reasons Phase 8 of manual-checks records — so 11.7 gains the check that
the bar is there with Connections lit, and 11.1 keeps the one that it is gone
with a shell up, which is the half that pays for the arrangement.
This commit is contained in:
2026-08-06 07:38:31 +02:00
parent 174ef7c420
commit cddfeb1f55
6 changed files with 81 additions and 23 deletions
+12 -3
View File
@@ -1277,12 +1277,13 @@ headless surface has a native view to answer with. `docs/android-port.md` still
Open a shell from HOSTS.
**Pass:** the vault header, the session strip and the four-entry bottom bar are all gone. What is left is
**Pass:** the vault header, the session strip and the three-entry bottom bar are all gone. What is left is
one bar — a back arrow, the session pills, a `+` — and then the terminal down to the accessory keys. Press
back: all three come back, the tab is still in the strip and its dot is still green.
**Failure means:** one of the three rows is not bound on `IsShowingPages`, or the terminal is being reached
by a route that leaves `Surface` on `Page`.
**Failure means:** the strip is not bound on `IsShowingPages`, `RefreshChrome` is not reading `HasTabs`, or
the terminal is being reached by a route that leaves `Surface` on `Page`. A bar still there **with a shell
showing** is the one that matters: that is the third of the screen this arrangement exists to give back.
### 11.2 The connect menu is not drawn over the renderer · **the important one**
@@ -1348,6 +1349,14 @@ Close every tab, then press Connections in the bottom bar.
keychain has ever connected to anything — a RECENT list underneath. The whole thing scrolls with the
keyboard up, and the password box shows dots with **no suggestion strip** above the keyboard.
**And the bottom bar is still there, with Connections lit.** Press Hosts: it goes straight there, without
the back gesture. Then open a shell — the bar goes, which is 11.1. Wide, the same holds for the rail.
**Failure means:** for the bar, `RefreshChrome` is back to collapsing the nav for the whole terminal
surface rather than for a shell — which strands anybody who reaches this screen by closing their last tab.
For an unlit Connections entry, `IsCurrent` lost its binding: on this screen it is the only true thing the
bar could say about where you are.
Type a machine you can reach and press CONNECT: a tab appears in the bar and the shell opens. Type
something malformed — no `user@`, or `:70000` — and the refusal appears under the boxes, in the warning
colour, with no tab and nothing dialled.