Notification Guard

Notification Guard Logo

Notification Guard filtrează notificările Android primite pe baza unor profiluri de liniște predefinite (liniște de noapte, liniște de prânz, program de lucru, weekend) și opțional reguli proprii per aplicație. Aplicațiile sensibile sunt mereu lăsate să treacă printr-un filtru de privacy.

CaracteristicăValoare
PlatformăAndroid 7+ (API 24)
StackTauri v2 · Rust · Svelte 5
Limbi7
Repositorygit.pronix.org/oiv1Ni3o/notification-guard
  flowchart LR
    A[Notificări de la aplicații] --> B[Capturare locală<br/>doar on-device]
    B --> C[(Storage local criptat)]
    C --> D[Vizualizare pentru utilizator]
    D --> E[Export manual]
    B -.->|niciodată| F[("Cloud / server")]
    style F stroke-dasharray: 5 5,stroke:#c00,color:#c00

Ce face aplicația

  • 🕒 Profiluri de liniște — Patru profiluri de timp integrate. Categoriile de aplicații sunt grupate în profiluri — fără construirea de reguli pentru fiecare aplicație.
  • 📦 Top-aplicații catalogate — 77 de preset-uri de aplicații curate în 5 categorii (Social, Games, News, Shopping, Streaming). Filtrabile după aplicațiile instalate.
  • 🧠 Motor de reguli — Evaluare bazată pe Rust sub 10 ms per notificare. Regulile utilizatorului au prioritate față de profiluri. Excepții per regulă (contact, cuvânt-cheie).
  • 🗑️ Curățare TTL — Notificările blocate sunt șterse automat după o retenție configurabilă (default 24 h). „Șterge totul" cu un tap.

Protecția datelor

Arhitectură local-only. Fără server, fără cont, fără tracking, fără analytics. Fără permisia de internet în AndroidManifest.

La ce te poți aștepta

  • Complet local — toate datele rămân pe dispozitiv
  • Fără server, fără cloud, fără SDK-uri de la terți
  • Fără acces la internet (manifestul nu conține android.permission.INTERNET)
  • Fără crash reporter, fără analytics, fără telemetrie
  • Bază de date SQLite în storage-ul privat al aplicației
  • Curățare automată a notificărilor blocate după TTL
  • „Șterge totul" manual posibil oricând

Filtru de privacy — aplicațiile sensibile nu sunt niciodată blocate

NotificationListenerService vede inevitabil toate notificările. Un prefiltru elimină categoriile sensibile de aplicații ÎNAINTE ca motorul de reguli să le vadă — aceste notificări nu ajung niciodată în bunker, conținutul nu este niciodată salvat.

Categorii protejate: bancare (mBank, PKO, Santander…), 2FA/authenticator, asigurări de sănătate (NFZ, ZUS, CASS…), aplicații guvernamentale (mObywatel, e-PIT, ANAF…).

Compliance Google Play

Șase constrângeri arhitecturale obligatorii din politicile actuale Google Play (Data Safety, Permissions Declaration, Notification Listener). Fiecare este urmărit ca issue în Gitea.

IDCerințăStatus și implementare
C1Prominent Disclosure & Consent✓ Îndeplinit — wizard în 4 pași cu disclosure, alegere profil, alegere categorii, activarea permisiilor. Indicații clare: local, fără server, fără rețea.
C2Fără SYSTEM_ALERT_WINDOW✓ Îndeplinit — manifestul nu conține permisia. Re-notificările trec prin NotificationManager.
C3TTL de retenție a datelor✓ Îndeplinit — retenție configurabilă (default 24 h). Task de cleanup periodic (interval Tokio, 60 min). Buton „șterge totul" cu dialog de confirmare.
C4Contact picker în loc de READ_CONTACTS○ Planificat — va fi adăugat ca modul opțional opt-in cu Android Contact Picker — fără READ_CONTACTS.
C5Filtru de privacy (blocklistă a categoriilor sensibile de aplicații)✓ Îndeplinit — blocklistă default hardcoded ca prefiltru direct în motorul de reguli. Prima logică în evaluate() — match → imediat Pass, fără evaluare, fără salvare.
C6Fără layer de rețea✓ Îndeplinit — manifest verificat (aapt dump badging). Fără dependențe HTTP client în fișierele Cargo.toml. Aplicația rulează complet în airplane mode.

Permisiile folosite

Patru permisii de manifest, fiecare cu legătură funcțională concretă. Fără permisii de runtime, fără restricted special-access în afara listenerului central.

  • android.permission.BIND_NOTIFICATION_LISTENER_SERVICE — funcție centrală. Fără această permisie, aplicația nu poate citi sau filtra notificări. Activată explicit de utilizator prin setările sistemului.
  • android.permission.RECEIVE_BOOT_COMPLETED — reconectarea listener-service după restart de dispozitiv. Fără asta, aplicația ar fi oarbă după fiecare reboot până la pornirea manuală.
  • android.permission.WAKE_LOCK — declanșarea fiabilă a timerelor de snooze pentru notificări din modul Doze (planificat în faza 2).
  • android.permission.POST_NOTIFICATIONS — afișarea propriilor re-notificări (released sau snoozed) — în locul unei ferestre overlay (vezi C2).

Tehnologie

  • Frontend — Svelte 5 (Runes) în WebView Tauri, responsiv de la 360 px, layout bottom-tab pe mobile.
  • Multilingvismsvelte-i18n cu detecție de locale OS prin tauri-plugin-os. Limbi disponibile: English, Deutsch, Français, Español, 中文, 日本語, 한국어.
  • Backend — Rust + host Tauri v2. Trei plugin-uri proprii (listener, rules engine, store) plus plugin-ul oficial de notificare și OS.
  • Mobile layer — Android Kotlin: NotificationListenerService face bridge pentru evenimente prin API-ul plugin-ului Tauri către pipeline-ul Rust.
  • Bază de date — SQLite prin rusqlite (WAL, foreign keys on). 5 migrări. Fișier app-private, fără acces extern.
  • Build și signing — APK universal și AAB (obligație Google Play AAB). Build-urile de dev semnate cu keystore local. APK actual ~14 MB.

Highlight-uri arhitecturale

  • Izolare de plugin-uri — cele trei plugin-uri proprii (notif-listener, rules-engine, notif-store) nu au cross-dependencies între ele. Comunicarea trece exclusiv prin host-ul Tauri ca mediator.
  • Filtru de privacy la intrarea pipeline-ului — aplicațiile sensibile sunt filtrate înainte ca motorul de reguli să le vadă — conținutul notificărilor sensibile nu este niciodată logat sau salvat.
  • Profiluri vs. reguli — UX pentru începători prin profiluri predefinite + categorii de aplicații; UX pentru power users prin reguli individuale într-o vedere „avansată". Ambele căi folosesc același motor.
  • Specificuri mobile — module Android proprii de plugin cu AndroidManifest merge. Onboarding-ul de permisii prinde lockout-ul restricted settings al Android 13 pentru APK-uri sideloaded.

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