fd17df80a8
Kotlin/Compose client for F7cloud (mail, files, talk, calendar, contacts, tasks, support). Current version: 0.5.113 (build 121).
318 lines
16 KiB
Markdown
318 lines
16 KiB
Markdown
# 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`.
|