f6ad944988cd558dd3918579d2f93377511fc0a5
Private QR Scanner (MVP)
Offline-first, ad-free QR/barcode scanner built with Kotlin, Jetpack Compose, CameraX, and on-device ML Kit.
Platform Assumption
- Android mobile app first (phone/tablet).
- Prefer Android-compatible libraries and APIs for parsing/integration decisions.
Architektur
ui/: Compose screens/components + ViewModels (MVVM)ui/screens/ScannerScreen.kt: Scanner-Orchestrierung (Camera, Overlay, Actions, Bottom Sheet)ui/screens/ScannerResultCards.kt: strukturierte Ergebnis-Visualisierung (inkl. Kontaktkarten)ui/screens/ScannerGalleryPreviewDialog.kt: Bild-Scan-Vorschau mit Zoom/Pan + Live-Re-Detectionui/screens/ScannerOverlayComponents.kt: Overlay-Toggles, Batch-Panel, Permission-Contentui/screens/BarcodeTypeMapper.kt: ML-KitvalueType-> lesbarer Typ
data/: ML Kit analyzer, Room entities/DAO, repositorydomain/: app models (ScanResult,ScanRecord,UrlRiskResult)settings/: DataStore preferences (history + warnings toggles)util/: URL risk scoring, clipboard, intents, content parser (vCard/MECARD/WIFI/VEVENT)
Datenschutz
- Keine Werbung
- Keine Tracker/Analytics/Crashlytics
- Kein Backend, keine Servercalls
- Keine
INTERNET-Permission im Manifest - Datenschutzerklärung in der App und als PRIVACY_POLICY.md
MVP Features
- Home: Scan-Button, lokaler Historie-Toggle (Default: OFF), Datenschutz-Dialog
- Scanner: CameraX Live-Preview, Fadenkreuz-Overlay, Taschenlampe, Debounce gegen Doppelscans, Live-Hinweise zu erkannten/lesbaren Codes
- Bild-Scan: Multi-Code-Erkennung aus einem Bild mit Ergebnis-Auswahl
- Ergebnis-Bottom-Sheet: strukturierte Anzeige + Copy/Share/Open/Scan again + kontextspezifische Aktionen
- Kontakt-Workflows: vCard/MECARD parsen, visuelle Kontaktkarte, "Zu Kontakten hinzufügen"
- Office/Admin-Workflows: Wi-Fi QR parsen + Einstellungen öffnen, Kalender-QR parsen + Event anlegen
- URL-Sicherheitswarnung bei lokalem
riskScore >= 3(kein Blocken, nur Hinweis) - Historie: Suche, Swipe-to-delete, Alles-löschen, Detailansicht mit Volltext
- Einstellungen: Historie an/aus (mit optionalem Löschen), Warnungen an/aus, About-Infos
Voraussetzungen
- Android Studio (aktuell stabil)
- JDK 17+
- Android SDK für
compileSdk = 35
Build & Run
- Projekt in Android Studio öffnen.
- Gradle Sync ausführen.
- App auf Emulator/Device (API 24+) starten.
CLI:
./gradlew :app:assembleDebug
./gradlew :app:installDebug
Tests
- Unit tests:
./gradlew testDebugUnitTest
- Wichtige Test-Suites:
app/src/test/java/com/clean/scanner/util/ScanContentParsersTest.ktapp/src/test/java/com/clean/scanner/util/HistoryExportFormatterTest.ktapp/src/test/java/com/clean/scanner/util/UrlRiskScorerTest.ktapp/src/test/java/com/clean/scanner/ui/ScannerViewModelTest.ktapp/src/androidTest/java/com/clean/scanner/util/IntentsTest.kt
Description
Languages
Kotlin
100%