8 Commits

Author SHA1 Message Date
3a937c317d chore(branding): Launcher-Icon generiert (Android + iOS)
- flutter_launcher_icons ausgefuehrt: Android-Mipmaps 'launcher_icon' (hdpi-xxxhdpi) + kompletter iOS-AppIcon-Satz
- AndroidManifest android:icon -> @mipmap/launcher_icon (passend zur Config)
- remove_alpha_ios: true -> kein Alpha im iOS-Icon (App-Store-konform)

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-18 13:11:20 +02:00
f1e48cb177 chore(branding): Anzeigename 'Holzleitner Auslieferung' + Launcher-Icon
- Android android:label, iOS CFBundleDisplayName, MaterialApp.title -> 'Holzleitner Auslieferung'
- flutter_launcher_icons (assets/launch_icon.png) als Dev-Dep + Config

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-18 13:08:18 +02:00
6d7e58fc0f Phase B: Keycloak OIDC (PKCE) statt Cookie-Session-Login
App-Code:
- KeycloakOidcTokenProvider: PKCE-Login via flutter_appauth, Refresh via
  Refresh-Token aus flutter_secure_storage, Session-Restore beim
  App-Start, Logout.
- AuthSessionEvent als Provider→Bloc-Brücke (LoggedIn/LoggedOut/
  SessionExpired) auf einem Broadcast-Stream.
- AuthBloc komplett umgebaut: nimmt jetzt den KeycloakOidcTokenProvider
  statt UserInfoService, mappt eingehende Provider-Events auf eigene
  Zustände. Authenticated.fromClaims() liest personalnummer + Name aus
  dem ID-Token-Payload.
- LoginPage: kein Browser+Deep-Link mehr — Button feuert
  LoginRequested, der Provider übernimmt den restlichen Flow.
- network_locator: produktiver KeycloakOidcTokenProvider, doppelt
  registriert (KeycloakOidcTokenProvider für AuthBloc,
  AuthTokenProvider für Interceptor).
- Auth-State trägt zusätzlich personalnummer/displayName/email; das
  Legacy-User-Objekt + sessionId bleiben temporär drin, damit die
  alten ERPframe-Services (Phase D) noch kompilieren.

Plattform-Setup:
- Android: appAuthRedirectScheme=holzleitner in build.gradle.kts,
  NetworkSecurityConfig erlaubt HTTP zu localhost/10.0.2.2/127.0.0.1.
- iOS: holzleitner als URL-Scheme im Info.plist, ATS-Ausnahme für
  localhost (HTTP-Keycloak im Dev-Setup).

Out of scope:
- Keine echte App-Run-Smoke — kommt mit dem User-Test.
- iOS-pod-install läuft beim ersten 'flutter run ios' automatisch.
- Old ERPframe-Services bleiben aktiv und werfen ab jetzt 401 (kein
  Cookie-Session-Token mehr) — wird in Phase D entfernt.
2026-05-14 22:59:36 +02:00
2470299a10 BIG FAT 2026-04-28 13:03:09 +02:00
9111dc92db Added Streams to TourRepository 2026-01-03 01:29:21 +01:00
edb8676f5a Added custom tour ordering 2025-12-20 21:00:33 +01:00
7ea9108f62 Implemented settings, new scan, enhanced UI/UX 2025-11-04 16:52:39 +01:00
b19a6e1cd4 Initial draft 2025-09-20 16:14:06 +02:00