Notification Guard

Λογότυπο Notification Guard

Το Notification Guard φιλτράρει τις εισερχόμενες ειδοποιήσεις του Android βάσει προκαθορισμένων προφίλ ησυχίας (νύχτα, μεσημεριανό διάλειμμα, ώρες εργασίας, σαββατοκύριακο) και προαιρετικών κανόνων ανά εφαρμογή. Οι ευαίσθητες εφαρμογές περνούν πάντα μέσω ενός φίλτρου απορρήτου.

ΙδιότηταΤιμή
ΠλατφόρμαAndroid 7+ (API 24)
StackTauri v2 · Rust · Svelte 5
Γλώσσες7
Repositorygit.pronix.org/oiv1Ni3o/notification-guard
  flowchart LR
    A[Ειδοποιήσεις app] --> B[Τοπική σύλληψη<br/>μόνο στη συσκευή]
    B --> C[(Κρυπτογραφημένη τοπική αποθήκευση)]
    C --> D[Προβολή χρήστη]
    D --> E[Χειροκίνητη εξαγωγή]
    B -.->|ποτέ| F[("Cloud / Server")]
    style F stroke-dasharray: 5 5,stroke:#c00,color:#c00

Τι κάνει η εφαρμογή

  • 🕒 Προφίλ ησυχίας — Τέσσερα ενσωματωμένα χρονικά προφίλ. Οι κατηγορίες εφαρμογών ομαδοποιούνται σε προφίλ — δεν χρειάζεται κανόνας ανά εφαρμογή.
  • 📦 Κατάλογος δημοφιλών εφαρμογών — 77 επιμελημένες προεπιλογές σε 5 κατηγορίες (Κοινωνικά, Παιχνίδια, Ειδήσεις, Αγορές, Streaming). Φιλτράρισμα κατά εγκατεστημένες εφαρμογές.
  • 🧠 Μηχανή κανόνων — Αξιολόγηση σε Rust σε λιγότερο από 10 ms ανά ειδοποίηση. Οι κανόνες χρήστη υπερισχύουν των προφίλ. Εξαιρέσεις ανά κανόνα (επαφή, λέξη-κλειδί).
  • 🗑️ Καθαρισμός TTL — Οι μπλοκαρισμένες ειδοποιήσεις διαγράφονται αυτόματα μετά από ρυθμιζόμενη διατήρηση (προεπιλογή 24 ώρες). «Διαγραφή όλων» με ένα άγγιγμα.

Απόρρητο

Αρχιτεκτονική αποκλειστικά τοπική. Χωρίς διακομιστή, χωρίς λογαριασμό, χωρίς παρακολούθηση, χωρίς analytics. Το Android manifest δεν δηλώνει άδεια διαδικτύου.

Τι μπορείς να περιμένεις

  • Πλήρως τοπικό — όλα τα δεδομένα παραμένουν στη συσκευή
  • Χωρίς διακομιστές, χωρίς cloud, χωρίς SDK τρίτων
  • Χωρίς πρόσβαση στο διαδίκτυο (το manifest δεν περιέχει android.permission.INTERNET)
  • Χωρίς αναφορές κατάρρευσης, χωρίς analytics, χωρίς τηλεμετρία
  • Βάση δεδομένων SQLite στον ιδιωτικό χώρο αποθήκευσης της εφαρμογής
  • Αυτόματος καθαρισμός μπλοκαρισμένων ειδοποιήσεων μέσω TTL
  • Χειροκίνητη «Διαγραφή όλων» ανά πάσα στιγμή

Φίλτρο απορρήτου — οι ευαίσθητες εφαρμογές δεν μπλοκάρονται ποτέ

Το NotificationListenerService βλέπει αναπόφευκτα κάθε ειδοποίηση. Ένα προ-φίλτρο διαχωρίζει τις ευαίσθητες κατηγορίες εφαρμογών ΠΡΙΝ τις δει η μηχανή κανόνων — αυτές οι ειδοποιήσεις δεν εισέρχονται ποτέ στον αποθηκευτικό χώρο και το περιεχόμενό τους δεν διατηρείται ποτέ.

Προστατευμένες κατηγορίες: τραπεζικά (DKB, PayPal, ταμιευτήρια, …), 2FA/authenticator, ασφαλιστικά ταμεία (TK, AOK, Barmer), δημόσιες υπηρεσίες (ομοσπονδιακές υπηρεσίες, Elster).

Συμμόρφωση με Google Play

Έξι αυστηροί αρχιτεκτονικοί περιορισμοί που προέρχονται από τις τρέχουσες πολιτικές του Google Play (Data Safety, Permissions Declaration, Notification Listener). Ο καθένας παρακολουθείται ως issue στο Gitea.

IDΑπαίτησηΚατάσταση & υλοποίηση
C1Σαφής γνωστοποίηση και συγκατάθεση✓ Πληρούται — Οδηγός 4 βημάτων με γνωστοποίηση, επιλογή προφίλ, επιλογή κατηγοριών, ενεργοποίηση αδειών. Σαφείς σημειώσεις: τοπικά, χωρίς διακομιστή, χωρίς δίκτυο.
C2Κανένα SYSTEM_ALERT_WINDOW✓ Πληρούται — Το manifest δεν δηλώνει την άδεια. Οι επαναειδοποιήσεις περνούν μέσω του NotificationManager.
C3TTL διατήρησης δεδομένων✓ Πληρούται — Ρυθμιζόμενη διατήρηση (προεπιλογή 24 ώρες). Περιοδική εργασία καθαρισμού (Tokio interval, 60 λεπτά). Κουμπί «Διαγραφή όλων» με διάλογο επιβεβαίωσης.
C4Contact Picker αντί για READ_CONTACTS○ Προγραμματισμένο — Θα προστεθεί ως προαιρετικό opt-in module με τον Android Contact Picker — όχι READ_CONTACTS.
C5Φίλτρο απορρήτου (blocklist ευαίσθητων κατηγοριών)✓ Πληρούται — Hardcoded προεπιλεγμένη blocklist ως προ-φίλτρο μέσα στη μηχανή κανόνων. Πρώτος έλεγχος στο evaluate() — ταίριασμα → άμεσο Pass, χωρίς αξιολόγηση, χωρίς αποθήκευση.
C6Χωρίς επίπεδο δικτύου✓ Πληρούται — Manifest επαληθευμένο (aapt dump badging). Καμία εξάρτηση HTTP client σε κανένα Cargo.toml. Η εφαρμογή τρέχει εντελώς σε λειτουργία πτήσης.

Δηλωμένες άδειες

Τέσσερις άδειες manifest, η καθεμία με συγκεκριμένο λειτουργικό σκοπό. Χωρίς runtime permissions, χωρίς restricted special access πέραν του βασικού listener.

  • android.permission.BIND_NOTIFICATION_LISTENER_SERVICE — Κεντρική λειτουργία. Χωρίς αυτή την άδεια η εφαρμογή δεν μπορεί να διαβάσει ή να φιλτράρει ειδοποιήσεις. Ενεργοποιείται ρητά από τον χρήστη μέσω των ρυθμίσεων συστήματος.
  • android.permission.RECEIVE_BOOT_COMPLETED — Επανασυνδέει την υπηρεσία listener μετά από επανεκκίνηση της συσκευής. Χωρίς αυτή, η εφαρμογή θα ήταν τυφλή μετά από κάθε επανεκκίνηση μέχρι τη χειροκίνητη εκκίνηση.
  • android.permission.WAKE_LOCK — Πυροδοτεί αξιόπιστα τα snooze timers από τη λειτουργία Doze (προγραμματισμένο για τη φάση 2).
  • android.permission.POST_NOTIFICATIONS — Εμφανίζει τις δικές μας επαναειδοποιήσεις (released ή snoozed) — αντί για overlay παράθυρο (βλ. C2).

Τεχνολογία

  • Frontend — Svelte 5 (Runes) μέσα στο Tauri WebView, responsive από 360 px, διάταξη bottom-tab σε κινητά.
  • Διεθνοποίησηsvelte-i18n με ανίχνευση locale OS μέσω tauri-plugin-os. Διαθέσιμες γλώσσες: Αγγλικά, Γερμανικά, Γαλλικά, Ισπανικά, Κινεζικά, Ιαπωνικά, Κορεάτικα.
  • Backend — Rust + Tauri v2 host. Τρία δικά μας plugins (Listener, Rules Engine, Store) συν τα επίσημα Notification και OS plugins.
  • Mobile layer — Android Kotlin: το NotificationListenerService γεφυρώνει συμβάντα μέσω του Tauri plugin API προς το Rust pipeline.
  • Βάση δεδομένων — SQLite μέσω rusqlite (WAL, foreign keys on). 5 migrations. Αρχείο ιδιωτικό για την εφαρμογή, χωρίς εξωτερική πρόσβαση.
  • Build & signing — Universal APK και AAB (απαίτηση AAB του Google Play). Dev builds υπογεγραμμένα με τοπικό keystore. APK αυτή τη στιγμή ~14 MB.

Αρχιτεκτονικά χαρακτηριστικά

  • Απομόνωση plugins — Τα τρία δικά μας plugins (notif-listener, rules-engine, notif-store) δεν έχουν cross-dependencies. Η επικοινωνία γίνεται αποκλειστικά μέσω του Tauri host ως μεσολαβητή.
  • Φίλτρο απορρήτου στην είσοδο του pipeline — Οι ευαίσθητες εφαρμογές φιλτράρονται πριν τις δει η μηχανή κανόνων — το περιεχόμενο των ευαίσθητων ειδοποιήσεων δεν καταγράφεται ή αποθηκεύεται ποτέ.
  • Προφίλ vs. κανόνες — UX για αρχάριους μέσω προκαθορισμένων προφίλ + κατηγοριών εφαρμογών· UX για προχωρημένους μέσω ατομικών κανόνων σε προβολή «Για προχωρημένους». Και τα δύο μονοπάτια χρησιμοποιούν την ίδια μηχανή.
  • Mobile-ειδικά — Προσαρμοσμένα Android modules plugin με συγχώνευση AndroidManifest. Το onboarding αδειών χειρίζεται το «restricted settings» lockout του Android 13 για sideload APK.

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