Show a spinner in the top-right of the photo viewer while the original is being loaded on zoom, so the wait is visible. Only the original triggers it; the fitted preview and a re-shown preview never do. Cover the visibility gate with a unit test. OpenSpec change: add-mobile-photo-zoom
32 lines
2.2 KiB
Markdown
32 lines
2.2 KiB
Markdown
# Tasks
|
|
|
|
## 1. Zoomable image component
|
|
|
|
- [x] 1.1 Implement зум-математику (диапазон `[fitScale, 2.0]`, якорь в точку жеста) отдельным
|
|
тестируемым помощником; проверить юнит-тестом клампы предела и пересчёт якоря при double-tap
|
|
- [x] 1.2 Реализовать слой жестов (pinch + панорамирование при зуме + double-tap) над изображением
|
|
через `pointerInput` + `graphicsLayer`; проверить Compose-тестом (Robolectric) на pinch и double-tap
|
|
- [x] 1.3 Переключать источник на `originalUrl` при входе в зум, сохраняя cache key Coil; проверить,
|
|
что запрос данных меняется при `zoomed` и не сбрасывает дисковый кэш
|
|
|
|
## 2. Viewer integration
|
|
|
|
- [x] 2.1 Поднять `zoomed` в `ViewerContent` и учитывать его в `pagerScrollEnabled`; проверить
|
|
Robolectric-тестом «свайп не листает увеличенное фото»
|
|
- [x] 2.2 Подключить zoomable-обёртку в ветку изображения `MediaPage`; проверить тестом, что при
|
|
переходе на другой элемент и обратно изображение показывается во вписанном виде
|
|
|
|
## 3. Loading indicator
|
|
|
|
- [x] 3.1 Показывать индикатор загрузки в правом верхнем углу, пока грузится оригинал при зуме;
|
|
проверить тестом условие показа и что вписанный вид индикатор не показывает
|
|
|
|
## 4. Integration verification
|
|
|
|
- [x] 4.1 Прогнать `./gradlew test` и `./gradlew lintDebug`; на эмуляторе вручную проверить pinch,
|
|
панорамирование, double-tap, предел 200%, а также что видео и панорама не затронуты
|
|
|
|
## Workflow follow-up
|
|
|
|
- Архив change после прохождения ревью проекта.
|