From 665d6e2cb342ecf32bfb002841095b4259e9e58f Mon Sep 17 00:00:00 2001 From: tuxgyver Date: Sun, 25 Oct 2026 21:50:36 +0100 Subject: [PATCH] =?UTF-8?q?feat:=20quatre=20modes=20r=C3=A9seau=20distinct?= =?UTF-8?q?s=20(liste=20noire=20explicite)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Le serveur distingue désormais open / blocklist / allowlist / cut. La liste noire (services bloqués par le DNS) devient un mode à part entière et ne s'applique plus que dans ce mode. DataControl affiche le libellé du nouveau mode sur le tableau de bord, la notification et le journal. Co-Authored-By: Claude Opus 4.8 Claude-Session: https://claude.ai/code/session_01R9CBCVP5oDu2sfoYPisNCQ --- CHANGELOG.md | 4 ++++ README.md | 2 +- .../java/com/jttools/datacontrol/guard/AppGuardService.kt | 1 + .../com/jttools/datacontrol/service/DataMonitorService.kt | 4 +++- .../com/jttools/datacontrol/ui/dashboard/DashboardScreen.kt | 1 + app/src/main/res/values/strings.xml | 1 + version.properties | 4 ++-- 7 files changed, 13 insertions(+), 4 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 7dd53b8..f126e5a 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,9 @@ # Changelog +## v0.9.0 – 2026-10-25 + +- 🛠️ **Modifié** — **Quatre modes réseau distincts** décidés par le serveur, affichés sur le tableau de bord et la notification : *Accès libre* (aucun filtrage), *Liste noire* (tout sauf les services bloqués), *Liste blanche* (rien sauf les domaines autorisés), *Internet coupé*. La liste noire ne s'applique désormais que dans le mode qui lui correspond. + ## v0.8.0 – 2026-10-25 - ✨ **Ajouté** — **Verrouillage parental à distance** : depuis l'espace parents, le parent verrouille le téléphone sur un écran de blocage plein écran que seul un **code à usage unique** (généré par le serveur et dicté à l'enfant) permet de lever. En mode propriétaire, l'écran est épinglé (accueil et récents neutralisés) ; sinon il revient de lui-même si l'enfant tente de le quitter. Le parent peut aussi déverrouiller à distance. diff --git a/README.md b/README.md index cc35c57..d1ff3fc 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,6 @@ # DataControl -🚀 v0.8.0 · 🤖 Android · 🟣 Kotlin · 🎨 Jetpack Compose · 🔒 WireGuard · 🛡️ mode propriétaire · 👨‍👩‍👧 contrôle parental · 🧪 tests · 📄 licence non déclarée +🚀 v0.9.0 · 🤖 Android · 🟣 Kotlin · 🎨 Jetpack Compose · 🔒 WireGuard · 🛡️ mode propriétaire · 👨‍👩‍👧 contrôle parental · 🧪 tests · 📄 licence non déclarée **DataControl** est l'application Android du téléphone de l'enfant. Elle relie le téléphone en permanence, par un tunnel **WireGuard**, au serveur de contrôle parental **familyd** du parent : tout le trafic (Wi-Fi comme données mobiles) passe par ce serveur, qui décide de ce qui passe. Sur le téléphone, elle bloque les applications interdites, compte le temps d'écran et suit la consommation de données mobiles. diff --git a/app/src/main/java/com/jttools/datacontrol/guard/AppGuardService.kt b/app/src/main/java/com/jttools/datacontrol/guard/AppGuardService.kt index b44865c..9df44b7 100644 --- a/app/src/main/java/com/jttools/datacontrol/guard/AppGuardService.kt +++ b/app/src/main/java/com/jttools/datacontrol/guard/AppGuardService.kt @@ -248,6 +248,7 @@ class AppGuardService : AccessibilityService() { return when (snap.serverMode) { "cut" -> "BLOQUÉ (Internet coupé par le serveur) [$net]" to true "allowlist" -> "LIMITÉ (liste blanche du serveur) [$net]" to true + "blocklist" -> "filtré (liste noire du serveur) [$net]" to false else -> "filtré par le serveur (accès libre) [$net]" to false } } diff --git a/app/src/main/java/com/jttools/datacontrol/service/DataMonitorService.kt b/app/src/main/java/com/jttools/datacontrol/service/DataMonitorService.kt index 9abd99c..a246f82 100644 --- a/app/src/main/java/com/jttools/datacontrol/service/DataMonitorService.kt +++ b/app/src/main/java/com/jttools/datacontrol/service/DataMonitorService.kt @@ -166,7 +166,8 @@ class DataMonitorService : LifecycleService() { val dataState = when { !settings.controlEnabled -> if (percent >= WARNING_THRESHOLD) DataState.WARNING else DataState.OK - settings.serverMode != "open" -> DataState.CUT + // « blocklist » laisse tout passer (sauf la liste noire DNS) : traité comme « open », pas comme coupé. + settings.serverMode == "allowlist" || settings.serverMode == "cut" -> DataState.CUT latestTransport == NetworkTransport.WIFI -> DataState.WIFI percent >= WARNING_THRESHOLD -> DataState.WARNING else -> DataState.OK @@ -295,6 +296,7 @@ class DataMonitorService : LifecycleService() { val modeLabel = when (snapshot.serverMode) { "cut" -> getString(R.string.mode_cut) "allowlist" -> getString(R.string.mode_allowlist) + "blocklist" -> getString(R.string.mode_blocklist) else -> getString(R.string.mode_open) } val (emoji, stateLabel, color) = when { diff --git a/app/src/main/java/com/jttools/datacontrol/ui/dashboard/DashboardScreen.kt b/app/src/main/java/com/jttools/datacontrol/ui/dashboard/DashboardScreen.kt index 89150e1..4bf31bb 100644 --- a/app/src/main/java/com/jttools/datacontrol/ui/dashboard/DashboardScreen.kt +++ b/app/src/main/java/com/jttools/datacontrol/ui/dashboard/DashboardScreen.kt @@ -211,6 +211,7 @@ fun DashboardScreen(systemActions: SystemActions) { val modeText = when (snapshot.serverMode) { "cut" -> stringResource(R.string.mode_cut) "allowlist" -> stringResource(R.string.mode_allowlist) + "blocklist" -> stringResource(R.string.mode_blocklist) else -> stringResource(R.string.mode_open) } val tunnelText = when { diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 36cc0c0..a3bf07e 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -127,6 +127,7 @@ Activer le service Accès libre + Liste noire (certains services bloqués) Liste blanche seulement Internet coupé Tunnel diff --git a/version.properties b/version.properties index 9412b5d..3f38107 100644 --- a/version.properties +++ b/version.properties @@ -1,2 +1,2 @@ -versionName=0.8.0 -versionCode=18 +versionName=0.9.0 +versionCode=19