nicer crosshair, icons instead of text buttons, share history
This commit is contained in:
@@ -1,35 +1,50 @@
|
||||
# Clean Scanner (MVP)
|
||||
|
||||
Offline-first, ad-free QR/barcode scanner built with Kotlin + Compose + CameraX + ML Kit.
|
||||
Offline-first, ad-free QR/barcode scanner built with Kotlin, Jetpack Compose, CameraX, and on-device ML Kit.
|
||||
|
||||
## Architektur
|
||||
- `ui/`: Compose-Screens + ViewModels (MVVM presentation layer)
|
||||
- `data/`: Scanner-Analyzer, Room entities/DAO, Repository
|
||||
- `ui/`: Compose screens/components + ViewModels (MVVM)
|
||||
- `data/`: ML Kit analyzer, Room entities/DAO, repository
|
||||
- `domain/`: app models (`ScanResult`, `ScanRecord`, `UrlRiskResult`)
|
||||
- `settings/`: DataStore preferences (history toggle, warnings toggle)
|
||||
- `util/`: URL risk scorer, clipboard, intents
|
||||
- `settings/`: DataStore preferences (history + warnings toggles)
|
||||
- `util/`: URL risk scoring, clipboard, intents
|
||||
|
||||
## Datenschutz
|
||||
- Keine Werbung
|
||||
- Keine Tracker/Analytics/Crashlytics
|
||||
- Kein Backend/keine Webrequests
|
||||
- Kein Backend, keine Servercalls
|
||||
- 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
|
||||
- Home: Scan-Button, lokaler Historie-Toggle (Default: OFF), Datenschutz-Dialog
|
||||
- Scanner: CameraX Live-Preview, Fadenkreuz-Overlay, Taschenlampe, Debounce gegen Doppelscans
|
||||
- Ergebnis-Bottom-Sheet: Typ/Inhalt + Copy/Share/Open/Scan again
|
||||
- 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
|
||||
|
||||
## Run
|
||||
1. In Android Studio: Open this folder as project.
|
||||
2. Let Gradle sync dependencies.
|
||||
3. Run app on emulator/device (API 24+).
|
||||
## Voraussetzungen
|
||||
- Android Studio (aktuell stabil)
|
||||
- JDK 17+
|
||||
- Android SDK für `compileSdk = 35`
|
||||
|
||||
## Build & Run
|
||||
1. Projekt in Android Studio öffnen.
|
||||
2. Gradle Sync ausführen.
|
||||
3. App auf Emulator/Device (API 24+) starten.
|
||||
|
||||
CLI:
|
||||
|
||||
```bash
|
||||
./gradlew :app:assembleDebug
|
||||
./gradlew :app:installDebug
|
||||
```
|
||||
|
||||
## Tests
|
||||
- URL Risk Scorer Tests: `app/src/test/java/com/clean/scanner/util/UrlRiskScorerTest.kt` (11 cases)
|
||||
- Unit tests:
|
||||
|
||||
## Hinweis
|
||||
In dieser Umgebung war kein `gradle`/`gradlew` verfügbar, daher konnte ich Builds/Tests hier nicht lokal ausführen.
|
||||
```bash
|
||||
./gradlew testDebugUnitTest
|
||||
```
|
||||
|
||||
- URL-Risk-Scorer tests: `app/src/test/java/com/clean/scanner/util/UrlRiskScorerTest.kt`
|
||||
|
||||
Reference in New Issue
Block a user