fix(companion): backup + signer live inside the hub modal, not standalone screens

Field feedback on 0.5.28: the standalone Backup/Signer screens were hard
to read over the synthwave background, back left the app instead of the
menu, and they broke the hub's one-container interaction model. Both are
now hub sub-pages exactly like Nodes/FIPS:

- BackupSection / SignerSection (ui/components) render inside the NESMenu
  panel with the menu's own dark glass surface, scrim, and palette — the
  readability and theming problem disappears with the standalone surface.
- The header back arrow returns to the hub card page (same as Nodes).
- The panel height cap drops from 92% to 70% of the screen — ~15%
  breathing margin top and bottom; content scrolls inside.
- The pairing QR scanner is hosted by NESMenu OUTSIDE the panel
  (QrGlassModal is a full-screen Box, not a Dialog — inside the panel's
  scroll it would clip), and decoded nostrconnect:// URIs funnel into the
  signer section through the same latch as the deep link.
- The nostrconnect:// deep link now routes to the session and pops the
  hub open on the signer sub-page (SignerLaunch singleton) instead of a
  dedicated route; standalone screens and routes removed.
- BunkerManager.refreshState is now a proper suspend fun (was
  runBlocking on the caller's dispatcher).

Docs updated to the new locations. Rebuilt for on-device testing
(v0.5.28-debug/vc48, same signing cert).
This commit is contained in:
Dorian
2026-08-31 14:23:04 +01:00
parent 22f8129b52
commit 981296e8b0
11 changed files with 800 additions and 973 deletions
+5 -4
View File
@@ -50,10 +50,11 @@ The encrypted payload is the companion's own JSON:
wrong-passphrase, tampered-blob, node-shape envelopes, and salt/nonce
freshness.
- **Payload/merge:** `BackupManager` (`Android/app/src/main/java/com/archipelago/app/data/BackupManager.kt`).
- **UI:** hub menu (three-finger) → **Backup & Restore** → SAF file picker
(`CreateDocument` for export, `OpenDocument` for import), passphrase fields,
verified-backup preview, result summary. The suggested export name is
`archy-companion-backup-YYYYMMDD-HHmmss.json`.
- **UI:** a hub sub-page (`ui/components/BackupSection.kt`, opened from the
three-finger hub menu like Nodes/FIPS) — SAF file picker
(`CreateDocument` for export, `OpenDocument` for import), passphrase
fields, verified-backup preview, result summary. The suggested export
name is `archy-companion-backup-YYYYMMDD-HHmmss.json`.
## Restore semantics — never silently destructive
+6 -3
View File
@@ -50,9 +50,12 @@ still spoken by real clients); all sending is NIP-44 v2.
- **JNI:** `com.archipelago.app.NativeCore` (same .so as the FIPS mesh).
- **Session:** `nostr/BunkerManager.kt` — OkHttp WebSocket relay client,
JSON-RPC dispatch, approve/deny state.
- **UI:** `ui/screens/SignerScreen.kt` — key setup, npub/nsec display,
pairing scan, session status, the approve/deny card.
- **Deep link:** `nostrconnect://` intent filter → SignerScreen.
- **UI:** a hub sub-page (`ui/components/SignerSection.kt`, opened from the
three-finger hub menu like Nodes/FIPS) — key setup, npub/nsec display,
pairing scan, session status, the approve/deny card. The full-screen
pairing scanner (`QrGlassModal`) is hosted by NESMenu so it isn't clipped
to the panel's bounds. The `nostrconnect://` deep link routes to the
session and pops the hub open on the signer sub-page (`SignerLaunch`).
## Security notes (conscious deviations, reviewed)