Merge pull request #214 from nktnet1/lock-task-mode-clear-task-on-start

feat: lock task mode clear task on start
This commit is contained in:
Tanky
2025-12-21 20:50:08 +08:00
committed by GitHub
3 changed files with 36 additions and 6 deletions

View File

@@ -874,7 +874,7 @@ class MyViewModel(application: Application): AndroidViewModel(application) {
getLockTaskPackages()
}
@RequiresApi(28)
fun startLockTaskMode(packageName: String, activity: String): Boolean {
fun startLockTaskMode(packageName: String, activity: String, clearTask: Boolean): Boolean {
if (!DPM.isLockTaskPermitted(packageName)) {
val list = lockTaskPackages.value.map { it.name } + packageName
DPM.setLockTaskPackages(DAR, list.toTypedArray())
@@ -885,7 +885,10 @@ class MyViewModel(application: Application): AndroidViewModel(application) {
Intent().setComponent(ComponentName(packageName, activity))
} else PM.getLaunchIntentForPackage(packageName)
if (intent != null) {
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)
intent.addFlags(
Intent.FLAG_ACTIVITY_NEW_TASK
or (if (clearTask) Intent.FLAG_ACTIVITY_CLEAR_TASK else 0)
)
application.startActivity(intent, options.toBundle())
application.startForegroundService(Intent(application, LockTaskService::class.java))
return true

View File

@@ -31,6 +31,7 @@ import androidx.compose.animation.AnimatedVisibility
import androidx.compose.animation.animateContentSize
import androidx.compose.foundation.background
import androidx.compose.foundation.clickable
import androidx.compose.foundation.interaction.MutableInteractionSource
import androidx.compose.foundation.layout.Arrangement
import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.Row
@@ -1150,7 +1151,7 @@ fun NearbyStreamingPolicyScreen(
fun LockTaskModeScreen(
chosenPackage: Channel<String>, onChoosePackage: () -> Unit,
lockTaskPackages: StateFlow<List<AppInfo>>, getLockTaskPackages: () -> Unit,
setLockTaskPackage: (String, Boolean) -> Unit, startLockTaskMode: (String, String) -> Boolean,
setLockTaskPackage: (String, Boolean) -> Unit, startLockTaskMode: (String, String, Boolean) -> Boolean,
getLockTaskFeatures: () -> Int, setLockTaskFeature: (Int) -> String?, onNavigateUp: () -> Unit
) {
val coroutine = rememberCoroutineScope()
@@ -1205,7 +1206,7 @@ fun LockTaskModeScreen(
@RequiresApi(28)
@Composable
private fun StartLockTaskMode(
startLockTaskMode: (String, String) -> Boolean,
startLockTaskMode: (String, String, Boolean) -> Boolean,
chosenPackage: Channel<String>, onChoosePackage: () -> Unit
) {
val context = LocalContext.current
@@ -1214,6 +1215,8 @@ private fun StartLockTaskMode(
var packageName by rememberSaveable { mutableStateOf("") }
var activity by rememberSaveable { mutableStateOf("") }
var specifyActivity by rememberSaveable { mutableStateOf(false) }
var clearTask by rememberSaveable { mutableStateOf(true) }
LaunchedEffect(Unit) {
packageName = chosenPackage.receive()
}
@@ -1228,7 +1231,30 @@ private fun StartLockTaskMode(
Row(
Modifier
.fillMaxWidth()
.padding(vertical = 4.dp), verticalAlignment = Alignment.CenterVertically
.padding(top = 8.dp),
verticalAlignment = Alignment.CenterVertically
) {
Checkbox(
checked = clearTask,
onCheckedChange = { clearTask = it }
)
Text(
text = stringResource(R.string.lock_task_mode_start_clear_task),
modifier = Modifier
.padding(start = 8.dp)
.clickable(
indication = null,
interactionSource = remember { MutableInteractionSource() }
) {
clearTask = !clearTask
}
)
}
Row(
Modifier
.fillMaxWidth()
.padding(bottom = 4.dp),
verticalAlignment = Alignment.CenterVertically
) {
Checkbox(specifyActivity, {
specifyActivity = it
@@ -1249,7 +1275,7 @@ private fun StartLockTaskMode(
.fillMaxWidth()
.padding(bottom = 5.dp),
onClick = {
val result = startLockTaskMode(packageName, activity)
val result = startLockTaskMode(packageName, activity, clearTask)
if (!result) context.showOperationResultToast(false)
},
enabled = packageName.isNotBlank() && (!specifyActivity || activity.isNotBlank())

View File

@@ -732,4 +732,5 @@
<string name="activate_method">Activate method</string>
<string name="adb_command">ADB command</string>
<string name="owndroid_warning">This app uses Device owner or Profile owner privileges. These privileges are extremely dangerous, please use them with caution. If used improperly, they may result in severe losses. The developers will not be responsible for this.</string>
<string name="lock_task_mode_start_clear_task">Clear task (start fresh)</string>
</resources>