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).
This commit is contained in:
@@ -0,0 +1,317 @@
|
||||
# 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`.
|
||||
Reference in New Issue
Block a user