Нижняя панель (по layout.user.php сайта): средняя кнопка = ЗАДАЧИ
(была Карточки) — по решению владельца «как на сайте»; иконки из
набора mobile-*-icon (плоский конверт mobile-mail-icon вместо
конверта-с-@, mobile-tasks-icon, mobile-spreed-icon вебкамера,
mobile-burger-icon), локально/офлайн; размеры 25dp (app-link) как
на сайте, стрелка «назад» 18dp. Карточки остаются в шторке-меню.
Deck: loadBoardDetail больше не рушится, если GET /boards/{id}
(метки/права) не отвечает — стеки грузятся всё равно (вероятная
причина «доска не открывается» на устройстве). Заголовок/метки/права
подставляются best-effort.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
- onNavBackClick: для Карточек/Конференций/Контактов/Задач/Поддержки
(нет сайдбара) стрелка теперь popTabHistory() → предыдущий раздел
(была мёртвой, else -> Unit).
- DeckRepository.getJson вернул к прежнему рабочему виду (без
OCS-APIRequest), чтобы исключить регресс чтения досок; запись
(sendJson) заголовок сохраняет.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Было: только чтение (доски → список названий карточек). Стало —
полноценная работа через внутренний Deck API (/api/v1.0, тот же, что
у веб-версии; app-password + OCS-APIRequest, CSRF не требуется):
- Доска: колонки-стеки со счётчиком; карточки показывают метки-чипы
(цвета доски), срок, исполнителей, чекбокс «выполнено».
- Карточка-деталь (лист): правка названия/описания, срок через
DatePicker (+сброс), переключение done, метки доски тапом,
перемещение в другую колонку, архив, удаление.
- Создание карточки (+ в колонке) и колонки (+ Колонка в шапке).
- Права: если PERMISSION_EDIT=false — всё только для чтения.
- Модели расширены (DeckLabel/description/duedate/assignees/stackId);
VM перечитывает доску после каждого действия. Поля сверены с
Card.php на forbion. Запись на устройстве не тестировалась (в прод
Deck не писал) — проверить при ревью.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Раньше свайп-обновление было только в Файлах. Добавлено (Material3
PullToRefreshBox): Почта (входящие/исходящие, force-обновление), Конференции
(список бесед — заменяет убранную кнопку ↻), Контакты (force + CTag — дёшево),
Задачи (список), Карточки (доски и открытая доска). Контакты: refresh()
получил параметр force (pull-to-refresh форсит sync мимо TTL; с CTag-проверкой
это 1 лёгкий PROPFIND).
- detekt 1.23.8 применён ко всем НАШИМ модулям (vendor-форк исключён),
+formatting-ruleset (обёртка ktlint). Совместим с Kotlin 2.3 (проверено).
- config/detekt/detekt.yml — настройки под наш код (LongMethod 120, MaxLine 140,
MagicNumber off — dp/цвета отдельно, FunctionNaming off — @Composable Заглавные).
- detekt-baseline.xml по модулям: ~403 текущих замечаний зафиксированы →
detekt зелёный, дальше ловит только НОВЫЕ. detekt в CI (ci.yml verify).
Проверено: detektBaseline + detekt BUILD SUCCESSFUL.