Files
ds-galo/openspec/changes/add-mobile-photo-zoom/specs/android-client/spec.md
T
iu beeb4c7c09 feat(viewer): show a loading spinner while the zoomed original loads
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
2026-10-13 12:40:53 +03:00

5.7 KiB

Spec Delta

MODIFIED Requirements

Requirement: Просмотр медиа на весь экран

Полноэкранный просмотр SHALL поддерживать изображение с зумом пальцами, видео с постером и управлением воспроизведением, а также панораму 360; навигация между элементами альбома SHALL выполняться свайпом.

Scenario: Свайп между элементами

  • WHEN пользователь свайпает в просмотре
  • THEN показывается следующий или предыдущий элемент альбома без выхода из просмотра

Scenario: Видео

  • WHEN открыт видеоэлемент
  • THEN показывается постер и доступно воспроизведение с перемоткой

ADDED Requirements

Requirement: Зум изображения жестами

Полноэкранный просмотр изображения SHALL поддерживать увеличение и уменьшение щипком (pinch), а при увеличенном изображении — панорамирование перетаскиванием.

Scenario: Щипок увеличивает изображение

  • WHEN пользователь разводит пальцы на изображении
  • THEN изображение увеличивается относительно вписанного вида

Scenario: Панорамирование при увеличении

  • WHEN изображение увеличено, и пользователь перетаскивает его пальцем
  • THEN видимая область изображения смещается, а границы изображения не отрываются от краёв области просмотра

Requirement: Двойной тап переключает вписанный вид и 100%

Двойной тап по изображению SHALL переключать вписанный вид и масштаб 100% натурального размера с якорем в точку нажатия.

Scenario: Вход в 100% из вписанного вида

  • WHEN изображение показано вписанным, и пользователь делает двойной тап
  • THEN изображение показывается в масштабе 100% натурального размера с центром в точке нажатия

Scenario: Возврат во вписанный вид

  • WHEN изображение увеличено, и пользователь делает двойной тап
  • THEN изображение возвращается во вписанный вид

Requirement: Предел зума по натуральному размеру

Зум изображения SHALL ограничиваться снизу вписанным видом, а сверху — 200% натурального размера изображения; при входе в зум SHALL догружаться оригинал изображения.

Scenario: Верхний предел

  • WHEN пользователь продолжает увеличивать изображение за 200% натурального размера
  • THEN масштаб останавливается на 200%, изображение не увеличивается дальше

Scenario: Оригинал при увеличении

  • WHEN пользователь входит в зум
  • THEN догружается оригинал изображения и подменяет превью по факту загрузки

Requirement: Навигация и сброс при зуме

Пока изображение увеличено, горизонтальный свайп SHALL NOT листать альбом, а жест SHALL отдаваться панорамированию; при переходе на другой элемент просмотра зум SHALL сбрасываться во вписанный вид.

Scenario: Свайп не листает увеличенное изображение

  • WHEN изображение увеличено, и пользователь свайпает по нему
  • THEN альбом не листается, а изображение панорамируется

Scenario: Сброс при смене фото

  • WHEN пользователь переходит на другой элемент и возвращается к увеличенному изображению
  • THEN изображение показывается во вписанном виде

Requirement: Индикатор загрузки оригинала

Пока оригинал изображения загружается после входа в зум, приложение SHALL показывать индикатор загрузки в правом верхнем углу области просмотра.

Scenario: Оригинал загружается

  • WHEN пользователь входит в зум, и оригинал ещё загружается
  • THEN в правом верхнем углу показывается индикатор загрузки

Scenario: Загрузка завершена

  • WHEN оригинал загружен или недоступен
  • THEN индикатор загрузки скрыт