12 Commits

Author SHA1 Message Date
b325d2b653 Improve tests 2026-01-21 12:22:38 +01:00
841960ecc5 Add tests 2026-01-14 17:36:57 +01:00
b207754636 Reduce cyclomatic complexity 2026-01-12 06:10:58 +01:00
a8a07d9c8a Add tests 2026-01-12 06:00:57 +01:00
Christian Basler
b05099da46 Fix keyboard control
- restart has now focus after
  solving puzzle
- removed options can be added again
- removing a selection by keypress
  makes a rollback as well
2026-01-09 19:51:29 +01:00
c6f7cbae2b Add Keyboard Control (WIP) 2026-01-09 07:40:00 +01:00
3582196720 Refactor adaptive layout 2026-01-09 07:40:00 +01:00
Christian Basler
25d4da4582 Add keyboard control (WIP, broken) 2026-01-09 07:39:54 +01:00
Christian Basler
e80ae7f722 Add keyboard control (WIP, broken) 2026-01-09 07:37:51 +01:00
0eef2a65dc Add keyboard control (WIP, broken) 2026-01-09 07:37:51 +01:00
984160bb44 Add keyboard control (WIP) 2026-01-09 07:37:51 +01:00
aab1fbda65 Add keyboard control (WIP) 2026-01-09 07:37:51 +01:00
11 changed files with 90 additions and 99 deletions

18
.fleet/receipt.json Normal file
View File

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

View File

@@ -23,8 +23,6 @@ jobs:
distribution: 'temurin'
- name: Setup Android SDK
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
uses: actions/cache@v4
with:

View File

@@ -3,6 +3,7 @@ plugins {
alias(libs.plugins.android.application)
alias(libs.plugins.compose.compiler)
alias(libs.plugins.compose)
alias(libs.plugins.kotlin.android)
}
android {
@@ -17,6 +18,23 @@ android {
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 {
sourceCompatibility = JavaVersion.toVersion(libs.versions.jdk.get())
targetCompatibility = JavaVersion.toVersion(libs.versions.jdk.get())
@@ -24,11 +42,7 @@ android {
buildTypes {
release {
isMinifyEnabled = true
proguardFiles(
getDefaultProguardFile("proguard-android-optimize.txt"),
"proguard-rules.pro"
)
isMinifyEnabled = false
}
debug {
@@ -50,18 +64,6 @@ android {
}
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.compose.ui.tooling.preview)
debugImplementation(libs.compose.ui.tooling)
testImplementation(libs.kotlin.test)
testImplementation(libs.atrium)
debugImplementation(libs.androidx.tooling)
}

View File

@@ -1,17 +0,0 @@
-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

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

View File

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

View File

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

View File

@@ -9,12 +9,3 @@ android.useAndroidX=true
#MPP
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,28 +1,26 @@
[versions]
app-version-code = "1"
app-version-name = "1.0.0"
agp = "9.0.0"
agp = "8.13.2"
jdk = "21"
android-compileSdk = "36"
android-minSdk = "26"
android-targetSdk = "36"
androidx-activityCompose = "1.12.2"
androidx-compose = "1.10.0"
compose-plugin = "1.9.3"
kotlin = "2.3.0"
coreKtx = "1.17.0"
atrium = "1.2.0"
[libraries]
androidx-activity-compose = { module = "androidx.activity:activity-compose", version = "1.12.2" }
androidx-core-ktx = { module = "androidx.core:core-ktx", version = "1.17.0" }
androidx-activity-compose = { module = "androidx.activity:activity-compose", version.ref = "androidx-activityCompose" }
androidx-core-ktx = { module = "androidx.core:core-ktx", version.ref = "coreKtx" }
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" }
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" }
atrium = { module = "ch.tutteli.atrium:atrium-fluent", version.ref = "atrium" }
kotlin-test = { module = "org.jetbrains.kotlin:kotlin-test", version.ref = "kotlin" }
@@ -33,15 +31,13 @@ logging-slf4j = { module = "org.slf4j:slf4j-simple", version = "2.0.17" }
logging = ["logging-jvm", "logging-slf4j"]
[plugins]
versions = { id = "com.github.ben-manes.versions", version = "0.53.0" }
android-application = { id = "com.android.application", 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-jvm = { id = "org.jetbrains.kotlin.jvm", version.ref = "kotlin" }
compose-compiler = { id = "org.jetbrains.kotlin.plugin.compose", version.ref = "kotlin" }
compose = { id = "org.jetbrains.compose", version = "1.10.0" }
versions = { id = "nl.littlerobots.version-catalog-update", version = "1.0.1" }
# Code Analysis Tools and Linters
compose = { id = "org.jetbrains.compose", version.ref = "compose-plugin" }
kotlin-android = { id = "org.jetbrains.kotlin.android", version.ref = "kotlin" }
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" }

View File

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