# F7cloud Mobile (native)

Нативное Android-приложение F7cloud на Kotlin + Jetpack Compose.

## Лицензия

Приложение распространяется под **GPL-3.0-or-later** (см. [LICENSE](LICENSE)). Причина: в сборку
линкуется код, производный от [Nextcloud Talk for Android](https://github.com/nextcloud/talk-android)
(GPL-3.0-or-later, каталог `vendor/talk-android/`), поэтому объединённая работа — тоже под GPL.
Исходный код каждой распространяемой сборки предоставляется по тегу релиза в Gitea (обязательство
corresponding source, GPLv3 §6). Сторонние компоненты и их лицензии — [NOTICE.md](NOTICE.md).

| Параметр | Значение |
|----------|----------|
| applicationId | `ru.forbion.f7cloud.mobile` |
| minSdk | 26 |
| compileSdk / targetSdk | 36 |
| Gradle | 9.3.0 |
| AGP | 8.13.2 |
| Kotlin | 2.3.0 |
| Модули | app, core (auth, network, designsystem, push), feature (widgets, files, talk, mail, …) |

## Сборка APK

С **v0.5.27** используется собственный Gradle wrapper в этом каталоге (Gradle 9.3, AGP 8.13, Kotlin 2.3):

```bash
cd /var/www/f7cloud/f7cloud-mobile
./gradlew assembleDebug
chown www-data:www-data app/build/outputs/apk/debug/*.apk
```

> Старый способ через `android-webview` (Gradle 8.7) больше не поддерживается — там AGP 8.2, несовместим с Kotlin 2.3.

Release:

```bash
./gradlew assembleRelease
```

APK с версией в имени:

```
app/build/outputs/apk/debug/f7cloud-mobile-v{versionName}-{versionCode}-debug.apk
```

## Структура навигации

Мобильный UI повторяет **мобильную** версию сайта (тема forbion):

- нижняя панель: Talk, Профиль, Уведомления, Создать, Меню;
- меню приложений — bottom sheet со списком модулей;
- стартовый экран после входа — **Главная** (виджеты / Dashboard).

## Модуль «Файлы»

- Список папок и файлов через WebDAV PROPFIND (`oc:fileid` для идентификации).
- Навигация по папкам, кнопка «Назад».

### Word / Excel / PowerPoint (Richdocuments)

Office-документы открываются в **Collabora Online** через Richdocuments:

1. По `fileId` (WebDAV или ссылка `/f/{id}` с виджетов) → Direct Editing API:
   `POST /ocs/v2.php/apps/richdocuments/api/v1/document`.
2. Полноэкранный WebView (`OfficeEditorActivity`) с:
   - `RichDocumentsMobileInterface` (см. `apps/richdocuments/docs/mobile_flow.md` на сервере) — скрывает оболочку F7cloud;
   - desktop User-Agent — полная панель инструментов Collabora;
   - поддержка iframe Collabora (`coll.f7cloud.ru`).

**Где работает:** модуль **Файлы** и виджет **Рекомендации** на **Главной** (клик по `.docx` / `.xlsx`).

Поддерживаемые расширения: см. `OfficeFiles.kt`.

**Требования на сервере:** `richdocuments` + Collabora (у вас: `https://coll.f7cloud.ru`).

## Модуль «Главная» (Widgets)

Данные с Dashboard API F7cloud:

| Endpoint | Назначение |
|----------|------------|
| `/ocs/v2.php/apps/dashboard/api/v1/widgets` | метаданные виджетов |
| `/ocs/v2.php/apps/dashboard/api/v3/layout` | порядок виджетов пользователя |
| `/ocs/v2.php/apps/dashboard/api/v2/widget-items` | элементы (Talk, Mail, Calendar) |
| `/ocs/v2.php/apps/dashboard/api/v1/widget-items?widgets[]=recommendations` | блок «Рекомендации» |

Запросы выполняются **параллельно** (`WidgetsRepository`, с v0.5.4).

## Производительность

### Клиент (приложение)

| Версия | Изменение |
|--------|-----------|
| ≤ 0.5.3 | 4 последовательных запроса → до ~30 с |
| ≥ 0.5.4 | параллельные запросы, layout с таймаутом 2 с, v1 только для recommendations → ~2–4 с |

### Сервер

Перед релизом или при жалобах на медленную «Главную» проверьте сервер:

**[docs/SERVER-PERFORMANCE.md](../docs/SERVER-PERFORMANCE.md)**

Кратко для `forbion.f7cloud.ru` (2026-05-30):

- ✅ OPcache включён (FPM: 256 MB, 100k файлов)
- ✅ Redis + APCu для кеша F7cloud
- ✅ PHP-FPM: min 18 spare workers, старт 30

Первый API-запрос после простоя сервера может занимать 15–20 с — это холодный bootstrap PHP/F7cloud, не ошибка приложения.

## Авторизация

- Используется тот же пароль, что и для веб-входа (или пароль приложения при 2FA).
- OCS `/ocs/v2.php/cloud/user` — проверка и получение `davUserId` для WebDAV.

## Связанные проекты

- [android-webview](../android-webview/README_ANDROID_BUILD.md) — WebView-оболочка (legacy)
- [f7push](../apps/f7push/README.md) — push-уведомления
