release: v0.1.3 — correctif VPN, alerte pare-feu inactif, contrôle parental (FamilyControl), anti-désinstallation

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
tuxgyverandClaude Sonnet 5 committed 2026-09-20 17:37:40 +02:00
1 parent c63cc45c57
commit 82d47fcd72
25 files changed
+996 -16

No files matched your search

@@ -34,6 +34,54 @@ class SystemActions(private val activity: ComponentActivity) {
ActivityResultContracts.RequestPermission()
) { granted -> onNotificationResult?.invoke(granted) }
private var onLocationResult: ((Boolean) -> Unit)? = null
private var onBackgroundLocationResult: ((Boolean) -> Unit)? = null
private var onAdminResult: ((Boolean) -> Unit)? = null
private val locationLauncher: ActivityResultLauncher<Array<String>> = activity.registerForActivityResult(
ActivityResultContracts.RequestMultiplePermissions()
) { granted -> onLocationResult?.invoke(granted.values.any { it }) }
private val backgroundLocationLauncher: ActivityResultLauncher<String> = activity.registerForActivityResult(
ActivityResultContracts.RequestPermission()
) { granted -> onBackgroundLocationResult?.invoke(granted) }
private val adminLauncher: ActivityResultLauncher<Intent> = activity.registerForActivityResult(
ActivityResultContracts.StartActivityForResult()
) { result -> onAdminResult?.invoke(result.resultCode == android.app.Activity.RESULT_OK) }
fun hasLocationPermission(): Boolean = ContextCompat.checkSelfPermission(
activity, android.Manifest.permission.ACCESS_FINE_LOCATION
) == android.content.pm.PackageManager.PERMISSION_GRANTED
fun hasBackgroundLocationPermission(): Boolean =
Build.VERSION.SDK_INT < Build.VERSION_CODES.Q || ContextCompat.checkSelfPermission(
activity, android.Manifest.permission.ACCESS_BACKGROUND_LOCATION
) == android.content.pm.PackageManager.PERMISSION_GRANTED
fun requestLocationPermission(onResult: (Boolean) -> Unit) {
onLocationResult = onResult
locationLauncher.launch(
arrayOf(android.Manifest.permission.ACCESS_FINE_LOCATION, android.Manifest.permission.ACCESS_COARSE_LOCATION)
)
}
/** À demander APRÈS la position au premier plan (exigence Android 11+). */
fun requestBackgroundLocationPermission(onResult: (Boolean) -> Unit) {
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.Q) { onResult(true); return }
onBackgroundLocationResult = onResult
backgroundLocationLauncher.launch(android.Manifest.permission.ACCESS_BACKGROUND_LOCATION)
}
fun isAdminActive(): Boolean = com.jttools.datacontrol.admin.AdminController.isActive(activity)
fun requestAdmin(onResult: (Boolean) -> Unit) {
onAdminResult = onResult
adminLauncher.launch(com.jttools.datacontrol.admin.AdminController.requestIntent(activity))
}
fun deactivateAdmin() = com.jttools.datacontrol.admin.AdminController.deactivate(activity)
fun isVpnPrepared(): Boolean = FirewallVpnService.isPrepared(activity)
fun requestVpnPermission(onResult: (Boolean) -> Unit) {