Kotlin/Compose client for F7cloud (mail, files, talk, calendar, contacts, tasks, support). Current version: 0.5.113 (build 121).
16 KiB
F7cloud Mobile — статус проекта и журнал работ
Документ описывает текущее состояние нативного Android-приложения f7cloud-mobile, выполненные задачи, процесс сборки APK и актуальную версию.
Дата обновления: 7 июля 2026
Расположение проекта: /var/www/f7cloud/f7cloud-mobile
Сервер: https://forbion.f7cloud.ru
Текущая версия
| Параметр | Значение |
|---|---|
| versionName | 0.5.113 |
| versionCode | 121 |
| applicationId | ru.forbion.f7cloud.mobile |
| Последний APK (debug) | app/build/outputs/apk/debug/f7cloud-mobile-v0.5.113-121-debug.apk |
| Размер APK | ~130 МБ |
Версия задаётся в app/build.gradle:
versionCode 121
versionName '0.5.113'
При каждой значимой сборке versionCode увеличивается на 1, versionName — по схеме 0.5.xxx.
Сборка APK
Чем собирается
Сборка выполняется на сервере в каталоге проекта с помощью Gradle Wrapper — отдельный от legacy-проекта android-webview.
| Компонент | Версия |
|---|---|
| Gradle | 9.3.0 (gradle/wrapper/gradle-wrapper.properties) |
| Android Gradle Plugin (AGP) | 8.13.2 |
| Kotlin | 2.3.0 |
| Jetpack Compose BOM | 2025.02.00 |
| compileSdk / targetSdk | 36 |
| minSdk | 26 |
| JDK на сервере | OpenJDK 21 |
С v0.5.27 используется собственный wrapper в
f7cloud-mobile. Старый способ черезandroid-webview(Gradle 8.7, AGP 8.2) не поддерживается — несовместим с Kotlin 2.3.
Команды
Debug APK (основной способ для тестирования на устройстве):
cd /var/www/f7cloud/f7cloud-mobile
./gradlew assembleDebug
chown www-data:www-data app/build/outputs/apk/debug/*.apk
Release APK (с minify и shrink resources):
cd /var/www/f7cloud/f7cloud-mobile
./gradlew assembleRelease
Сборка отдельного модуля (проверка компиляции без полной сборки app):
./gradlew :feature:tasks:compileDebugKotlin
Имя выходного файла
Шаблон задаётся в app/build.gradle:
f7cloud-mobile-v{versionName}-{versionCode}-{variant}.apk
Пример: f7cloud-mobile-v0.5.113-121-debug.apk
Где лежит APK
/var/www/f7cloud/f7cloud-mobile/app/build/outputs/apk/debug/
/var/www/f7cloud/f7cloud-mobile/app/build/outputs/apk/release/
Как собирает ассистент (Cursor Agent)
- Вносит изменения в Kotlin/Compose-код.
- При необходимости увеличивает
versionCode/versionNameвapp/build.gradle. - Запускает
./gradlew assembleDebug(или:app:assembleDebug). - Проверяет, что сборка завершилась с
BUILD SUCCESSFUL. - Сообщает путь к APK.
Коммиты в git создаются только по явной просьбе пользователя.
Архитектура проекта
Нативное приложение на Kotlin + Jetpack Compose. Не WebView-оболочка (legacy: android-webview).
f7cloud-mobile/
├── app/ # Точка входа, навигация (AppScaffold, AppNavigation)
├── core/
│ ├── auth/ # Сессия, авторизация
│ ├── network/ # HTTP, WebDAV, CalDAV, OCS API
│ ├── designsystem/ # F7Colors, компоненты UI, нижняя панель, меню
│ ├── push/ # Firebase push-уведомления
│ ├── database/ # Room (локальный кэш)
│ └── ui/ # Общие UI-утилиты
├── feature/
│ ├── files/ # Файлы (WebDAV)
│ ├── talk/ # Talk UI, офлайн-чат
│ ├── talk-native/ # Нативные звонки (обёртка vendor/talk-android)
│ ├── mail/ # Почта
│ ├── calendar/ # Календарь (CalDAV)
│ ├── contacts/ # Контакты (CardDAV)
│ ├── tasks/ # Задачи (CalDAV)
│ ├── deck/ # Карточки (Deck)
│ └── f7support/ # Техподдержка
├── vendor/talk-android/ # Форк Nextcloud Talk (нативные конференции)
└── design/ # Макеты PNG, токены, CSS-эталоны
Навигация
- Нижняя панель зависит от активной вкладки (
F7BottomBarConfig.kt). - Меню приложений — полноэкранная панель
F7AppMenuSheet(кнопка «гамбургер»). - Стартовая вкладка после входа — Файлы.
- В активной конференции нижняя панель скрывается (
talkInRoom).
Дизайн-система
Цвета и компоненты из темы forbion (core/designsystem/F7Colors.kt):
| Токен | Значение |
|---|---|
| Primary | #70B62B |
| Background | #FBFBFB |
| Surface | #FFFFFF |
| Text primary | #151515 |
| Text secondary | #808080 |
| Border | #E6E6E6 |
Иконки подгружаются с сервера: https://forbion.f7cloud.ru/themes/forbion/images/...
Макеты для вёрстки: design/screens/, эталонный CSS веб-версии: themes/forbion/css/pages/.
Выполненные работы (хронология)
Ниже — основные блоки работ, выполненных в ходе разработки нативного приложения (сессии Cursor Agent, весна–лето 2026).
Общая платформа
- Переход на Kotlin 2.3 + Compose + Gradle 9.3 / AGP 8.13.
- Модульная архитектура
app/core/feature/vendor. - Глобальный safe area (
enableEdgeToEdge,F7WindowInsets) — исправление перекрытия статус-бара на Samsung Z и других устройствах с вырезом. - Swipe-to-dismiss для оверлеев (
F7OverlayNavigation.kt,f7SwipeFromRightToDismiss). - Push-уведомления через Firebase (
core/push).
Меню приложений (F7AppMenuSheet)
- Полноэкранная белая панель
#FBFBFBбез затемнения (по_header.css). - Поиск приложений сверху.
- Сетка 4 колонки, иконки 62×62 dp, подписи 12sp bold.
- Нижняя панель остаётся видимой (90 dp снизу).
- Внешние сайты (Bitrix, 1C UNF и др.) подгружаются через
AppMenuRepository.
Конференции / Talk (talk-native, vendor/talk-android)
- Нативные звонки через форк Nextcloud Talk.
- Исправление повторного подключения к звонку после завершения предыдущего (
CallActivity.onNewIntent, сбросApplicationWideCurrentRoomHolder, очистка вTalkNativeCallLauncher) — баг с конференцией «Топ Дейли» у markov.aa.
Почта (feature/mail)
- Нативный список писем, папки, поиск, переписки (threads).
- Просмотр письма: HTML в WebView, текстовые письма в Compose.
- Меню действий «⋯» с иконками на белом фоне (ответить, избранное, спам, метки, переместить и т.д.).
- Свайп справа налево для закрытия письма.
- Исправления крашей при открытии HTML-писем (вложенная прокрутка,
fillMaxSizeвColumn). - Фоновая предзагрузка тел писем (до 60 писем, 3 параллельно) — v0.5.104.
- Параметры эл. почты (
MailSettingsScreens.kt) по макетуAppSettingsMenu.vue:- Основные, учётные записи, внешний вид, текстовые шаблоны, конфиденциальность, безопасность.
- API: preferences, trusted senders, text blocks в
MailRepository.
- Запланированная отправка при просмотре письма — открывает compose-ответ с выбранным временем (вместо snooze входящего).
Календарь (feature/calendar)
- Виды: День, Неделя, Месяц, Год, Список.
- Боковая панель навигации по календарям.
- Расширенный редактор событий: повторения, участники, Talk, напоминания, RSVP.
- Корзина, незапланированные задачи, создание календаря, импорт
.ics, настройки. - Исправление краша
LazyColumnс бесконечной высотой (v0.5.92). - Вёрстка по макетам из
design/screens/calendar/и CSS_calendar-*-mobile.css.
Контакты (feature/contacts)
- Список контактов CardDAV, поиск, группы.
- Карточка контакта: email, телефон, адрес, организация, аватар.
Техподдержка (feature/f7support)
- Нативный канбан тикетов, чат, создание обращений, вложения.
- Composer чата (
SupportChatComposerBar) — pill-поле с эмодзи, скрепкой и круглой кнопкой отправки (как в Talk). - Исправление выравнивания кнопки отправки (
Alignment.CenterVertically).
Задачи (feature/tasks) — последняя крупная доработка (v0.5.113)
Дизайн по макетам design/screens/tasks/ и CSS _tasks-main-mobile.css, _tasks-sidebar-mobile.css:
| Компонент | Файл | Описание |
|---|---|---|
TasksToolbar |
TasksComponents.kt |
Кнопка «+», inline-создание, фильтр, сортировка |
TasksRow |
TasksComponents.kt |
Строка 48dp, чекбокс 16px, приоритет, дата |
TasksGroupHeader |
TasksComponents.kt |
Группы по дате (Сегодня, Вчера…) |
TasksEmptyState |
TasksComponents.kt |
Пустой список + «Загрузить» |
TasksCompletedSection |
TasksComponents.kt |
Завершённые + удаление |
TaskDetailSheet |
TasksComponents.kt |
Полноэкранная панель свойств/заметок |
TasksSettingsSheet |
TasksComponents.kt |
Параметры задач |
TasksGrouping |
TasksGrouping.kt |
Группировка по сроку |
Данные — CalDAV (TasksRepository, CalDavClient). Умные списки (Сегодня, На неделе) пока только в UI настроек, без отдельной серверной логики.
Файлы (feature/files)
- WebDAV: список папок/файлов, навигация, загрузка.
- Office-документы через Collabora (
OfficeEditorActivity).
История версий (ключевые вехи)
| versionName | versionCode | Основные изменения |
|---|---|---|
| 0.5.88 | 96 | Базовая навигация, модули |
| 0.5.89–0.5.90 | 97–98 | Техподдержка, карточка контакта, повторный звонок |
| 0.5.91–0.5.92 | 99–100 | Расширенный календарь, composer поддержки, фикс краша календаря |
| 0.5.100 | 108 | Меню «⋯» в почте с иконками |
| 0.5.101–0.5.102 | 109–110 | Вёрстка просмотра письма, swipe-to-dismiss |
| 0.5.103–0.5.105 | 111–113 | Фиксы крашей HTML-писем |
| 0.5.104 | 112 | Предзагрузка тел писем |
| 0.5.106 | 114 | Свайп при открытом sidebar |
| 0.5.110 | 118 | Параметры эл. почты |
| 0.5.111–0.5.112 | 119–120 | Запланированная отправка, меню приложений |
| 0.5.113 | 121 | Дизайн модуля Задачи |
Полный список версий — в git-истории app/build.gradle.
Серверные зависимости
Приложение работает с инстансом F7cloud / Nextcloud:
| Сервис | Назначение |
|---|---|
| OCS API | Авторизация, настройки, Dashboard |
| WebDAV | Файлы |
| CalDAV | Календарь, задачи |
| CardDAV | Контакты |
| Mail (IMAP/SMTP через API) | Почта |
| Spreed / Talk | Конференции, записи |
| Richdocuments + Collabora | Редактирование Office |
| f7support | Техподдержка |
| Deck | Карточки |
Иконки и CSS-эталоны: themes/forbion/ на сервере forbion.f7cloud.ru.
Макеты и дизайн
design/
├── screens/ # PNG-макеты экранов (tasks, calendar, mail, …)
├── tokens/ # colors.txt, typography
├── icons/ # Локальные иконки (если нет на сервере)
└── references/ # Ссылки на Figma
При вёрстке ориентируемся на мобильный CSS веб-версии: themes/forbion/css/pages/*-mobile.css.
Известные ограничения
- Задачи — только CalDAV-календари как списки; умные списки и метки в UI есть, серверной логики нет.
- Заметки — открываются в браузере, не нативно.
- Release-подпись — для production нужен настроенный keystore (сейчас основная сборка — debug).
- Размер APK ~130 МБ — включает vendor/talk-android и все feature-модули.
Связанные документы
| Файл | Содержание |
|---|---|
| README.md | Краткая справка по сборке и модулям |
| design/README.md | Структура макетов Figma |
| vendor/talk-android/README.F7CLOUD.md | Форк Talk для F7cloud |
| ../docs/SERVER-PERFORMANCE.md | Производительность сервера |
Быстрый чеклист перед выдачей APK
./gradlew assembleDebug— без ошибок.versionCode/versionNameобновлены вapp/build.gradle.- APK существует в
app/build/outputs/apk/debug/. - При необходимости:
chown www-data:www-data app/build/outputs/apk/debug/*.apk.