Возможность запуска бесконечной задачи
This commit is contained in:
@@ -1,7 +1,9 @@
|
||||
package com.github.nullptroma.wallenc.presentation.screens.main.screens.tasks
|
||||
|
||||
import androidx.compose.foundation.clickable
|
||||
import androidx.compose.foundation.layout.Arrangement
|
||||
import androidx.compose.foundation.layout.Column
|
||||
import androidx.compose.foundation.layout.Row
|
||||
import androidx.compose.foundation.layout.fillMaxSize
|
||||
import androidx.compose.foundation.layout.fillMaxWidth
|
||||
import androidx.compose.foundation.layout.padding
|
||||
@@ -10,6 +12,7 @@ import androidx.compose.foundation.lazy.LazyColumn
|
||||
import androidx.compose.foundation.lazy.items
|
||||
import androidx.compose.material3.AlertDialog
|
||||
import androidx.compose.material3.Button
|
||||
import androidx.compose.material3.Checkbox
|
||||
import androidx.compose.material3.ExperimentalMaterial3Api
|
||||
import androidx.compose.material3.LinearProgressIndicator
|
||||
import androidx.compose.material3.MaterialTheme
|
||||
@@ -23,6 +26,7 @@ import androidx.compose.runtime.mutableFloatStateOf
|
||||
import androidx.compose.runtime.mutableStateOf
|
||||
import androidx.compose.runtime.remember
|
||||
import androidx.compose.runtime.setValue
|
||||
import androidx.compose.ui.Alignment
|
||||
import androidx.compose.ui.Modifier
|
||||
import androidx.compose.ui.res.stringResource
|
||||
import androidx.compose.ui.unit.dp
|
||||
@@ -45,6 +49,7 @@ fun TaskPipelineScreen(
|
||||
val runningTaskIds = pipeline.runningTaskIds
|
||||
var showTestDialog by remember { mutableStateOf(false) }
|
||||
var testDurationSec by remember { mutableFloatStateOf(10f) }
|
||||
var testInfinity by remember { mutableStateOf(false) }
|
||||
|
||||
Scaffold(
|
||||
modifier = modifier,
|
||||
@@ -128,12 +133,30 @@ fun TaskPipelineScreen(
|
||||
onValueChange = { testDurationSec = it },
|
||||
valueRange = 0f..60f,
|
||||
)
|
||||
Row(
|
||||
verticalAlignment = Alignment.CenterVertically,
|
||||
modifier = Modifier.fillMaxWidth(),
|
||||
) {
|
||||
Checkbox(
|
||||
checked = testInfinity,
|
||||
onCheckedChange = { testInfinity = it },
|
||||
)
|
||||
Text(
|
||||
stringResource(R.string.task_pipeline_test_dialog_infinity),
|
||||
modifier = Modifier
|
||||
.clickable { testInfinity = !testInfinity }
|
||||
.weight(1f),
|
||||
)
|
||||
}
|
||||
}
|
||||
},
|
||||
confirmButton = {
|
||||
Button(
|
||||
onClick = {
|
||||
viewModel.startTestTask(testDurationSec.toInt())
|
||||
viewModel.startTestTask(
|
||||
testDurationSec.toInt(),
|
||||
testInfinity,
|
||||
)
|
||||
showTestDialog = false
|
||||
},
|
||||
) {
|
||||
|
||||
@@ -14,10 +14,13 @@ class TaskPipelineViewModel @Inject constructor(
|
||||
val orchestrator: ITaskOrchestrator,
|
||||
) : ViewModel() {
|
||||
|
||||
fun startTestTask(durationSec: Int) {
|
||||
fun startTestTask(durationSec: Int, infinityIndeterminateProgress: Boolean) {
|
||||
val safeDurationSec = durationSec.coerceIn(0, 60)
|
||||
val title =
|
||||
if (infinityIndeterminateProgress) "Test task (${safeDurationSec}s, ∞)"
|
||||
else "Test task (${safeDurationSec}s)"
|
||||
orchestrator.enqueue(
|
||||
title = "Test task (${safeDurationSec}s)",
|
||||
title = title,
|
||||
dispatcher = Dispatchers.Default,
|
||||
work = { ctx ->
|
||||
val steps = if (safeDurationSec == 0) 1 else safeDurationSec * 10
|
||||
@@ -26,7 +29,7 @@ class TaskPipelineViewModel @Inject constructor(
|
||||
val fraction = step.toFloat() / steps.toFloat()
|
||||
val elapsedMs = (fraction * safeDurationSec * 1000).toInt()
|
||||
ctx.reportProgress(
|
||||
fraction = fraction,
|
||||
fraction = if (infinityIndeterminateProgress) null else fraction,
|
||||
label = "Elapsed: ${elapsedMs / 1000}s / ${safeDurationSec}s",
|
||||
)
|
||||
if (step < steps) delay(100)
|
||||
|
||||
@@ -25,6 +25,7 @@
|
||||
<string name="task_pipeline_test_dialog_duration">Duration: %1$d s</string>
|
||||
<string name="task_pipeline_test_dialog_start">Start</string>
|
||||
<string name="task_pipeline_test_dialog_cancel">Cancel</string>
|
||||
<string name="task_pipeline_test_dialog_infinity">Infinity (indeterminate progress)</string>
|
||||
<string name="task_state_queued">Queued</string>
|
||||
<string name="task_state_running">Running</string>
|
||||
<string name="task_state_completed">Completed</string>
|
||||
|
||||
Reference in New Issue
Block a user