Files
SnapAndSolve/docs/AlbumViewModel.md
si2503 8342723e09 - Dokumentation
- Bereinigung von Code
2026-02-13 10:33:21 +01:00

3.7 KiB

AlbumViewModel

Ü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.