Kotlin + Jetpack Compose client for a self-hosted instance: manual server setup and health check, auth with Keystore-backed tokens, album and photo browsing with SSE live updates, upload queue in WorkManager with HEIC-to-JPEG conversion, and Room/Coil offline cache. Add an android Makefile target and revise project.md §17.
3.7 KiB
3.7 KiB
Proposal
Why
Self-hosted galo сейчас доступен только как адаптивный веб, а project.md §17 явно
исключает мобильные приложения. Но главный сценарий фотоальбома — снимать и загружать
с телефона — на вебе ограничен: нет системного пикера, фоновой загрузки и офлайн-кэша.
Нативный Android-клиент закрывает именно этот разрыв поверх уже существующего HTTP API.
What Changes
- Новое Android-приложение (Kotlin + Jetpack Compose, Android-only), подключаемое к произвольному self-hosted инстансу galo по базовому URL.
- Онбординг: ручной ввод URL сервера, проверка
GET /api/health, вход в аккаунт; режим небезопасного соединения для LAN, iOS/mDNS/доверие self-signed — вне объёма. - Просмотр: список альбомов, сетка фото, viewer фото/видео/pano, live-обновления по SSE.
- Загрузка: системный Photo Picker, очередь в WorkManager, по одному файлу на запрос, прогресс в уведомлении, повторы, опция «только Wi-Fi», работа после закрытия приложения.
- HEIC/HEIF конвертируется на клиенте в JPEG с сохранением EXIF перед отправкой.
- Кэш метаданных (Room) и объектов (Coil, ключ — путь без подписи) для офлайн-браузинга.
- Без изменений серверного API: используются существующие
/api/auth/*,/api/albums,/api/albums/:id/photos(list + multipart upload),/api/sse/*,/api/objects/*. - Не входит в v1: редактирование тегов/комментариев/лайков, управление участниками и инвайтами, share-ссылки, push-уведомления через FCM, iOS.
- BREAKING: нет.
Capabilities
New Capabilities
android-client: поведение Android-клиента — настройка сервера и онбординг, сессия и авторизация, просмотр альбомов и медиа, очередь загрузки и офлайн-кэш.
Modified Capabilities
Нет. Серверные требования не меняются: клиент потребляет существующий API без правок.
Правка project.md §17 («только адаптивный веб») — документация, не spec.
Impact
- Новый верхнеуровневый модуль
android/(Gradle-проект), не затрагивающийbackend/иfrontend/; отдельная сборка и подпись, опциональная цель вMakefile. - Ключевые зависимости клиента: Compose, OkHttp (+ okhttp-sse), Coil, Room, WorkManager, AndroidX ExifInterface, Media3/ExoPlayer.
- Интеграционные ограничения сервера, учтённые в дизайне: origin-relative подписанные
URL объектов с окном подписи (
host-agnostic-object-urls), fail-fast batch-загрузка (photos/handlers.goUpload), отсутствие декодирования HEIC на сервере. - Требуется пересмотр
project.md§17 как отдельная правка документации.