mobile_scanners Default-errorBuilder zeigt nur die generische Meldung ohne
Details. Eigener errorBuilder zeigt jetzt errorCode + errorDetails.message
an, damit sich das reale Problem auf dem Tablet überhaupt einordnen lässt
(z.B. Kamera-Berechtigung verweigert, Kamera nicht verfügbar, o.ä.).
Zusätzlich Fallback-Button "Zurück – manuell eintragen". v0.1.6+7.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Dzdm3EWeNdYFUuXFRJryA1
Portiert von timemaster-mobile v0.1.7+8: UpdateCheckService prüft
kiosk-version.txt, LoginScreen zeigt Update-Banner mit Fortschrittsbalken +
"Jetzt aktualisieren"-Button, öffnet Android-Paketinstaller direkt
(open_filex + FileProvider). Banner sitzt im LoginScreen statt StampScreen,
da das der Idle-/Ruhezustand des Kiosks ist – Stempel-Sessions sind nur
900s aktiv. REQUEST_INSTALL_PACKAGES-Permission ergänzt.
v0.1.5+6. Diese Version selbst muss noch einmal manuell installiert werden
(Feature existiert ja erst danach), ab hier sollte der Update-Button reichen.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Dzdm3EWeNdYFUuXFRJryA1
Neuer QrEnrollmentScanScreen (mobile_scanner) liest das JSON {url, token}
aus dem Portal-QR-Code (KioskDevicesPage → Bearer-Gerät anlegen) und füllt
EnrollmentScreen automatisch aus. Manuelle Eingabe bleibt als Fallback.
CAMERA-Permission ergänzt. v0.1.4+5, weiterhin release-signiert (gleicher
Fingerprint wie v0.1.3+4).
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Dzdm3EWeNdYFUuXFRJryA1
- Wakelock (wakelock_plus): Tablet-Display schläft nie ein, kein manuelles
Entsperren vor jedem Stempeln nötig.
- Release-Build signiert jetzt mit eigenem Keystore statt Debug-Key.
Keystore (release-keystore.jks) + key.properties liegen NUR auf dem
Build-Rechner (236), nie im Git (siehe android/.gitignore). Fallback auf
Debug-Signing falls key.properties fehlt (frischer Checkout ohne
Keystore-Zugriff bricht Build nicht).
Wichtig: storeFile-Pfad in build.gradle.kts über rootProject.file()
aufgelöst, nicht file() – sonst relativ zum falschen Modul (app/ statt
android/).
v0.1.3+4.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Dzdm3EWeNdYFUuXFRJryA1
- NFC onDiscovered: try/finally um stopSession(), sonst bleibt die native
NFC-Session bei einer Exception in _extractUid offen und jeder weitere
Scan schlägt dauerhaft fehl (nur App-Neustart behebt es).
- Alle Login-/Stamp-Handler fangen jetzt auch generische Exceptions (nicht
nur DioException) – sonst wirkt der Kiosk bei unerwarteter Serverantwort
nur "eingefroren" ohne Hinweis.
- _runAction: expliziter Re-Entrancy-Guard gegen Doppel-Tap, Status-Refresh
nach fehlgeschlagener Stempel-Aktion (kein veralteter Button-Zustand).
- ApiClient.init(): Secure-Storage-Reads einzeln try/catch, dio wird immer
konstruiert auch wenn Keystore beim Kaltstart noch nicht bereit ist.
- main(): ApiClient.init() in try/catch – Fehler dort ließ die App vorher
komplett schwarz bleiben (runApp() nie erreicht).
v0.1.2+3. Review von flutter-expert-Subagent, Diffs manuell gegengeprüft.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Dzdm3EWeNdYFUuXFRJryA1
Bisher nur auf 236 generiert (flutter create), nie zurückgesynct. Enthält
die Build-Fixes: compileSdk=36 (nfc_manager-Kompatibilität), gradle.properties
mit -Xmx2G statt Default 8G (236 hat nur 10GB RAM), INTERNET+NFC-Permissions
im Manifest.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Dzdm3EWeNdYFUuXFRJryA1
nfc_manager 3.5.1 verlangte compileSdk 31 in seinem eigenen Android-Modul,
kollidierte mit AndroidX-Transitivdeps die 33+ brauchen → Upgrade auf
nfc_manager 4.2.1 (compileSdk 36 im App-build.gradle.kts explizit gesetzt).
API hat sich geändert: isAvailable()→checkAvailability(), startSession
braucht jetzt pollingOptions, UID-Auslesen über NfcTagAndroid.from(tag).id
statt tag.data-Map. v0.1.1+2, erfolgreich auf 236 gebaut, deployed auf 137.
Nebenbefund: Gradle/Kotlin-Daemons mit -Xmx8G stapelten sich auf 236 (nur
10GB RAM) und blockierten sogar SSH – gradle.properties auf -Xmx2G gesenkt.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Dzdm3EWeNdYFUuXFRJryA1