feat(ux): état hors-ligne / échec réseau dans la liste des passages #11

Closed
opened 2026-06-23 20:51:16 +02:00 by CyrilLeblanc · 0 comments
Owner

Contexte

TransitRepository.getStoptimes (data/repository/TransitRepository.kt:141-157) retourne emptyList() en cas d'échec réseau (:155), indiscernable d'un arrêt sans prochain passage (hors cache frais < 15 s). Un usager sous terre ou en réseau instable voit une liste vide, sans savoir si l'app est hors-ligne ou si l'arrêt est vraiment sans service.

Comportement attendu

  • La couche data remonte un état (réussi / échec réseau / vide), pas juste une liste.
  • La bottom-sheet ETA affiche un message clair (« Hors ligne — réessayer ») quand le dernier fetch a échoué, avec une action de réessai.
  • Un fetch réussi efface l'état d'erreur.

Pistes d'implémentation

  • getStoptimes : retourner un type résultat (Result<List<…>> ou sealed EtaFetchState { Loaded, Offline, Empty }) ; un échec n'est pas caché.
  • Propager via GetEtas (domain/GetEtas.kt) → EtaState (champ fetchState / isOffline).
  • TransitSheetContent : si échec, rendre une ligne « Hors ligne — réessayer » (onRetry → relance fetchEtas).
  • Hors scope : l'état hors-ligne de la recherche relève de #6.

Critères d'acceptation

  • Hors réseau : la liste ETA affiche « Hors ligne — réessayer » au lieu d'une liste vide muette.
  • Le bouton « réessayer » relance un fetch.
  • Un fetch réussi efface l'état d'erreur.
  • Un arrêt réellement sans passage reste affiché comme tel (pas confondu avec hors-ligne).
  • assembleDebug/assembleRelease OK ; pas de régression sur le poll ETA ni le cache.
## Contexte `TransitRepository.getStoptimes` (`data/repository/TransitRepository.kt:141-157`) retourne `emptyList()` en cas d'échec réseau (`:155`), **indiscernable** d'un arrêt sans prochain passage (hors cache frais < 15 s). Un usager sous terre ou en réseau instable voit une liste vide, sans savoir si l'app est hors-ligne ou si l'arrêt est vraiment sans service. ## Comportement attendu - La couche data remonte un **état** (réussi / échec réseau / vide), pas juste une liste. - La bottom-sheet ETA affiche un message clair (« Hors ligne — réessayer ») quand le dernier fetch a échoué, avec une action de **réessai**. - Un fetch réussi efface l'état d'erreur. ## Pistes d'implémentation - `getStoptimes` : retourner un type résultat (`Result<List<…>>` ou sealed `EtaFetchState { Loaded, Offline, Empty }`) ; un échec n'est pas caché. - Propager via `GetEtas` (`domain/GetEtas.kt`) → `EtaState` (champ `fetchState` / `isOffline`). - `TransitSheetContent` : si échec, rendre une ligne « Hors ligne — réessayer » (`onRetry` → relance `fetchEtas`). - Hors scope : l'état hors-ligne de la recherche relève de #6. ## Critères d'acceptation - [ ] Hors réseau : la liste ETA affiche « Hors ligne — réessayer » au lieu d'une liste vide muette. - [ ] Le bouton « réessayer » relance un fetch. - [ ] Un fetch réussi efface l'état d'erreur. - [ ] Un arrêt réellement sans passage reste affiché comme tel (pas confondu avec hors-ligne). - [ ] `assembleDebug`/`assembleRelease` OK ; pas de régression sur le poll ETA ni le cache.
Sign in to join this conversation.
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
CyrilLeblanc/gresit#11
No description provided.