feat(app): Ressource herunterladen + 'Öffnen mit'-Dialog #123

Closed
opened 2026-05-18 19:54:46 +00:00 by jreinemann-euris · 0 comments
jreinemann-euris commented 2026-05-18 19:54:46 +00:00 (Migrated from github.com)

Feature: App – Ressource herunterladen + "Öffnen mit"-Dialog

Part of: #117
Depends on: #122

Ziel

Nutzer können eine Ressource per Download-Button herunterladen; nach dem Download öffnet sich automatisch der "Öffnen mit"-Dialog mit dem passenden MIME-Typ.

Scope

  • Download-Button in der Ressourcen-Karte (Icon: Icons.Default.Download)
  • Download-Fortschrittsanzeige: LinearProgressIndicator oder CircularProgressIndicator während des Downloads
  • Datei wird in context.cacheDir unter {guid}.{ext} gespeichert
  • FileProvider in AndroidManifest.xml + res/xml/file_paths.xml (für cache-path)
  • Nach Download: Intent.ACTION_VIEW mit FileProvider.getUriForFile(...) und MIME-Typ aus ResourceDto.mimeType
  • Fehlerbehandlung: Snackbar bei Netzwerkfehler oder wenn keine passende App installiert ist (ActivityNotFoundException)
  • Download-State im ViewModel (pro guid: Idle / Loading / Success / Error)

Technische Hinweise

  • FileProvider: authority = "${context.packageName}.fileprovider"
  • file_paths.xml: <cache-path name="downloads" path="." />
  • MIME-Typen: application/epub+zip (epub), application/pdf (pdf), application/zip (zip), application/x-7z-compressed (7z)
  • Download-Logik in ResourceRepositoryImpl.downloadResource() (bereits in #121 definiert), UI ruft nur ViewModel-Methode auf

Akzeptanzkriterien

  • Datei wird in cacheDir gespeichert (nicht in permanentem Speicher)
  • "Öffnen mit"-Dialog erscheint nach erfolgreichem Download
  • Korrekte MIME-Typen für epub, pdf, zip, 7z
  • Snackbar bei fehlgeschlagenem Download
  • Snackbar bei ActivityNotFoundException ("Keine App zum Öffnen dieser Datei gefunden")
  • FileProvider korrekt konfiguriert (keine SecurityException)
  • Ladeindikator während des Downloads sichtbar
## Feature: App – Ressource herunterladen + "Öffnen mit"-Dialog Part of: #117 Depends on: #122 ### Ziel Nutzer können eine Ressource per Download-Button herunterladen; nach dem Download öffnet sich automatisch der "Öffnen mit"-Dialog mit dem passenden MIME-Typ. ### Scope - Download-Button in der Ressourcen-Karte (Icon: `Icons.Default.Download`) - Download-Fortschrittsanzeige: `LinearProgressIndicator` oder `CircularProgressIndicator` während des Downloads - Datei wird in `context.cacheDir` unter `{guid}.{ext}` gespeichert - `FileProvider` in `AndroidManifest.xml` + `res/xml/file_paths.xml` (für `cache-path`) - Nach Download: `Intent.ACTION_VIEW` mit `FileProvider.getUriForFile(...)` und MIME-Typ aus `ResourceDto.mimeType` - Fehlerbehandlung: Snackbar bei Netzwerkfehler oder wenn keine passende App installiert ist (`ActivityNotFoundException`) - Download-State im ViewModel (pro guid: Idle / Loading / Success / Error) ### Technische Hinweise - `FileProvider`: authority = `"${context.packageName}.fileprovider"` - `file_paths.xml`: `<cache-path name="downloads" path="." />` - MIME-Typen: `application/epub+zip` (epub), `application/pdf` (pdf), `application/zip` (zip), `application/x-7z-compressed` (7z) - Download-Logik in `ResourceRepositoryImpl.downloadResource()` (bereits in #121 definiert), UI ruft nur ViewModel-Methode auf ### Akzeptanzkriterien - [ ] Datei wird in `cacheDir` gespeichert (nicht in permanentem Speicher) - [ ] "Öffnen mit"-Dialog erscheint nach erfolgreichem Download - [ ] Korrekte MIME-Typen für epub, pdf, zip, 7z - [ ] Snackbar bei fehlgeschlagenem Download - [ ] Snackbar bei `ActivityNotFoundException` ("Keine App zum Öffnen dieser Datei gefunden") - [ ] `FileProvider` korrekt konfiguriert (keine `SecurityException`) - [ ] Ladeindikator während des Downloads sichtbar
Sign in to join this conversation.
No description provided.