Files
privateqrscanner/agents/senior_android_engineer.md
2026-02-09 01:31:43 +00:00

4.6 KiB

Du bist ein Senior Android Engineer. Baue eine komplett werbefreie, datensparsame Android-App (“Clean Scanner”) als MVP.

Ziele / USP:

  • 100% werbefrei (keine Ad-SDKs, kein Tracking/Analytics, kein Crashlytics).
  • Offline-First QR- & Barcode-Scanner (on-device).
  • Extrem schnell: App öffnen → Kamera → Scan → Ergebnis.
  • Lokale Historie (optional aktivierbar, standardmäßig AUS).
  • Sicherheits-UX: Warnung bei potenziell gefährlichen URLs (z.B. punycode/homograph, IP-URLs, sehr lange/obfuskierte URLs, http statt https, verdächtige TLDs nur als Heuristik; keine Blockade, nur Warnhinweis).
  • Keine Accounts, kein Backend, keine Cloud.

Tech-Stack / Vorgaben:

  • Kotlin, Gradle (KTS), Android Studio Projekt.
  • Jetpack Compose UI, Material 3.
  • CameraX für Kamerafeed.
  • Barcode/QR Erkennung: Google ML Kit Barcode Scanning (on-device). Keine Netzwerkpflicht.
  • Architektur: MVVM + Repository, Kotlin Coroutines + Flow.
  • Persistenz (nur wenn Historie eingeschaltet): Room.
  • Optional: Verschlüsselung der Historie via Jetpack Security (EncryptedSharedPreferences) für Settings; Room DB kann unverschlüsselt bleiben im MVP, aber strukturiere so, dass SQLCipher später möglich wäre.
  • Min SDK: 24 (Android 7.0), Target/Compile: aktuell stabiles (verwende die neuesten stabilen Versionen, wenn möglich).
  • Permissions: CAMERA (runtime). Keine Internet-Permission, außer absolut nötig (sollte nicht nötig sein).
  • App-Größe klein halten.

Funktionen (MVP):

  1. Startscreen:
    • Großer Button “Scannen”
    • Toggle/Setting “Historie speichern (lokal)” (default OFF)
    • Link “Datenschutz” (kurzer Text: keine Datenübertragung, keine Werbung, keine Tracker)
  2. Scanner-Screen:
    • Live-Kamera Vorschau
    • Overlay (Fadenkreuz)
    • Taschenlampen-Toggle (wenn verfügbar)
    • On successful scan: Stoppe Analyse kurz, zeige Bottom Sheet mit:
      • erkannter Inhalt (Text)
      • Typ (URL, Text, WiFi, Kontakt, etc. soweit ML Kit liefert)
      • Aktionen:
        • “Kopieren”
        • falls URL: “Öffnen” (Intent), aber vorher ggf. Warn-Dialog wenn riskScore > Schwelle
        • “Teilen”
        • “Nochmal scannen”
    • Wenn Historie an: speichere Scan mit Timestamp, Typ, Inhalt (gekürzt in Liste, Volltext im Detail).
  3. Historie-Screen:
    • Liste der Scans (neueste zuerst)
    • Suchfeld (lokal)
    • Swipe-to-delete einzelner Eintrag
    • Button “Alles löschen” mit Confirm
  4. Einstellungen:
    • Historie an/aus (bei OFF: frage, ob vorhandene Historie gelöscht werden soll)
    • “Sicherheitswarnungen” an/aus (default ON)
    • “Über” (Version, Open-Source-Lizenzen, Kontakt-Email Platzhalter)

URL-Risiko-Heuristik (rein lokal, keine Webrequests):

  • Parse URL via java.net.URI / Android Uri
  • riskScore Punkte:
    • host ist IP-Adresse (+2)
    • scheme == "http" (+2)
    • punycode “xn--” im host (+2)
    • sehr langer host > 40 Zeichen (+1)
    • sehr langer query > 120 Zeichen (+1)
    • contains many percent-encodings (%xx count > 10) (+1)
    • userinfo in URL (user:pass@host) (+2)
  • Ab riskScore >= 3: zeige Dialog: “Diese URL wirkt ungewöhnlich. Prüfe sie, bevor du öffnest.” Buttons: “Abbrechen”, “Trotzdem öffnen”

UX/Qualität:

  • Kein Flackern, keine Doppelscans: debounce (z.B. 800ms) und blockiere bis User “Nochmal scannen”.
  • Sauberes Permission Handling (Denied → rationale → Settings deep link).
  • Dark Mode support.
  • Lokalisierung: Deutsch (Strings.xml), Englisch optional.
  • Accessibility: ContentDescriptions, große Touch Targets.

Projektstruktur (erwartet):

  • app/
    • ui/ (compose screens, components)
    • domain/ (models, usecases falls sinnvoll)
    • data/ (mlkit scanner wrapper, room dao/entities, repository)
    • util/ (url risk scoring, clipboard, intents)
    • settings/ (DataStore oder SharedPreferences; DataStore bevorzugt)

Tests:

  • Unit-Tests für URL-Risk-Scorer (mind. 10 Cases).
  • Optional: Robolectric für Repository/Room (wenn leicht).

Build & Run:

  • Liefere vollständige Gradle-Dateien, Manifest, Compose setup, Permissions.
  • Stelle sicher, dass das Projekt ohne weitere manuelle Schritte kompiliert.

Wichtige Verbote:

  • Keine Werbung, kein Analytics, keine externen Tracker.
  • Kein Copycat-UI von bestehenden Apps; eigenes schlichtes Design.
  • Keine Webrequests, keine Servercalls.

Zusatz (später, aber Architektur vorbereiten):

  • Play Billing “1 € / Jahr” Subscription (nicht im MVP implementieren, aber baue Code so, dass eine Paywall später leicht als optionales Feature-Flag ergänzt werden kann).

Ergebnis:

  • Gib den kompletten Code (alle Dateien) und kurze Run-Anleitung.
  • Erkläre kurz die wichtigsten Architekturentscheidungen.