feat(android): album/photo attribute-actions and device gallery sync fixes

Album panel and photo sheet with attributes/actions for every album (server and
device), local album rename/cover/delete, EXIF attribute settings, and a unified
device-gallery sync check:

- add repository "Атрибуты и действия" panel (swipe left) on server and device
  albums: cover, info, navigation, rename/delete; album settings screen; photo
  sheet (swipe up) with info, tags and actions; EXIF attribute settings backed by
  profile preferences
- local albums use local metadata and actions: app-only display name and cover
  (new device_album_meta table), delete removes photos from the phone via the
  system delete consent
- unified mode x state policy (GallerySyncPolicy/SyncCheck) runs on start and on
  album open: upload/offload in move, restore originals in copy/off
- fix move->copy restore, offload of any linked-but-local original, provenance
  recovery that no longer overwrites the album mode, serialized reconcile and
  duplicate-upload suppression; prompt for "all files" access on start
- album card caption: name (with linked server name when different) and storage
  icons (memory card / cloud) with item count

Sync delta specs into android-client and archive the change
add-mobile-album-photo-actions.

Verified: unit/Robolectric suite green, :app:assembleDebug, :app:lint, and the
DeviceSyncE2ETest instrumented suite on the emulator (7/7).
This commit is contained in:
iu
2026-10-13 21:49:12 +03:00
parent d1bb964685
commit fa210e6c7f
75 changed files with 6094 additions and 167 deletions
@@ -0,0 +1,52 @@
# Proposal
## Why
В web у альбомов и фото есть полноценное управление атрибутами и действиями (панель
обложки/информации/навигации, разделы «Действия», «Метки», «Информация» с настройками
EXIF-атрибутов). В Android-клиенте этого нет: экран альбома — только сетка, просмотр —
только изображение с навигацией, а `GaloApi` умеет лишь переименовать/удалить/переместить.
С телефона нельзя ни посмотреть свойства, ни выполнить действия «как в web».
## What Changes
- Новый **экранный жест**: свайп справа налево в любом альбоме (серверном и локальном)
открывает панель **«Атрибуты и действия»** (drawer справа).
- Панель альбома повторяет структуру web (`AlbumPanel` + экран настроек):
- Атрибуты: «Обложка» (превью, выбрать/сбросить), «Информация» (название, описание,
счётчики), «Навигация» (участники, настройки, ссылки для просмотра).
- Действия: «Переименовать», «Удалить».
- Источник данных: серверный альбом — данные сервера; локальный, связанный с серверным —
реальные атрибуты связанного серверного альбома; локальный без связи — локальные
значения (обложка/имя/счётчик), без раздела «Навигация».
- Новый **жест просмотра**: свайп вверх в полноэкранном просмотре (серверном и device)
открывает лист **«Атрибуты и действия»**, повторяющий web `PhotoPanel`:
- Атрибуты: «Информация» (автор, файл, тип, разрешение, EXIF, снято, координаты,
загружено) с настройками списка EXIF-атрибутов; «Метки».
- Действия: «Открыть (просмотр)» (из сетки), «Скачать», «Переместить», «Копировать»,
«Установить как обложку альбома», «Удалить»; переименование по тапу на имя.
- Для device-медиа: если элемент сопоставлен серверному фото — реальные серверные
атрибуты и действия; иначе локальные атрибуты и локальные действия.
- Расширение клиентского слоя Android: `GaloApi` + DTO получают операции альбома
(обновление/обложка/удаление/участники/share), копирование, метки, скачивание, `exif`
и `preferences`; новый экран «Настройки атрибутов» (видимость + подписи, в профиль).
- **Бэкенд не меняется**: все нужные endpoints уже есть.
## Capabilities
### New Capabilities
<!-- none -->
### Modified Capabilities
- `android-client`: добавляются требования к панели «Атрибуты и действия» на экранах
альбомов, к листу «Атрибуты и действия» в полноэкранном просмотре, к выбору источника
атрибутов для локальных альбомов/медиа и к поддерживающим операциям API/настройкам
атрибутов в профиле.
## Impact
- `android/app/src/main/java/com/galo/android/`: `data/network/GaloApi.kt`, `.../dto/Dtos.kt`,
`domain/model/`, `ui/album/`, `ui/viewer/`, `ui/devicealbum/`, новые экраны настроек.
- Тесты Android (`android/app/src/androidTest`, `test`).
- Бэкенд, web и схема spec-ов не затрагиваются (кроме новой delta для `android-client`).