@startuml sequence skinparam defaultFontSize 13 skinparam sequenceFontSize 13 title Diagramme de séquence — Détection automatique d'une navigation OsmAnd actor "Utilisateur\nOsmAnd+" as user entity "OsmAnd+\n(téléphone)" as osmand entity "System\nrelais notif" as sys entity "OsmAndNotificationListener\n(montre)" as listener entity "OsmAndNotificationParser" as parser entity "NavigationStateRepository" as repo entity "NavigationViewModel" as vm entity "UI\nNavigationScreen" as ui == Démarrage navigation == user -> osmand : Démarrer la navigation (Osmand+ 5.4.9) osmand -> sys : Publie notification « Navigation » (catégorie navigation) sys -> listener : onNotificationPosted(sbn) listener -> parser : parse(payload texte) parser --> listener : NavigationState(isActive=true, instruction, métriques) listener -> repo : onOsmAndNotification(key, parsed) repo -> vm : _state se met à jour (StateFlow) vm -> ui : collectAsStateWithLifecycle -> affiche flèche, distances, ETA, vitesse ui -> ui : FLAG_KEEP_SCREEN_ON activé == Pause navigation == osmand -> sys : Notification « Navigation en pause » sys -> listener : onNotificationPosted(sbn) listener -> parser : parse -> isPaused = true parser --> listener : NavigationState(isActive=true, isPaused=true) listener -> repo : onOsmAndNotification(key, parsed) vm -> ui : rafraîchit (message « Navigation en pause », temps maintenu) == Fin navigation == osmand -> sys : Retire la notification de navigation sys -> listener : onNotificationRemoved(sbn) listener -> repo : onOsmAndNotificationRemoved(key) repo -> vm : _state = NavigationState.IDLE vm -> ui : attend 4s, alors repasse à HomeScreen (swipe-dismiss) ui -> ui : FLAG_KEEP_SCREEN_ON retiré @enduml