Добавить доступный интерфейс этапа 3

This commit is contained in:
2026-08-18 16:29:08 +03:00
parent dcb16ef4d0
commit 21775542d5
11 changed files with 854 additions and 23 deletions
+56
View File
@@ -0,0 +1,56 @@
# Stage 3 accessibility QA
Дата: 18 августа 2026 года. Slice: масштаб текста, high contrast, non-audio state
и семантика Canvas-экранов.
## Реализованный контракт
- Settings содержит сохраняемые пресеты `Text size: Standard/Large`
(`1.0×/1.25×`) и `High contrast: Off/On`;
- настройки хранятся отдельно от control settings и progress, поэтому миграция не
меняет существующие сохранения;
- оба общих Canvas text helper применяют выбранный масштаб ко всему тексту;
viewport и hit mapping остаются неизменными, а фиксированные HUD/card/button
области обрезают переполнение внутри своих границ;
- high contrast использует чёрный фон, непрозрачные кнопки, белые контуры и
бело-жёлтый текст; активные механизмы не различаются только цветом;
- `ON/OFF`, `UP/DOWN`, `OPEN/LOCKED` и постоянная строка
`Signals · Doors · Volunteer` дают видимое представление критического состояния
при выключенной вибрации;
- content description меняется для level select, settings, playing, pause и
complete; системный Back сохраняет прежний детерминированный контракт;
- read-only automation surface: `textScaleForAutomation()`,
`highContrastForAutomation()`, `screenDescriptionForAutomation()`,
`criticalVisibleStatusForAutomation()` и `safeViewportForAutomation()`.
## TDD evidence
- RED: `AccessibilitySettings` отсутствовал, focused JVM-test завершался шестью
`cannot find symbol`;
- GREEN: `Standard/Large`, `Off/On` и безопасное восстановление persisted index;
- RED → GREEN отдельными циклами: `highContrastEnabled`, `restore`,
`canvasTextSize`, `AccessibilityStatus.describe` и
`AccessibilityScreenDescription`;
- RED device compile: отсутствовали persisted/public Settings surface,
screen transition и safe-viewport hooks;
- GREEN device compile: пять focused Android acceptance методов компилируются и
проверяют recreation, реальные Settings taps, screen/Back semantics,
неизменный safe viewport и textual state при `Vibration: Off`.
## Проверки этого isolated slice
- focused accessibility JVM tests — GREEN;
- все JVM tests — обязательный gate перед коммитом;
- `lintDebug`, `assembleDebug`, `compileDebugAndroidTestJavaWithJavac` — обязательный
gate перед коммитом;
- device execution намеренно оставлен финальной интеграционной ветке: этот stream
не запускает и не меняет общий emulator.
## Интеграционные замечания
- `GameView` одновременно изменяется onboarding/result и localization slices;
при merge нужно сохранить единые text helpers и вызывать refresh semantics после
всех новых screen transitions;
- localized строки должны заменить английский текст и в Canvas, и в content
descriptions одним источником, не удаляя read-only acceptance hooks;
- minSdk 23, control settings, progress format и Stage 2 physics/levels не менялись.