L×Box v1.3.1
Android VPN client powered by sing-box.
Патч-релиз: UX полировка + критические фиксы.
🐛 Critical fixes
UserServerпосле рестарта показывал спиннер навсегда —toJsonхранил толькоrawBody,fromJsonне парсил его обратно,NodeSettingsScreen._load()видел пустойnodes→_originalTagне сетился → спиннер. ТеперьfromJsonреконструирует nodes черезparseAll(decode(rawBody)).rawBody— источник истины, nodes derivable.- Detour dropdown в Node Settings не сохранялся — писал
detourв JSON ноды, ноparseSingboxEntryэто поле не восстанавливает → на save → reparse detour терялся. Теперь persist черезentry.detourPolicy.overrideDetour(которое builder уже умеет применять), сразу при выборе в dropdown'е. - XHTTP warning перекрывался TLS-insecure —
node.warnings.firstбралось безусловно,InsecureTlsWarning(parse-time) затмевалUnsupportedTransportWarning('xhttp')(emit-time). Теперь_NodeWarningRowсортирует по severity (error → warning → info). - TLS-insecure severity → info (grey) — провайдеры часто намеренно ставят флаг (REALITY, IP-литералы, self-signed), не должен кричать. Banner вверху detail-экрана теперь считает только actionable warning'и.
✨ UI polish
NodeRow новый layout
┌────────────────────────────────────────────────────┐
│ Tag │
│ [ACTIVE✓] PROTOCOL 50MS │
└────────────────────────────────────────────────────┘
^right-aligned
- ACTIVE — зелёный pill (раньше текстовое "ACTIVE · 50MS")
- Протокол — серым:
VLESS,Hy2,WG,TUIC,SS. Дляauto-proxy-out(urltest) показывает proto выбранной ноды:→ BL: Frankfurt VLESS. TLS-суффикс убран — у большинства протоколов дефолт, метить = шум. - Ping — right-aligned, цвет по latency (
<200msзелёный,<500оранжевый,>500/err красный)
Long-press → Copy URI
Новый пункт в popup-меню — оригинальный vless:// / wireguard:// / etc через node.toUri() (round-trip parser v2). Copy server переименован в Copy server (JSON) для ясности. Для control-узлов — snackbar No source URI for this node.
NodeSettingsScreen
- Editable Tag field — отдельный TextField под Server (раньше тег правился через JSON-редактор). AppBar title обновляется live.
- Mark as detour server switch — добавляет/убирает префикс
⚙к tag'у. Хранится прямо вtag(никаких отдельных флагов в JSON), визуально выделяет detour-серверы в node list и в Override-detour picker'е.
Smart add flow
- Empty input + tap
+= paste from clipboard — если поле ввода пустое,+открывает поток paste (анализ типа + диалог подтверждения). Один тап вместо двух. - Auto-regenerate config после addFromInput — после paste/QR/file автоматом
generateConfig+saveParsedConfig+ snackbar. Раньше нужно было жать ⟳ вручную.
Subscription row subtitle
- Единообразный формат для UserServer:
<PROTOCOL> server(напримерWIREGUARD server,VLESS server). Раньше был разный текст в зависимости от формы импорта (WireGuard config/Direct link/JSON outbound) — описывало форму копипасты, не суть. После рестарта (когдаentry.statusтерялся) показывало бессмысленное "1 node" для single-node entries.
♻️ Rename: UserServers → UserServer
Исторически во множественном, но всегда ровно 1 node (paste/QR/file/manual). Переименовано в singular для ясности. Затронуто 10 файлов (1 модель, 2 контроллера, 4 экрана, 4 теста, 1 миграция). JSON discriminator 'type': 'user' сохранён — миграции не нужны.
📝 Docs
Обновлены спеки 003 (§4.1 NodeRow layout, §5 Copy URI), 006 (§2.1 subtitle, §6 paste-on-empty-+), 017 (editable Tag, Mark as detour, detour persistence через overrideDetour), 026 (§1 UserServer rename + rehydrate invariant).
📦 Install
Скачай APK ниже, установи на Android (8.0+). 128/128 тестов проходят. Release APK ~71 MB.