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