@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
