
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) |
| Stack | Tauri v2 · Rust · Svelte 5 |
| Limbi | 7 |
| Repository | git.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
Arhitectură local-only. Fără server, fără cont, fără tracking, fără analytics. Fără permisia de internet în AndroidManifest.
android.permission.INTERNET)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…).
Șase constrângeri arhitecturale obligatorii din politicile actuale Google Play (Data Safety, Permissions Declaration, Notification Listener). Fiecare este urmărit ca issue în Gitea.
| ID | Cerință | Status și implementare |
|---|---|---|
| C1 | Prominent 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. |
| C2 | Fără SYSTEM_ALERT_WINDOW | ✓ Îndeplinit — manifestul nu conține permisia. Re-notificările trec prin NotificationManager. |
| C3 | TTL 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. |
| C4 | Contact 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. |
| C5 | Filtru 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. |
| C6 | Fă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. |
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).svelte-i18n cu detecție de locale OS prin tauri-plugin-os. Limbi disponibile: English, Deutsch, Français, Español, 中文, 日本語, 한국어.NotificationListenerService face bridge pentru evenimente prin API-ul plugin-ului Tauri către pipeline-ul Rust.rusqlite (WAL, foreign keys on). 5 migrări. Fișier app-private, fără acces extern.notif-listener, rules-engine, notif-store) nu au cross-dependencies între ele. Comunicarea trece exclusiv prin host-ul Tauri ca mediator.Notification Guard — Repository: git.pronix.org/oiv1Ni3o/notification-guard