feat: add clear task (start fresh) option for lock task mode

This commit is contained in:
Tam Nguyen
2025-12-19 10:12:13 +11:00
parent dad57a8846
commit 68cb5395c0
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())