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