Возврат из переноса в копии скачивает оригиналы с сервера, но ход нигде не отражался: карточка умела показывать только загрузку, а восстановление шло в области экрана и обрывалось при уходе с него. Добавлен RestoreCoordinator: выполняет восстановление в области приложения (уход с экрана больше не прерывает), ведёт ход «альбом -> восстановлено из всего» и защищает от одновременного запуска по одному альбому. RestoreManager сообщает ход по каждому элементу и вынесен за интерфейс AlbumRestorer; SyncCheck ходит через координатора и, как и раньше, дожидается завершения. Карточка альбома показывает «Копии — восстановление N%» (пульсирует), экран альбома устройства — строку «Восстановление оригиналов: X из Y» с полосой. Изменение OpenSpec: android-album-restore-progress.
2.7 KiB
2.7 KiB
Tasks
1. Ход восстановления в менеджере
- 1.1 Вынести у восстановления интерфейс
AlbumRestorerи добавить вRestoreManager.restoreобратный вызов хода (после каждого элемента, включая пропуски); покрыть тестом, что ход доходит до «всего» при успехе и при неудачной записи (cd android && ./gradlew :app:testDebugUnitTest --tests "*RestoreManagerTest").
2. Координатор восстановления
- 2.1 Добавить
RestoreCoordinator: карта «альбом → ход», запуск в области приложения, защита от повторного запуска по одному альбому; покрыть тестом «ход появляется и исчезает», «пустой набор — хода нет», «повторный запуск игнорируется» (cd android && ./gradlew :app:testDebugUnitTest --tests "*RestoreCoordinatorTest").
3. Подключение вызывающих
- 3.1 Создать координатора в
AppContainerи перевестиDeviceAlbumViewModel.restoreOriginalsнаstart, аSyncCheck— на ожидаемыйrun; проверить, чтоSyncCheckпо-прежнему выполняет восстановление до конца (cd android && ./gradlew :app:testDebugUnitTest --tests "*SyncCoordinatorTest" --tests "*DeviceAlbum*").
4. Ход на карточке и на экране
- 4.1 Добавить ход восстановления в
AlbumSyncProgress(restorePercent) с приоритетом над загрузкой и в пульсацию; покрытьAlbumSyncProgressTestи связать с координатором вAlbumsViewModel(cd android && ./gradlew :app:testDebugUnitTest --tests "*AlbumSyncProgressTest" --tests "*AlbumsViewModelTest"). - 4.2 Показать ход отдельной строкой на экране альбома устройства и проверить на карточке в списке; покрыть
DeviceAlbumContentTestиAlbumsContentTest(cd android && ./gradlew :app:testDebugUnitTest --tests "*DeviceAlbumContentTest" --tests "*AlbumsContentTest").
5. Интеграционная проверка
- 5.1 Прогнать весь Android-набор и собрать debug-APK (
cd android && ./gradlew test :app:assembleDebug).
Workflow follow-up
- Заархивировать изменение после прохождения ревью проекта.
- Проверить результат архивации.