Files
f7cloud_mobile/PROJECT-STATUS.md
F7cloud Mobile fd17df80a8 Initial import of f7cloud-mobile native Android app.
Kotlin/Compose client for F7cloud (mail, files, talk, calendar, contacts, tasks, support).
Current version: 0.5.113 (build 121).
2026-07-07 12:05:18 +03:00

16 KiB
Raw Permalink Blame History

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)

  1. Вносит изменения в Kotlin/Compose-код.
  2. При необходимости увеличивает versionCode / versionName в app/build.gradle.
  3. Запускает ./gradlew assembleDebug (или :app:assembleDebug).
  4. Проверяет, что сборка завершилась с BUILD SUCCESSFUL.
  5. Сообщает путь к 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.890.5.90 9798 Техподдержка, карточка контакта, повторный звонок
0.5.910.5.92 99100 Расширенный календарь, composer поддержки, фикс краша календаря
0.5.100 108 Меню «⋯» в почте с иконками
0.5.1010.5.102 109110 Вёрстка просмотра письма, swipe-to-dismiss
0.5.1030.5.105 111113 Фиксы крашей HTML-писем
0.5.104 112 Предзагрузка тел писем
0.5.106 114 Свайп при открытом sidebar
0.5.110 118 Параметры эл. почты
0.5.1110.5.112 119120 Запланированная отправка, меню приложений
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.


Известные ограничения

  1. Задачи — только CalDAV-календари как списки; умные списки и метки в UI есть, серверной логики нет.
  2. Заметки — открываются в браузере, не нативно.
  3. Release-подпись — для production нужен настроенный keystore (сейчас основная сборка — debug).
  4. Размер 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

  1. ./gradlew assembleDebug — без ошибок.
  2. versionCode / versionName обновлены в app/build.gradle.
  3. APK существует в app/build/outputs/apk/debug/.
  4. При необходимости: chown www-data:www-data app/build/outputs/apk/debug/*.apk.