feat(mobile): redesign connect screen and instances sheet

- Connect screen leads with Scan QR code plus a plain-words hint of where the
  code lives; manual URL entry is collapsed behind Connect by address (expanded
  automatically on web where scanning is unavailable); saved connections show a
  per-row connecting spinner
- Instances sheet is list-first: the active instance shows a live status dot
  and transport (Connected - Local network / Private relay), rows connect on
  tap with an inline spinner, and the add/edit form hides behind Scan QR code /
  Add by address
- Deleting the last instance returns to the connect screen: without a runtime
  endpoint the native app no longer bootstraps against the webview's own origin
  (which faked a successful connection), and the connect screen renders
  regardless of a stale isConnected flag
This commit is contained in:
Bohdan Triapitsyn
2026-07-10 01:44:42 +03:00
parent 91a95bfdaa
commit e74834a739
11 changed files with 307 additions and 184 deletions
+5
View File
@@ -46,7 +46,9 @@ export const dict: Record<I18nKey, string> = {
'mobile.connect.url.label': 'サーバー URL',
'mobile.connect.url.placeholder': 'http://192.168.1.74:2606',
'mobile.connect.scanQr': 'QR コードをスキャン',
'mobile.connect.welcome.scanHint': 'コンピュータで「デバイスを追加」を開いてQRコードを表示し、ここでスキャンしてください。',
'mobile.connect.advanced': '詳細設定',
'mobile.connect.manual.toggle': 'アドレスで接続',
'mobile.connect.token.label': 'クライアントトークン',
'mobile.connect.token.placeholder': 'アクセストークンを貼り付け',
'mobile.connect.token.hint': 'サーバーがパスワードの代わりにトークンを必要とする場合のみ必要です。',
@@ -69,10 +71,13 @@ export const dict: Record<I18nKey, string> = {
'mobile.connect.scan.invalid': 'その QR コードは OpenChamber の接続コードではありません。',
'mobile.connect.scan.failed': 'その QR コードを読み取れませんでした。もう一度試すか、URL を手動で入力してください。',
'mobile.instances.addTitle': 'インスタンスを追加',
'mobile.instances.addManual': 'アドレスで追加',
'mobile.instances.editTitle': 'インスタンスを編集',
'mobile.instances.label.label': '名前',
'mobile.instances.label.placeholder': '表示名(任意)',
'mobile.instances.saveNew': 'インスタンスを保存',
'mobile.instances.status.connectedDirect': '接続中 · ローカルネットワーク',
'mobile.instances.status.connectedRelay': '接続中 · プライベートリレー',
'mobile.instances.saveEdit': '変更を保存',
'mobile.instances.cancelEdit': 'キャンセル',
'mobile.instances.edit': '編集',