diff --git a/gradle-client/build.gradle.kts b/gradle-client/build.gradle.kts index 89e3406..2720186 100644 --- a/gradle-client/build.gradle.kts +++ b/gradle-client/build.gradle.kts @@ -122,7 +122,8 @@ compose.desktop { "java.scripting", "java.sql", "jdk.compiler", - "jdk.unsupported" + "jdk.security.auth", + "jdk.unsupported", ) linux { iconFile = layout.projectDirectory.file("src/assets/desktop/icon.png") diff --git a/gradle-client/proguard-desktop.pro b/gradle-client/proguard-desktop.pro index ad81f4b..cc491eb 100644 --- a/gradle-client/proguard-desktop.pro +++ b/gradle-client/proguard-desktop.pro @@ -91,3 +91,6 @@ -keepclassmembers class * extends com.sun.jna.** { public *; } -keep class * implements com.sun.jna.** { *; } -dontnote com.sun.** + +# FileKit +-keep class org.freedesktop.dbus.** { *; } diff --git a/gradle-client/src/jvmMain/kotlin/org/gradle/client/core/util/DesktopOS.kt b/gradle-client/src/jvmMain/kotlin/org/gradle/client/core/util/DesktopOS.kt index e279ff0..5a03408 100644 --- a/gradle-client/src/jvmMain/kotlin/org/gradle/client/core/util/DesktopOS.kt +++ b/gradle-client/src/jvmMain/kotlin/org/gradle/client/core/util/DesktopOS.kt @@ -4,8 +4,6 @@ enum class DesktopOS(val id: String) { Linux("linux"), Mac("macos"), Windows("windows"); - - val isLinux: Boolean get() = this == Linux } val currentDesktopOS: DesktopOS by lazy { diff --git a/gradle-client/src/jvmMain/kotlin/org/gradle/client/ui/build/BuildContent.kt b/gradle-client/src/jvmMain/kotlin/org/gradle/client/ui/build/BuildContent.kt index a4b340b..a48cebd 100644 --- a/gradle-client/src/jvmMain/kotlin/org/gradle/client/ui/build/BuildContent.kt +++ b/gradle-client/src/jvmMain/kotlin/org/gradle/client/ui/build/BuildContent.kt @@ -22,7 +22,6 @@ import org.gradle.client.core.gradle.GradleConnectionParameters.Companion.isVali import org.gradle.client.core.gradle.GradleConnectionParameters.Companion.isValidGradleVersion import org.gradle.client.core.gradle.GradleConnectionParameters.Companion.isValidJavaHome import org.gradle.client.core.gradle.GradleDistribution -import org.gradle.client.core.util.currentDesktopOS import org.gradle.client.ui.composables.* import org.gradle.client.ui.theme.plusPaneSpacing import org.gradle.client.ui.theme.spacing @@ -138,7 +137,6 @@ private fun BuildMainContent(component: BuildComponent, build: Build, snackbarSt state = javaHome, defaultState = System.getenv("JAVA_HOME")?.takeIf { it.isNotBlank() }, isError = !isJavaHomeValid, - showHiddenFiles = true, showSnackbar = { message -> scope.launch { snackbarState.showSnackbar(message) } } ) DirectoryField( @@ -146,7 +144,6 @@ private fun BuildMainContent(component: BuildComponent, build: Build, snackbarSt state = gradleUserHome, defaultState = System.getProperty("user.home") + "/.gradle", isError = !isGradleUserHomeValid, - showHiddenFiles = true, showSnackbar = { message -> scope.launch { snackbarState.showSnackbar(message) } }, ) GradleDistributionField(state = gradleDistSource) @@ -270,7 +267,6 @@ private fun DirectoryField( defaultState: String? = null, readOnly: Boolean = false, isError: Boolean = false, - showHiddenFiles: Boolean = false, showSnackbar: (message: String) -> Unit, ) { BuildTextField( @@ -288,46 +284,13 @@ private fun DirectoryField( } }, trailingIcon = { - val helpText = "Select a $description" - if (currentDesktopOS.isLinux) { - LinuxDirectoryFieldPicker(description, helpText, state, showHiddenFiles, showSnackbar) - } else { - NonLinuxDirectoryFieldPicker(description, helpText, state, showSnackbar) - } + DirectoryFieldPicker(description, "Select a $description", state, showSnackbar) }, ) } @Composable -private fun LinuxDirectoryFieldPicker( - description: String, - helpText: String, - state: MutableState, - showHiddenFiles: Boolean = false, - showSnackbar: (message: String) -> Unit, -) { - var isDirChooserOpen by remember { mutableStateOf(false) } - if (isDirChooserOpen) { - DirChooserDialog( - helpText = helpText, - showHiddenFiles = showHiddenFiles, - onDirChosen = { dir -> - isDirChooserOpen = false - if (dir == null) { - showSnackbar("No $description selected") - } else { - state.value = dir.absolutePath - } - } - ) - } - DirectoryFilePickerIcon(helpText, state) { - isDirChooserOpen = true - } -} - -@Composable -private fun NonLinuxDirectoryFieldPicker( +private fun DirectoryFieldPicker( description: String, helpText: String, state: MutableState, diff --git a/gradle-client/src/jvmMain/kotlin/org/gradle/client/ui/buildlist/BuildListContent.kt b/gradle-client/src/jvmMain/kotlin/org/gradle/client/ui/buildlist/BuildListContent.kt index cbc9f38..81adfb8 100644 --- a/gradle-client/src/jvmMain/kotlin/org/gradle/client/ui/buildlist/BuildListContent.kt +++ b/gradle-client/src/jvmMain/kotlin/org/gradle/client/ui/buildlist/BuildListContent.kt @@ -9,20 +9,24 @@ import androidx.compose.material.icons.Icons import androidx.compose.material.icons.filled.Add import androidx.compose.material.icons.filled.Close import androidx.compose.material3.* -import androidx.compose.runtime.* +import androidx.compose.runtime.Composable +import androidx.compose.runtime.getValue +import androidx.compose.runtime.remember +import androidx.compose.runtime.rememberCoroutineScope import androidx.compose.ui.Modifier import androidx.compose.ui.platform.testTag import androidx.compose.ui.res.painterResource import androidx.compose.ui.unit.dp import com.arkivanov.decompose.extensions.compose.subscribeAsState import io.github.vinceglb.filekit.compose.rememberDirectoryPickerLauncher -import io.github.vinceglb.filekit.core.FileKitPlatformSettings import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.launch import org.gradle.client.core.Constants.APPLICATION_DISPLAY_NAME import org.gradle.client.core.database.Build -import org.gradle.client.core.util.currentDesktopOS -import org.gradle.client.ui.composables.* +import org.gradle.client.ui.composables.Loading +import org.gradle.client.ui.composables.PlainTextTooltip +import org.gradle.client.ui.composables.TitleMedium +import org.gradle.client.ui.composables.TopBar import org.gradle.client.ui.theme.plusPaneSpacing import java.io.File @@ -83,15 +87,6 @@ private fun BuildListDeleteButon(component: BuildListComponent, build: Build) { @Composable private fun AddBuildButton(component: BuildListComponent, snackbarState: SnackbarHostState) { - if (currentDesktopOS.isLinux) { - LinuxAddBuildButton(component, snackbarState) - } else { - NonLinuxAddBuildButton(component, snackbarState) - } -} - -@Composable -private fun NonLinuxAddBuildButton(component: BuildListComponent, snackbarState: SnackbarHostState) { val scope = rememberCoroutineScope() val dirPickerLauncher = rememberDirectoryPickerLauncher(ADD_BUILD_HELP_TEXT) { rootDir -> onBuildDirSelected(scope, component, snackbarState, rootDir?.file) @@ -99,22 +94,6 @@ private fun NonLinuxAddBuildButton(component: BuildListComponent, snackbarState: AddBuildDirFAB { dirPickerLauncher.launch() } } -@Composable -private fun LinuxAddBuildButton(component: BuildListComponent, snackbarState: SnackbarHostState) { - val scope = rememberCoroutineScope() - var isDirChooserOpen by remember { mutableStateOf(false) } - if (isDirChooserOpen) { - DirChooserDialog( - helpText = ADD_BUILD_HELP_TEXT, - onDirChosen = { rootDir -> - isDirChooserOpen = false - onBuildDirSelected(scope, component, snackbarState, rootDir) - } - ) - } - AddBuildDirFAB { isDirChooserOpen = true } -} - private fun onBuildDirSelected( scope: CoroutineScope, component: BuildListComponent, diff --git a/gradle-client/src/jvmMain/kotlin/org/gradle/client/ui/composables/DirChooserDialog.kt b/gradle-client/src/jvmMain/kotlin/org/gradle/client/ui/composables/DirChooserDialog.kt deleted file mode 100644 index ed52e9d..0000000 --- a/gradle-client/src/jvmMain/kotlin/org/gradle/client/ui/composables/DirChooserDialog.kt +++ /dev/null @@ -1,27 +0,0 @@ -package org.gradle.client.ui.composables - -import androidx.compose.runtime.Composable -import androidx.compose.runtime.LaunchedEffect -import java.io.File -import javax.swing.JFileChooser - -@Composable -fun DirChooserDialog( - helpText: String, - showHiddenFiles: Boolean = false, - onDirChosen: (dir: File?) -> Unit, -) { - LaunchedEffect(Unit) { - val chooser = JFileChooser() - chooser.dialogTitle = helpText - chooser.fileSelectionMode = JFileChooser.DIRECTORIES_ONLY - chooser.isAcceptAllFileFilterUsed = false - chooser.isMultiSelectionEnabled = false - chooser.isFileHidingEnabled = !showHiddenFiles - if (chooser.showOpenDialog(null) == JFileChooser.APPROVE_OPTION) { - onDirChosen(chooser.selectedFile) - } else { - onDirChosen(null) - } - } -} diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index a4d07da..903e44a 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -30,7 +30,7 @@ gradle-declarative-dsl-evaluator = { module = "org.gradle:gradle-declarative-dsl gradle-declarative-dsl-tooling-models = { module = "org.gradle:gradle-declarative-dsl-tooling-models", version.ref = "declarative-dsl" } material3WindowSizeClassMultiplatform = { module = "dev.chrisbanes.material3:material3-window-size-class-multiplatform", version = "0.5.0" } materialKolor = { module = "com.materialkolor:material-kolor", version = "1.7.0" } -filekit-compose = { module = "io.github.vinceglb:filekit-compose", version = "0.7.0" } +filekit-compose = { module = "io.github.vinceglb:filekit-compose", version = "0.8.2" } slf4j-api = { module = "org.slf4j:slf4j-api", version = "2.0.14" } logback-classic = { module = "ch.qos.logback:logback-classic", version = "1.5.6" } junit-junit = { module = "junit:junit", version = "4.13.2" } diff --git a/gradle/wrapper/gradle-wrapper.jar b/gradle/wrapper/gradle-wrapper.jar index e644113..a4b76b9 100644 Binary files a/gradle/wrapper/gradle-wrapper.jar and b/gradle/wrapper/gradle-wrapper.jar differ diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index 26d6e50..9355b41 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,6 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions-snapshots/gradle-8.10-20240612002910+0000-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.10-bin.zip networkTimeout=10000 validateDistributionUrl=true zipStoreBase=GRADLE_USER_HOME