Notification Guard

Logo Notification Guard

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.

CechaWartość
PlatformaAndroid 7+ (API 24)
StackTauri v2 · Rust · Svelte 5
Języki7
Repozytoriumgit.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

Co aplikacja robi

  • 🕒 Profile ciszy — Cztery wbudowane profile czasowe. Kategorie aplikacji są pakowane w profile — bez budowania reguły dla każdej aplikacji.
  • 📦 Top aplikacji skatalogowane — 77 kuratowanych presetów aplikacji w 5 kategoriach (Social, Games, News, Shopping, Streaming). Filtrowalne według zainstalowanych aplikacji.
  • 🧠 Silnik reguł — Ewaluacja oparta na Rust w poniżej 10 ms na powiadomienie. Reguły użytkownika mają pierwszeństwo przed profilami. Wyjątki per reguła (kontakt, słowo kluczowe).
  • 🗑️ Czyszczenie TTL — Zablokowane powiadomienia są automatycznie usuwane po konfigurowalnej retencji (domyślnie 24 h). „Usuń wszystko" jednym tapnięciem.

Ochrona prywatności

Architektura local-only. Bez serwera, bez konta, bez trackingu, bez analytics. Bez uprawnienia internet w manifeście Androida.

Czego możesz oczekiwać

  • W pełni lokalnie — wszystkie dane pozostają na urządzeniu
  • Bez serwerów, bez chmury, bez SDK osób trzecich
  • Bez dostępu do internetu (manifest nie zawiera android.permission.INTERNET)
  • Bez crash-reporterów, bez analytics, bez telemetrii
  • Baza SQLite w prywatnej pamięci aplikacji
  • Automatyczne czyszczenie zablokowanych powiadomień po TTL
  • Manualne „Usuń wszystko" możliwe w każdej chwili

Filtr prywatności — wrażliwe aplikacje nigdy nie są blokowane

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).

Google-Play-Compliance

Sześć obowiązkowych ograniczeń architektonicznych z aktualnych polityk Google Play (Data Safety, Permissions Declaration, Notification Listener). Każde jest śledzone jako Gitea-Issue.

IDWymaganieStatus i wdrożenie
C1Prominent Disclosure & Consent✓ Spełnione — kreator 4-krokowy z disclosure, wyborem profilu, wyborem kategorii, aktywacją permissions. Jasne wskazówki: lokalnie, bez serwera, bez sieci.
C2Bez SYSTEM_ALERT_WINDOW✓ Spełnione — manifest nie zawiera tego uprawnienia. Re-notifications idą przez NotificationManager.
C3Data Retention TTL✓ Spełnione — konfigurowalna retencja (domyślnie 24 h). Okresowy cleanup-task (Tokio-Interval, 60 min). Przycisk „Usuń wszystko" z dialogiem potwierdzenia.
C4Contact Picker zamiast READ_CONTACTS○ Planowane — zostanie dodane jako opcjonalny moduł opt-in z Android Contact Picker — bez READ_CONTACTS.
C5Filtr 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.
C6Bez 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.

Używane uprawnienia

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).

Technologia

  • Frontend — Svelte 5 (Runes) w Tauri-WebView, responsywny od 360 px, układ bottom-tab na mobile.
  • Wielojęzycznośćsvelte-i18n z rozpoznawaniem OS-locale przez tauri-plugin-os. Dostępne języki: English, Deutsch, Français, Español, 中文, 日本語, 한국어.
  • Backend — Rust + Tauri v2 host. Trzy własne plugins (Listener, Rules-Engine, Store) plus oficjalne plugins Notification i OS.
  • Warstwa Mobile — Android Kotlin: NotificationListenerService mostkuje eventy przez Tauri-Plugin-API do pipeline’u Rust.
  • Baza danych — SQLite przez rusqlite (WAL, Foreign-Keys on). 5 migracji. Plik app-private, bez zewnętrznego dostępu.
  • Build & Signing — Universal-APK i AAB (obowiązek AAB w Google Play). Dev-builds podpisane lokalnym keystore. APK aktualnie ~14 MB.

Highlighty architektoniczne

  • Izolacja pluginów — Trzy własne plugins (notif-listener, rules-engine, notif-store) nie mają cross-dependencies. Komunikacja idzie wyłącznie przez Tauri-host jako mediator.
  • Filtr prywatności na wejściu pipeline’u — Wrażliwe aplikacje są filtrowane, zanim silnik reguł je zobaczy — zawartości wrażliwych powiadomień nigdy nie są logowane ani zapisywane.
  • Profile vs. reguły — UX dla początkujących poprzez predefiniowane profile + kategorie aplikacji; UX dla power-userów poprzez indywidualne reguły w widoku „Zaawansowane". Obie ścieżki używają tego samego silnika.
  • Specyfika mobile — własne moduły plugin-Android z mergem AndroidManifest. Permission-onboarding wychwytuje Android-13-Restricted-Settings-Lockout dla APK z sideloadu.

Notification Guard — Repozytorium: git.pronix.org/oiv1Ni3o/notification-guard