12 KiB
Diff: Контакты (CardDAV) — итерация 1 (2026-07-13)
Ff_app: 26.7% · Fd_app: предварительно (натив на устройстве в этот проход не гонялся; веб снят live 390px) · n-a: 3
Сверка веб (карта contacts.md, апстрим nextcloud/contacts + тема _mobile-*.css) ↔ натив
(feature/contacts Compose поверх CardDAV/core:network). Метод mail/083: [Ф|Д]·[open|done|n-a],
Ff/Fd на экран, n-a вне знаменателя. Веб-подписи — из live-прохода forbion (Browser 1/cloude,
same-origin iframe 390px, f7-mobile-web-iframe-technique); натив-подписи — из кода
ContactsScreen.kt/ContactDetailSheet.kt/ContactsViewModel.kt/ContactsRepository.kt +
core/network/CardDavClient.kt. Всплывающие меню (mail/087) разобраны поимённо ниже.
Fd (дизайн) — отдельным проходом на устройстве после ревью-сборки (как у talk/tasks).
Экран 1: Список контактов («Все контакты») — Ff 100.0% (0 open Ф / 3)
- [Ф][done] Поиск по списку · натив: поиск по имени/email/телефон (
ContactsUiState.filteredContacts). - [Ф][done] Открыть карточку (тап) · натив:
openContact→ContactDetailSheet. - [Ф][done] Создать контакт · натив:
F7CreateButtonв шапке →AddContactDialog. (в вебе вызывается из шторки, в нативе из шапки — Д-разница расположения, не Ф.) - [Д][—] Строка: аватар (фото/инициалы на палитре) + имя 16 + email серым — типографика по живой теме (v0.5.126); детальный Fd на устройстве.
Экран 2: Шторка навигации — Ff 18.2% (9 open Ф / 11)
Веб-drawer приложения ↔ натив (drawer в модуле ОТСУТСТВУЕТ, есть только плоский список):
- [Ф][done] «Создать контакт» · натив: кнопка в шапке (функция есть).
- [Ф][done] «Все контакты» · натив: дефолтный список.
- [Ф][open] «Импорт контактов» — нет.
- [Ф][open] «Организационная структура» — нет (см. Экран 5).
- [Ф][open] «Без группы» (фильтр) — нет (групп нет).
- [Ф][open] Группы контакта: список групп — нет.
- [Ф][open] Группы контакта: «+» создать группу — нет.
- [Ф][open] Команды: открыть команду — нет (см. Экран 6).
- [Ф][open] Команды: «+» создать команду — нет.
- [Ф][open] Команды: «Показать все команды» — нет.
- [Ф][open] «Параметры контактов» — нет (см. Экран 7).
Экран 3: Карточка контакта (просмотр) — Ff 42.1% (11 open Ф / 19)
Ряд действий (веб) ↔ натив (ContactDetailContent):
- [Ф][done] Написать письмо (конверт) · натив «Email» (ACTION_SENDTO mailto).
расхождение: уходит во внешний почтовик, не в свой
MailComposeActivity(план mail/072 п.3). - [Ф][open] Видеозвонок Talk (камера) — натив: «Позвонить» = системный дайлер (ACTION_DIAL), НЕ Talk. расхождение: другой канал (план mail/072 п.3).
- [Ф][open] Профиль пользователя (силуэт) — нет. Поля (веб-секции) ↔ натив:
- [Ф][done] Email: просмотр + клик→письмо; несколько адресов (
emailLines). - [Ф][done] Телефон: просмотр + клик→звонок; несколько (
phoneLines). - [Ф][done] Адрес.
- [Ф][done] Сайт (клик→браузер).
- [Ф][done] День рождения.
- [Ф][done] Организация/должность (subtitle).
- [Ф][done] Адресная книга (принадлежность).
- [Ф][open] «Социальная сеть» (ссылка на профиль) — нет.
- [Ф][open] «ID в объединении облачных хранилищ» (federated cloud ID) — нет.
- [Ф][open] «Подробное имя» (Фамилия/Имя/фонетика отдельными полями) — натив показывает только displayName. Меню шапки:
- [Ф][open] «✏️ Править» — нет (Экран 4).
- [Ф][open] ⋯ «Скачать» (.vcf) — нет.
- [Ф][open] ⋯ «Копировать контакт» — нет.
- [Ф][open] ⋯ «Создать QR-код» — нет.
- [Ф][open] ⋯ «Исключить контакт из календаря Дней Рождений» — нет.
- [Ф][open] ⋯ «Удалить» — нет.
- [Д][—] Крупный аватар/имя/subtitle, поля-плитки, кнопки Email/Позвонить — по живой теме; Fd на устройстве.
Экран 4: Правка/создание контакта (форма) — Ff 26.7% (11 open Ф / 15)
Веб-форма правки ↔ натив (AddContactDialog — только СОЗДАНИЕ, правки нет):
- [Ф][done] Имя · натив: поле в диалоге создания.
- [Ф][done] Телефон (значение) · натив: поле в диалоге.
- [Ф][done] Email (значение) · натив: поле в диалоге.
- [Ф][done] Сохранить · натив:
createContact(vCard 3.0 PUT). - [Ф][open] Правка существующего (загрузка контакта в форму, PUT If-Match) — нет.
- [Ф][open] «Добавить фото» — нет.
- [Ф][open] Должность/организация — нет в форме.
- [Ф][open] Тип телефона (Домашний/Рабочий/CELL/…) — нет (селектор типа).
- [Ф][open] Тип email — нет.
- [Ф][open] Адрес — нет в форме.
- [Ф][open] «Личные даты» (день рождения, дата-пикер) — нет.
- [Ф][open] «О себе» — нет.
- [Ф][open] «Часовой пояс» — нет.
- [Ф][open] «Группы контакта» (добавить в группу) — нет.
- [Ф][open] Выбор адресной книги при создании — нет (пишет в
books.firstOrNull()). - [Д][—] Веб — полноэкранная форма; натив — компактный диалог. Расхождение композиции (Fd на устройстве).
Экран 5: Организационная структура — Ff 0.0% (4 open Ф / 4)
Отсутствует в нативе целиком:
- [Ф][open] Просмотр графа оргструктуры (карточки сотрудников, связи).
- [Ф][open] Селектор «График:».
- [Ф][open] Разворачивание/сворачивание узлов (
^N). - [Ф][open] Переход к карточке из узла.
Экран 6: Команда (например «Тест») — Ff 0.0% (0 open Ф / 5; n-a 3)
Отсутствует в нативе:
- [Ф][open] Просмотр команды (название/владелец/участники).
- [Ф][open] «✏️ Править» команду.
- [Ф][open] «Копировать ссылку».
- [Ф][open] «Добавить» участника.
- [Ф][open] Список участников (роль «Владелец» и т.д.).
- [Ф][n-a] Создать «Папка» — зона
feature/files(создаётся из Файлов). - [Ф][n-a] Создать «Конференции» — зона
feature/talk. - [Ф][n-a] Создать «Календарь» — зона
feature/calendar.
n-a обоснование: три «Создать …» из карточки команды — кросс-модульные создающие потоки чужих модулей, достижимы из их приложений; в контактах мобильно-неприменимы. Команды (Circles/Teams) целиком — кандидат на согласование с лидом: нужен ли отдельный экран команд в мобильных Контактах.
Экран 7: Параметры контактов (модальный шит) — Ff 0.0% (5 open Ф / 5)
Отсутствует в нативе:
- [Ф][open] «Сортировать по» (Имя/Фамилия/фонетика ×2/Отображаемое имя/Последнее изменение).
- [Ф][open] «Импорт контактов».
- [Ф][open] Адресные книги: список (Контакты / Недавние / Учётные записи).
- [Ф][open] Адресные книги: ⋯ (переименовать/удалить/шаринг книги).
- [Ф][open] «Новая адресная книга».
Сводка и приоритеты (прошу приоритизацию у лида)
Ff_app 26.7% по 7 экранам (Э1 100 · Э2 18.2 · Э3 42.1 · Э4 26.7 · Э5/6/7 0). Fd — предварительно. Крупнейшие функциональные дыры (кандидаты P1–P5), совпадают с моим планом mail/072:
- Правка/удаление контакта (Экран 4 + ⋯ карточки): edit-форма,
updateContactPUT If-Match с round-trip неизвестных полей vCard,deleteContact, выбор адресной книги, поля должность/адрес/ даты/о-себе/часовой пояс, типы TEL/EMAIL. Требует href+ETag вDavContact/ContactEntity— core-правкаCardDavClient+Room, лид дал добро в mail/072 (условия: не менять list/create, юниты vCard round-trip, гейт:app:compileReleaseKotlin, Room-миграция). - Группы контакта (Экран 2 + поле формы + фильтр «Без группы»): парс CATEGORIES → чипы-фильтр.
- Шторка навигации (Экран 2): импорт, оргструктура, группы, команды, параметры — как единый drawer.
- Привязка к каналам (Экран 3): «Email» → свой композер, «Позвонить» → Talk-звонок (кросс-модуль feature/mail, feature/talk — согласую письмами, лид в копию).
- Параметры (Экран 7): сортировка, импорт, управление адресными книгами. Прочее: соц.сеть/cloud-ID/QR/скачать/копировать в карточке; оргструктура-граф; экран команд (см. n-a).
Вопросы к лиду (b-dev-mobile)
- Порядок P1–P5? Мой дефолт (не жду ответа, начинаю с P1 edit/delete — целиком мой модуль + твоё уже-данное добро на core-правку): 1→2→(4 кросс-модуль)→3→5.
- Команды (Circles/Teams) (Экран 6) — нужен ли отдельный экран команд в мобильных Контактах, или считаем n-a целиком? Три «Создать …» я пометил n-a (чужие модули) — подтверди.
- Оргструктура (Экран 5) — в скоуп мобильных Контактов или n-a?
- Fd: гоню отдельным проходом на устройстве после ревью-сборки — сборка/версия по гейту (084) за тобой.
Live-запись (mail/085, ограждения)
Read-only снят: edit/delete-флоу закрою live на forbion CRUDʼом СВОИХ bmob-* контактов
(создать→править→удалить свой же), не трогая реальные данные cloude. Пока правка edit/delete не
написана — веду из кода + юнит-тесты на vCard round-trip (обязательны по mail/072).