
Notification Guard filtruje przychodzące powiadomienia Android na podstawie predefiniowanych profili ciszy (cisza nocna, cisza w południe, godziny pracy, weekend) i opcjonalnie własnych reguł per aplikacja. Wrażliwe aplikacje są zawsze przepuszczane przez filtr prywatności.
| Cecha | Wartość |
|---|---|
| Platforma | Android 7+ (API 24) |
| Stack | Tauri v2 · Rust · Svelte 5 |
| Języki | 7 |
| Repozytorium | git.pronix.org/oiv1Ni3o/notification-guard |
flowchart LR
A[Powiadomienia aplikacji] --> B[Lokalne przechwytywanie<br/>tylko on-device]
B --> C[(Zaszyfrowany lokalny magazyn)]
C --> D[Widok użytkownika]
D --> E[Manualny eksport]
B -.->|nigdy| F[("Chmura / serwer")]
style F stroke-dasharray: 5 5,stroke:#c00,color:#c00
Architektura local-only. Bez serwera, bez konta, bez trackingu, bez analytics. Bez uprawnienia internet w manifeście Androida.
android.permission.INTERNET)NotificationListenerService siłą rzeczy widzi wszystkie powiadomienia. Pre-filtr odfiltrowuje wrażliwe kategorie aplikacji ZANIM silnik reguł je zobaczy — te powiadomienia nigdy nie trafiają do bunkra, ich zawartość nie jest nigdy zapisywana.
Chronione kategorie: bankowość (DKB, PayPal, Sparkasse, …), 2FA/Authenticator, kasy chorych (TK, AOK, Barmer), instytucje publiczne (Bund, Elster).
Sześć obowiązkowych ograniczeń architektonicznych z aktualnych polityk Google Play (Data Safety, Permissions Declaration, Notification Listener). Każde jest śledzone jako Gitea-Issue.
| ID | Wymaganie | Status i wdrożenie |
|---|---|---|
| C1 | Prominent Disclosure & Consent | ✓ Spełnione — kreator 4-krokowy z disclosure, wyborem profilu, wyborem kategorii, aktywacją permissions. Jasne wskazówki: lokalnie, bez serwera, bez sieci. |
| C2 | Bez SYSTEM_ALERT_WINDOW | ✓ Spełnione — manifest nie zawiera tego uprawnienia. Re-notifications idą przez NotificationManager. |
| C3 | Data Retention TTL | ✓ Spełnione — konfigurowalna retencja (domyślnie 24 h). Okresowy cleanup-task (Tokio-Interval, 60 min). Przycisk „Usuń wszystko" z dialogiem potwierdzenia. |
| C4 | Contact Picker zamiast READ_CONTACTS | ○ Planowane — zostanie dodane jako opcjonalny moduł opt-in z Android Contact Picker — bez READ_CONTACTS. |
| C5 | Filtr prywatności (blocklist wrażliwych kategorii aplikacji) | ✓ Spełnione — hardcoded default-blocklist jako pre-filtr bezpośrednio w silniku reguł. Pierwsza logika w evaluate() — match → natychmiast Pass, bez ewaluacji, bez zapisu. |
| C6 | Bez warstwy sieciowej | ✓ Spełnione — manifest zweryfikowany (aapt dump badging). Bez zależności od klientów HTTP w plikach Cargo.toml. Aplikacja działa w pełni w trybie samolotowym. |
Cztery uprawnienia manifestowe, każde z konkretnym powiązaniem funkcjonalnym. Bez uprawnień runtime, bez restricted special-access poza głównym Listenerem.
android.permission.BIND_NOTIFICATION_LISTENER_SERVICE — Główna funkcja. Bez tego uprawnienia aplikacja nie może czytać ani filtrować powiadomień. Aktywowane przez użytkownika wyraźnie w ustawieniach systemowych.android.permission.RECEIVE_BOOT_COMPLETED — Ponowne połączenie Listener-Service po restarcie urządzenia. Bez niego aplikacja byłaby ślepa po każdym reboocie aż do manualnego startu aplikacji.android.permission.WAKE_LOCK — Niezawodne wyzwalanie snooze-timerów dla powiadomień z trybu Doze (planowane w fazie 2).android.permission.POST_NOTIFICATIONS — Wyświetlanie własnych re-notifications (released lub snoozed) — zamiast okna overlay (zob. C2).svelte-i18n z rozpoznawaniem OS-locale przez tauri-plugin-os. Dostępne języki: English, Deutsch, Français, Español, 中文, 日本語, 한국어.NotificationListenerService mostkuje eventy przez Tauri-Plugin-API do pipeline’u Rust.rusqlite (WAL, Foreign-Keys on). 5 migracji. Plik app-private, bez zewnętrznego dostępu.notif-listener, rules-engine, notif-store) nie mają cross-dependencies. Komunikacja idzie wyłącznie przez Tauri-host jako mediator.Notification Guard — Repozytorium: git.pronix.org/oiv1Ni3o/notification-guard