feat: verrouillage parental et désactivation par code du serveur
Le parent verrouille le téléphone à distance sur un écran de blocage plein écran (ParentalLockActivity) que seul un code à usage unique généré par le serveur permet de lever. La désactivation du contrôle (couper la protection, dissocier, quitter le mode propriétaire, retirer l'anti-désinstallation) exige désormais, sur un téléphone associé, ce code du serveur au lieu du mot de passe local : l'enfant ne peut plus rien désactiver sans l'accord du parent. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01R9CBCVP5oDu2sfoYPisNCQ
This commit is contained in:
1 parent
b138a15513
commit
c66302a2bd
19 files changed
+436
-19
No files matched your search
@@ -6,6 +6,7 @@ import android.media.AudioManager
|
||||
import android.os.SystemClock
|
||||
import com.jttools.datacontrol.admin.AdminController
|
||||
import com.jttools.datacontrol.data.SettingsRepository
|
||||
import com.jttools.datacontrol.guard.ParentalLockActivity
|
||||
import com.jttools.datacontrol.log.AppLog
|
||||
import dagger.hilt.android.qualifiers.ApplicationContext
|
||||
import kotlinx.coroutines.CoroutineScope
|
||||
@@ -81,8 +82,10 @@ class RemoteControl @Inject constructor(
|
||||
}
|
||||
|
||||
/** Renvoie (statut, détail) pour l'audit : "done" ou "failed". */
|
||||
private fun handle(cmd: JSONObject): Pair<String, String> = when (cmd.optString("type")) {
|
||||
private suspend fun handle(cmd: JSONObject): Pair<String, String> = when (cmd.optString("type")) {
|
||||
"lock" -> lock()
|
||||
"plock" -> parentalLock(true)
|
||||
"punlock" -> parentalLock(false)
|
||||
"mute" -> setMuted(true)
|
||||
"unmute" -> setMuted(false)
|
||||
"screen_start" -> {
|
||||
@@ -104,6 +107,22 @@ class RemoteControl @Inject constructor(
|
||||
else -> "failed" to "commande inconnue"
|
||||
}
|
||||
|
||||
/**
|
||||
* Verrouillage parental plein écran : affiche [ParentalLockActivity], que seul un code du serveur
|
||||
* (dicté par le parent) peut lever. [lock] = false lève le verrou à distance.
|
||||
*/
|
||||
private suspend fun parentalLock(lock: Boolean): Pair<String, String> {
|
||||
settings.setParentalLocked(lock)
|
||||
return if (lock) {
|
||||
runCatching { context.startActivity(ParentalLockActivity.intent(context)) }
|
||||
AppLog.w("Commande", "Verrouillage parental activé (code du serveur requis pour déverrouiller)")
|
||||
"done" to "téléphone verrouillé"
|
||||
} else {
|
||||
AppLog.i("Commande", "Verrouillage parental levé par le parent")
|
||||
"done" to "téléphone déverrouillé"
|
||||
}
|
||||
}
|
||||
|
||||
private fun lock(): Pair<String, String> {
|
||||
val dpm = context.getSystemService(DevicePolicyManager::class.java)
|
||||
if (!AdminController.isActive(context)) {
|
||||
|
||||
Reference in new issue
Block a user