- Firebase et le pare-feu local (trou noir, liste blanche par application, coupure cyclique locale) sont retirés - Client WireGuard officiel (GoBackend) : tout le trafic passe par le serveur familyd, qui filtre - Appairage par code ou lien familyd:// ; clé privée WireGuard et jeton chiffrés par l'Android Keystore - Remontées par le tunnel : état, temps d'écran, applications installées, évènements (file persistante) - Mode propriétaire (Device Owner) : VPN toujours actif avec blocage hors VPN, réglages verrouillés, garde-fou si le serveur ne répond plus pendant 15 min - Plan de la refonte : docs/PLAN-wireguard.md Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01R9CBCVP5oDu2sfoYPisNCQ
43 lines
1.8 KiB
Kotlin
43 lines
1.8 KiB
Kotlin
package com.jttools.datacontrol
|
|
|
|
import android.app.Application
|
|
import androidx.work.ExistingPeriodicWorkPolicy
|
|
import androidx.work.PeriodicWorkRequestBuilder
|
|
import androidx.work.WorkManager
|
|
import com.jttools.datacontrol.data.SettingsRepository
|
|
import com.jttools.datacontrol.service.DataMonitorRestartWorker
|
|
import dagger.hilt.android.HiltAndroidApp
|
|
import kotlinx.coroutines.CoroutineScope
|
|
import kotlinx.coroutines.Dispatchers
|
|
import kotlinx.coroutines.launch
|
|
import java.util.concurrent.TimeUnit
|
|
import javax.inject.Inject
|
|
|
|
@HiltAndroidApp
|
|
class DataControlApp : Application() {
|
|
|
|
@Inject lateinit var settingsRepository: SettingsRepository
|
|
|
|
override fun onCreate() {
|
|
super.onCreate()
|
|
com.jttools.datacontrol.log.AppLog.init(this)
|
|
CoroutineScope(Dispatchers.IO).launch {
|
|
settingsRepository.resetPasswordOnce()
|
|
settingsRepository.migrateToV02()
|
|
}
|
|
// VPN « toujours actif » (réglage Android ou mode propriétaire) : le système démarre le service
|
|
// VPN de la bibliothèque ; on relance alors la surveillance, qui monte le tunnel.
|
|
com.wireguard.android.backend.GoBackend.setAlwaysOnCallback {
|
|
com.jttools.datacontrol.service.DataMonitorService.start(this)
|
|
}
|
|
// Filet de sécurité : relance périodiquement DataMonitorService s'il a été tué en arrière-plan.
|
|
// enqueueUniquePeriodicWork + KEEP : sans effet si déjà planifié, donc sûr à appeler à chaque démarrage.
|
|
val request = PeriodicWorkRequestBuilder<DataMonitorRestartWorker>(15, TimeUnit.MINUTES).build()
|
|
WorkManager.getInstance(this).enqueueUniquePeriodicWork(
|
|
DataMonitorRestartWorker.WORK_NAME,
|
|
ExistingPeriodicWorkPolicy.KEEP,
|
|
request
|
|
)
|
|
}
|
|
}
|