6 Commits

Author SHA1 Message Date
Christian Basler
9930af5fbc Add code quality plugins
version-catalog-update and spotless
2026-01-29 12:11:40 +01:00
0cf9d36d8c Enable minify
Some checks failed
SonarQube Scan / SonarQube Trigger (push) Failing after 3m9s
2026-01-25 22:30:30 +01:00
Christian Basler
6ce3dfad4f Update dependencies
Some checks failed
SonarQube Scan / SonarQube Trigger (push) Failing after 3m5s
2026-01-21 21:24:45 +01:00
a545f58657 Merge branch 'feature/keyboard-control'
All checks were successful
SonarQube Scan / SonarQube Trigger (push) Successful in 7m19s
2026-01-21 12:25:53 +01:00
93103e4e49 Add Keyboard Control 2026-01-21 12:25:28 +01:00
0d7d5d8fbc Add missing dependency to fix test
All checks were successful
SonarQube Scan / SonarQube Trigger (push) Successful in 8m1s
2026-01-08 23:02:38 +01:00
11 changed files with 99 additions and 90 deletions

View File

@@ -1,18 +0,0 @@
{
"spec": {
"template_id": "kmt",
"targets": {
"android": {
"ui": [
"compose"
]
},
"desktop": {
"ui": [
"compose"
]
}
}
},
"timestamp": "2024-04-29T06:04:57.807358293Z"
}

View File

@@ -23,6 +23,8 @@ jobs:
distribution: 'temurin' distribution: 'temurin'
- name: Setup Android SDK - name: Setup Android SDK
uses: android-actions/setup-android@v3 uses: android-actions/setup-android@v3
- name: Install missing packages
run: apt-get update; apt-get install -y libglu1-mesa-dev
- name: Cache SonarQube packages - name: Cache SonarQube packages
uses: actions/cache@v4 uses: actions/cache@v4
with: with:

View File

@@ -3,7 +3,6 @@ plugins {
alias(libs.plugins.android.application) alias(libs.plugins.android.application)
alias(libs.plugins.compose.compiler) alias(libs.plugins.compose.compiler)
alias(libs.plugins.compose) alias(libs.plugins.compose)
alias(libs.plugins.kotlin.android)
} }
android { android {
@@ -18,23 +17,6 @@ android {
versionName = libs.versions.app.version.name.get() versionName = libs.versions.app.version.name.get()
} }
dependencies {
implementation(compose.components.resources)
implementation(compose.runtime)
// implementation(compose.foundation)
implementation(compose.material3)
implementation(compose.ui)
implementation(compose.components.resources)
implementation(libs.androidx.activity.compose)
// implementation(libs.compose.ui.text.googlefonts)
implementation(projects.commonUI)
// implementation(compose.components.uiToolingPreview)
implementation(libs.androidx.tooling.preview)
testImplementation(libs.kotlin.test)
testImplementation(libs.atrium)
}
compileOptions { compileOptions {
sourceCompatibility = JavaVersion.toVersion(libs.versions.jdk.get()) sourceCompatibility = JavaVersion.toVersion(libs.versions.jdk.get())
targetCompatibility = JavaVersion.toVersion(libs.versions.jdk.get()) targetCompatibility = JavaVersion.toVersion(libs.versions.jdk.get())
@@ -42,7 +24,11 @@ android {
buildTypes { buildTypes {
release { release {
isMinifyEnabled = false isMinifyEnabled = true
proguardFiles(
getDefaultProguardFile("proguard-android-optimize.txt"),
"proguard-rules.pro"
)
} }
debug { debug {
@@ -64,6 +50,18 @@ android {
} }
dependencies { dependencies {
implementation(projects.commonUI)
implementation(libs.compose.runtime)
implementation(libs.compose.ui)
implementation(libs.compose.material3)
implementation(libs.compose.components.resources)
implementation(libs.androidx.activity.compose)
implementation(libs.androidx.core.ktx) implementation(libs.androidx.core.ktx)
debugImplementation(libs.androidx.tooling)
implementation(libs.compose.ui.tooling.preview)
debugImplementation(libs.compose.ui.tooling)
testImplementation(libs.kotlin.test)
testImplementation(libs.atrium)
} }

17
android/proguard-rules.pro vendored Normal file
View File

@@ -0,0 +1,17 @@
-dontwarn kotlinx.coroutines.debug.*
-dontwarn kotlinx.datetime.**
-keep class org.jetbrains.skia.** { *; }
-keep class org.jetbrains.skiko.** { *; }
-ignorewarnings
# Windows folders
-keep class com.sun.jna.* { *; }
-keepclassmembers class * extends com.sun.jna.* { public *; }
-assumenosideeffects public class androidx.compose.runtime.ComposerKt {
void sourceInformation(androidx.compose.runtime.Composer,java.lang.String);
void sourceInformationMarkerStart(androidx.compose.runtime.Composer,int,java.lang.String);
void sourceInformationMarkerEnd(androidx.compose.runtime.Composer);
}

View File

@@ -1,12 +0,0 @@
package ch.dissem.yaep.android
import ch.tutteli.atrium.api.fluent.en_GB.toEqual
import ch.tutteli.atrium.api.verbs.expect
import kotlin.test.Test
class DummyTest {
@Test
fun `ensure some test is run`() {
expect(true).toEqual(true)
}
}

View File

@@ -1,5 +1,5 @@
import com.android.build.gradle.internal.lint.AndroidLintTask import com.android.build.gradle.internal.lint.AndroidLintTask
import com.github.benmanes.gradle.versions.updates.DependencyUpdatesTask import nl.littlerobots.vcu.plugin.resolver.VersionSelectors
import org.jetbrains.kotlin.gradle.dsl.JvmTarget import org.jetbrains.kotlin.gradle.dsl.JvmTarget
import org.jetbrains.kotlin.gradle.tasks.KotlinJvmCompile import org.jetbrains.kotlin.gradle.tasks.KotlinJvmCompile
import org.sonarqube.gradle.SonarTask import org.sonarqube.gradle.SonarTask
@@ -8,13 +8,14 @@ plugins {
alias(libs.plugins.versions) alias(libs.plugins.versions)
alias(libs.plugins.sonarqube) alias(libs.plugins.sonarqube)
alias(libs.plugins.kotlin.kover) alias(libs.plugins.kotlin.kover)
alias(libs.plugins.spotless)
alias(libs.plugins.android.application) apply false alias(libs.plugins.android.application) apply false
alias(libs.plugins.android.library) apply false alias(libs.plugins.android.library) apply false
alias(libs.plugins.compose) apply false alias(libs.plugins.compose) apply false
alias(libs.plugins.compose.compiler) apply false alias(libs.plugins.compose.compiler) apply false
alias(libs.plugins.kotlin.multiplatform) apply false alias(libs.plugins.kotlin.multiplatform) apply false
alias(libs.plugins.kotlin.jvm) apply false alias(libs.plugins.kotlin.jvm) apply false
alias(libs.plugins.kotlin.android) apply false
} }
sonar { sonar {
@@ -45,17 +46,26 @@ tasks.withType<KotlinJvmCompile>().configureEach {
} }
} }
tasks.withType<DependencyUpdatesTask> { spotless {
rejectVersionIf { kotlin {
isNonStable(candidate.version) && !isNonStable(currentVersion) target("**/*.kt")
targetExclude("**/build/**", "**/.gradle/**")
// ktlint("1.5.0")
diktat("1.0.1")
}
kotlinGradle {
target("**/*.gradle.kts")
targetExclude("**/build/**", "**/.gradle/**")
ktlint("1.5.0")
} }
} }
fun isNonStable(version: String): Boolean { versionCatalogUpdate {
return version.contains("dev", ignoreCase = true) sortByKey = false
|| version.contains("alpha", ignoreCase = true) keep {
|| version.contains("beta", ignoreCase = true) keepUnusedVersions = true
|| version.contains("RC", ignoreCase = true) }
versionSelector(VersionSelectors.STABLE)
} }
subprojects { subprojects {

View File

@@ -22,13 +22,13 @@ kotlin {
commonMain.dependencies { commonMain.dependencies {
api(projects.domain) api(projects.domain)
implementation(compose.components.resources) implementation(libs.compose.components.resources)
implementation(compose.runtime) implementation(libs.compose.runtime)
implementation(compose.foundation) implementation(libs.compose.foundation)
implementation(compose.ui) implementation(libs.compose.ui)
implementation(compose.components.uiToolingPreview) implementation(libs.compose.ui.tooling.preview)
implementation(compose.material3) implementation(libs.compose.material3)
implementation(libs.bundles.logging) implementation(libs.bundles.logging)
} }
@@ -37,8 +37,7 @@ kotlin {
implementation(libs.kotlin.test) implementation(libs.kotlin.test)
implementation(libs.atrium) implementation(libs.atrium)
@OptIn(org.jetbrains.compose.ExperimentalComposeLibrary::class) implementation(libs.compose.ui.test)
implementation(compose.uiTest)
} }
jvmTest.dependencies { jvmTest.dependencies {
@@ -46,7 +45,7 @@ kotlin {
} }
androidMain.dependencies { androidMain.dependencies {
implementation(libs.androidx.compose.foundation) implementation(libs.compose.foundation)
} }
} }
} }

View File

@@ -12,14 +12,14 @@ kotlin {
dependencies { dependencies {
implementation(compose.desktop.currentOs) implementation(compose.desktop.currentOs)
implementation(compose.material3) implementation(libs.compose.material3)
implementation(compose.components.resources) implementation(libs.compose.components.resources)
implementation(projects.commonUI) implementation(projects.commonUI)
implementation(compose.components.uiToolingPreview) implementation(libs.compose.ui.tooling.preview)
testImplementation(libs.kotlin.test) testImplementation(libs.kotlin.test)
testImplementation(libs.atrium) testImplementation(libs.atrium)
testImplementation(compose.desktop.uiTestJUnit4) testImplementation(libs.compose.ui.test.desktop)
testImplementation(compose.desktop.currentOs) testImplementation(compose.desktop.currentOs)
} }
} }

View File

@@ -9,3 +9,12 @@ android.useAndroidX=true
#MPP #MPP
kotlin.mpp.androidSourceSetLayoutVersion=2 kotlin.mpp.androidSourceSetLayoutVersion=2
#android.defaults.buildfeatures.resvalues=true
#android.enableAppCompileTimeRClass=false
#android.usesSdkInManifest.disallowed=false
#android.uniquePackageNames=false
#android.dependency.useConstraints=true
#android.r8.strictFullModeForKeepRules=false
#android.r8.optimizedResourceShrinking=false
#android.builtInKotlin=false
#android.newDsl=false

View File

@@ -1,26 +1,28 @@
[versions] [versions]
app-version-code = "1" app-version-code = "1"
app-version-name = "1.0.0" app-version-name = "1.0.0"
agp = "8.13.2" agp = "9.0.0"
jdk = "21" jdk = "21"
android-compileSdk = "36" android-compileSdk = "36"
android-minSdk = "26" android-minSdk = "26"
android-targetSdk = "36" android-targetSdk = "36"
androidx-activityCompose = "1.12.2"
androidx-compose = "1.10.0"
compose-plugin = "1.9.3"
kotlin = "2.3.0" kotlin = "2.3.0"
coreKtx = "1.17.0"
atrium = "1.2.0"
[libraries] [libraries]
androidx-activity-compose = { module = "androidx.activity:activity-compose", version.ref = "androidx-activityCompose" } androidx-activity-compose = { module = "androidx.activity:activity-compose", version = "1.12.2" }
androidx-core-ktx = { module = "androidx.core:core-ktx", version.ref = "coreKtx" } androidx-core-ktx = { module = "androidx.core:core-ktx", version = "1.17.0" }
androidx-tooling = { module = "androidx.compose.ui:ui-tooling", version.ref = "androidx-compose" }
androidx-tooling-preview = { module = "androidx.compose.ui:ui-tooling-preview", version.ref = "androidx-compose" }
androidx-compose-foundation = { module = "androidx.compose.foundation:foundation", version.ref = "androidx-compose" }
atrium = { module = "ch.tutteli.atrium:atrium-fluent", version.ref = "atrium" } compose-runtime = { module = "org.jetbrains.compose.runtime:runtime", version = "1.10.0" }
compose-foundation = { module = "org.jetbrains.compose.foundation:foundation", version = "1.10.0" }
compose-material3 = { module = "org.jetbrains.compose.material3:material3", version = "1.10.0-alpha05" }
compose-ui = { module = "org.jetbrains.compose.ui:ui", version = "1.10.0" }
compose-components-resources = { module = "org.jetbrains.compose.components:components-resources", version = "1.10.0" }
compose-ui-tooling = { module = "org.jetbrains.compose.ui:ui-tooling", version = "1.10.0" }
compose-ui-tooling-preview = { module = "org.jetbrains.compose.ui:ui-tooling-preview", version = "1.10.0" }
compose-ui-test = { module = "org.jetbrains.compose.ui:ui-test", version = "1.10.0" }
compose-ui-test-desktop = { module = "org.jetbrains.compose.ui:ui-test-desktop", version = "1.10.0" }
atrium = { module = "ch.tutteli.atrium:atrium-fluent", version = "1.2.0" }
kotlin-test = { module = "org.jetbrains.kotlin:kotlin-test", version.ref = "kotlin" } kotlin-test = { module = "org.jetbrains.kotlin:kotlin-test", version.ref = "kotlin" }
@@ -31,13 +33,15 @@ logging-slf4j = { module = "org.slf4j:slf4j-simple", version = "2.0.17" }
logging = ["logging-jvm", "logging-slf4j"] logging = ["logging-jvm", "logging-slf4j"]
[plugins] [plugins]
versions = { id = "com.github.ben-manes.versions", version = "0.53.0" }
android-application = { id = "com.android.application", version.ref = "agp" } android-application = { id = "com.android.application", version.ref = "agp" }
android-library = { id = "com.android.kotlin.multiplatform.library", version.ref = "agp" } android-library = { id = "com.android.kotlin.multiplatform.library", version.ref = "agp" }
kotlin-multiplatform = { id = "org.jetbrains.kotlin.multiplatform", version.ref = "kotlin" } kotlin-multiplatform = { id = "org.jetbrains.kotlin.multiplatform", version.ref = "kotlin" }
kotlin-jvm = { id = "org.jetbrains.kotlin.jvm", version.ref = "kotlin" } kotlin-jvm = { id = "org.jetbrains.kotlin.jvm", version.ref = "kotlin" }
compose-compiler = { id = "org.jetbrains.kotlin.plugin.compose", version.ref = "kotlin" } compose-compiler = { id = "org.jetbrains.kotlin.plugin.compose", version.ref = "kotlin" }
compose = { id = "org.jetbrains.compose", version.ref = "compose-plugin" } compose = { id = "org.jetbrains.compose", version = "1.10.0" }
kotlin-android = { id = "org.jetbrains.kotlin.android", version.ref = "kotlin" } versions = { id = "nl.littlerobots.version-catalog-update", version = "1.0.1" }
# Code Analysis Tools and Linters
sonarqube = { id = "org.sonarqube", version = "7.2.2.6593" } sonarqube = { id = "org.sonarqube", version = "7.2.2.6593" }
spotless = { id = "com.diffplug.spotless", version = "8.2.0" }
kotlin-kover = { id = "org.jetbrains.kotlinx.kover", version = "0.9.4" } kotlin-kover = { id = "org.jetbrains.kotlinx.kover", version = "0.9.4" }

View File

@@ -1,6 +1,6 @@
distributionBase=GRADLE_USER_HOME distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists distributionPath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-8.14.3-bin.zip distributionUrl=https\://services.gradle.org/distributions/gradle-9.3.0-bin.zip
networkTimeout=10000 networkTimeout=10000
validateDistributionUrl=true validateDistributionUrl=true
zipStoreBase=GRADLE_USER_HOME zipStoreBase=GRADLE_USER_HOME