Скорректированы подписи скриншотов

This commit is contained in:
2026-05-31 00:50:15 +03:00
parent ee2c3a198c
commit 71ad7fcc2e
10 changed files with 17764 additions and 17703 deletions

View File

@@ -47,23 +47,23 @@ Wallenc мобильное приложение для Android: `VaultsManag
2. Введите пароль. При успехе содержимое storage доступно для просмотра (`IUnlockManager`). 2. Введите пароль. При успехе содержимое storage доступно для просмотра (`IUnlockManager`).
3. Используйте «Закрыть» для блокировки storage. 3. Используйте «Закрыть» для блокировки storage.
#pz-fig("fig_07_open_close_dialog.jpg", [Диалог открытия и закрытия], "fig-07-rp") #pz-fig("fig_07_open_close_dialog.jpg", [Диалог открытия зашифрованного storage], "fig-07-rp")
=== Переименование и удаление === Переименование и удаление
Долгое нажатие или меню storage «Переименовать» / «Удалить». Подтвердите действие в диалоге. Долгое нажатие или меню storage «Переименовать» / «Удалить» (рис. @fig-08-rp). Подтвердите действие в диалоге.
#pz-fig("fig_08_rename_delete_dialog.jpg", [Диалог переименования и удаления], "fig-08-rp") #pz-fig("fig_08_rename_delete_dialog.jpg", [Меню storage: переименование и удаление], "fig-08-rp")
=== Удалённые vault и Яндекс === Удалённые vault и Яндекс
1. Перейдите на экран удалённых vault. 1. Перейдите на экран удалённых vault (рис. @fig-09-rp).
2. Нажмите «+» выберите авторизацию Яндекс. 2. Нажмите «+» и в диалоге выберите провайдера «Яндекс» (рис. @fig-10-rp).
3. Пройдите OAuth в браузере/встроенном окне. 3. Пройдите OAuth в браузере или встроенном окне (последовательность рис. @fig-20, гл. 1).
4. После успеха добавьте удалённое хранилище. 4. После успеха аккаунт отображается в списке удалённых vault.
#pz-fig("fig_09_remote_vaults.jpg", [Экран удалённых vault], "fig-09-rp") #pz-fig("fig_09_remote_vaults.jpg", [Экран удалённых vault: подключённый аккаунт], "fig-09-rp")
#pz-fig("fig_10_yandex_oauth.jpg", [OAuth Яндекс], "fig-10-rp") #pz-fig("fig_10_yandex_oauth.jpg", [Диалог «Добавить хранилище»: выбор провайдера Яндекс], "fig-10-rp")
=== Секреты и 2FA внутри storage === Секреты и 2FA внутри storage
@@ -78,4 +78,4 @@ Wallenc мобильное приложение для Android: `VaultsManag
=== Фоновые задачи === Фоновые задачи
На экране задач отображаются операции шифрования и синхронизации. Уведомления информируют о завершении (см. рис. 12 и 13 в гл. 5). На экране задач отображаются операции шифрования и синхронизации (рис. @fig-12, гл. 5). Уведомления информируют о прогрессе и завершении (рис. @fig-13, гл. 5).

View File

@@ -29,13 +29,13 @@
| 04 | `fig_04_domain_class.png` | PlantUML | ready | гл. 2.3.2, 4.2.1 | Классы `:domain`. **PUML** | fig-04 | | 04 | `fig_04_domain_class.png` | PlantUML | ready | гл. 2.3.2, 4.2.1 | Классы `:domain`. **PUML** | fig-04 |
| 05 | `fig_05_local_vaults.jpg` | Скриншот UI | ready | гл. 3.4, 5, прил. Б, В | Список storage (локальный vault) | fig-05 | | 05 | `fig_05_local_vaults.jpg` | Скриншот UI | ready | гл. 3.4, 5, прил. Б, В | Список storage (локальный vault) | fig-05 |
| 06 | `fig_06_encrypt_dialog.jpg` | Скриншот UI | ready | гл. 3.4, 4.1.1, 5, прил. Б, В | Диалог включения шифрования | fig-06 | | 06 | `fig_06_encrypt_dialog.jpg` | Скриншот UI | ready | гл. 3.4, 4.1.1, 5, прил. Б, В | Диалог включения шифрования | fig-06 |
| 07 | `fig_07_open_close_dialog.jpg` | Скриншот UI | ready | гл. 3.4, 4.1.2, прил. Б, В | Открытие/закрытие storage | fig-07 | | 07 | `fig_07_open_close_dialog.jpg` | Скриншот UI | ready | гл. 3.4, 4.1.2, прил. Б, В | Диалог открытия зашифрованного storage | fig-07 |
| 08 | `fig_08_rename_delete_dialog.jpg` | Скриншот UI | ready | гл. 3.4, 5, прил. Б, В | Переименование или удаление | fig-08 | | 08 | `fig_08_rename_delete_dialog.jpg` | Скриншот UI | ready | гл. 3.4, прил. Б, В | Меню storage: переименование и удаление | fig-08 |
| 09 | `fig_09_remote_vaults.jpg` | Скриншот UI | ready | гл. 3.4, 4.2.3, прил. Б, В | Удалённые vault | fig-09 | | 09 | `fig_09_remote_vaults.jpg` | Скриншот UI | ready | гл. 1, 3.4, 4.2.3, 5, прил. Б, В | Удалённые vault: подключённый аккаунт Яндекс | fig-09 |
| 10 | `fig_10_yandex_oauth.jpg` | Скриншот UI | ready | гл. 1, 3.4, 4.2.3, прил. Б, В | OAuth Яндекс | fig-10 | | 10 | `fig_10_yandex_oauth.jpg` | Скриншот UI | ready | гл. 1, 3.4, 4.2.3, 5, прил. Б, В | Диалог «Добавить хранилище»: выбор провайдера Яндекс (не OAuth) | fig-10 |
| 11 | `fig_11_room_schema.png` | PlantUML | ready | гл. 2.3.2, 4.2.2, прил. В | Схема Room. **PUML** | fig-11 | | 11 | `fig_11_room_schema.png` | PlantUML | ready | гл. 2.3.2, 4.2.2, прил. В | Схема Room. **PUML** | fig-11 |
| 12 | `fig_12_tasks_screen.jpg` | Скриншот UI | ready | гл. 5.2.3, прил. В | Экран задач | fig-12 | | 12 | `fig_12_tasks_screen.jpg` | Скриншот UI | ready | гл. 5, прил. Б, В | Экран «Очередь задач» | fig-12 |
| 13 | `fig_13_tasks_notification.jpg` | Скриншот UI | ready | гл. 5.2.3, прил. В | Уведомление о задаче | fig-13 | | 13 | `fig_13_tasks_notification.jpg` | Скриншот UI | ready | гл. 5, прил. Б, В | Уведомление Android о синхронизации хранилищ | fig-13 |
| 14 | `fig_14_context_system.png` | PlantUML | ready | гл. 1.2.1, 2.1.4 | Контекстная диаграмма. **PUML** | fig-14 | | 14 | `fig_14_context_system.png` | PlantUML | ready | гл. 1.2.1, 2.1.4 | Контекстная диаграмма. **PUML** | fig-14 |
| 15 | `fig_15_bpmn_vault.png` | PlantUML | ready | гл. 2.1.3 | BPMN жизненный цикл **storage** (шифрование storage, не vault). **PUML** | fig-15 | | 15 | `fig_15_bpmn_vault.png` | PlantUML | ready | гл. 2.1.3 | BPMN жизненный цикл **storage** (шифрование storage, не vault). **PUML** | fig-15 |
| 16 | `fig_16_dfd_level0.png` | PlantUML | ready | гл. 2.2 | DFD-0. **PUML** | fig-16 | | 16 | `fig_16_dfd_level0.png` | PlantUML | ready | гл. 2.2 | DFD-0. **PUML** | fig-16 |
@@ -44,7 +44,6 @@
| 19 | `fig_19_clean_architecture.png` | PlantUML | ready | гл. 2.3, 4.3 | Clean Architecture. **PUML** | fig-19 | | 19 | `fig_19_clean_architecture.png` | PlantUML | ready | гл. 2.3, 4.3 | Clean Architecture. **PUML** | fig-19 |
| 20 | `fig_20_oauth_sequence.png` | PlantUML | ready | гл. 1.5.2, 4.2.3 | OAuth sequence. **PUML** | fig-20 | | 20 | `fig_20_oauth_sequence.png` | PlantUML | ready | гл. 1.5.2, 4.2.3 | OAuth sequence. **PUML** | fig-20 |
| 21 | `fig_21_encrypt_flow.png` | PlantUML | ready | гл. 4.1.1, 5.2.1 | Блок-схема шифрования. **PUML** | fig-21 | | 21 | `fig_21_encrypt_flow.png` | PlantUML | ready | гл. 4.1.1, 5.2.1 | Блок-схема шифрования. **PUML** | fig-21 |
| 22 | `fig_22_cjm_vault.png` | PlantUML | ready | гл. 3.3.2 | CJM. **PUML** | fig-22 |
| 23 | `fig_23_module_deps.png` | PlantUML | ready | гл. 4.3 | Зависимости Gradle. **PUML** | fig-23 | | 23 | `fig_23_module_deps.png` | PlantUML | ready | гл. 4.3 | Зависимости Gradle. **PUML** | fig-23 |
| 24 | `fig_24_domain_class_manual.png` | Ручная схема | ready | гл. 4 (ИИ) | Диаграмма классов `:domain` до Cursor; исх. `Domain_Диаграмма_классов.png` | fig-24 | | 24 | `fig_24_domain_class_manual.png` | Ручная схема | ready | гл. 4 (ИИ) | Диаграмма классов `:domain` до Cursor; исх. `Domain_Диаграмма_классов.png` | fig-24 |
| 27 | `fig_27_gradle_domain_test.png` | Gradle | ready | гл. 5.2.1 | `:domain:test` SUCCESS | fig-27 | | 27 | `fig_27_gradle_domain_test.png` | Gradle | ready | гл. 5.2.1 | `:domain:test` SUCCESS | fig-27 |

Binary file not shown.

Before

Width:  |  Height:  |  Size: 31 KiB

View File

@@ -52,7 +52,7 @@
==== Удалённые хранилища и авторизация во внешних провайдерах ==== Удалённые хранилища и авторизация во внешних провайдерах
Реализован поток OAuth 2.0 для Яндекса @oauth-rfc6749 @yandex-oauth (рис. @fig-20). Подключение удалённого vault выполняется через экран удалённых vault (рис. @fig-09, @fig-10) и поток OAuth 2.0 для Яндекса @oauth-rfc6749 @yandex-oauth (рис. @fig-20).
#pz-fig("fig_20_oauth_sequence.png", [Диаграмма последовательности OAuth Яндекс], "fig-20") #pz-fig("fig_20_oauth_sequence.png", [Диаграмма последовательности OAuth Яндекс], "fig-20")

View File

@@ -38,12 +38,6 @@
[US-6], [Храню TOTP и текстовые секреты в storage], [`TwoFaTotpTest`, UI IT], [US-6], [Храню TOTP и текстовые секреты в storage], [`TwoFaTotpTest`, UI IT],
) <tbl-userstory> ) <tbl-userstory>
=== Customer Journey Map
CJM сценария «защитить и открыть storage» представлен на рисунке @fig-22.
#pz-fig("fig_22_cjm_vault.png", [Customer Journey Map: защита и открытие storage], "fig-22")
=== Пользовательский сценарий === Пользовательский сценарий
Диаграммы потоков: старт приложения и фоновая синхронизация (@fig-01), жизненный цикл storage (@fig-02), навигация Main: LocalVault / удалённые vault storage (@fig-03). Диаграммы потоков: старт приложения и фоновая синхронизация (@fig-01), жизненный цикл storage (@fig-02), навигация Main: LocalVault / удалённые vault storage (@fig-03).
@@ -54,20 +48,20 @@ CJM сценария «защитить и открыть storage» предст
== Проработка прототипа и особенности дизайна == Проработка прототипа и особенности дизайна
Интерфейс реализован на Jetpack Compose @smith-jetpack-compose @compose-docs. Экраны локальных и удалённых vault, диалоги шифрования, OAuth, а также разделы текстовых секретов и 2FA внутри storage показаны на рис. @fig-05@fig-10 и @fig-33@fig-34 (подробно приложение В и руководство пользователя в приложении Б). Интерфейс реализован на Jetpack Compose @smith-jetpack-compose @compose-docs. Экраны локального и удалённого vault, диалоги работы со storage, а также разделы текстовых секретов и 2FA показаны на рис. @fig-05@fig-10 и @fig-33@fig-34 (подробно приложение В и руководство пользователя в приложении Б). Поток OAuth 2.0 для Яндекса на рис. @fig-20 (гл. 1).
#pz-fig("fig_05_local_vaults.jpg", [Список storage в локальном vault (экран «локальные vault»)], "fig-05") #pz-fig("fig_05_local_vaults.jpg", [Список storage в локальном vault (экран «локальные vault»)], "fig-05")
#pz-fig("fig_06_encrypt_dialog.jpg", [Диалог включения шифрования], "fig-06") #pz-fig("fig_06_encrypt_dialog.jpg", [Диалог включения шифрования], "fig-06")
#pz-fig("fig_07_open_close_dialog.jpg", [Диалог открытия и закрытия storage], "fig-07") #pz-fig("fig_07_open_close_dialog.jpg", [Диалог открытия зашифрованного storage], "fig-07")
#pz-fig("fig_08_rename_delete_dialog.jpg", [Диалог переименования и удаления], "fig-08") #pz-fig("fig_08_rename_delete_dialog.jpg", [Меню storage: переименование и удаление], "fig-08")
#pz-fig("fig_09_remote_vaults.jpg", [Экран удалённых vault], "fig-09") #pz-fig("fig_09_remote_vaults.jpg", [Экран удалённых vault: подключённый аккаунт Яндекс], "fig-09")
#pz-fig("fig_10_yandex_oauth.jpg", [Добавление удалённого vault, OAuth Яндекс], "fig-10") #pz-fig("fig_10_yandex_oauth.jpg", [Диалог «Добавить хранилище»: выбор провайдера Яндекс], "fig-10")
#pz-fig("fig_33_storage_secrets_2fa.jpg", [Экран storage: разделы «Секреты» и «2FA»], "fig-33") #pz-fig("fig_33_storage_secrets_2fa.jpg", [Экран storage: разделы «Секреты» и «2FA»], "fig-33")
#pz-fig("fig_34_2fa_single_token.jpg", [Экран 2FA: список с одним TOTP-токеном], "fig-34") #pz-fig("fig_34_2fa_single_token.jpg", [Экран 2FA: список с одним TOTP-токеном], "fig-34")
== Требования к эргономике и доступности == Требования к эргономике и доступности
Интерфейс должен отображать состояние каждого storage без перехода в технические экраны: признаки «зашифровано», «открыто» (`IUnlockManager.openedStorages`), «выполняется операция» (`isBusy`). Диалоги деструктивных действий (удаление storage, отключение шифрования) требуют явного подтверждения. Тексты сообщений об ошибках OAuth и неверном ключе формулируются нейтрально, без раскрытия внутренних путей и имён файлов. Интерфейс должен отображать состояние каждого storage без перехода в технические экраны: признаки «зашифровано», «открыто» (`IUnlockManager.openedStorages`), «выполняется операция» (`isBusy`). Диалоги и меню деструктивных действий (удаление storage, отключение шифрования; см. @fig-08) требуют явного подтверждения. Тексты сообщений об ошибках OAuth и неверном ключе формулируются нейтрально, без раскрытия внутренних путей и имён файлов.
== Вывод == Вывод

View File

@@ -56,6 +56,13 @@
#pz-fig("fig_31_gradle_connected_test.png", [Gradle connectedDebugAndroidTest], "fig-31") #pz-fig("fig_31_gradle_connected_test.png", [Gradle connectedDebugAndroidTest], "fig-31")
=== Экран задач и уведомления
Очередь фоновых операций (шифрование, синхронизация, тестовые задачи) и системное уведомление о прогрессе показаны на рис. @fig-12 и @fig-13.
#pz-fig("fig_12_tasks_screen.jpg", [Экран «Очередь задач»], "fig-12")
#pz-fig("fig_13_tasks_notification.jpg", [Уведомление Android о синхронизации хранилищ], "fig-13")
== Ручное и UI-тестирование == Ручное и UI-тестирование
Ручные прогоны выполнялись по чек-листу T-7…T-12 на эмуляторе и физическом устройстве. Ручные прогоны выполнялись по чек-листу T-7…T-12 на эмуляторе и физическом устройстве.
@@ -67,9 +74,9 @@
[T-7], [Создать storage в LocalVault], [OK], [Storage в списке], [@fig-05], [T-7], [Создать storage в LocalVault], [OK], [Storage в списке], [@fig-05],
[T-8], [Включить шифрование], [OK], [Статус encrypted], [@fig-06], [T-8], [Включить шифрование], [OK], [Статус encrypted], [@fig-06],
[T-9], [Открыть/закрыть storage], [OK], [Контент только при открытом storage], [@fig-07], [T-9], [Открыть/закрыть storage], [OK], [Контент только при открытом storage], [@fig-07],
[T-10], [OAuth Яндекс], [OK], [Запись в `DbYandexAccount`], [@fig-10], [T-10], [OAuth Яндекс], [OK], [Аккаунт на @fig-09, выбор провайдера @fig-10, OAuth @fig-20], [@fig-09],
[T-11], [Фоновая задача шифрования], [OK], [Прогресс на экране задач], [рис. 12], [T-11], [Фоновая задача шифрования], [OK], [Прогресс на экране задач], [@fig-12],
[T-12], [Уведомление о завершении], [OK], [Notification отображён], [рис. 13], [T-12], [Уведомление о завершении], [OK], [Notification отображён], [@fig-13],
) <tbl-testres> ) <tbl-testres>
#pz-fig("fig_32_manual_test_checklist.png", [Чек-лист ручного UI-тестирования], "fig-32") #pz-fig("fig_32_manual_test_checklist.png", [Чек-лист ручного UI-тестирования], "fig-32")

View File

@@ -1,23 +0,0 @@
@startuml fig_22_cjm_vault
!include _gost-theme.inc.puml
scale 3
|Этап|
|Осознание|
|Выбор|
|Использование|
|Лояльность|
|Действия|
|Понимает риск облака|
|Создаёт storage, включает шифрование storage|
|Открывает storage, работает с файлами|
|Синхронизирует storage без передачи ключей|
|Ожидания|
|Данные не читаются провайдером|
|Простой ввод пароля|
|Быстрый доступ|
|Надёжная синхронизация|
@enduml

File diff suppressed because one or more lines are too long

View File

@@ -65,14 +65,16 @@
#pz-appendix-title[Скриншоты пользовательского интерфейса] #pz-appendix-title[Скриншоты пользовательского интерфейса]
#pz-fig("fig_05_local_vaults.jpg", [Локальные vault], "fig-05-app") Дубли иллюстраций интерфейса из гл. 1, 3 и 5 (@fig-05@fig-10, @fig-12, @fig-13, @fig-33, @fig-34) приведены ниже в полном размере.
#pz-fig("fig_06_encrypt_dialog.jpg", [Диалог шифрования], "fig-06-app")
#pz-fig("fig_07_open_close_dialog.jpg", [Открытие и закрытие storage], "fig-07-app") #pz-fig("fig_05_local_vaults.jpg", [Список storage в локальном vault], "fig-05-app")
#pz-fig("fig_08_rename_delete_dialog.jpg", [Переименование и удаление], "fig-08-app") #pz-fig("fig_06_encrypt_dialog.jpg", [Диалог включения шифрования], "fig-06-app")
#pz-fig("fig_09_remote_vaults.jpg", [Удалённые vault], "fig-09-app") #pz-fig("fig_07_open_close_dialog.jpg", [Диалог открытия зашифрованного storage], "fig-07-app")
#pz-fig("fig_10_yandex_oauth.jpg", [OAuth Яндекс], "fig-10-app") #pz-fig("fig_08_rename_delete_dialog.jpg", [Меню storage: переименование и удаление], "fig-08-app")
#pz-fig("fig_09_remote_vaults.jpg", [Экран удалённых vault: аккаунт Яндекс], "fig-09-app")
#pz-fig("fig_10_yandex_oauth.jpg", [Диалог выбора провайдера Яндекс], "fig-10-app")
#pz-fig("fig_11_room_schema.png", [Схема Room], "fig-11-app") #pz-fig("fig_11_room_schema.png", [Схема Room], "fig-11-app")
#pz-fig("fig_12_tasks_screen.jpg", [Экран задач], "fig-12-app") #pz-fig("fig_12_tasks_screen.jpg", [Экран «Очередь задач»], "fig-12-app")
#pz-fig("fig_13_tasks_notification.jpg", [Уведомление о задачах], "fig-13-app") #pz-fig("fig_13_tasks_notification.jpg", [Уведомление Android о синхронизации хранилищ], "fig-13-app")
#pz-fig("fig_33_storage_secrets_2fa.jpg", [Экран storage: секреты и 2FA], "fig-33-app") #pz-fig("fig_33_storage_secrets_2fa.jpg", [Экран storage: разделы «Секреты» и «2FA»], "fig-33-app")
#pz-fig("fig_34_2fa_single_token.jpg", [Экран 2FA с токеном], "fig-34-app") #pz-fig("fig_34_2fa_single_token.jpg", [Экран 2FA: список с одним TOTP-токеном], "fig-34-app")