feat(android): показывать ход восстановления оригиналов

Возврат из переноса в копии скачивает оригиналы с сервера, но ход нигде не
отражался: карточка умела показывать только загрузку, а восстановление шло в
области экрана и обрывалось при уходе с него.

Добавлен RestoreCoordinator: выполняет восстановление в области приложения
(уход с экрана больше не прерывает), ведёт ход «альбом -> восстановлено из
всего» и защищает от одновременного запуска по одному альбому. RestoreManager
сообщает ход по каждому элементу и вынесен за интерфейс AlbumRestorer; SyncCheck
ходит через координатора и, как и раньше, дожидается завершения.

Карточка альбома показывает «Копии — восстановление N%» (пульсирует), экран
альбома устройства — строку «Восстановление оригиналов: X из Y» с полосой.

Изменение OpenSpec: android-album-restore-progress.
This commit is contained in:
iu
2026-10-16 20:15:05 +03:00
parent 1eb1177273
commit fcc7ac05c1
21 changed files with 593 additions and 27 deletions
@@ -0,0 +1,24 @@
# Spec Delta
## ADDED Requirements
### Requirement: Прогресс восстановления оригиналов
Пока идёт восстановление оригиналов, карточка альбома устройства SHALL показывать ход в
третьей строке («Копии — восстановление <процент>%»), а экран альбома устройства SHALL
показывать ход отдельной строкой. По завершении ход SHALL исчезать.
#### Scenario: Карточка в списке
- **WHEN** для альбома устройства идёт восстановление оригиналов
- **THEN** карточка показывает «<метка режима> — восстановление <процент>%»
#### Scenario: Экран альбома устройства
- **WHEN** для альбома устройства идёт восстановление оригиналов
- **THEN** экран альбома показывает ход восстановления
#### Scenario: Завершение
- **WHEN** восстановление оригиналов завершилось
- **THEN** ход больше не показывается, а карточка возвращается к метке режима
@@ -0,0 +1,24 @@
# Spec Delta
## ADDED Requirements
### Requirement: Ход и устойчивость восстановления оригиналов
При возврате оригиналов на устройство приложение SHALL выполнять операцию до конца
независимо от того, остаётся ли открыт экран альбома устройства, и SHALL сообщать ход:
сколько элементов восстановлено из скольких намечено.
#### Scenario: Уход с экрана
- **WHEN** восстановление оригиналов запущено и пользователь покидает экран альбома устройства
- **THEN** восстановление продолжается и завершается
#### Scenario: Ход операции
- **WHEN** восстановление оригиналов идёт
- **THEN** приложение знает и сообщает, сколько элементов уже восстановлено из намеченных
#### Scenario: Нечего восстанавливать
- **WHEN** среди элементов альбома нет превью с серверной копией
- **THEN** операция не запускается и ход не показывается