From 8e8f9222de58584d6938f9de220566e252722d30 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Sebastian=20K=C3=BCrten?= <sebastian@mobanisto.de>
Date: Wed, 12 Feb 2025 10:23:47 +0100
Subject: [PATCH] Upgrade toolchain

* Use Compose 1.7.3
* Set jvmTarget to 17 for the kotlin compile task (Gradle displayed a
  warning about it being at 11)
* Replace ResourceLoader from Compose used for loading images with a custom
  resources loading mechanism
* Due to the way we load resources from the classpath, we need to
  prepend all resources used for testing with a slash ('/')
---
 briar-desktop/build.gradle.kts                   |  4 ++--
 .../desktop/attachment/media/AvatarManager.kt    |  2 +-
 .../desktop/conversation/ConversationInput.kt    | 10 ++++------
 .../briar/desktop/utils/ImagePicker.kt           |  2 +-
 .../briar/desktop/utils/ImageUtils.kt            |  7 ++++++-
 .../testdata/DeterministicTestDataCreatorImpl.kt |  6 ++----
 .../testdata/conversation/ConversationsData.kt   | 16 ++++++++--------
 build.gradle.kts                                 |  1 -
 8 files changed, 24 insertions(+), 24 deletions(-)

diff --git a/briar-desktop/build.gradle.kts b/briar-desktop/build.gradle.kts
index cebb9dcfab..58b6e35f63 100644
--- a/briar-desktop/build.gradle.kts
+++ b/briar-desktop/build.gradle.kts
@@ -24,7 +24,7 @@ import org.jetbrains.kotlin.gradle.tasks.KotlinCompile
 plugins {
     kotlin("jvm") version "1.9.10"
     kotlin("kapt") version "1.9.10"
-    id("org.jetbrains.compose") version "1.6.11"
+    id("org.jetbrains.compose") version "1.7.3"
     id("de.mobanisto.pinpit") version "0.9.0"
     id("java")
     id("idea")
@@ -166,7 +166,7 @@ tasks.test {
 }
 
 tasks.withType<KotlinCompile> {
-    kotlinOptions.jvmTarget = "11"
+    kotlinOptions.jvmTarget = "17"
     kotlinOptions.freeCompilerArgs += "-opt-in=kotlin.RequiresOptIn"
 }
 
diff --git a/briar-desktop/src/main/kotlin/org/briarproject/briar/desktop/attachment/media/AvatarManager.kt b/briar-desktop/src/main/kotlin/org/briarproject/briar/desktop/attachment/media/AvatarManager.kt
index 9593ae47ae..ecf40a9d46 100644
--- a/briar-desktop/src/main/kotlin/org/briarproject/briar/desktop/attachment/media/AvatarManager.kt
+++ b/briar-desktop/src/main/kotlin/org/briarproject/briar/desktop/attachment/media/AvatarManager.kt
@@ -23,7 +23,6 @@ import androidx.compose.runtime.State
 import androidx.compose.runtime.mutableStateOf
 import androidx.compose.runtime.produceState
 import androidx.compose.ui.graphics.ImageBitmap
-import androidx.compose.ui.res.loadImageBitmap
 import kotlinx.coroutines.Dispatchers
 import kotlinx.coroutines.swing.Swing
 import kotlinx.coroutines.withContext
@@ -34,6 +33,7 @@ import org.briarproject.briar.api.identity.AuthorInfo
 import org.briarproject.briar.desktop.threading.BriarExecutors
 import org.briarproject.briar.desktop.threading.UiExecutor
 import org.briarproject.briar.desktop.ui.LocalAvatarManager
+import org.briarproject.briar.desktop.utils.ImageUtils.loadImageBitmap
 import javax.inject.Inject
 
 class AvatarManager @Inject constructor(
diff --git a/briar-desktop/src/main/kotlin/org/briarproject/briar/desktop/conversation/ConversationInput.kt b/briar-desktop/src/main/kotlin/org/briarproject/briar/desktop/conversation/ConversationInput.kt
index 19f8bff69f..887b20a1e0 100644
--- a/briar-desktop/src/main/kotlin/org/briarproject/briar/desktop/conversation/ConversationInput.kt
+++ b/briar-desktop/src/main/kotlin/org/briarproject/briar/desktop/conversation/ConversationInput.kt
@@ -26,7 +26,6 @@ import androidx.compose.foundation.layout.padding
 import androidx.compose.foundation.layout.size
 import androidx.compose.foundation.shape.RoundedCornerShape
 import androidx.compose.material.AlertDialog
-import androidx.compose.material.ExperimentalMaterialApi
 import androidx.compose.material.IconButton
 import androidx.compose.material.MaterialTheme
 import androidx.compose.material.Text
@@ -47,25 +46,24 @@ import androidx.compose.ui.Modifier
 import androidx.compose.ui.graphics.ImageBitmap
 import androidx.compose.ui.input.pointer.PointerIcon
 import androidx.compose.ui.input.pointer.pointerHoverIcon
-import androidx.compose.ui.res.ResourceLoader
-import androidx.compose.ui.res.loadImageBitmap
 import androidx.compose.ui.unit.dp
 import org.briarproject.briar.desktop.theme.sendButton
 import org.briarproject.briar.desktop.ui.ColoredIconButton
 import org.briarproject.briar.desktop.ui.HorizontalDivider
 import org.briarproject.briar.desktop.ui.LocalWindowScope
 import org.briarproject.briar.desktop.utils.ImagePicker.pickImageUsingDialog
+import org.briarproject.briar.desktop.utils.ImageUtils.loadImageBitmap
 import org.briarproject.briar.desktop.utils.InternationalizationUtils.i18n
 import org.briarproject.briar.desktop.utils.PreviewUtils.preview
+import org.briarproject.briar.desktop.utils.ResourceUtils.getResourceAsStream
 
 @Suppress("HardCodedStringLiteral")
-@OptIn(ExperimentalMaterialApi::class, ExperimentalComposeUiApi::class)
 fun main() = preview {
-    val bitmap = ResourceLoader.Default.load("images/logo_circle.png").use {
+    val bitmap = getResourceAsStream("/images/logo_circle.png")?.use {
         loadImageBitmap(it)
     }
     val (text, updateText) = remember { mutableStateOf("Lorem ipsum.") }
-    val (image, updateImage) = remember { mutableStateOf<ImageBitmap?>(bitmap) }
+    val (image, updateImage) = remember { mutableStateOf(bitmap) }
     var dialogVisible by remember { mutableStateOf(false) }
     var sentText by remember { mutableStateOf("") }
     ConversationInput(text, updateText, image, updateImage) {
diff --git a/briar-desktop/src/main/kotlin/org/briarproject/briar/desktop/utils/ImagePicker.kt b/briar-desktop/src/main/kotlin/org/briarproject/briar/desktop/utils/ImagePicker.kt
index 33f2d820a9..1e0891510d 100644
--- a/briar-desktop/src/main/kotlin/org/briarproject/briar/desktop/utils/ImagePicker.kt
+++ b/briar-desktop/src/main/kotlin/org/briarproject/briar/desktop/utils/ImagePicker.kt
@@ -20,8 +20,8 @@ package org.briarproject.briar.desktop.utils
 
 import androidx.compose.ui.awt.ComposeWindow
 import androidx.compose.ui.graphics.ImageBitmap
-import androidx.compose.ui.res.loadImageBitmap
 import mu.KotlinLogging
+import org.briarproject.briar.desktop.utils.ImageUtils.loadImageBitmap
 import org.briarproject.briar.desktop.utils.KLoggerUtils.d
 import org.briarproject.briar.desktop.utils.KLoggerUtils.w
 import java.io.FileInputStream
diff --git a/briar-desktop/src/main/kotlin/org/briarproject/briar/desktop/utils/ImageUtils.kt b/briar-desktop/src/main/kotlin/org/briarproject/briar/desktop/utils/ImageUtils.kt
index 9bdbdd9b7b..ed18ebd2f4 100644
--- a/briar-desktop/src/main/kotlin/org/briarproject/briar/desktop/utils/ImageUtils.kt
+++ b/briar-desktop/src/main/kotlin/org/briarproject/briar/desktop/utils/ImageUtils.kt
@@ -19,10 +19,11 @@
 package org.briarproject.briar.desktop.utils
 
 import androidx.compose.ui.graphics.ImageBitmap
-import androidx.compose.ui.res.loadImageBitmap
+import androidx.compose.ui.graphics.toComposeImageBitmap
 import org.briarproject.bramble.api.db.Transaction
 import org.briarproject.briar.api.attachment.AttachmentHeader
 import org.briarproject.briar.api.attachment.AttachmentReader
+import java.io.InputStream
 
 object ImageUtils {
 
@@ -36,4 +37,8 @@ object ImageUtils {
             return loadImageBitmap(it)
         }
     }
+
+    fun loadImageBitmap(it: InputStream): ImageBitmap {
+        return org.jetbrains.skia.Image.makeFromEncoded(it.readAllBytes()).toComposeImageBitmap()
+    }
 }
diff --git a/briar-desktop/src/test/kotlin/org/briarproject/briar/desktop/testdata/DeterministicTestDataCreatorImpl.kt b/briar-desktop/src/test/kotlin/org/briarproject/briar/desktop/testdata/DeterministicTestDataCreatorImpl.kt
index 4fdd116ad0..bc46970b16 100644
--- a/briar-desktop/src/test/kotlin/org/briarproject/briar/desktop/testdata/DeterministicTestDataCreatorImpl.kt
+++ b/briar-desktop/src/test/kotlin/org/briarproject/briar/desktop/testdata/DeterministicTestDataCreatorImpl.kt
@@ -18,8 +18,6 @@
 
 package org.briarproject.briar.desktop.testdata
 
-import androidx.compose.ui.ExperimentalComposeUiApi
-import androidx.compose.ui.res.ResourceLoader
 import mu.KotlinLogging
 import org.briarproject.bramble.api.FormatException
 import org.briarproject.bramble.api.client.ClientHelper
@@ -71,6 +69,7 @@ import org.briarproject.briar.desktop.testdata.forum.PostAuthor
 import org.briarproject.briar.desktop.testdata.forum.forums
 import org.briarproject.briar.desktop.utils.KLoggerUtils.i
 import org.briarproject.briar.desktop.utils.KLoggerUtils.w
+import org.briarproject.briar.desktop.utils.ResourceUtils.getResourceAsStream
 import java.io.IOException
 import java.io.InputStream
 import java.time.LocalDateTime
@@ -406,9 +405,8 @@ class DeterministicTestDataCreatorImpl @Inject internal constructor(
         }
     }
 
-    @OptIn(ExperimentalComposeUiApi::class)
     private fun image(imageResource: String): InputStream {
-        val input = ResourceLoader.Default.load(imageResource)
+        val input = getResourceAsStream(imageResource)
         val image = input.use {
             ImageIO.read(input)
         }
diff --git a/briar-desktop/src/test/kotlin/org/briarproject/briar/desktop/testdata/conversation/ConversationsData.kt b/briar-desktop/src/test/kotlin/org/briarproject/briar/desktop/testdata/conversation/ConversationsData.kt
index 335d3c6133..8d1425dbeb 100644
--- a/briar-desktop/src/test/kotlin/org/briarproject/briar/desktop/testdata/conversation/ConversationsData.kt
+++ b/briar-desktop/src/test/kotlin/org/briarproject/briar/desktop/testdata/conversation/ConversationsData.kt
@@ -45,7 +45,7 @@ val conversations = conversations {
             date = "2022-01-21 10:13:05"
         }
         outgoing {
-            images = listOf("images/do-it-now.png")
+            images = listOf("/images/do-it-now.png")
             read = true
             date = "2022-01-21 10:13:15"
         }
@@ -141,7 +141,7 @@ val conversations = conversations {
         }
         incoming {
             text = "Check out my latest diagrams"
-            images = listOf("images/voronoi1.png")
+            images = listOf("/images/voronoi1.png")
             read = true
             date = start.plusSeconds(120)
         }
@@ -153,12 +153,12 @@ val conversations = conversations {
         outgoing {
             text = "I've also made some"
             images = listOf(
-                "images/voronoi2.png",
-                "images/voronoi3.png",
-                "images/voronoi4.png",
-                "images/voronoi2.png",
-                "images/voronoi3.png",
-                "images/voronoi4.png",
+                "/images/voronoi2.png",
+                "/images/voronoi3.png",
+                "/images/voronoi4.png",
+                "/images/voronoi2.png",
+                "/images/voronoi3.png",
+                "/images/voronoi4.png",
             )
             read = true
             date = start.plusSeconds(250)
diff --git a/build.gradle.kts b/build.gradle.kts
index 3ec523eb52..31d3fa06dd 100644
--- a/build.gradle.kts
+++ b/build.gradle.kts
@@ -55,6 +55,5 @@ allprojects {
     repositories {
         mavenCentral()
         google()
-        jcenter()
     }
 }
-- 
GitLab