feat(android): QR pairing — scan, deep link, one-step auto-login

Companion side of docs/companion-pairing-qr.md (v1 contract):
- Connect screen lands on Scan Node's QR / Enter Manually; NESMenu gains
  an add-server-by-QR icon button
- QrScannerOverlay: CameraX + ZXing core (pinned, on-device, no ML Kit)
- ServerQrParser: archipelago://pair?v=1&url=..[&pw=..]; unknown major v
  -> 'update the app'; upsert by origin so re-scans never duplicate
- archipelago:// deep link registered (singleTask + onNewIntent) for the
  modal's 'Open in companion app' button
- WebView auto-fills and submits Login.vue's password form when a stored
  password exists — demo QR is one step to a logged-in session
- Web modal + handoff doc copy synced to the real label: Scan Node's QR
- v0.4.13 (versionCode 17)

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
Dorian
2026-07-17 01:41:35 +01:00
co-authored by Claude Fable 5
parent 3028685e6b
commit 2b3a18f189
14 changed files with 681 additions and 22 deletions
+3 -3
View File
@@ -42,9 +42,9 @@ Examples the web UI actually emits:
## Companion app requirements
1. **Scan entry point:** a "Scan node code" action (screen-2 copy in the web UI
says: *"In the companion app, choose 'Scan node code' and point your phone
here"* — keep that wording or tell me the real label so I update the modal).
1. **Scan entry point:** the app's action is labeled **"Scan Node's QR"**
(implemented 2026-07-17; the modal copy in CompanionIntroOverlay.vue was
updated to match).
2. **Parse the URI** (from camera scan AND from an OS deep-link intent —
register the `archipelago://` scheme so the "Open in companion app" button on
phones works).