
Notification Guard filtre les notifications Android entrantes selon des profils horaires prédéfinis (nuit, pause déjeuner, heures de travail, week-end) et des règles personnalisées par application. Les applications sensibles sont toujours laissées passer grâce à un filtre de confidentialité.
| Propriété | Valeur |
|---|---|
| Plateforme | Android 7+ (API 24) |
| Stack | Tauri v2 · Rust · Svelte 5 |
| Langues | 7 |
| Dépôt | git.pronix.org/oiv1Ni3o/notification-guard |
flowchart LR
A[Notifications app] --> B[Capture locale<br/>on-device uniquement]
B --> C[(Stockage local chiffré)]
C --> D[Vue utilisateur]
D --> E[Export manuel]
B -.->|jamais| F[("Cloud / Serveur")]
style F stroke-dasharray: 5 5,stroke:#c00,color:#c00
Architecture exclusivement locale. Pas de serveur, pas de compte, pas de tracking, pas d’analytics. Aucune permission Internet déclarée dans le manifest Android.
android.permission.INTERNET)Le NotificationListenerService voit inévitablement toutes les
notifications. Un pré-filtre écarte les catégories d’applications
sensibles AVANT que le moteur de règles ne les voie — ces notifications
n’entrent jamais dans le stockage, et leur contenu n’est jamais persisté.
Catégories protégées : banque (DKB, PayPal, caisses d’épargne, …), 2FA/authentificateur, assurance maladie (TK, AOK, Barmer), services publics (services fédéraux, Elster).
Six contraintes architecturales strictes issues des politiques Google Play actuelles (Data Safety, Permissions Declaration, Notification Listener). Chaque contrainte est suivie comme un ticket Gitea.
| ID | Exigence | État & mise en œuvre |
|---|---|---|
| C1 | Divulgation et consentement explicites | ✓ Conforme — Assistant en 4 étapes couvrant divulgation, sélection de profil, sélection de catégories, activation de permission. Mentions claires : local, sans serveur, sans réseau. |
| C2 | Pas de SYSTEM_ALERT_WINDOW | ✓ Conforme — Le manifest ne déclare pas cette permission. Les re-notifications passent par NotificationManager. |
| C3 | TTL de rétention des données | ✓ Conforme — Rétention configurable (24 h par défaut). Tâche de nettoyage périodique (intervalle Tokio, 60 min). Bouton « Tout effacer » avec dialogue de confirmation. |
| C4 | Sélecteur de contacts au lieu de READ_CONTACTS | ○ Prévu — Sera ajouté comme module opt-in optionnel utilisant le Contact Picker Android — pas de READ_CONTACTS. |
| C5 | Filtre de confidentialité (blocklist de catégories sensibles) | ✓ Conforme — Blocklist par défaut codée en dur comme pré-filtre dans le moteur de règles. Premier contrôle dans evaluate() — correspondance → Pass immédiat, pas d’évaluation, pas de stockage. |
| C6 | Aucune couche réseau | ✓ Conforme — Manifest vérifié (aapt dump badging). Aucune dépendance HTTP dans les Cargo.toml. L’application fonctionne entièrement en mode avion. |
Quatre permissions de manifest, chacune avec un objectif fonctionnel concret. Aucune permission d’exécution, aucun accès spécial restreint au-delà du listener principal.
android.permission.BIND_NOTIFICATION_LISTENER_SERVICE — Fonction principale. Sans cette permission, l’application ne peut ni lire ni filtrer les notifications. Activée explicitement par l’utilisateur dans les paramètres système.android.permission.RECEIVE_BOOT_COMPLETED — Reconnecte le service listener après un redémarrage de l’appareil. Sans elle, l’application serait aveugle après chaque reboot jusqu’au lancement manuel.android.permission.WAKE_LOCK — Déclenche de manière fiable les minuteurs de snooze depuis le mode Doze (prévu en phase 2).android.permission.POST_NOTIFICATIONS — Affiche nos propres re-notifications (libérées ou en snooze) — à la place d’une fenêtre superposée (voir C2).svelte-i18n avec détection de locale OS via tauri-plugin-os. Langues disponibles : anglais, allemand, français, espagnol, chinois, japonais, coréen.NotificationListenerService relaie les événements via l’API plugin Tauri vers le pipeline Rust.rusqlite (WAL, clés étrangères activées). 5 migrations. Fichier privé à l’application, sans accès externe.notif-listener, rules-engine, notif-store) n’ont aucune dépendance croisée. La communication passe exclusivement par l’hôte Tauri comme médiateur.Notification Guard — Dépôt : git.pronix.org/oiv1Ni3o/notification-guard