beta 1.2 release #14
@@ -7,7 +7,7 @@ Die App ermöglicht die Verwaltung von Patienten und Wunddokumentationen,
|
|||||||
unterstützt Fotos und digitale Unterschriften und erzeugt aus
|
unterstützt Fotos und digitale Unterschriften und erzeugt aus
|
||||||
abgeschlossenen Dokumentationen PDF-Dateien.
|
abgeschlossenen Dokumentationen PDF-Dateien.
|
||||||
|
|
||||||
> **Projektstatus:** In Entwicklung
|
> **Projektstatus:** beta1.1
|
||||||
|
|
||||||
------------------------------------------------------------------------
|
------------------------------------------------------------------------
|
||||||
|
|
||||||
@@ -344,32 +344,6 @@ werden kann.
|
|||||||
- JDK über Android Studio
|
- JDK über Android Studio
|
||||||
- Android-Gerät oder Android Emulator
|
- Android-Gerät oder Android Emulator
|
||||||
|
|
||||||
### Projekt öffnen
|
|
||||||
|
|
||||||
Repository klonen:
|
|
||||||
|
|
||||||
``` bash
|
|
||||||
git clone <repository-url>
|
|
||||||
cd VulneraDoc
|
|
||||||
```
|
|
||||||
|
|
||||||
Anschließend den Projektordner in Android Studio öffnen.
|
|
||||||
|
|
||||||
Android Studio führt beim ersten Öffnen einen Gradle-Sync durch und lädt
|
|
||||||
die benötigten Dependencies.
|
|
||||||
|
|
||||||
Danach:
|
|
||||||
|
|
||||||
``` text
|
|
||||||
Gradle Sync
|
|
||||||
↓
|
|
||||||
Build / Make Project
|
|
||||||
↓
|
|
||||||
Android-Gerät oder Emulator auswählen
|
|
||||||
↓
|
|
||||||
Run
|
|
||||||
```
|
|
||||||
|
|
||||||
------------------------------------------------------------------------
|
------------------------------------------------------------------------
|
||||||
|
|
||||||
## Projektphasen
|
## Projektphasen
|
||||||
@@ -387,40 +361,40 @@ Run
|
|||||||
### Phase 2 -- Projektgrundgerüst
|
### Phase 2 -- Projektgrundgerüst
|
||||||
|
|
||||||
- [x] Android-Projekt
|
- [x] Android-Projekt
|
||||||
- [ ] Room-Datenbank
|
- [x] Room-Datenbank
|
||||||
- [ ] Entities
|
- [x] Entities
|
||||||
- [ ] DAOs
|
- [x] DAOs
|
||||||
- [ ] Repositories
|
- [x] Repositories
|
||||||
- [ ] Navigation
|
- [x] Navigation
|
||||||
- [ ] ViewModels
|
- [x] ViewModels
|
||||||
|
|
||||||
### Phase 3 -- Kernfunktionalität
|
### Phase 3 -- Kernfunktionalität
|
||||||
|
|
||||||
- [ ] Patientenverwaltung
|
- [x] Patientenverwaltung
|
||||||
- [ ] Patientenliste
|
- [x] Patientenliste
|
||||||
- [ ] Wunddokumentationsliste
|
- [x] Wunddokumentationsliste
|
||||||
- [ ] Dokumentation erstellen
|
- [x] Dokumentation erstellen
|
||||||
- [ ] Dokumentationsblöcke
|
- [x] Dokumentationsblöcke
|
||||||
- [ ] Blocknavigation
|
- [x] Blocknavigation
|
||||||
- [ ] Autosave
|
- [x] Autosave
|
||||||
- [ ] Dokumentation bearbeiten
|
- [x] Dokumentation bearbeiten
|
||||||
- [ ] Dokumentation fortsetzen
|
- [x] Dokumentation fortsetzen
|
||||||
|
|
||||||
### Phase 4 -- Medien
|
### Phase 4 -- Medien
|
||||||
|
|
||||||
- [ ] Fotoimport
|
- [x] Fotoimport
|
||||||
- [ ] Bildverwaltung
|
- [x] Bildverwaltung
|
||||||
- [ ] Digitale Signatur
|
- [x] Digitale Signatur
|
||||||
- [ ] Mehrere Signaturen
|
- [x] Mehrere Signaturen
|
||||||
|
|
||||||
### Phase 5 -- PDF
|
### Phase 5 -- PDF
|
||||||
|
|
||||||
- [ ] PDF-Exporter
|
- [x] PDF-Exporter
|
||||||
- [ ] Dokumentationsblöcke
|
- [x] Dokumentationsblöcke
|
||||||
- [ ] Signaturen
|
- [x] Signaturen
|
||||||
- [ ] Fotoanhang
|
- [x] Fotoanhang
|
||||||
- [ ] PDF anzeigen
|
- [x] PDF anzeigen
|
||||||
- [ ] PDF teilen
|
- [x] PDF teilen
|
||||||
|
|
||||||
### Phase 6 -- Qualität und Stabilität
|
### Phase 6 -- Qualität und Stabilität
|
||||||
|
|
||||||
@@ -431,29 +405,15 @@ Run
|
|||||||
- [ ] Tablet-Optimierung
|
- [ ] Tablet-Optimierung
|
||||||
- [ ] Datenschutz-Review
|
- [ ] Datenschutz-Review
|
||||||
|
|
||||||
------------------------------------------------------------------------
|
### Phase 7 -- Multi-Device-Synchronisation
|
||||||
|
|
||||||
## Dokumentation
|
- [ ] Geräteidentität und Pairing
|
||||||
|
- [ ] Automatische Geräteerkennung im WLAN
|
||||||
Die ausführliche technische Architektur befindet sich in der
|
- [ ] Differenzabgleich / Sync-Protokoll
|
||||||
Projektdokumentation:
|
- [ ] Patienten synchronisieren
|
||||||
|
- [ ] Wunddokumentationen synchronisieren
|
||||||
``` text
|
- [ ] Fotos synchronisieren
|
||||||
docs/
|
- [ ] Konflikterkennung und Konfliktauflösung
|
||||||
└── Architekturplanung.md
|
- [ ] Automatische Synchronisation
|
||||||
```
|
- [ ] Sync-Status und manueller Fallback
|
||||||
|
- [ ] Multi-Device- und Recovery-Tests
|
||||||
Dort werden unter anderem Datenmodell, Datenbankschema,
|
|
||||||
Navigationskonzept, Autosave, PDF-Erzeugung und Medienverwaltung
|
|
||||||
detailliert beschrieben.
|
|
||||||
|
|
||||||
------------------------------------------------------------------------
|
|
||||||
|
|
||||||
## Status
|
|
||||||
|
|
||||||
**VulneraDoc befindet sich aktuell in Entwicklung und ist nicht für den
|
|
||||||
produktiven Einsatz freigegeben.**
|
|
||||||
|
|
||||||
Insbesondere bei der Verarbeitung realer Patientendaten müssen vor einem
|
|
||||||
Produktiveinsatz die rechtlichen, datenschutzrechtlichen und
|
|
||||||
sicherheitstechnischen Anforderungen abschließend geprüft werden.
|
|
||||||
|
|||||||
@@ -22,6 +22,7 @@ import androidx.compose.foundation.layout.padding
|
|||||||
import androidx.compose.foundation.layout.size
|
import androidx.compose.foundation.layout.size
|
||||||
import androidx.compose.foundation.layout.width
|
import androidx.compose.foundation.layout.width
|
||||||
import androidx.compose.foundation.lazy.LazyColumn
|
import androidx.compose.foundation.lazy.LazyColumn
|
||||||
|
import androidx.compose.foundation.lazy.rememberLazyListState
|
||||||
import androidx.compose.foundation.lazy.items
|
import androidx.compose.foundation.lazy.items
|
||||||
import androidx.compose.foundation.shape.RoundedCornerShape
|
import androidx.compose.foundation.shape.RoundedCornerShape
|
||||||
import androidx.compose.material.icons.Icons
|
import androidx.compose.material.icons.Icons
|
||||||
@@ -446,8 +447,28 @@ private fun DocumentationEditContent(
|
|||||||
onDeleteSignatureRequested: (signatureId: String) -> Unit,
|
onDeleteSignatureRequested: (signatureId: String) -> Unit,
|
||||||
loadSignatureBitmap: suspend (documentationId: String, fileName: String) -> Bitmap?,
|
loadSignatureBitmap: suspend (documentationId: String, fileName: String) -> Bitmap?,
|
||||||
) {
|
) {
|
||||||
|
val listState = rememberLazyListState()
|
||||||
|
|
||||||
|
// Änderungswunsch: Beim Aufklappen eines Blocks dorthin scrollen, damit sein erster Eintrag
|
||||||
|
// sichtbar wird - wichtig bei langen Formularen, wenn ein weiter unten liegender Block
|
||||||
|
// aufgeklappt wird und sein Inhalt sonst unterhalb des sichtbaren Bereichs läge. Reagiert
|
||||||
|
// NUR auf tatsächliches Aufklappen (expandedBlockId wechselt zu einer konkreten Block-ID),
|
||||||
|
// nicht auf das Zuklappen (expandedBlockId wird null) - dort gibt es nichts, wohin gescrollt
|
||||||
|
// werden müsste. Da jeder Block GENAU EIN LazyColumn-Element ist (Kopfzeile + bei Bedarf
|
||||||
|
// aufgeklappter Inhalt gemeinsam, s. [BlockAccordionItem]) und die Block-Liste die ERSTEN
|
||||||
|
// Elemente der LazyColumn sind, landet der Block-Index 1:1 auf dem passenden
|
||||||
|
// LazyColumn-Index - der Block erscheint dadurch ganz oben im sichtbaren Bereich, sein
|
||||||
|
// erster Eintrag direkt darunter.
|
||||||
|
LaunchedEffect(expandedBlockId) {
|
||||||
|
val targetIndex = blocks.indexOfFirst { it.blockStateId == expandedBlockId }
|
||||||
|
if (targetIndex >= 0) {
|
||||||
|
listState.animateScrollToItem(targetIndex)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
LazyColumn(
|
LazyColumn(
|
||||||
modifier = modifier,
|
modifier = modifier,
|
||||||
|
state = listState,
|
||||||
contentPadding = PaddingValues(16.dp),
|
contentPadding = PaddingValues(16.dp),
|
||||||
verticalArrangement = Arrangement.spacedBy(12.dp),
|
verticalArrangement = Arrangement.spacedBy(12.dp),
|
||||||
) {
|
) {
|
||||||
|
|||||||
Reference in New Issue
Block a user