# 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`.
