- Dokumentation

- Bereinigung von Code
This commit is contained in:
2026-02-13 10:33:21 +01:00
parent 48802606e8
commit 8342723e09
16 changed files with 1070 additions and 169 deletions

View File

@@ -1,40 +1,77 @@
# Album/Kamera-System Dokumentation
# AlbumViewModel
## AlbumViewModel
```kotlin
class AlbumViewModel(private val coroutineContext: CoroutineContext) : ViewModel()
```
**Zweck:** Verwaltung von Bildauswahl und Kamera-Aufnahmen für Schadensmeldungen.
### Properties
| Name | Typ | Beschreibung |
|------|-----|--------------|
| `viewStateFlow` | `StateFlow<AlbumViewState>` | Read-only State für UI-Komponenten |
### Methoden
#### `onReceive(intent: Intent)`
Verarbeitet Benutzeraktionen für Bild-Verwaltung.
**Parameter:**
- `intent: Intent` - Benutzeraktion (siehe Intent-Klasse)
**Verwendete Intents:**
- `OnPermissionGrantedWith(Context)` - Erstellt temp. Datei für Kamera
- `OnFinishPickingImagesWith(Context, List<Uri>)` - Lädt Bilder aus Galerie
- `OnImageSavedWith(Context)` - Speichert Kamera-Aufnahme
- `OnImageSavingCanceled` - Verwirft temp. Datei
- `OnPermissionDenied` - Loggt Permission-Verweigerung
**Deprecated Intents:** `OnPermissionGranted`, `OnFinishPickingImages`, `OnImageSaved` (ohne Context)
#### `clearSelection()`
Löscht alle ausgewählten Bilder aus dem State.
## Übersicht
Die Klasse `AlbumViewModel` ist für die zentrale Verwaltung von Bilddaten innerhalb der App zuständig. Sie fungiert als Schnittstelle zwischen der Kamera-Hardware, der System-Galerie und der Benutzeroberfläche. Das ViewModel verarbeitet asynchrone Bildoperationen und stellt den aktuellen Status über einen reaktiven StateFlow bereit.
---
## 1. Klasse: AlbumViewModel
`class AlbumViewModel(private val coroutineContext: CoroutineContext) : ViewModel()`
### Konstruktor-Parameter
| Parameter | Typ | Beschreibung |
| :--- | :--- | :--- |
| `coroutineContext` | `CoroutineContext` | Der Kontext, in dem die Coroutines für Bildoperationen ausgeführt werden. |
---
## 2. Status-Management (State)
### `viewStateFlow: StateFlow<AlbumViewState>`
Ein observierbarer Datenstrom, der den aktuellen Zustand der Bildverwaltung liefert. Er basiert auf der Datenklasse `AlbumViewState`.
**Wichtige Felder im State:**
* **`tempFileUrl`**: Enthält die URL der temporären Datei, in der das mit der Kamera aufgenommene Bild zwischengespeichert wird.
* **`selectedPictures`**: Enthält die Liste der mit der Kamera aufgenommenen oder aus der Galerie ausgewählten Bilder (als `ImageBitmap`).
---
## 3. Zentrale Methoden
### `onReceive(intent: Intent)`
Diese Methode ist der zentrale Einstiegspunkt für alle Aktionen. Sie verarbeitet verschiedene `Intent`-Typen:
| Intent | Beschreibung |
| :--- | :--- |
| `OnPermissionGrantedWith` | Wird aufgerufen, wenn die Kamera-Berechtigung erteilt wurde. Erstellt eine temporäre Datei (`.jpg`) im Cache-Verzeichnis und generiert eine Inhalts-URI via `FileProvider`. |
| `OnPermissionDenied` | Loggt die Verweigerung der Kamera-Berechtigung durch den Nutzer. |
| `OnFinishPickingImagesWith` | Verarbeitet Bilder, die aus der Galerie ausgewählt wurden. Die URIs werden in `ImageBitmap` konvertiert und der Liste hinzugefügt. |
| `OnImageSavedWith` | Wird nach einer erfolgreichen Kameraaufnahme aufgerufen. Dekodiert das Bild aus der `tempFileUrl` und fügt es der Auswahl hinzu. |
| `OnImageSavingCanceled` | Setzt die `tempFileUrl` zurück, falls der Aufnahmevorgang abgebrochen wurde. |
### `clearSelection()`
Setzt die Liste der ausgewählten Bilder (`selectedPictures`) auf eine leere Liste zurück.
---
## 4. Funktionsweise & Datenfluss
### Bildverarbeitung (Galerie)
Beim Auswählen von Bildern aus der Galerie werden die `InputStreams` der bereitgestellten URIs ausgelesen. Um Speicher effizient zu nutzen, werden die Byte-Arrays mithilfe von `BitmapFactory` dekodiert und anschließend als Compose-kompatible `ImageBitmap` gespeichert.
### Bildverarbeitung (Kamera)
1. **Vorbereitung**: Ein `File.createTempFile` erstellt einen Platzhalter im Cache.
2. **Sicherheit**: Der `FileProvider` wandelt den Dateipfad in eine sichere URI um, damit die Kamera-App darauf zugreifen kann.
3. **Abschluss**: Nach der Aufnahme wird `ImageDecoder` genutzt, um die Datei in eine Bitmap umzuwandeln.
---
## 5. Technische Voraussetzungen
### FileProvider-Konfiguration
Damit die Kamera-App Bilder speichern kann, muss in der `AndroidManifest.xml` ein Provider definiert sein, der auf `${BuildConfig.APPLICATION_ID}.provider` hört.
### Abhängigkeiten
* **androidx.lifecycle:lifecycle-viewmodel-ktx**: Für den `viewModelScope`.
* **kotlinx-coroutines**: Für die asynchrone Verarbeitung der Bilddaten.
* **androidx.compose.ui:ui-graphics**: Für die Konvertierung in `ImageBitmap`.
---
## Fehlerbehandlung
* **NULL-Werte**: Falls ein InputStream nicht gelesen werden kann, wird eine Fehlermeldung geloggt, ohne die App zum Absturz zu bringen.
* **Speichermanagement**: Bilder werden als Bitmaps im Speicher gehalten. Bei sehr großen Mengen sollte eine Skalierung (Sampling) in der `BitmapFactory` implementiert werden.