TasksPrefsStore (SharedPreferences) хранит режим Скрыта/Видима/Авто по коллекции.
TasksViewModel через Factory(context), setSmartMode персистит; шит настроек 3-state
от VM (убраны фиктивные локальные remember). Панель реагирует через visibleKeys.
Гейт compile+detekt+test зелёный.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
TasksListNavView рисует видимые коллекции (visibleKeys по режиму+счётчику),
тап → openSmartList (агрегат всех списков, фильтр по коллекции). VM: loadAllTasks
агрегирует все списки, reloadCurrent обновляет вид после мутаций, create в коллекции
идёт в список по умолчанию. Гейт compile+detekt+test зелёный (25 юнитов).
Осталось по P1: 3-state настройки видимости + персист (SharedPreferences).
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
SmartListMode (HIDDEN/VISIBLE/AUTO) по семантике веб server-show 0/1/2.
TasksSmartLists.counts()/visibleKeys() — сводка и разрешение видимых коллекций.
25 юнит-тестов зелёные. Далее: агрегация в VM + вывод в TasksListNavView.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Лид внёс DavTask.startRaw в core (2cb7a9a); пробрасываю в toTaskItem().
Умные списки теперь учитывают реальный start. Гейт compile+detekt+test зелёный.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Чистый TasksSmartLists (6 виртуальных списков по веб-Tasks NC: Важное/Сегодня/
На неделе/Все/Текущие/Завершенные) + SmartListVisibility. TaskItem.startRaw +
startLocalDate() (пусто до DTSTART из core — запрошено у лида). testImplementation
junit + TasksSmartListsTest (22 зелёных). Detekt-долг чужого пакета v0.5.133-137
унесён в baseline, код лида не тронут.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
- Шторка: КАЖДАЯ иконка теперь в белом круге с рамкой и мягкой тенью,
все одного размера (глиф внутри 56% рамки) — как на мобильном сайте
(было: плоские глифы без рамки, разного размера).
- Задачи грузятся быстрее: TasksCache (в памяти на время процесса) —
списки и задачи по спискам показываются мгновенно из кэша при
повторном открытии раздела/списка, сеть обновляет в фоне. Гонки
учтены: результат применяется, только если пользователь ещё на этом
списке.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Паритет веб-версии Задач:
- CalDAV: RELATED-TO;RELTYPE=PARENT в модели/парсере/билдере VTODO
(DavTask.parentUid); createTask принимает parentUid; updateTask и
toggleComplete сохраняют связь с родителем.
- TasksRepository/VM: createSubtask(parent), deleteTask(task) для любой
задачи (не только открытой детали).
- UI: у задачи меню «⋯» → «Добавить вложенную задачу» / «Удалить задачу»;
подзадачи рисуются под родителем с отступом 24dp; диалог ввода названия
подзадачи. Подзадачи исключены из верхнего уровня (не дублируются).
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Раньше на Задачах стрелка «назад» уводила на предыдущий раздел (Файлы).
Теперь она закрывает открытый список и показывает панель списков задач
(TasksListNavView: Все/Текущие/конкретные списки) — как сайдбар папок
в Почте/Файлах/Календаре. Проброшен showListsRequest → vm.closeList().
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.