diff --git a/app/src/main/java/com/bintianqi/owndroid/MyViewModel.kt b/app/src/main/java/com/bintianqi/owndroid/MyViewModel.kt index f20e3c5..f82b5cc 100644 --- a/app/src/main/java/com/bintianqi/owndroid/MyViewModel.kt +++ b/app/src/main/java/com/bintianqi/owndroid/MyViewModel.kt @@ -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 diff --git a/app/src/main/java/com/bintianqi/owndroid/dpm/System.kt b/app/src/main/java/com/bintianqi/owndroid/dpm/System.kt index 07b61e6..4f361fd 100644 --- a/app/src/main/java/com/bintianqi/owndroid/dpm/System.kt +++ b/app/src/main/java/com/bintianqi/owndroid/dpm/System.kt @@ -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, onChoosePackage: () -> Unit, lockTaskPackages: StateFlow>, 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, 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()) diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 924b30f..31ff108 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -732,4 +732,5 @@ Activate method ADB command 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. + Clear task (start fresh)