
Notification Guard filtert eingehende Android-Benachrichtigungen anhand vordefinierter Ruhe-Profile (Nachtruhe, Mittagsruhe, Arbeitszeit, Wochenende) und optional eigener Regeln pro App. Sensible Apps werden durch einen Privacy-Filter immer durchgelassen.
| Eigenschaft | Wert |
|---|---|
| Plattform | Android 7+ (API 24) |
| Stack | Tauri v2 · Rust · Svelte 5 |
| Sprachen | 7 |
| Repository | git.pronix.org/oiv1Ni3o/notification-guard |
flowchart LR
A[App-Benachrichtigungen] --> B[Lokale Erfassung<br/>nur on-device]
B --> C[(Verschlüsselter lokaler Speicher)]
C --> D[Nutzer-Ansicht]
D --> E[Manueller Export]
B -.->|niemals| F[("Cloud / Server")]
style F stroke-dasharray: 5 5,stroke:#c00,color:#c00
Lokal-only-Architektur. Kein Server, kein Account, kein Tracking, kein Analytics. Keine Internet-Berechtigung im Android-Manifest.
android.permission.INTERNET)Der NotificationListenerService sieht zwangsläufig alle Benachrichtigungen.
Ein Vorfilter sortiert sensible App-Kategorien aus BEVOR die Regel-Engine
sie sieht — diese Notifications landen niemals im Bunker, der Inhalt wird
nie gespeichert.
Geschützte Kategorien: Banking (DKB, PayPal, Sparkasse, …), 2FA/Authenticator, Krankenkassen (TK, AOK, Barmer), Behörden (Bund, Elster).
Sechs verbindliche Architektur-Constraints aus den aktuellen Google-Play-Policies (Data Safety, Permissions Declaration, Notification Listener). Jeder ist als Gitea-Issue verfolgt.
| ID | Anforderung | Status & Umsetzung |
|---|---|---|
| C1 | Prominent Disclosure & Consent | ✓ Erfüllt — 4-Schritt-Wizard mit Disclosure, Profil-Auswahl, Kategorien-Auswahl, Permission-Aktivierung. Klare Hinweise: lokal, kein Server, kein Netzwerk. |
| C2 | Kein SYSTEM_ALERT_WINDOW | ✓ Erfüllt — Manifest enthält die Permission nicht. Re-Notifications laufen über NotificationManager. |
| C3 | Data Retention TTL | ✓ Erfüllt — Konfigurierbare Retention (Default 24 h). Periodischer Cleanup-Task (Tokio-Interval, 60 min). „Alles löschen"-Button mit Bestätigungs-Dialog. |
| C4 | Kontakt-Picker statt READ_CONTACTS | ○ Geplant — Wird als optionales Opt-in-Modul mit Android Contact Picker nachgerüstet — kein READ_CONTACTS. |
| C5 | Privacy-Filter (Blocklist sensibler App-Kategorien) | ✓ Erfüllt — Hardcoded Default-Blocklist als Vorfilter direkt in der Regel-Engine. Erste Logik in evaluate() — Match → sofort Pass, keine Auswertung, keine Speicherung. |
| C6 | Kein Netzwerk-Layer | ✓ Erfüllt — Manifest verifiziert (aapt dump badging). Keine HTTP-Client-Dependencies in den Cargo.toml-Files. App läuft vollständig im Flugmodus. |
Vier Manifest-Permissions, jede mit konkretem Funktions-Bezug. Keine Runtime-Permissions, keine restricted Special-Access außer dem Kern-Listener.
android.permission.BIND_NOTIFICATION_LISTENER_SERVICE — Kern-Funktion. Ohne diese Permission kann die App keine Benachrichtigungen lesen oder filtern. Wird vom Nutzer explizit über die System-Einstellungen aktiviert.android.permission.RECEIVE_BOOT_COMPLETED — Listener-Service nach Geräte-Neustart wieder verbinden. Ohne wäre die App nach jedem Reboot bis zum manuellen App-Start blind.android.permission.WAKE_LOCK — Snooze-Timer für Notifications aus dem Doze-Modus zuverlässig auslösen (geplant in Phase 2).android.permission.POST_NOTIFICATIONS — Eigene Re-Notifications (released oder snoozed) anzeigen — anstelle eines Overlay-Fensters (siehe C2).svelte-i18n mit OS-Locale-Erkennung über tauri-plugin-os. Verfügbare Sprachen: English, Deutsch, Français, Español, 中文, 日本語, 한국어.NotificationListenerService bridged Events über die Tauri-Plugin-API an die Rust-Pipeline.rusqlite (WAL, Foreign-Keys on). 5 Migrationen. App-private Datei, kein externer Zugriff.notif-listener, rules-engine, notif-store) haben keine Cross-Dependencies untereinander. Kommunikation läuft ausschließlich über den Tauri-Host als Mediator.Notification Guard — Repository: git.pronix.org/oiv1Ni3o/notification-guard