# Clean Scanner (MVP) Offline-first, ad-free QR/barcode scanner built with Kotlin + Compose + CameraX + ML Kit. ## Architektur - `ui/`: Compose-Screens + ViewModels (MVVM presentation layer) - `data/`: Scanner-Analyzer, Room entities/DAO, Repository - `domain/`: app models (`ScanResult`, `ScanRecord`, `UrlRiskResult`) - `settings/`: DataStore preferences (history toggle, warnings toggle) - `util/`: URL risk scorer, clipboard, intents ## Datenschutz - Keine Werbung - Keine Tracker/Analytics/Crashlytics - Kein Backend/keine Webrequests - Keine `INTERNET`-Permission im Manifest ## MVP Features - Startscreen mit Scan-Button und lokalem Historie-Toggle (Default: OFF) - Scanner mit CameraX live preview, Taschenlampe, debounce/no double scan - Ergebnis-Bottom-Sheet mit Copy/Share/Open/Scan again - Lokale URL-Risikoheuristik mit Warn-Dialog ab Score `>= 3` - Historie-Liste inkl. Suche, Swipe-delete, Alles-löschen - Einstellungen: Historie an/aus, Warnungen an/aus, About ## Run 1. In Android Studio: Open this folder as project. 2. Let Gradle sync dependencies. 3. Run app on emulator/device (API 24+). ## Tests - URL Risk Scorer Tests: `app/src/test/java/com/clean/scanner/util/UrlRiskScorerTest.kt` (11 cases) ## Hinweis In dieser Umgebung war kein `gradle`/`gradlew` verfügbar, daher konnte ich Builds/Tests hier nicht lokal ausführen.