- 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
32 lines
1.4 KiB
Kotlin
32 lines
1.4 KiB
Kotlin
package com.jttools.datacontrol.admin
|
|
|
|
import android.app.admin.DevicePolicyManager
|
|
import android.content.ComponentName
|
|
import android.content.Context
|
|
import android.content.Intent
|
|
|
|
/** Protection anti-désinstallation : tant que DataControl est administrateur de l'appareil, Android refuse de le désinstaller. */
|
|
object AdminController {
|
|
fun component(context: Context) = ComponentName(context, AppDeviceAdminReceiver::class.java)
|
|
|
|
fun isActive(context: Context): Boolean =
|
|
context.getSystemService(DevicePolicyManager::class.java).isAdminActive(component(context))
|
|
|
|
fun requestIntent(context: Context): Intent =
|
|
Intent(DevicePolicyManager.ACTION_ADD_DEVICE_ADMIN)
|
|
.putExtra(DevicePolicyManager.EXTRA_DEVICE_ADMIN, component(context))
|
|
.putExtra(
|
|
DevicePolicyManager.EXTRA_ADD_EXPLANATION,
|
|
"Empêche la désinstallation de DataControl sans mot de passe."
|
|
)
|
|
|
|
/** Vrai si DataControl est « propriétaire de l'appareil » (provisionné par adb, voir le plan, phase 4). */
|
|
fun isDeviceOwner(context: Context): Boolean =
|
|
context.getSystemService(DevicePolicyManager::class.java).isDeviceOwnerApp(context.packageName)
|
|
|
|
/** À n'appeler qu'après vérification du mot de passe. */
|
|
fun deactivate(context: Context) {
|
|
context.getSystemService(DevicePolicyManager::class.java).removeActiveAdmin(component(context))
|
|
}
|
|
}
|