# 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`: ```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** (основной способ для тестирования на устройстве): ```bash cd /var/www/f7cloud/f7cloud-mobile ./gradlew assembleDebug chown www-data:www-data app/build/outputs/apk/debug/*.apk ``` **Release APK** (с minify и shrink resources): ```bash cd /var/www/f7cloud/f7cloud-mobile ./gradlew assembleRelease ``` **Сборка отдельного модуля** (проверка компиляции без полной сборки app): ```bash ./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.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`. --- ## Известные ограничения 1. **Задачи** — только CalDAV-календари как списки; умные списки и метки в UI есть, серверной логики нет. 2. **Заметки** — открываются в браузере, не нативно. 3. **Release-подпись** — для production нужен настроенный keystore (сейчас основная сборка — debug). 4. **Размер APK** ~130 МБ — включает vendor/talk-android и все feature-модули. --- ## Связанные документы | Файл | Содержание | |------|------------| | [README.md](README.md) | Краткая справка по сборке и модулям | | [design/README.md](design/README.md) | Структура макетов Figma | | [vendor/talk-android/README.F7CLOUD.md](vendor/talk-android/README.F7CLOUD.md) | Форк Talk для F7cloud | | [../docs/SERVER-PERFORMANCE.md](../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`.