From 862b6a04d99df290b37a1136fa3631d59090655b Mon Sep 17 00:00:00 2001 From: Martin Date: Fri, 13 Feb 2026 10:00:31 +0100 Subject: [PATCH 1/4] [HOTFIX] on android we now respect the nightmode setting per app, if setting is not present we default to the system setting --- gradle/libs.versions.toml | 2 ++ input-engine/build.gradle.kts | 1 + .../inputengine/theme/Theme.android.kt | 22 +++++++++++++++++++ .../de/tillhub/inputengine/theme/Theme.kt | 6 +++-- .../de/tillhub/inputengine/theme/Theme.ios.kt | 7 ++++++ 5 files changed, 36 insertions(+), 2 deletions(-) create mode 100644 input-engine/src/androidMain/kotlin/de/tillhub/inputengine/theme/Theme.android.kt create mode 100644 input-engine/src/iosMain/kotlin/de/tillhub/inputengine/theme/Theme.ios.kt diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index c985c63..e13abef 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -13,6 +13,7 @@ spotless = "7.1.0" uiTestJunit4 = "1.8.3" mokkery = "2.9.0" maven-publish = "0.34.0" +appcompat = "1.7.1" [libraries] androidx-activity-compose = { module = "androidx.activity:activity-compose", version.ref = "androidx-activity" } @@ -22,6 +23,7 @@ androidx-lifecycle-viewmodel = { module = "org.jetbrains.androidx.lifecycle:life kotlin-bignum = { module = "com.ionspin.kotlin:bignum", version.ref = "kotlin-bignum" } kotlinx-serialization-json = { module = "org.jetbrains.kotlinx:kotlinx-serialization-json", version.ref = "kotlinxSerializationJson" } lifecycle-viewmodel-compose = { module = "org.jetbrains.androidx.lifecycle:lifecycle-viewmodel-compose", version.ref = "lifecycleViewmodelCompose" } +androidx-appcompat = { group = "androidx.appcompat", name = "appcompat", version.ref = "appcompat" } # Android testing androidx-ui-test-junit4-android = { group = "androidx.compose.ui", name = "ui-test-junit4-android", version.ref = "uiTestJunit4" } diff --git a/input-engine/build.gradle.kts b/input-engine/build.gradle.kts index 1e59c73..6113d6c 100644 --- a/input-engine/build.gradle.kts +++ b/input-engine/build.gradle.kts @@ -80,6 +80,7 @@ kotlin { implementation(compose.preview) implementation(libs.androidx.activity.compose) implementation(libs.androidx.activity.ktx) + implementation(libs.androidx.appcompat) implementation(libs.kotlinx.serialization.json) } } diff --git a/input-engine/src/androidMain/kotlin/de/tillhub/inputengine/theme/Theme.android.kt b/input-engine/src/androidMain/kotlin/de/tillhub/inputengine/theme/Theme.android.kt new file mode 100644 index 0000000..bae88e0 --- /dev/null +++ b/input-engine/src/androidMain/kotlin/de/tillhub/inputengine/theme/Theme.android.kt @@ -0,0 +1,22 @@ +package de.tillhub.inputengine.theme + +import androidx.appcompat.app.AppCompatDelegate +import androidx.compose.foundation.isSystemInDarkTheme +import androidx.compose.runtime.Composable + +/** + * Determines whether the application is currently in night (dark) mode. + * + * This Android-specific implementation checks the [AppCompatDelegate] for a manually + * set night mode preference. If no specific preference is set (i.e., [AppCompatDelegate.MODE_NIGHT_FOLLOW_SYSTEM] + * or [AppCompatDelegate.MODE_NIGHT_UNSPECIFIED]), it falls back to the system-wide + * dark theme setting. + * + * @return `true` if night mode is active, `false` otherwise. + */ +@Composable +internal actual fun isNightMode(): Boolean = when (AppCompatDelegate.getDefaultNightMode()) { + AppCompatDelegate.MODE_NIGHT_NO -> false + AppCompatDelegate.MODE_NIGHT_YES -> true + else -> isSystemInDarkTheme() +} \ No newline at end of file diff --git a/input-engine/src/commonMain/kotlin/de/tillhub/inputengine/theme/Theme.kt b/input-engine/src/commonMain/kotlin/de/tillhub/inputengine/theme/Theme.kt index ad036f8..cc6ed31 100644 --- a/input-engine/src/commonMain/kotlin/de/tillhub/inputengine/theme/Theme.kt +++ b/input-engine/src/commonMain/kotlin/de/tillhub/inputengine/theme/Theme.kt @@ -1,12 +1,11 @@ package de.tillhub.inputengine.theme -import androidx.compose.foundation.isSystemInDarkTheme import androidx.compose.material3.MaterialTheme import androidx.compose.runtime.Composable @Composable internal fun AppTheme( - useDarkTheme: Boolean = isSystemInDarkTheme(), + useDarkTheme: Boolean = isNightMode(), content: @Composable () -> Unit, ) { val colors = if (!useDarkTheme) { @@ -22,3 +21,6 @@ internal fun AppTheme( content = content, ) } + +@Composable +internal expect fun isNightMode(): Boolean \ No newline at end of file diff --git a/input-engine/src/iosMain/kotlin/de/tillhub/inputengine/theme/Theme.ios.kt b/input-engine/src/iosMain/kotlin/de/tillhub/inputengine/theme/Theme.ios.kt new file mode 100644 index 0000000..b6007f7 --- /dev/null +++ b/input-engine/src/iosMain/kotlin/de/tillhub/inputengine/theme/Theme.ios.kt @@ -0,0 +1,7 @@ +package de.tillhub.inputengine.theme + +import androidx.compose.foundation.isSystemInDarkTheme +import androidx.compose.runtime.Composable + +@Composable +internal actual fun isNightMode(): Boolean = isSystemInDarkTheme() \ No newline at end of file From dab04f1b76115229165d66acd9c0a30f7aba9d80 Mon Sep 17 00:00:00 2001 From: Martin Date: Fri, 13 Feb 2026 10:04:32 +0100 Subject: [PATCH 2/4] updated lib version --- gradle/libs.versions.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index e13abef..2c5b89b 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -1,5 +1,5 @@ [versions] -input-engine = "2.1.2" +input-engine = "2.1.3" activityKtx = "1.10.1" agp = "8.11.1" androidx-activity = "1.10.1" From 6aea97805b97b7636030eebd5f9386ce037741c8 Mon Sep 17 00:00:00 2001 From: Martin Date: Fri, 13 Feb 2026 10:10:56 +0100 Subject: [PATCH 3/4] spotless fix --- .../kotlin/de/tillhub/inputengine/theme/Theme.android.kt | 2 +- .../src/commonMain/kotlin/de/tillhub/inputengine/theme/Theme.kt | 2 +- .../iosMain/kotlin/de/tillhub/inputengine/theme/Theme.ios.kt | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/input-engine/src/androidMain/kotlin/de/tillhub/inputengine/theme/Theme.android.kt b/input-engine/src/androidMain/kotlin/de/tillhub/inputengine/theme/Theme.android.kt index bae88e0..2f069b1 100644 --- a/input-engine/src/androidMain/kotlin/de/tillhub/inputengine/theme/Theme.android.kt +++ b/input-engine/src/androidMain/kotlin/de/tillhub/inputengine/theme/Theme.android.kt @@ -19,4 +19,4 @@ internal actual fun isNightMode(): Boolean = when (AppCompatDelegate.getDefaultN AppCompatDelegate.MODE_NIGHT_NO -> false AppCompatDelegate.MODE_NIGHT_YES -> true else -> isSystemInDarkTheme() -} \ No newline at end of file +} diff --git a/input-engine/src/commonMain/kotlin/de/tillhub/inputengine/theme/Theme.kt b/input-engine/src/commonMain/kotlin/de/tillhub/inputengine/theme/Theme.kt index cc6ed31..1c4038f 100644 --- a/input-engine/src/commonMain/kotlin/de/tillhub/inputengine/theme/Theme.kt +++ b/input-engine/src/commonMain/kotlin/de/tillhub/inputengine/theme/Theme.kt @@ -23,4 +23,4 @@ internal fun AppTheme( } @Composable -internal expect fun isNightMode(): Boolean \ No newline at end of file +internal expect fun isNightMode(): Boolean diff --git a/input-engine/src/iosMain/kotlin/de/tillhub/inputengine/theme/Theme.ios.kt b/input-engine/src/iosMain/kotlin/de/tillhub/inputengine/theme/Theme.ios.kt index b6007f7..2595215 100644 --- a/input-engine/src/iosMain/kotlin/de/tillhub/inputengine/theme/Theme.ios.kt +++ b/input-engine/src/iosMain/kotlin/de/tillhub/inputengine/theme/Theme.ios.kt @@ -4,4 +4,4 @@ import androidx.compose.foundation.isSystemInDarkTheme import androidx.compose.runtime.Composable @Composable -internal actual fun isNightMode(): Boolean = isSystemInDarkTheme() \ No newline at end of file +internal actual fun isNightMode(): Boolean = isSystemInDarkTheme() From 0962b66748ad3df434efe8d2e05345e1e091cc39 Mon Sep 17 00:00:00 2001 From: Martin Date: Fri, 13 Feb 2026 12:44:14 +0100 Subject: [PATCH 4/4] addressed PR comment --- gradle/libs.versions.toml | 2 -- input-engine/build.gradle.kts | 1 - .../inputengine/theme/Theme.android.kt | 22 ------------------- .../de/tillhub/inputengine/theme/Theme.kt | 5 +---- .../de/tillhub/inputengine/theme/Theme.ios.kt | 7 ------ 5 files changed, 1 insertion(+), 36 deletions(-) delete mode 100644 input-engine/src/androidMain/kotlin/de/tillhub/inputengine/theme/Theme.android.kt delete mode 100644 input-engine/src/iosMain/kotlin/de/tillhub/inputengine/theme/Theme.ios.kt diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 2c5b89b..e130ba7 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -13,7 +13,6 @@ spotless = "7.1.0" uiTestJunit4 = "1.8.3" mokkery = "2.9.0" maven-publish = "0.34.0" -appcompat = "1.7.1" [libraries] androidx-activity-compose = { module = "androidx.activity:activity-compose", version.ref = "androidx-activity" } @@ -23,7 +22,6 @@ androidx-lifecycle-viewmodel = { module = "org.jetbrains.androidx.lifecycle:life kotlin-bignum = { module = "com.ionspin.kotlin:bignum", version.ref = "kotlin-bignum" } kotlinx-serialization-json = { module = "org.jetbrains.kotlinx:kotlinx-serialization-json", version.ref = "kotlinxSerializationJson" } lifecycle-viewmodel-compose = { module = "org.jetbrains.androidx.lifecycle:lifecycle-viewmodel-compose", version.ref = "lifecycleViewmodelCompose" } -androidx-appcompat = { group = "androidx.appcompat", name = "appcompat", version.ref = "appcompat" } # Android testing androidx-ui-test-junit4-android = { group = "androidx.compose.ui", name = "ui-test-junit4-android", version.ref = "uiTestJunit4" } diff --git a/input-engine/build.gradle.kts b/input-engine/build.gradle.kts index 6113d6c..1e59c73 100644 --- a/input-engine/build.gradle.kts +++ b/input-engine/build.gradle.kts @@ -80,7 +80,6 @@ kotlin { implementation(compose.preview) implementation(libs.androidx.activity.compose) implementation(libs.androidx.activity.ktx) - implementation(libs.androidx.appcompat) implementation(libs.kotlinx.serialization.json) } } diff --git a/input-engine/src/androidMain/kotlin/de/tillhub/inputengine/theme/Theme.android.kt b/input-engine/src/androidMain/kotlin/de/tillhub/inputengine/theme/Theme.android.kt deleted file mode 100644 index 2f069b1..0000000 --- a/input-engine/src/androidMain/kotlin/de/tillhub/inputengine/theme/Theme.android.kt +++ /dev/null @@ -1,22 +0,0 @@ -package de.tillhub.inputengine.theme - -import androidx.appcompat.app.AppCompatDelegate -import androidx.compose.foundation.isSystemInDarkTheme -import androidx.compose.runtime.Composable - -/** - * Determines whether the application is currently in night (dark) mode. - * - * This Android-specific implementation checks the [AppCompatDelegate] for a manually - * set night mode preference. If no specific preference is set (i.e., [AppCompatDelegate.MODE_NIGHT_FOLLOW_SYSTEM] - * or [AppCompatDelegate.MODE_NIGHT_UNSPECIFIED]), it falls back to the system-wide - * dark theme setting. - * - * @return `true` if night mode is active, `false` otherwise. - */ -@Composable -internal actual fun isNightMode(): Boolean = when (AppCompatDelegate.getDefaultNightMode()) { - AppCompatDelegate.MODE_NIGHT_NO -> false - AppCompatDelegate.MODE_NIGHT_YES -> true - else -> isSystemInDarkTheme() -} diff --git a/input-engine/src/commonMain/kotlin/de/tillhub/inputengine/theme/Theme.kt b/input-engine/src/commonMain/kotlin/de/tillhub/inputengine/theme/Theme.kt index 1c4038f..e8f8448 100644 --- a/input-engine/src/commonMain/kotlin/de/tillhub/inputengine/theme/Theme.kt +++ b/input-engine/src/commonMain/kotlin/de/tillhub/inputengine/theme/Theme.kt @@ -5,7 +5,7 @@ import androidx.compose.runtime.Composable @Composable internal fun AppTheme( - useDarkTheme: Boolean = isNightMode(), + useDarkTheme: Boolean = false, content: @Composable () -> Unit, ) { val colors = if (!useDarkTheme) { @@ -21,6 +21,3 @@ internal fun AppTheme( content = content, ) } - -@Composable -internal expect fun isNightMode(): Boolean diff --git a/input-engine/src/iosMain/kotlin/de/tillhub/inputengine/theme/Theme.ios.kt b/input-engine/src/iosMain/kotlin/de/tillhub/inputengine/theme/Theme.ios.kt deleted file mode 100644 index 2595215..0000000 --- a/input-engine/src/iosMain/kotlin/de/tillhub/inputengine/theme/Theme.ios.kt +++ /dev/null @@ -1,7 +0,0 @@ -package de.tillhub.inputengine.theme - -import androidx.compose.foundation.isSystemInDarkTheme -import androidx.compose.runtime.Composable - -@Composable -internal actual fun isNightMode(): Boolean = isSystemInDarkTheme()