| 12345678910111213141516171819202122232425262728293031323334353637383940414243 |
- @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
|