diff --git a/src/frontends/android/docs/ui-ux-plan.md b/src/frontends/android/docs/ui-ux-plan.md index 9bc60403d..66047caa1 100644 --- a/src/frontends/android/docs/ui-ux-plan.md +++ b/src/frontends/android/docs/ui-ux-plan.md @@ -139,9 +139,10 @@ - **Тема (этап 1) ✅:** `MaterialExpressiveTheme` + `MotionScheme.expressive()`, тональная палитра с `surfaceContainer*`, токены `ShxSpacing`/`ShxShapes`, выбор темы системная/светлая/тёмная (`ShxThemeSettings.themeMode`), сплэш/окно/системные панели совпадают с Compose-поверхностью (`shx_*` в `colors.xml`). - **Компоненты ✅:** `ShxSectionCard`, `ShxListRow`, `ShxStatusPill`/`ShxConnectedPill`, `ShxEmptyState`, `ShxSnackbarHost`; переходы между вкладками — fade-through на motion scheme, «назад» с любой вкладки ведёт на «Подключение», `LoadingIndicator`/`LinearWavyProgressIndicator`, Snackbar вместо Toast в `ShxApp`, Настройках, форме профиля; хаптика подключения/отключения. - **«Подключение» ✅:** hero-кнопка с морфингом формы (круг → cookie), чип профиля с exit-IP + выбор профиля в bottom sheet (дублирующий список профилей убран), плитки трафика, один слот баннера (ошибка приоритетнее белого списка), «Доступность» свёрнута в сводку. Файл разбит на `home/*`. На ширине ≥ 840dp две колонки. -- **«Профили» ✅:** свайп-удаление с Undo, поиск только при > 5 профилей. List-detail **не сделан** (форма профиля остаётся отдельной Activity). +- **«Профили» ✅:** свайп-удаление с Undo, поиск только при > 5 профилей. На ширине ≥ 840dp — list-detail (`ListDetailPaneScaffold`), форма профиля в detail-панели (`ProfileEditorPane`); на телефоне форма остаётся отдельной Activity. - **«Маршрутизация» ✅:** режим/GeoIP/force-префиксы в блоке «Дополнительно»; строка про kill switch и исключённые приложения (исключённые идут мимо VPN, lockdown их не блокирует: они в `addDisallowedApplication`). Разбито на `routing/*`. - **«Настройки» ✅:** корень (быстрые: kill switch, автоподключение) + 5 страниц (оформление, автоматизация, безопасность, обновления, поддержка), ширина ≤ 640dp. -- **Системные поверхности:** виджет Glance 2×1 (`ui/widget/ShxWidget.kt`, состояние публикует `VpnStateService`, кнопка идёт через `VpnProfileControlActivity`, как плитка); плитка QS показывает профиль в subtitle. `ProgressStyle` для загрузки обновления и категория плитки connectivity — **не сделаны**. +- **Системные поверхности:** виджет Glance 2×1 (`ui/widget/ShxWidget.kt`, состояние публикует `VpnStateService`, кнопка идёт через `VpnProfileControlActivity`, как плитка); плитка QS показывает профиль в subtitle, категория `CATEGORY_CONNECTIVITY`, toggleable. Загрузка обновления — уведомление `Notification.ProgressStyle` + Live Update на API 36+ (`POST_PROMOTED_NOTIFICATIONS` — обычное разрешение, без запроса), на старых версиях обычный прогресс-бар. - **Доступность/тексты:** `heading()` у заголовков секций, `toggleable(role = Switch)` у строк-переключателей, liveRegion у статуса подключения, недостающие строки `values-de`. -- **Не сделано (вторичные экраны):** ImportScreen как bottom sheet, фильтр уровней и моноширинный шрифт в журнале, поиск по приложениям, карточка разрешения геолокации в «Доверенных сетях». Toast остался в `LogActivity`, `VpnProfileControlActivity`, `UpdateInstallStatusReceiver` (вне Compose-хоста). +- **Вторичные экраны ✅:** импорт профиля — Expressive bottom sheet в прозрачной Activity; журнал — чипы фильтра уровней (Все/Предупреждения/Ошибки) + Snackbar; выбор приложений — поиск (был), скрытие системных приложений с переключателем; «Доверенные сети» — встроенная карточка с объяснением, зачем нужна геолокация (запрос разрешения только по кнопке); проверка маршрута — карточки с `ShxStatusPill`. Predictive back: `PredictiveBackScale` для страниц настроек и деталей инструкции; `ModalBottomSheet` (редактор наборов, импорт) использует встроенный predictive back. +- **Toast оставлен** только там, где нет Compose-поверхности, которая переживёт `finish()`: `UpdateInstallStatusReceiver` (ресивер), `VpnProfileControlActivity`, `VpnProfileImportActivity`, `TrustedCertificateImportActivity` (прозрачные Activity, закрываются сразу после показа результата).