Affichage du PDF de perturbation dans la vue étendue #3

Closed
opened 2026-06-22 11:50:36 +02:00 by CyrilLeblanc · 0 comments
Owner

Affichage du PDF de perturbation dans la vue etendue

Contexte

Un bouton sous l'icone de la boussole permet d'afficher une popup listant les perturbations sur les lignes (API dyn/evt/json). Chaque perturbation est cliquable et affiche une version etendue avec le message complet.

L'endpoint dyn/evt/json retourne parfois une cle plan sur certains records. Cette cle contient une URL vers un PDF illustrant visuellement la perturbation (plan de deviation, itineraire alternatif, etc.).

Feature

Enrichir la vue etendue d'une perturbation en affichant le PDF associe, lorsqu'il est disponible.

Comportement attendu

  • Lorsque la cle plan est presente dans le record de perturbation, telecharger le PDF uniquement au moment ou l'utilisateur ouvre la vue etendue de cette perturbation
  • Pendant le telechargement, afficher un spinner de chargement dans la vue etendue
  • Convertir le PDF en image Bitmap et l'afficher dans la vue etendue (sous le texte)
  • L'image doit etre cliquable pour s'afficher en plein ecran
  • En mode plein ecran, l'utilisateur peut revenir a la popup via :
    • Le bouton retour natif du telephone
    • Un bouton retour personnalise en bas a gauche de l'ecran
  • Si la conversion PDF vers image echoue, afficher un lien cliquable vers le PDF original a la place

Contraintes techniques

  • Le telechargement du PDF ne doit pas etre declenche avant l'ouverture explicite de la vue etendue (pas de prechargement)
  • Le PDF pese potentiellement plusieurs Mo -- le telechargement et la conversion doivent etre executes sur un thread separe (coroutine)
  • La conversion PDF vers Bitmap doit etre rognee aux dimensions de l'ecran pour eviter les OOM
  • Mettre en cache le Bitmap en memoire (LRU cache) pour eviter de re-telecharger en cas de fermeture/reouverture de la popup
  • Si le plan change entre deux ouvertures (rafraichissement des perturbations), le cache doit etre invalide

Architecture suggeree

PdfDisruptionLoader.kt
  +-- downloadPdf(url: String) -> File (cache)
  +-- convertPdfToBitmap(file: File, maxWidth: Int, maxHeight: Int) -> Bitmap?
  +-- Cache: LruCache<String, Bitmap>
  +-- Execution: viewModelScope.launch(Dispatchers.IO)

ExtendedDisruptionSheet.kt (ou composant Vue Etendue)
  +-- observe la cle `plan`
  +-- affiche un spinner pendant le chargement
  +-- affiche l'image cliquable une fois convertie
  +-- fallback lien si erreur

FullScreenImageDialog.kt
  +-- affiche l'image en plein ecran (ZoomableImageView)
  +-- bouton retour custom en bas a gauche

Etat actuel

  • Le record de perturbation brut (dyn/evt/json) est deja parse et stocke dans le ViewModel
  • La cle plan est deja accessible via perturbation.plan mais non utilisee
  • La popup de perturbation existe deja (ouverte via bouton boussole)

Criteres d'acceptance

  • L'image PDF s'affiche dans la vue etendue seulement quand plan est present
  • Le spinner de chargement est visible pendant le telechargement
  • L'image est cliquable vers plein ecran
  • Le retour du plein ecran fonctionne (bouton natif + bouton custom)
  • Le PDF n'est pas telecharge avant l'ouverture de la vue etendue (verifiable via le network monitor)
  • Le cache evite un re-telechargement si l'utilisateur ferme/reouvre
  • Fallback lien cliquable si la conversion echoue

References

  • AndroidPdfViewer (GitHub) -- rendu PDF natif Android (alternative a la conversion Bitmap)
  • PdfRenderer API Android -- conversion PDF vers Bitmap sans librairie tierce (API 21+)
# Affichage du PDF de perturbation dans la vue etendue ## Contexte Un bouton sous l'icone de la boussole permet d'afficher une popup listant les perturbations sur les lignes (API `dyn/evt/json`). Chaque perturbation est cliquable et affiche une version etendue avec le message complet. L'endpoint `dyn/evt/json` retourne parfois une cle `plan` sur certains records. Cette cle contient une URL vers un PDF illustrant visuellement la perturbation (plan de deviation, itineraire alternatif, etc.). ## Feature Enrichir la vue etendue d'une perturbation en affichant le PDF associe, lorsqu'il est disponible. ### Comportement attendu - Lorsque la cle `plan` est presente dans le record de perturbation, telecharger le PDF **uniquement au moment ou l'utilisateur ouvre la vue etendue** de cette perturbation - Pendant le telechargement, afficher un **spinner de chargement** dans la vue etendue - Convertir le PDF en image Bitmap et l'afficher dans la vue etendue (sous le texte) - L'image doit etre **cliquable pour s'afficher en plein ecran** - En mode plein ecran, l'utilisateur peut revenir a la popup via : - Le bouton retour natif du telephone - Un bouton retour personnalise en bas a gauche de l'ecran - Si la conversion PDF vers image echoue, afficher un lien cliquable vers le PDF original a la place ## Contraintes techniques - **Le telechargement du PDF ne doit pas etre declenche avant** l'ouverture explicite de la vue etendue (pas de prechargement) - Le PDF pese potentiellement plusieurs Mo -- le telechargement et la conversion doivent etre executes sur un **thread separe** (coroutine) - La conversion PDF vers Bitmap doit etre rognee aux dimensions de l'ecran pour eviter les OOM - Mettre en cache le Bitmap en memoire (LRU cache) pour eviter de re-telecharger en cas de fermeture/reouverture de la popup - Si le `plan` change entre deux ouvertures (rafraichissement des perturbations), le cache doit etre invalide ## Architecture suggeree ``` PdfDisruptionLoader.kt +-- downloadPdf(url: String) -> File (cache) +-- convertPdfToBitmap(file: File, maxWidth: Int, maxHeight: Int) -> Bitmap? +-- Cache: LruCache<String, Bitmap> +-- Execution: viewModelScope.launch(Dispatchers.IO) ExtendedDisruptionSheet.kt (ou composant Vue Etendue) +-- observe la cle `plan` +-- affiche un spinner pendant le chargement +-- affiche l'image cliquable une fois convertie +-- fallback lien si erreur FullScreenImageDialog.kt +-- affiche l'image en plein ecran (ZoomableImageView) +-- bouton retour custom en bas a gauche ``` ## Etat actuel - Le record de perturbation brut (`dyn/evt/json`) est deja parse et stocke dans le ViewModel - La cle `plan` est deja accessible via `perturbation.plan` mais non utilisee - La popup de perturbation existe deja (ouverte via bouton boussole) ## Criteres d'acceptance - [ ] L'image PDF s'affiche dans la vue etendue seulement quand `plan` est present - [ ] Le spinner de chargement est visible pendant le telechargement - [ ] L'image est cliquable vers plein ecran - [ ] Le retour du plein ecran fonctionne (bouton natif + bouton custom) - [ ] Le PDF n'est pas telecharge avant l'ouverture de la vue etendue (verifiable via le network monitor) - [ ] Le cache evite un re-telechargement si l'utilisateur ferme/reouvre - [ ] Fallback lien cliquable si la conversion echoue ## References - AndroidPdfViewer (GitHub) -- rendu PDF natif Android (alternative a la conversion Bitmap) - PdfRenderer API Android -- conversion PDF vers Bitmap sans librairie tierce (API 21+)
CyrilLeblanc added reference refs/tags/v0.3.0 2026-06-23 19:12:10 +02:00
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#3
No description provided.