From 8b0c11fbec3c8fd4d3fa07af5a55a40ab306bf83 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sebastian=20K=C3=BCrten?= <sebastian@mobanisto.de> Date: Fri, 29 Oct 2021 12:54:53 +0200 Subject: [PATCH] When running multiple apps in parallel, make sure exiting still works --- .../kotlin/org/briarproject/briar/desktop/Main.kt | 5 ++++- .../org/briarproject/briar/desktop/ui/BriarUi.kt | 7 +++---- .../briar/desktop/RunWithTemporaryAccount.kt | 5 ++++- .../org/briarproject/briar/desktop/TestUtils.kt | 3 +-- .../briar/desktop/TestWithTwoTemporaryAccounts.kt | 11 ++++++++++- 5 files changed, 22 insertions(+), 9 deletions(-) diff --git a/src/main/kotlin/org/briarproject/briar/desktop/Main.kt b/src/main/kotlin/org/briarproject/briar/desktop/Main.kt index 5b1f9a998c..8ce0d7b4ea 100644 --- a/src/main/kotlin/org/briarproject/briar/desktop/Main.kt +++ b/src/main/kotlin/org/briarproject/briar/desktop/Main.kt @@ -65,7 +65,10 @@ private class Main : CliktCommand( BriarCoreEagerSingletons.Helper.injectEagerSingletons(app) application { - app.getBriarUi().start(this) + app.getBriarUi().start { + app.getBriarUi().stop() + exitApplication() + } } } diff --git a/src/main/kotlin/org/briarproject/briar/desktop/ui/BriarUi.kt b/src/main/kotlin/org/briarproject/briar/desktop/ui/BriarUi.kt index b2bbafbf3c..70ffee14b4 100644 --- a/src/main/kotlin/org/briarproject/briar/desktop/ui/BriarUi.kt +++ b/src/main/kotlin/org/briarproject/briar/desktop/ui/BriarUi.kt @@ -5,7 +5,6 @@ import androidx.compose.runtime.getValue import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.remember import androidx.compose.runtime.setValue -import androidx.compose.ui.window.ApplicationScope import androidx.compose.ui.window.Window import org.briarproject.bramble.api.account.AccountManager import org.briarproject.bramble.api.lifecycle.LifecycleManager @@ -36,7 +35,7 @@ enum class Screen { interface BriarUi { @Composable - fun start(applicationScope: ApplicationScope) + fun start(onClose: () -> Unit) fun stop() } @@ -70,7 +69,7 @@ constructor( } @Composable - override fun start(applicationScope: ApplicationScope) { + override fun start(onClose: () -> Unit) { val (isDark, setDark) = remember { mutableStateOf(true) } val title = i18n("main.title") var screenState by remember { @@ -89,7 +88,7 @@ constructor( } Window( title = title, - onCloseRequest = { stop(); applicationScope.exitApplication() }, + onCloseRequest = onClose, ) { window.minimumSize = Dimension(800, 600) BriarTheme(isDarkTheme = isDark) { diff --git a/src/test/kotlin/org/briarproject/briar/desktop/RunWithTemporaryAccount.kt b/src/test/kotlin/org/briarproject/briar/desktop/RunWithTemporaryAccount.kt index dd669a4e72..16ec7364f8 100644 --- a/src/test/kotlin/org/briarproject/briar/desktop/RunWithTemporaryAccount.kt +++ b/src/test/kotlin/org/briarproject/briar/desktop/RunWithTemporaryAccount.kt @@ -54,7 +54,10 @@ internal class RunWithTemporaryAccount(val customization: BriarDesktopTestApp.() Thread.sleep(1000) application { - app.getBriarUi().start(this) + app.getBriarUi().start { + app.getBriarUi().stop() + exitApplication() + } } } } diff --git a/src/test/kotlin/org/briarproject/briar/desktop/TestUtils.kt b/src/test/kotlin/org/briarproject/briar/desktop/TestUtils.kt index 0bc9746ca8..c241e8e7a0 100644 --- a/src/test/kotlin/org/briarproject/briar/desktop/TestUtils.kt +++ b/src/test/kotlin/org/briarproject/briar/desktop/TestUtils.kt @@ -18,5 +18,4 @@ object TestUtils { FileUtils.setRWX(dataDir) return dataDir } - -} \ No newline at end of file +} diff --git a/src/test/kotlin/org/briarproject/briar/desktop/TestWithTwoTemporaryAccounts.kt b/src/test/kotlin/org/briarproject/briar/desktop/TestWithTwoTemporaryAccounts.kt index 5f852e12b5..2252d9e086 100644 --- a/src/test/kotlin/org/briarproject/briar/desktop/TestWithTwoTemporaryAccounts.kt +++ b/src/test/kotlin/org/briarproject/briar/desktop/TestWithTwoTemporaryAccounts.kt @@ -21,6 +21,8 @@ internal class TestWithTwoTemporaryAccounts() { private val LOG = Logger.getLogger(TestWithTwoTemporaryAccounts::class.java.name) } + private val apps = mutableListOf<BriarDesktopTestApp>() + @OptIn(ExperimentalComposeUiApi::class) fun run() { LogManager.getLogManager().getLogger("").level = INFO @@ -41,6 +43,8 @@ internal class TestWithTwoTemporaryAccounts() { DesktopTestModule(dataDir.toFile(), socksPort, controlPort) ).build() + apps.add(app) + app.getShutdownManager().addShutdownHook { LOG.info("deleting temporary account at $dataDir") org.apache.commons.io.FileUtils.deleteDirectory(dataDir.toFile()) @@ -67,6 +71,11 @@ internal class TestWithTwoTemporaryAccounts() { // list yet, we need to wait a moment in order for that to finish (hopefully). Thread.sleep(1000) - app.getBriarUi().start(applicationScope) + app.getBriarUi().start { + apps.forEach { + it.getBriarUi().stop() + } + applicationScope.exitApplication() + } } } -- GitLab