2 Commits
Author SHA1 Message Date
tuxgyver b138a15513 chore(release): v0.7.0 2026-10-25 16:30:09 +01:00
tuxgyverandClaude Opus 4.8 303d2c4cdc feat: déploiement forcé de DataControl (réinstallation même version)
AppDeployer honore le drapeau `force` de l'ordre de déploiement envoyé par
le serveur : la (ré)installation est effectuée même si la version proposée
n'est pas plus récente que celle installée, et les garde-fous anti-rejeu sont
ignorés. Utile pour réparer ou réinstaller DataControl à distance via le tunnel.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01R9CBCVP5oDu2sfoYPisNCQ
2026-10-25 16:28:59 +01:00
4 changed files with 13 additions and 6 deletions

No files matched your search

+4
View File
@@ -1,5 +1,9 @@
# Changelog
## v0.7.0 – 2026-10-25
- ✨ **Ajouté** — **Déploiement forcé** depuis l'espace parents : réinstalle DataControl via le tunnel WireGuard même si la version proposée n'est pas plus récente que celle installée (réparation / réinstallation à distance).
## v0.6.0 – 2026-10-25
- ✨ **Ajouté** — **Faire sonner le téléphone** depuis l'espace parents : une sonnerie d'alarme retentit à plein volume (même si le téléphone est en silencieux), avec vibration et une notification « touchez pour arrêter » ; la sonnerie s'arrête d'elle-même au bout de la durée demandée, ou quand le parent l'arrête.
+1 -1
View File
@@ -1,6 +1,6 @@
# DataControl
🚀 v0.6.0 · 🤖 Android · 🟣 Kotlin · 🎨 Jetpack Compose · 🔒 WireGuard · 🛡️ mode propriétaire · 👨‍👩‍👧 contrôle parental · 🧪 tests · 📄 licence non déclarée
🚀 v0.7.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.
@@ -50,12 +50,15 @@ class AppDeployer @Inject constructor(
suspend fun handle(order: JSONObject, apiBase: String, report: suspend (String, String) -> Unit) =
withContext(Dispatchers.IO) {
val version = order.optString("version")
if (version.isBlank() || !UpdateManager.isNewer(version, BuildConfig.VERSION_NAME)) return@withContext
if (version.isBlank()) return@withContext
// Déploiement forcé (option du parent) : réinstalle même version comprise, en ignorant les garde-fous.
val force = order.optBoolean("force", false)
if (!force && !UpdateManager.isNewer(version, BuildConfig.VERSION_NAME)) return@withContext
val now = SystemClock.elapsedRealtime()
if (version == lastVersion && now - lastAttemptAt < RETRY_MS) return@withContext
if (!force && version == lastVersion && now - lastAttemptAt < RETRY_MS) return@withContext
lastVersion = version
lastAttemptAt = now
AppLog.i("Mise à jour", "Déploiement de DataControl $version demandé par le serveur")
AppLog.i("Mise à jour", "Déploiement de DataControl $version demandé par le serveur" + if (force) " (forcé)" else "")
try {
val file = download(apiBase + order.getString("url"), order.getString("sha256").lowercase(), version)
install(file, version)
+2 -2
View File
@@ -1,2 +1,2 @@
versionName=0.6.0
versionCode=16
versionName=0.7.0
versionCode=17