diff --git a/app/src/main/java/io/timelimit/android/data/model/ConfigurationItem.kt b/app/src/main/java/io/timelimit/android/data/model/ConfigurationItem.kt index 15d8336..b60163e 100644 --- a/app/src/main/java/io/timelimit/android/data/model/ConfigurationItem.kt +++ b/app/src/main/java/io/timelimit/android/data/model/ConfigurationItem.kt @@ -231,4 +231,5 @@ object ExperimentalFlags { const val REQUIRE_SYNC_FOR_PARENT_LOGIN = 2048L const val BLOCK_SPLIT_SCREEN = 4096L const val HIDE_MANIPULATION_WARNING = 8192L + const val ENABLE_SOFT_BLOCKING = 16384L } \ No newline at end of file diff --git a/app/src/main/java/io/timelimit/android/logic/BackgroundTaskLogic.kt b/app/src/main/java/io/timelimit/android/logic/BackgroundTaskLogic.kt index a0640e3..2d7a290 100644 --- a/app/src/main/java/io/timelimit/android/logic/BackgroundTaskLogic.kt +++ b/app/src/main/java/io/timelimit/android/logic/BackgroundTaskLogic.kt @@ -125,8 +125,12 @@ class BackgroundTaskLogic(val appLogic: AppLogic) { private val isChromeOs = appLogic.context.packageManager.hasSystemFeature(PackageManager.FEATURE_PC) - private suspend fun openLockscreen(blockedAppPackageName: String, blockedAppActivityName: String?) { - appLogic.platformIntegration.setShowBlockingOverlay(true, "$blockedAppPackageName:${blockedAppActivityName?.removePrefix(blockedAppPackageName)}") + private suspend fun openLockscreen(blockedAppPackageName: String, blockedAppActivityName: String?, enableSoftBlocking: Boolean) { + if (enableSoftBlocking) { + appLogic.platformIntegration.setShowBlockingOverlay(false) + } else { + appLogic.platformIntegration.setShowBlockingOverlay(true, "$blockedAppPackageName:${blockedAppActivityName?.removePrefix(blockedAppPackageName)}") + } if (isChromeOs) { LockActivity.currentInstances.forEach { it.finish() } @@ -139,7 +143,7 @@ class BackgroundTaskLogic(val appLogic: AppLogic) { } } - if (appLogic.platformIntegration.isAccessibilityServiceEnabled()) { + if (appLogic.platformIntegration.isAccessibilityServiceEnabled() && !enableSoftBlocking) { if (blockedAppPackageName != appLogic.platformIntegration.getLauncherAppPackageName()) { AccessibilityService.instance?.showHomescreen() delay(100) @@ -602,7 +606,11 @@ class BackgroundTaskLogic(val appLogic: AppLogic) { // handle blocking if (blockedForegroundApp != null) { - openLockscreen(blockedForegroundApp.packageName, blockedForegroundApp.activityName) + openLockscreen( + blockedAppPackageName = blockedForegroundApp.packageName, + blockedAppActivityName = blockedForegroundApp.activityName, + enableSoftBlocking = deviceRelatedData.experimentalFlags and ExperimentalFlags.ENABLE_SOFT_BLOCKING == ExperimentalFlags.ENABLE_SOFT_BLOCKING + ) } else { appLogic.platformIntegration.setShowBlockingOverlay(false) } diff --git a/app/src/main/java/io/timelimit/android/ui/diagnose/DiagnoseExperimentalFlagFragment.kt b/app/src/main/java/io/timelimit/android/ui/diagnose/DiagnoseExperimentalFlagFragment.kt index 57c1ddd..16a63d8 100644 --- a/app/src/main/java/io/timelimit/android/ui/diagnose/DiagnoseExperimentalFlagFragment.kt +++ b/app/src/main/java/io/timelimit/android/ui/diagnose/DiagnoseExperimentalFlagFragment.kt @@ -197,6 +197,12 @@ data class DiagnoseExperimentalFlagItem( enableFlags = ExperimentalFlags.HIDE_MANIPULATION_WARNING, disableFlags = ExperimentalFlags.HIDE_MANIPULATION_WARNING, enable = { true } + ), + DiagnoseExperimentalFlagItem( + label = R.string.diagnose_exf_esb, + enableFlags = ExperimentalFlags.ENABLE_SOFT_BLOCKING, + disableFlags = ExperimentalFlags.ENABLE_SOFT_BLOCKING, + enable = { true } ) ) } diff --git a/app/src/main/res/values-de/strings-diagnose.xml b/app/src/main/res/values-de/strings-diagnose.xml index c0a15a9..5d3abc1 100644 --- a/app/src/main/res/values-de/strings-diagnose.xml +++ b/app/src/main/res/values-de/strings-diagnose.xml @@ -67,6 +67,7 @@ Anmeldung von Eltern mit Anmeldeverhinderungskategorie nur nach einer Synchronisation erlauben Splitscreen automatisch beenden per Bedienhilfe Manipulationswarnung in der Kategorienliste ausblenden + Overlay und Home-Button nicht zum Sperren verwenden Hintergrundaufgabenschleifenfehler diff --git a/app/src/main/res/values/strings-diagnose.xml b/app/src/main/res/values/strings-diagnose.xml index 7646b4b..8674b30 100644 --- a/app/src/main/res/values/strings-diagnose.xml +++ b/app/src/main/res/values/strings-diagnose.xml @@ -67,6 +67,7 @@ Only allow login of parent users with limit login category after syncing Automatically disable splitscreen using the accessibility service Hide manipulation warning in the category list + Do not use a overlay or the home button for blocking Background task loop exception