feat: "state machine"

This commit is contained in:
aro 2022-11-13 23:01:59 +01:00
parent 02c9c910a3
commit 7192bbd7fa
4 changed files with 64 additions and 33 deletions

View file

@ -7,14 +7,18 @@ import androidx.compose.runtime.remember
import androidx.compose.ui.window.Window
import androidx.compose.ui.window.application
import xyz.atnrch.wrench.display.WrenchDisplay
import xyz.atnrch.wrench.scheduler.FileMover
import xyz.atnrch.wrench.scheduler.Watcher
@Composable
@Preview
fun App() {
MaterialTheme {
val fileMover = remember { FileMover() }
WrenchDisplay(onStartButtonClick = fileMover::start)
val watcher = remember { Watcher() }
WrenchDisplay(
onStartButtonClick = watcher::start,
onStopButtonClick = watcher::stop,
onAddButtonClick = {}
)
}
}

View file

@ -1,34 +1,22 @@
package xyz.atnrch.wrench.display
import androidx.compose.foundation.layout.*
import androidx.compose.material.Button
import androidx.compose.material.Text
import androidx.compose.foundation.layout.Box
import androidx.compose.foundation.layout.fillMaxSize
import androidx.compose.runtime.Composable
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.unit.dp
import xyz.atnrch.wrench.display.status.WrenchStatus
@Composable
fun WrenchDisplay(
onStartButtonClick: () -> Unit
onStartButtonClick: () -> Unit,
onStopButtonClick: () -> Unit,
onAddButtonClick: () -> Unit
) {
Box(
contentAlignment = Alignment.Center,
contentAlignment = Alignment.BottomEnd,
modifier = Modifier.fillMaxSize()
) {
Row {
Button(onStartButtonClick) {
Text("Watch")
}
Spacer(Modifier.width(16.dp))
Button({}) {
Text("Stop")
}
Spacer(Modifier.width(16.dp))
Button({}) {
Text("Add...")
}
}
WrenchStatus(onStartButtonClick, onStopButtonClick, onAddButtonClick)
}
}

View file

@ -0,0 +1,40 @@
package xyz.atnrch.wrench.display.status
import androidx.compose.foundation.layout.Row
import androidx.compose.foundation.layout.Spacer
import androidx.compose.foundation.layout.width
import androidx.compose.material.Button
import androidx.compose.material.Text
import androidx.compose.runtime.*
import androidx.compose.ui.Modifier
import androidx.compose.ui.unit.dp
@Composable
fun WrenchStatus(
onStartButtonClick: () -> Unit,
onStopButtonClick: () -> Unit,
onAddButtonClick: () -> Unit
) {
var status by remember { mutableStateOf(false) }
var startStopButtonText by remember { mutableStateOf("Start") }
Row {
Button({
status = if (status) {
onStopButtonClick.invoke()
false
} else {
onStartButtonClick.invoke()
true
}
startStopButtonText = if (status) "Stop" else "Start"
}) {
Text(startStopButtonText)
}
Spacer(Modifier.width(10.dp))
Button(onAddButtonClick) {
Text("Add...")
}
Spacer(Modifier.width(10.dp))
}
}

View file

@ -4,29 +4,28 @@ import kotlinx.coroutines.*
import kotlinx.coroutines.swing.Swing
import java.util.concurrent.TimeUnit
class FileMover {
class Watcher {
companion object {
var WATCHING = false
}
private var coroutineScope = CoroutineScope(Dispatchers.Swing)
private var isActive = false
fun start() {
if(isActive) return
if(WATCHING) return
coroutineScope.launch {
this@FileMover.isActive = true
while (isActive) {
WATCHING = true
while (WATCHING) {
delay(TimeUnit.SECONDS.toMillis(5))
println("Hello world!")
}
}
}
fun pause() {
isActive = false
}
fun stop() {
coroutineScope.cancel()
coroutineScope = CoroutineScope(Dispatchers.Main)
isActive = false
WATCHING = false
}
}