@startuml fig_01_start_sync ' Увеличенный растр для вставки в отчёт (Word / печать) scale 3 title Wallenc — старт приложения и фоновая синхронизация end title skinparam defaultFontName "DejaVu Sans" skinparam activity { BackgroundColor #F8F8F8 BorderColor #333333 DiamondBackgroundColor #E8F4FF } skinparam noteBackgroundColor #FFFDE7 skinparam noteBorderColor #F9A825 start :Старт приложения (Android); :Инициализация Room, загрузка метаданных vault; if (Есть LocalVault / storage?) then (нет) :Первый запуск; else (да) endif if (Нужен удалённый провайдер и нет учётной записи?) then (да) :Экран удалённых vault / OAuth Яндекс; else (нет) endif partition "**Основной поток (UI)**" { :(A) Main: LocalVault — список storage, вкладка удалённых — список IVault; :Действия с **storage** (шифрование, открытие, файлы…); } fork partition "**Фон: синхронизация (по таймеру)**" #E8F5E9 { note right **Реализовано:** StorageSyncEngine, журнал изменений по путям, merge ревизий • Room: DbStorageSyncGroup (UUID группы) • WorkManager / debounce — запуск sync • Ключи шифрования провайдеру не передаются Подробный алгоритм — гл. 4, рис. 35 end note :Запуск sync (Worker / debounce); :StorageSyncEngine.syncAllGroups; while (Есть группа синхронизации?) is (да) :Слияние журналов → победитель по пути; :findSourceStorage → applyEntry на отстающие Storage; endwhile (нет) } end fork stop @enduml